[TM First] Reworks infiltrator spawn and allows clown ops to spawn with a bananium bomb. (#94776)

## About The Pull Request
**This should be TMed first, given the limitations of my hardware and
that I could only spawn myself to test this, means new problems could
pop up and that the PR could cause unexpected issues on live.**

Closes #94603 and #89708
First and foremost, the infiltrator will no longer spawn alongside the
syndicate base. Instead it will spawn independently and then dock unto
the base when a nuclear operative squad is spawned. This eliminates the
possibility of lazyloads messing up the shuttle and having it spawn
unfinished. The change however will cause the base to spawn without the
infiltrator when its spawned by hijacking.

Second, this pr adds a variant of the basic infiltrator that spawns with
the bananium bomb instead, and adds a check for which shuttle it should
spawn. Normal ops will spawn with basic infiltrator as usual, while
clownops will have the bananium version spawn by default when the
ruleset is called by dynamic.
## Why It's Good For The Game
Makes an admeme button work (clownops) and fixes infiltrator clipping.
Less of a hassle for everyone.
## Changelog
🆑
fix: The Syndicate infiltrator no longer spawns in the nuclear base, and
instead spawns alongside nukies, eliminating lazyload clipping.
fix: Clownops now spawn with a bananium bomb in their infiltrator.
/🆑
This commit is contained in:
TheNobodyofimportance
2026-01-16 11:02:34 -07:00
committed by GitHub
parent 876530476a
commit 41bdd33f07
6 changed files with 1586 additions and 1 deletions
File diff suppressed because it is too large Load Diff
@@ -2631,7 +2631,6 @@
dwidth = 12;
height = 17;
name = "syndicate recon outpost";
roundstart_template = /datum/map_template/shuttle/infiltrator/basic;
shuttle_id = "syndicate_away";
width = 23
},
+5
View File
@@ -11,3 +11,8 @@
suffix = "advanced"
name = "advanced syndicate infiltrator"
description = "A much larger version of the standard Syndicate infiltrator that feels more like Kilostation. Has APCs, but power is not a concern for nuclear operatives. Also comes with atmos!"
/datum/map_template/shuttle/infiltrator/clown
suffix = "clown"
name = "clown syndicate infiltrator"
description = "A version of the base infiltrator that spawns with a bananiumbomb"
@@ -10,6 +10,7 @@
preview_outfit = /datum/outfit/clown_operative_elite
preview_outfit_behind = /datum/outfit/clown_operative
nuke_icon_state = "bananiumbomb_base"
infiltrator_id = "infiltrator_clown"
/datum/antagonist/nukeop/clownop/admin_add(datum/mind/new_owner,mob/admin)
new_owner.add_antag_datum(src)
@@ -47,6 +48,7 @@
nukeop_outfit = /datum/outfit/syndicate/clownop/leader
challengeitem = /obj/item/nuclear_challenge/clownops
suicide_cry = "HAPPY BIRTHDAY!!"
infiltrator_id = "infiltrator_clown"
/datum/antagonist/nukeop/leader/clownop/apply_innate_effects(mob/living/mob_override)
. = ..()
@@ -18,6 +18,8 @@
var/job_type = /datum/job/nuclear_operative
/// The DEFAULT outfit we will give to players granted this datum
var/nukeop_outfit = /datum/outfit/syndicate
/// Which infiltrator should the team spawn with?
var/infiltrator_id = "infiltrator_basic"
preview_outfit = /datum/outfit/nuclear_operative_elite
@@ -192,6 +194,32 @@
return GLOB.nukeop_start[((team_number - 1) % GLOB.nukeop_start.len) + 1]
/datum/antagonist/nukeop/proc/spawn_infiltrator()
var/datum/map_template/shuttle/infiltrator/ship = SSmapping.shuttle_templates[infiltrator_id]
var/x = (world.maxx - TRANSITIONEDGE - ship.width)
var/y = (world.maxy - TRANSITIONEDGE - ship.height)
var/z
if(SSmapping.empty_space)
z = SSmapping.empty_space.z_value
else
for(var/datum/space_level/z_level as anything in SSmapping.z_list)
if(z_level.traits.Find(ZTRAIT_RESERVED))
z = z_level.z_value
break
var/turf/turf = locate(x,y,z)
if(!turf)
CRASH("Infiltrator found no turf to load in")
if(!ship.load(turf))
CRASH("Infiltrator has failed to load!")
var/obj/docking_port/mobile/mobile_port = SSshuttle.getShuttle("syndicate")
mobile_port.destination = SSshuttle.getDock("syndicate_away")
mobile_port.mode = SHUTTLE_IGNITING
mobile_port.setTimer(mobile_port.ignitionTime)
/datum/antagonist/nukeop/on_respawn(mob/new_character)
new_character.forceMove(pick(GLOB.nukeop_start))
equip_op()
@@ -63,6 +63,7 @@
return capitalize(newname)
/datum/antagonist/nukeop/leader/create_team(datum/team/nuclear/new_team)
spawn_infiltrator()
if(new_team)
return ..()
// Leaders always make new teams