diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index e6b05e033f..51af2b3525 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -24,6 +24,7 @@ GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security spawns GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events +GLOBAL_LIST_EMPTY(jobspawn_overrides) //These will take precedence over normal spawnpoints if created. GLOBAL_LIST_EMPTY(wizardstart) GLOBAL_LIST_EMPTY(nukeop_start) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 1e914c657d..c70b7016a4 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -393,6 +393,10 @@ SUBSYSTEM_DEF(job) continue S = sloc break + if(GLOB.jobspawn_overrides[rank]) + var/list/special_spawns = GLOB.jobspawn_overrides[rank] + if(special_spawns.len) + S = pick(special_spawns) if(S) SendToAtom(H, S, buckle = FALSE) if(!S) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper @@ -536,6 +540,12 @@ SUBSYSTEM_DEF(job) M.forceMove(get_turf(A)) /datum/controller/subsystem/job/proc/SendToLateJoin(mob/M, buckle = TRUE) + if(M.mind && M.mind.assigned_role) //We're doing something special today. + var/list/special_spawns = GLOB.jobspawn_overrides[M.mind.assigned_role] + if(special_spawns.len) //just in case someone clears these + SendToAtom(M,pick(special_spawns),FALSE) + return + if(latejoin_trackers.len) SendToAtom(M, pick(latejoin_trackers), buckle) else diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 18354893fb..dfdff1890a 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -319,7 +319,7 @@ SUBSYSTEM_DEF(ticker) //Cleanup some stuff for(var/obj/effect/landmark/start/S in GLOB.landmarks_list) //Deleting Startpoints but we need the ai point to AI-ize people later - if(S.name != "AI") + if(S.delete_after_roundstart) qdel(S) //assign crew objectives and generate miscreants diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index c18c60c5f3..caeb1f168c 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -19,15 +19,23 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "x" anchored = TRUE + var/jobspawn_override = FALSE + var/delete_after_roundstart = TRUE /obj/effect/landmark/start/New() GLOB.start_landmarks_list += src + if(jobspawn_override) + if(!GLOB.jobspawn_overrides[name]) + GLOB.jobspawn_overrides[name] = list() + GLOB.jobspawn_overrides[name] += src ..() if(name != "start") tag = "start*[name]" /obj/effect/landmark/start/Destroy() GLOB.start_landmarks_list -= src + if(jobspawn_override) + GLOB.jobspawn_overrides[name] -= src return ..() // START LANDMARKS FOLLOW. Don't change the names unless @@ -36,6 +44,10 @@ /obj/effect/landmark/start/assistant name = "Assistant" +/obj/effect/landmark/start/assistant/override + jobspawn_override = TRUE + delete_after_roundstart = FALSE + /obj/effect/landmark/start/janitor name = "Janitor" @@ -74,6 +86,7 @@ /obj/effect/landmark/start/ai name = "AI" + delete_after_roundstart = FALSE /obj/effect/landmark/start/captain name = "Captain"