@@ -162,11 +162,14 @@ SUBSYSTEM_DEF(gamemode)
162
162
// / Are we able to run roundstart events
163
163
var /can_run_roundstart = TRUE
164
164
var /list /triggered_round_events = list ()
165
+ var /datum /rng/rng
165
166
166
167
/ datum / controller/ subsystem/ gamemode/ Initialize(time, zlevel)
167
168
#if defined(UNIT_TESTS) || defined(AUTOWIKI) // lazy way of doing this but idc
168
169
CONFIG_SET (flag/ disable_storyteller, TRUE )
169
170
#endif
171
+ rng = new
172
+
170
173
// Populate event pools
171
174
for (var /track in event_tracks)
172
175
event_pools[track] = list ()
@@ -201,12 +204,16 @@ SUBSYSTEM_DEF(gamemode)
201
204
return SS_INIT_NO_NEED
202
205
return SS_INIT_SUCCESS
203
206
207
+ / datum / controller/ subsystem/ gamemode/ Shutdown()
208
+ . = .. ()
209
+ QDEL_NULL (rng)
210
+
204
211
/ datum / controller/ subsystem/ gamemode/ fire(resumed = FALSE )
205
212
if (SSticker. round_start_time && (world . time - SSticker. round_start_time) >= ROUNDSTART_VALID_TIMEFRAME )
206
213
can_run_roundstart = FALSE
207
214
else if (current_roundstart_event && length(current_roundstart_event. preferred_events)) // note that this implementation is made for preferred_events being other roundstart events
208
215
var /list /preferred_copy = current_roundstart_event. preferred_events. Copy()
209
- var /datum /round_event_control/selected_event = pick_weight (preferred_copy)
216
+ var /datum /round_event_control/selected_event = rng . pick_weighted (preferred_copy)
210
217
var /player_count = get_active_player_count(alive_check = TRUE , afk_check = TRUE , human_check = TRUE )
211
218
if (ispath(selected_event)) // get the instances if we dont have them
212
219
current_roundstart_event. preferred_events = list ()
@@ -221,7 +228,7 @@ SUBSYSTEM_DEF(gamemode)
221
228
var /sanity = 0
222
229
while (! selected_event && length(preferred_copy) && sanity < 100 )
223
230
sanity++
224
- selected_event = pick_weight (preferred_copy)
231
+ selected_event = rng . pick_weighted (preferred_copy)
225
232
if (! selected_event. can_spawn_event(player_count))
226
233
preferred_copy -= selected_event
227
234
selected_event = null
@@ -392,7 +399,7 @@ SUBSYSTEM_DEF(gamemode)
392
399
var /calc_value = base_amt + (gain_amt * ready_players)
393
400
calc_value *= roundstart_point_multipliers[track]
394
401
calc_value *= current_storyteller. starting_point_multipliers[track]
395
- calc_value *= (rand (100 - current_storyteller. roundstart_points_variance,100 + current_storyteller. roundstart_points_variance)/ 100 )
402
+ calc_value *= (rng . ranged_uint (100 - current_storyteller. roundstart_points_variance, 100 + current_storyteller. roundstart_points_variance) / 100 )
396
403
event_track_points[track] = round(calc_value)
397
404
398
405
// / If the storyteller guarantees an antagonist roll, add points to make it so.
@@ -689,7 +696,7 @@ ADMIN_VERB(forceGamemode, R_FUN, FALSE, "Open Gamemode Panel", "Opens the gamemo
689
696
var /list /possible = subtypesof(/ datum / station_goal)
690
697
var /goal_weights = 0
691
698
while (possible. len && goal_weights < 1 ) // station goal budget is 1
692
- var /datum /station_goal/picked = pick_n_take(possible)
699
+ var /datum /station_goal/picked = rng . pick_n_take(possible)
693
700
goal_weights += initial(picked. weight)
694
701
GLOB . station_goals += new picked
695
702
@@ -773,7 +780,7 @@ ADMIN_VERB(forceGamemode, R_FUN, FALSE, "Open Gamemode Panel", "Opens the gamemo
773
780
return
774
781
if (length(GLOB . clients) > MAX_POP_FOR_STORYTELLER_VOTE )
775
782
secret_storyteller = TRUE
776
- selected_storyteller = pick_weight (get_valid_storytellers(TRUE ))
783
+ selected_storyteller = rng . pick_weighted (get_valid_storytellers(TRUE ))
777
784
return
778
785
SSvote. initiate_vote(/ datum / vote/ storyteller, " pick round storyteller" , forced = TRUE )
779
786
@@ -789,7 +796,7 @@ ADMIN_VERB(forceGamemode, R_FUN, FALSE, "Open Gamemode Panel", "Opens the gamemo
789
796
var /added_storytellers = 0
790
797
while (added_storytellers < DEFAULT_STORYTELLER_VOTE_OPTIONS && length(pick_from))
791
798
added_storytellers++
792
- var /picked_storyteller = pick_weight (pick_from)
799
+ var /picked_storyteller = rng . pick_weighted (pick_from)
793
800
final_choices[picked_storyteller] = 0
794
801
pick_from -= picked_storyteller
795
802
return final_choices
0 commit comments