From 4db0385ff1b2f035ee3309c20e8de1249643c155 Mon Sep 17 00:00:00 2001 From: Robustin Date: Wed, 24 May 2017 20:20:44 -0400 Subject: [PATCH] 4th Attempt at 60% shuttle recall gang murderbone thing (#27414) Still very important, still a victim of Github memes. Tried to push to Militairies version but it had like a million commits so fuck that. This accounts for Jordie0608's requested changes. The latest changes moves the "no recall" aspect to the emergency shuttle subsystem so now any future code can simply set SSshuttle.emergencyNoRecall to TRUE if they want to prevent recalls from taking place. See #27228 for references to the last 3 PR's. tweak: Gang mode now calls a 4 minute unrecallable shuttle once 60% of the crew is dead --- code/controllers/subsystem/shuttle.dm | 1 + code/game/gamemodes/gang/gang.dm | 10 ++++++++++ code/game/gamemodes/gang/gang_datum.dm | 4 +++- code/game/gamemodes/gang/recaller.dm | 3 +++ code/modules/shuttle/emergency.dm | 4 +++- 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 6b4ce261b94..95d285d80ea 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -25,6 +25,7 @@ SUBSYSTEM_DEF(shuttle) var/area/emergencyLastCallLoc var/emergencyCallAmount = 0 //how many times the escape shuttle was called var/emergencyNoEscape + var/emergencyNoRecall = FALSE var/list/hostileEnvironments = list() //supply shuttle stuff diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index bb4bf455dcd..4c937af209a 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -261,6 +261,16 @@ GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather,/ gang_bosses += G.bosses return gang_bosses +/datum/game_mode/proc/shuttle_check() + var/alive = 0 + for(var/mob/living/L in GLOB.player_list) + if(L.stat != DEAD) + alive++ + if((alive < (GLOB.joined_player_list.len * 0.4)) && (SSshuttle.emergency.timeLeft(1) < (SSshuttle.emergencyCallTime * 0.4))) + SSshuttle.emergencyNoRecall = TRUE + SSshuttle.emergency.request(null, set_coefficient = 0.4) + priority_announce("Catastrophic casualties detected: crisis shuttle protocols activated - jamming recall signals across all frequencies.") + /proc/determine_domination_time(var/datum/gang/G) return max(180,480 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 9)) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 0ff9ef4f2db..95cbb5d2691 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -204,7 +204,9 @@ return var/added_names = "" var/lost_names = "" - + + SSticker.mode.shuttle_check() // See if its time to start wrapping things up + //Re-add territories that were reclaimed, so if they got tagged over, they can still earn income if they tag it back before the next status report var/list/reclaimed_territories = territory_new & territory_lost territory |= reclaimed_territories diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index ad2da7b5024..3e4debd9749 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -167,6 +167,9 @@ if(!can_use(user)) return 0 + if(SSshuttle.emergencyNoRecall) + return 0 + if(recalling) to_chat(usr, "Error: Recall already in progress.") return 0 diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 6344689f0bd..d479ddf1bc5 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -235,7 +235,9 @@ /obj/docking_port/mobile/emergency/cancel(area/signalOrigin) if(mode != SHUTTLE_CALL) return - + if(SSshuttle.emergencyNoRecall) + return + invertTimer() mode = SHUTTLE_RECALL