Adds the alien cache ruin and a PTL terminal (#30367)

* Make the cache room

* adds alien cache machine

* adds the cache properly

* adds multitile component

* adds terminal building and reward selection procs

* adds laser receptacle file

* Refactors ptl targetting code

* more work on the ptl terminal

* change file name to laser_terminal

* changes area to powered makes laser terminal work properly

* makes a new pickweight function because the old one is bad

* Update alien_cache.dm

* Update canister.dm

* Update alien_cache.dm

* adds a template of the ruin

* adds some spawners to the reward pool

* adjusts agent b amount

* adjustments to loot table and changes to spawner comments

* new placeholder sprite for the cache

* randomizes reward spawn location and makes a PTL terminal sprite

* updates alien cache sprite and examine proc

* Adds overlays to the cache to indicate the current progress

* fixes mob capsule spawner and laser terminal

* Adds animations to PTL terminal

* new box part of the sprite for the PTL terminal. Adds glow

* fixes untargetting the PTL terminal and adds a little light overlay to the receiving dish

* changes PTL terminal id generation slightly

* adds simon says. incomplete

* Update paradise.dme

* simon says works now

* adds more rhythms

* Adds success and failure sounds

* Makes the ptl terminal board printable

* Update secure_alien_airlock.dm

* undo changes to preferences.dm

* undefs things

* removes identical to parent vars

* Update alien_cache_random_spawners.dm

* replaces animation end loop flag so open dream CI doesn't give errors

* changes centre platform colour and adds a fan to the entrance

* more pads more sounds

* better sprites

* remove old sprite

* adds the cache to example config

* makes it not always spawn

* Update simon_says_32x32.dmi

* adds some flavor to the ruin

* Update alien_cache_site.dmm

* adds a signal to the ruin
This commit is contained in:
Migratingcocofruit
2025-10-01 12:54:10 +00:00
committed by GitHub
parent 57c797a791
commit ad98a804cb
28 changed files with 2050 additions and 25 deletions
@@ -0,0 +1,150 @@
// Canister
#define COMPRESSED_GAS_AMOUNT 300000
#define AGENT_B_AMOUNT 100000
#define NAME_O2 "O2"
#define NAME_CO2 "CO2"
#define NAME_N2 "N2"
#define NAME_N2O "N2O"
#define NAME_TOX "Plasma"
#define NAME_AGENT_B "Agent B"
// Lazarus Capsule
#define MOB_TYPE (1 << 0)
#define MOB_PROTOTYPE (1 << 1)
// MARK: Random Spanwers
/obj/effect/spawner/random/alien_cache
name = "alien cache loot spawner"
// Random alien tools
/obj/effect/spawner/random/alien_cache/alien_tool
name = "alien tool spawner"
loot = list(
/obj/item/screwdriver/abductor,
/obj/item/wrench/abductor,
/obj/item/multitool/abductor,
/obj/item/wirecutters/abductor,
/obj/item/crowbar/abductor,
)
// Random alien surgical tools
/obj/effect/spawner/random/alien_cache/alien_surgical_tool
name = "alien surgical tool spawner"
loot = list(
/obj/item/bonegel/alien,
/obj/item/scalpel/laser/alien,
/obj/item/bonesetter/alien,
/obj/item/circular_saw/alien,
/obj/item/hemostat/alien,
/obj/item/fix_o_vein/alien,
/obj/item/retractor/alien,
)
// Random alien tool implant
/obj/effect/spawner/random/alien_cache/alien_tool_implant
name = "alien tool implant spawner"
loot = list(
/obj/item/organ/internal/cyberimp/arm/toolset_abductor,
/obj/item/organ/internal/cyberimp/arm/toolset_abductor/l,
/obj/item/organ/internal/cyberimp/arm/janitorial_abductor,
/obj/item/organ/internal/cyberimp/arm/janitorial_abductor/l,
/obj/item/organ/internal/cyberimp/arm/surgical_abductor,
/obj/item/organ/internal/cyberimp/arm/surgical_abductor/l,
)
// Random alien tool borg upgrade
/obj/effect/spawner/random/alien_cache/alien_tool_borg
name = "alien borg tool upgrade"
loot = list(
/obj/item/borg/upgrade/abductor_engi,
/obj/item/borg/upgrade/abductor_medi,
/obj/item/borg/upgrade/abductor_jani,
)
//MARK: Canister Spawners
// Gas canister with random gas
/obj/effect/spawner/alien_cache/gas_canister
name = "random gas canister spawner"
var/list/gasses = list(
NAME_O2 = COMPRESSED_GAS_AMOUNT,
NAME_N2 = COMPRESSED_GAS_AMOUNT,
NAME_CO2 = COMPRESSED_GAS_AMOUNT,
NAME_TOX = COMPRESSED_GAS_AMOUNT,
NAME_N2O = COMPRESSED_GAS_AMOUNT)
// Agent B canister
/obj/effect/spawner/alien_cache/gas_canister/agent_b
name = "agent b canister spawner"
gasses = list(NAME_AGENT_B = AGENT_B_AMOUNT)
/obj/effect/spawner/alien_cache/gas_canister/proc/add_gas(obj/machinery/atmospherics/portable/canister/spawned)
var/picked = pick(gasses)
switch(picked)
if(NAME_O2)
spawned.air_contents.set_oxygen(gasses["[picked]"])
if(NAME_N2)
spawned.air_contents.set_nitrogen(gasses["[picked]"])
if(NAME_N2O)
spawned.air_contents.set_sleeping_agent(gasses["[picked]"])
if(NAME_CO2)
spawned.air_contents.set_carbon_dioxide(gasses["[picked]"])
if(NAME_TOX)
spawned.air_contents.set_toxins(gasses["[picked]"])
if(NAME_AGENT_B)
spawned.air_contents.set_agent_b(gasses["[picked]"])
/obj/effect/spawner/alien_cache/gas_canister/Initialize(mapload)
. = ..()
var/obj/machinery/atmospherics/portable/canister/spawned = new(get_turf(src))
add_gas(spawned)
update_icon()
qdel(src)
// MARK: Lazarus Spawners
// Lazarus Capsule with a mob inside
/obj/effect/spawner/alien_cache/mob_capsule
var/list/mob_types = list()
// Lazarus Capsule with a megafauna inside
/obj/effect/spawner/alien_cache/mob_capsule/megafauna
mob_types = list(/mob/living/simple_animal/hostile/megafauna = MOB_PROTOTYPE)
/obj/effect/spawner/alien_cache/mob_capsule/Initialize(mapload)
. = ..()
var/obj/item/mobcapsule/capsule = new(get_turf(src))
var/type
if(length(mob_types))
var/list/pool = list()
for(var/mob_type in mob_types)
if(mob_types[mob_type] & MOB_TYPE)
pool += mob_type
if(mob_types[mob_type] & MOB_PROTOTYPE)
pool += subtypesof(mob_type)
type = pick(pool)
else
type = pick(subtypesof(/mob/living/simple_animal))
var/mob/living/simple_animal/my_mob = new type(loc)
my_mob.faction = list("neutral")
capsule.captured = my_mob
my_mob.forceMove(capsule)
// TEG crate for the cache
/obj/structure/closet/crate/teg
/obj/structure/closet/crate/teg/populate_contents()
new /obj/machinery/power/teg(src)
new /obj/item/pipe/circulator(src)
new /obj/item/pipe/circulator(src)
#undef COMPRESSED_GAS_AMOUNT
#undef AGENT_B_AMOUNT
#undef NAME_O2
#undef NAME_CO2
#undef NAME_N2
#undef NAME_N2O
#undef NAME_TOX
#undef NAME_AGENT_B
#undef MOB_TYPE
#undef MOB_PROTOTYPE