mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-17 04:27:39 +00:00
About The Pull Request Converts every single usage of playsound's vary parameter to use the boolean define instead of 1 or 0. I'm tired of people copypasting the incorrect usage. Also changes a couple of places where a list was picked from instead of using get_sfx internal calls This was done via regex: (playsound\(.+,.+,.+, ?)1( ?\)| ?,.+\)) to match 1 (playsound\(.+,.+,.+, ?)0( ?\)| ?,.+\)) to match 0 full sed commands: /(playsound\(.+,.+,.+, ?)1( ?\)| ?,.+\))/\1TRUE\2/ 1 to TRUE /(playsound\(.+,.+,.+, ?)0( ?\)| ?,.+\))/\1FALSE\2/ 0 to FALSE I'm not very good with regex and these could probably be optimized, but they worked. Why It's Good For The Game Code usability
116 lines
4.8 KiB
Plaintext
116 lines
4.8 KiB
Plaintext
/datum/round_event_control/fugitives
|
|
name = "Spawn Fugitives"
|
|
typepath = /datum/round_event/ghost_role/fugitives
|
|
max_occurrences = 1
|
|
min_players = 20
|
|
earliest_start = 30 MINUTES //deadchat sink, lets not even consider it early on.
|
|
gamemode_blacklist = list("nuclear")
|
|
|
|
/datum/round_event/ghost_role/fugitives
|
|
minimum_required = 1
|
|
role_name = "fugitive"
|
|
fakeable = FALSE
|
|
|
|
/datum/round_event/ghost_role/fugitives/spawn_role()
|
|
var/list/possible_spawns = list()//Some xeno spawns are in some spots that will instantly kill the refugees, like atmos
|
|
for(var/turf/X in GLOB.xeno_spawn)
|
|
if(istype(X.loc, /area/maintenance))
|
|
possible_spawns += X
|
|
if(!possible_spawns.len)
|
|
message_admins("No valid spawn locations found, aborting...")
|
|
return MAP_ERROR
|
|
var/turf/landing_turf = pick(possible_spawns)
|
|
var/list/possible_backstories = list()
|
|
var/list/candidates = get_candidates(ROLE_TRAITOR, null, ROLE_TRAITOR)
|
|
if(candidates.len >= 1) //solo refugees
|
|
if(prob(30))
|
|
possible_backstories.Add("waldo") //less common as it comes with magicks and is kind of immershun shattering
|
|
if(candidates.len >= 4)//group refugees
|
|
possible_backstories.Add("prisoner", "cultist", "synth")
|
|
if(!possible_backstories.len)
|
|
return NOT_ENOUGH_PLAYERS
|
|
|
|
var/backstory = pick(possible_backstories)
|
|
var/member_size = 3
|
|
var/leader
|
|
switch(backstory)
|
|
if("synth")
|
|
leader = pick_n_take(candidates)
|
|
if("waldo")
|
|
member_size = 0 //solo refugees have no leader so the member_size gets bumped to one a bit later
|
|
var/list/members = list()
|
|
var/list/spawned_mobs = list()
|
|
if(isnull(leader))
|
|
member_size++ //if there is no leader role, then the would be leader is a normal member of the team.
|
|
|
|
for(var/i in 1 to member_size)
|
|
members += pick_n_take(candidates)
|
|
|
|
for(var/mob/dead/selected in members)
|
|
var/mob/living/carbon/human/S = gear_fugitive(selected, landing_turf, backstory)
|
|
spawned_mobs += S
|
|
if(!isnull(leader))
|
|
gear_fugitive_leader(leader, landing_turf, backstory)
|
|
|
|
//after spawning
|
|
playsound(src, 'sound/weapons/emitter.ogg', 50, TRUE)
|
|
new /obj/item/storage/toolbox/mechanical(landing_turf) //so they can actually escape maint
|
|
addtimer(CALLBACK(src, .proc/spawn_hunters), 10 MINUTES)
|
|
role_name = "fugitive hunter"
|
|
return SUCCESSFUL_SPAWN
|
|
|
|
/datum/round_event/ghost_role/fugitives/proc/gear_fugitive(var/mob/dead/selected, var/turf/landing_turf, backstory) //spawns normal fugitive
|
|
var/datum/mind/player_mind = new /datum/mind(selected.key)
|
|
player_mind.active = TRUE
|
|
var/mob/living/carbon/human/S = new(landing_turf)
|
|
player_mind.transfer_to(S)
|
|
player_mind.assigned_role = "Fugitive"
|
|
player_mind.special_role = "Fugitive"
|
|
player_mind.add_antag_datum(/datum/antagonist/fugitive)
|
|
var/datum/antagonist/fugitive/fugitiveantag = player_mind.has_antag_datum(/datum/antagonist/fugitive)
|
|
INVOKE_ASYNC(fugitiveantag, /datum/antagonist/fugitive.proc/greet, backstory) //some fugitives have a sleep on their greet, so we don't want to stop the entire antag granting proc with fluff
|
|
|
|
switch(backstory)
|
|
if("prisoner")
|
|
S.equipOutfit(/datum/outfit/prisoner)
|
|
if("cultist")
|
|
S.equipOutfit(/datum/outfit/yalp_cultist)
|
|
if("waldo")
|
|
S.equipOutfit(/datum/outfit/waldo)
|
|
if("synth")
|
|
S.equipOutfit(/datum/outfit/synthetic)
|
|
message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Fugitive by an event.")
|
|
log_game("[key_name(S)] was spawned as a Fugitive by an event.")
|
|
spawned_mobs += S
|
|
return S
|
|
|
|
//special spawn for one member. it can be used for a special mob or simply to give one normal member special items.
|
|
/datum/round_event/ghost_role/fugitives/proc/gear_fugitive_leader(var/mob/dead/leader, var/turf/landing_turf, backstory)
|
|
var/datum/mind/player_mind = new /datum/mind(leader.key)
|
|
player_mind.active = TRUE
|
|
//if you want to add a fugitive with a special leader in the future, make this switch with the backstory
|
|
var/mob/living/carbon/human/S = gear_fugitive(leader, landing_turf, backstory)
|
|
var/obj/item/choice_beacon/augments/A = new(S)
|
|
S.put_in_hands(A)
|
|
new /obj/item/autosurgeon(landing_turf)
|
|
|
|
//security team gets called in after 10 minutes of prep to find the refugees
|
|
/datum/round_event/ghost_role/fugitives/proc/spawn_hunters()
|
|
var/backstory = pick("space cop", "russian", "bounty hunter")
|
|
var/datum/map_template/shuttle/ship
|
|
if(backstory == "space cop")
|
|
ship = new /datum/map_template/shuttle/hunter/space_cop
|
|
else if (backstory == "russian")
|
|
ship = new /datum/map_template/shuttle/hunter/russian
|
|
else
|
|
ship = new /datum/map_template/shuttle/hunter/bounty
|
|
var/x = rand(TRANSITIONEDGE,world.maxx - TRANSITIONEDGE - ship.width)
|
|
var/y = rand(TRANSITIONEDGE,world.maxy - TRANSITIONEDGE - ship.height)
|
|
var/z = SSmapping.empty_space.z_value
|
|
var/turf/T = locate(x,y,z)
|
|
if(!T)
|
|
CRASH("Fugitive Hunters (Created from fugitive event) found no turf to load in")
|
|
if(!ship.load(T))
|
|
CRASH("Loading [backstory] ship failed!")
|
|
priority_announce("Unidentified ship detected near the station.")
|