diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 656507316d..07642f1d08 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -7441,14 +7441,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/crew_quarters/fitness)
-"aqt" = (
-/obj/effect/landmark/syndicate_breach_area,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/crew_quarters/fitness)
"aqu" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -14777,7 +14769,6 @@
/turf/open/floor/plating,
/area/chapel/main)
"aHr" = (
-/obj/effect/landmark/marauder_entry,
/turf/open/space,
/area/space)
"aHs" = (
@@ -100719,7 +100710,7 @@ aaa
aaa
aaa
aaa
-aqt
+aqs
aro
aro
aro
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 67107bf501..21180a53bd 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -178,7 +178,6 @@
/turf/open/floor/plasteel/airless/solarpanel,
/area/solar/port/fore)
"aav" = (
-/obj/effect/landmark/marauder_entry,
/turf/open/space,
/area/space)
"aaw" = (
@@ -2225,14 +2224,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/fitness/recreation)
-"aeD" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/effect/landmark/syndicate_breach_area,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/crew_quarters/fitness/recreation)
"aeE" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -129060,7 +129051,7 @@ aaa
aaa
bii
aaa
-aeD
+aeC
afD
afD
afD
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 05f0897465..72a05373eb 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -5751,6 +5751,10 @@
/obj/structure/mirror{
pixel_x = 28
},
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 11
+ },
/turf/open/floor/plasteel/freezer{
dir = 2
},
@@ -6101,7 +6105,7 @@
/area/syndicate_mothership/control)
"qp" = (
/obj/structure/chair/stool,
-/obj/effect/landmark/syndicate_spawn,
+/obj/effect/landmark/start/nukeop,
/turf/open/floor/plasteel/bar{
dir = 2
},
@@ -6506,6 +6510,7 @@
/area/syndicate_mothership/control)
"rj" = (
/obj/structure/closet/cardboard,
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
"rk" = (
@@ -7623,7 +7628,7 @@
/turf/open/floor/wood,
/area/syndicate_mothership/control)
"tT" = (
-/obj/effect/landmark/syndicate_spawn,
+/obj/effect/landmark/start/nukeop_leader,
/turf/open/floor/wood,
/area/syndicate_mothership/control)
"tU" = (
@@ -8025,6 +8030,9 @@
/area/syndicate_mothership/control)
"vb" = (
/obj/structure/closet/cardboard/metal,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
"vc" = (
@@ -9731,7 +9739,6 @@
/area/wizard_station)
"zj" = (
/obj/structure/table/wood,
-/obj/effect/landmark/teleport_scroll,
/obj/item/dice/d20,
/obj/item/dice,
/turf/open/floor/carpet,
@@ -13652,6 +13659,44 @@
},
/turf/open/floor/holofloor,
/area/holodeck/rec_center/school)
+"QT" = (
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QU" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QV" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QW" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QX" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QY" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
+"QZ" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/syndicate_mothership/control)
(1,1,1) = {"
aa
@@ -34895,7 +34940,7 @@ lG
hm
aa
kl
-qs
+QT
rk
rl
rm
@@ -34903,7 +34948,7 @@ tl
rm
ux
vc
-qs
+QY
kl
aa
aa
@@ -36180,7 +36225,7 @@ hq
hm
aa
kl
-qt
+QU
ro
rm
sd
@@ -36437,7 +36482,7 @@ hq
hm
aa
kl
-qs
+QV
rp
ro
rm
@@ -36445,7 +36490,7 @@ tl
rm
uy
ve
-qs
+QZ
kl
aa
aa
@@ -36695,13 +36740,13 @@ hm
aa
kl
qs
-qs
+QW
se
se
se
se
se
-qs
+QX
qs
kl
aa
@@ -76391,9 +76436,9 @@ dM
QJ
QL
fg
-QO
-QQ
-QR
+QL
+QK
+QL
dM
fN
fQ
@@ -76903,11 +76948,11 @@ dM
QI
dM
QK
-QM
+QL
QN
-QP
+QL
fr
-QS
+QL
dM
fN
ab
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index a2d30b1528..d031c01223 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -33,6 +33,8 @@ GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security
GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events
GLOBAL_LIST_EMPTY(wizardstart)
+GLOBAL_LIST_EMPTY(nukeop_start)
+GLOBAL_LIST_EMPTY(nukeop_leader_start)
GLOBAL_LIST_EMPTY(newplayer_start)
GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these
GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 4c21f9688b..acf55e4036 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -22,27 +22,17 @@
var/nukes_left = 1 // Call 3714-PRAY right now and order more nukes! Limited offer!
var/nuke_off_station = 0 //Used for tracking if the syndies actually haul the nuke to the station
var/syndies_didnt_escape = 0 //Used for tracking if the syndies got the shuttle off of the z-level
+ var/list/pre_nukeops = list()
/datum/game_mode/nuclear/pre_setup()
- var/n_players = num_players()
- var/n_agents = min(round(n_players / 10, 1), agents_possible)
-
- if(antag_candidates.len < n_agents) //In the case of having less candidates than the selected number of agents
- n_agents = antag_candidates.len
-
- while(n_agents > 0)
- var/datum/mind/new_syndicate = pick(antag_candidates)
- syndicates += new_syndicate
- antag_candidates -= new_syndicate //So it doesn't pick the same guy each time.
- n_agents--
-
- for(var/datum/mind/synd_mind in syndicates)
- synd_mind.assigned_role = "Syndicate"
- synd_mind.special_role = "Syndicate"//So they actually have a special role/N
- log_game("[synd_mind.key] (ckey) has been selected as a nuclear operative")
-
- return 1
-
+ var/n_agents = min(round(num_players() / 10), antag_candidates.len, agents_possible)
+ for(var/i = 0, i < n_agents, ++i)
+ var/datum/mind/new_op = pick_n_take(antag_candidates)
+ pre_nukeops += new_op
+ new_op.assigned_role = "Nuclear Operative"
+ new_op.special_role = "Nuclear Operative"
+ log_game("[new_op.key] (ckey) has been selected as a nuclear operative")
+ return TRUE
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
@@ -60,48 +50,36 @@
////////////////////////////////////////////////////////////////////////////////////////
/datum/game_mode/nuclear/post_setup()
-
- var/list/turf/synd_spawn = list()
-
- for(var/obj/effect/landmark/A in GLOB.landmarks_list)
- if(A.name == "Syndicate-Spawn")
- synd_spawn += get_turf(A)
- continue
-
var/nuke_code = random_nukecode()
- var/leader_selected = 0
var/agent_number = 1
- var/spawnpos = 1
+ var/datum/mind/leader = pick(pre_nukeops)
+ syndicates += pre_nukeops
+ for(var/i = 1 to pre_nukeops.len)
+ var/datum/mind/op = pre_nukeops[i]
- for(var/datum/mind/synd_mind in syndicates)
- if(spawnpos > synd_spawn.len)
- spawnpos = 2
- synd_mind.current.loc = synd_spawn[spawnpos]
-
- forge_syndicate_objectives(synd_mind)
- greet_syndicate(synd_mind)
- equip_syndicate(synd_mind.current)
+ forge_syndicate_objectives(op)
+ greet_syndicate(op)
+ equip_syndicate(op.current)
if(nuke_code)
- synd_mind.store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
- to_chat(synd_mind.current, "The nuclear authorization code is: [nuke_code]")
+ op.store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0)
+ to_chat(op.current, "The nuclear authorization code is: [nuke_code]")
- if(!leader_selected)
- prepare_syndicate_leader(synd_mind, nuke_code)
- leader_selected = 1
+ if(op == leader)
+ op.current.forceMove(pick(GLOB.nukeop_leader_start))
+ prepare_syndicate_leader(op, nuke_code)
else
- synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]"
- agent_number++
- spawnpos++
- update_synd_icons_added(synd_mind)
- synd_mind.current.playsound_local(get_turf(synd_mind.current), 'sound/ambience/antag/ops.ogg',100,0)
- var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
+ op.current.forceMove(GLOB.nukeop_start[((i - 1) % GLOB.nukeop_start.len) + 1])
+ op.current.real_name = "[syndicate_name()] Operative #[agent_number++]"
+ update_synd_icons_added(op)
+ op.current.playsound_local(get_turf(op.current), 'sound/ambience/antag/ops.ogg',100,0)
+
+ var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
if(nuke)
nuke.r_code = nuke_code
return ..()
-
/datum/game_mode/proc/prepare_syndicate_leader(datum/mind/synd_mind, nuke_code)
var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
spawn(1)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 7401797a47..68a1cb773c 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -157,11 +157,27 @@
/obj/effect/landmark/start/wizard
name = "wizard"
-/obj/effect/landmark/start/wizard/Initialize(mapload)
+/obj/effect/landmark/start/wizard/Initialize()
..()
GLOB.wizardstart += loc
return INITIALIZE_HINT_QDEL
+/obj/effect/landmark/start/nukeop
+ name = "nukeop"
+
+/obj/effect/landmark/start/nukeop/Initialize()
+ ..()
+ GLOB.nukeop_start += loc
+ return INITIALIZE_HINT_QDEL
+
+/obj/effect/landmark/start/nukeop_leader
+ name = "nukeop leader"
+
+/obj/effect/landmark/start/nukeop_leader/Initialize()
+ ..()
+ GLOB.nukeop_leader_start += loc
+ return INITIALIZE_HINT_QDEL
+
/obj/effect/landmark/start/new_player
name = "New Player"
@@ -205,23 +221,6 @@
/obj/effect/landmark/tripai
name = "tripai"
-// marauder entry (XXX WTF IS MAURADER ENTRY???)
-
-/obj/effect/landmark/marauder_entry
- name = "Marauder Entry"
-
-// syndicate breach area (XXX I DON'T KNOW WHAT THIS IS EITHER)
-
-/obj/effect/landmark/syndicate_breach_area
- name = "Syndicate Breach Area"
-
-// teleport scroll landmark, XXX DOES THIS DO ANYTHING?
-/obj/effect/landmark/teleport_scroll
- name = "Teleport-Scroll"
-
-/obj/effect/landmark/syndicate_spawn
- name = "Syndicate-Spawn"
-
// xenos.
/obj/effect/landmark/xeno_spawn
name = "xeno_spawn"