From e7b105488db04a63ffd853dde0c5ffedb5d2c83c Mon Sep 17 00:00:00 2001 From: carnie Date: Sat, 10 Jan 2015 03:57:02 +0000 Subject: [PATCH] Resolves #6923 - Mistake made during merging meant that some gamemode objectives were using hardcoded area-type-lists for checking objective completion. (This is why allow/disallow lists are dumb) --- code/controllers/subsystem/ticker.dm | 3 +-- code/game/area/Space Station 13 areas.dm | 5 ----- code/game/atoms.dm | 12 +++++++++++- code/game/gamemodes/cult/cult.dm | 5 ++--- code/game/gamemodes/meteor/meteor.dm | 3 +-- code/game/gamemodes/monkey/monkey.dm | 3 +-- code/game/gamemodes/nuclear/nuclear.dm | 3 +-- code/game/gamemodes/objective.dm | 6 ++---- 8 files changed, 19 insertions(+), 21 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0b356b320b8..dac80e068a2 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -347,8 +347,7 @@ var/datum/subsystem/ticker/ticker if(Player.stat != DEAD && !isbrain(Player)) num_survivors++ if(station_evacuated) //If the shuttle has already left the station - var/turf/playerTurf = get_turf(Player) - if(!playerTurf || playerTurf.z != ZLEVEL_CENTCOM) + if(!Player.onCentcom()) Player << "You managed to survive, but were marooned on [station_name()]..." else num_escapees++ diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index b437c7c41b7..803fa1a117f 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1540,11 +1540,6 @@ proc/process_ghost_teleport_locs() Used in gamemodes code at the moment. --rastaf0 */ -// CENTCOM -var/list/centcom_areas = list ( - /area/centcom -) - //SPACE STATION 13 var/list/the_station_areas = list ( /area/atmos, diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9b27a40ebbc..4ebda9f6a83 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -21,6 +21,16 @@ // replaced by OPENCONTAINER flags and atom/proc/is_open_container() ///Chemistry. +/atom/proc/onCentcom() + var/turf/T = get_turf(src) + if(!T) + return 0 + if(T.z != ZLEVEL_CENTCOM) + return 0 + if(T.y > 160) + return 0 + return 1 + /atom/proc/throw_impact(atom/hit_atom) if(istype(hit_atom,/mob/living)) var/mob/living/M = hit_atom @@ -405,4 +415,4 @@ var/list/blood_splatter_icons = list() return /atom/proc/narsie_act() - return + return diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index b4f640aa4c2..ab63a288f26 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -275,9 +275,8 @@ /datum/game_mode/cult/proc/check_survive() acolytes_survived = 0 for(var/datum/mind/cult_mind in cult) - if (cult_mind.current && cult_mind.current.stat!=2) - var/area/A = get_area(cult_mind.current ) - if ( is_type_in_list(A, centcom_areas)) + if (cult_mind.current && cult_mind.current.stat != DEAD) + if(cult_mind.current.onCentcom()) acolytes_survived++ if(acolytes_survived>=acolytes_needed) return 0 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 2ae7f0fcece..2d3e4e1c380 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -32,8 +32,7 @@ if(player.stat != DEAD) ++survivors - var/turf/T = get_turf(player) - if(T && T.z == ZLEVEL_CENTCOM) + if(player.onCentcom()) text += "
[player.real_name] escaped to the safety of Centcom." else text += "
[player.real_name] survived but is stranded without any hope of rescue." diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm index 29f3a209052..c2b2c835721 100644 --- a/code/game/gamemodes/monkey/monkey.dm +++ b/code/game/gamemodes/monkey/monkey.dm @@ -72,8 +72,7 @@ /datum/game_mode/monkey/proc/check_monkey_victory() for(var/mob/living/carbon/monkey/M in living_mob_list) if (M.HasDisease(/datum/disease/transformation/jungle_fever)) - var/area/A = get_area(M) - if(is_type_in_list(A, centcom_areas)) + if(M.onCentcom()) escaped_monkeys++ if(escaped_monkeys >= monkeys_to_win) return 0 diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 026e1e60d2f..cc1346f4bd6 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -206,8 +206,7 @@ /datum/game_mode/nuclear/declare_completion() var/disk_rescued = 1 for(var/obj/item/weapon/disk/nuclear/D in world) - var/disk_area = get_area(D) - if(!is_type_in_list(disk_area, centcom_areas)) + if(!D.onCentcom()) disk_rescued = 0 break var/crew_evacuated = (SSshuttle.emergency.mode >= SHUTTLE_ENDGAME) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index f990d3c0bf5..523ccd0d4f9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -109,9 +109,7 @@ datum/objective/maroon/check_completion() if(target && target.current) if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 - - var/turf/T = get_turf(target.current) - if(T.z == ZLEVEL_CENTCOM) + if(target.current.onCentcom()) return 0 return 1 @@ -252,7 +250,7 @@ datum/objective/escape/check_completion() if(istype(location, /turf/simulated/shuttle/floor4)) // Fails traitors if they are in the shuttle brig -- Polymorph return 0 - if(location.z == ZLEVEL_CENTCOM) + if(location.onCentcom()) return 1 return 0