Axes TS gateway (#18825)

* Axes TS gateway

* This too

* Commit for MDB

* This PR finna become my MDB2 test

* aaaaaaaaa
This commit is contained in:
AffectedArc07
2022-08-18 23:48:29 +01:00
committed by GitHub
parent f41e0f111d
commit 4140275ca8
13 changed files with 41 additions and 31385 deletions
File diff suppressed because it is too large Load Diff
@@ -1,250 +0,0 @@
/area/awaymission/UO71
name = "UO71"
icon_state = "away"
report_alerts = FALSE
tele_proof = TRUE
/area/awaymission/UO71/plaza
name = "UO71 Plaza"
icon_state = "awaycontent1"
fire = TRUE
/area/awaymission/UO71/centralhall
name = "UO71 Central"
icon_state = "awaycontent2"
fire = TRUE
/area/awaymission/UO71/eng
name = "UO71 Engineering"
icon_state = "awaycontent3"
fire = TRUE
/area/awaymission/UO71/mining
name = "UO71 Mining"
icon_state = "awaycontent4"
fire = TRUE
/area/awaymission/UO71/science
name = "UO71 Science"
icon_state = "awaycontent5"
fire = TRUE
/area/awaymission/UO71/medical
name = "UO71 Medical"
icon_state = "awaycontent6"
fire = TRUE
/area/awaymission/UO71/gateway
name = "UO71 Gateway"
icon_state = "awaycontent7"
fire = TRUE
/area/awaymission/UO71/outside
name = "UO71 Outside"
icon_state = "awaycontent8"
/area/awaymission/UO71/bridge
name = "UO71 Bridge"
icon_state = "awaycontent21"
fire = TRUE
requires_power = FALSE
tele_proof = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/awaymission/UO71/queen
name = "UO71 Queen Lair"
icon_state = "awaycontent9"
fire = TRUE
requires_power = FALSE
tele_proof = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/awaymission/UO71/prince
name = "UO71 Prince Containment"
icon_state = "awaycontent10"
fire = TRUE
requires_power = FALSE
tele_proof = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/area/awaymission/UO71/loot
name = "UO71 Loot Vault"
icon_state = "awaycontent11"
requires_power = FALSE
tele_proof = TRUE
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
/obj/item/paper/terrorspiders1
name = "paper - 'Sealed Facility'"
info = {"<b>SEALED FACILITY</b><br>
<br>
This facility is sealed shut by order of Commander Marquez. Do not enter.<br>
Terror spiders live here. We believe they are a weapon developed by the syndicate.<br>
Any surviving personnel are to evacuate immediately via the gateway.<br>
Any arriving response team is advised to use the ID Upgrade Machine to obtain local access.<br>
"}
/obj/item/paper/terrorspiders2
name = "paper - 'The Trio of Terror'"
info = {"<b>Status Report on the 'Terrors'</b><br>
<br>
All the spiders are deadly. We know this much already. Within an hour of their appearance, they have killed several staff.<br>
Two, however, bear particular mention, as they appear to be leading the spider hivemind.<br>
<br>
The Prince is held in containment. He appears very aggressive, incredibly fast, strong, and durable. Extreme force and agility would be required to neutralize him.<br>
It is likely the appearance of the prince was related to our initial aggression against the Queen. These things can THINK.<br>
<br>
The Queen cannot be contained. She lives in the old bar, south of mining. She continues to breed dangerous spiders at an alarming rate.<br>
Many of her offspring are already roaming the compound, traveling through the vents. Contact with the team sent to subdue her has been lost.<br>
<br>
<br>
Based on the situation, Commander, I advise immediate evacuation through the gateway.<br>
-Research Director Simons<br>
"}
/obj/item/paper/terrorspiders3
name = "paper - 'Final Report'"
info = {"FROM: Field Agent 0738<br>
TO: Syndicate #873589<br>
SUBJECT: Mission Success<br>
<br>
I have seeded the Terror Queen egg in a dingy looking bar that bored engineers constructed near the mining tunnels.<br>
No doubt she will grow soon.<br>
<br>
I have also placed the Prince egg nearby, injected with sedative. Hopefully the dimwitted NT scientists bring them back for study.<br>
With any luck, the Queen will sense them telepathically, think NT is holding her prince hostage, and attack.<br>
<br>
I am going to extract out of the gateway before this all goes down.<br>
I don't imagine the staff have very long to live once the Queen declares war on this place.<br>
"}
/obj/item/paper/terrorspiders4
name = "paper - 'Prescription for Jones, David'"
info = {"PRESCRIPTION FOR: David Jones<br>
RANK: Miner<br>
FOR: Charcoal<br>
REASON FOR TREATMENT: Toxins in bloodstream<br>
CAUSE: Bitten by a black terror spider.<br>
TREATMENT PLAN: Take hourly. See Dr. Phloxi if symptoms persist more than three hours.<br>
"}
/obj/item/paper/terrorspiders5
name = "paper - 'A Study in Terror'"
info = {"<b>Findings Overview</b><br>
<br>
<p>Gray Spiders<br>Stealthy predators that ambush prey from vents. Otherwise weak.</p>
<p>Red Spiders<br>Can kill anyone in melee, but slow.</p>
<p>Green<br>Will lay eggs on dead bodies, breeding more spiders.</p>
<p>Black<br>Even a single bite is enough to kill a humanoid, given time.</p>
<p>White<br>Injects a parasitic agent. Deemed to pose too great an infection risk to study.</p>
<p>Purple<br>Seen guarding key areas and important spiders. Appear to be territorial, and very dangerous.</p>
<p>Prince<br>Held in containment. Appears to be a sort of super-warrior. Fast, strong, and thickly armored.</p>
<p>Queen<br>Unable to contain. Present south of Cargo before contact was lost. Presumed ruler of the local hive.</p>
"}
/obj/item/paper/terrorspiders6
name = "paper - 'A Study in Venom'"
info = {"<b>Initial Report - Black Widow Venom</b><br>
<br>
Even a single bite kills within a few minutes. Immediate charcoal is necessary for the victim to survive.<br>
The fascinating thing is that multiple bites actually cause rapid symptom onset. The victim quickly loses the ability to walk.<br>
One test monkey went from perfect health to death in under 60 seconds - from 3 bites.<br>
I am so very glad I'm not responsible for keeping these things contained."}
/obj/item/paper/terrorspiders7
name = "paper - 'Security Orders'"
info = {"<b>Directives for Officer James</b><br>
<br>
1. Find a way to lift the bridge lockdown.<br>
2. Kill any spiders you encounter.<br>
3. Once on the bridge, open a path to the Queen in the south, and find a way to kill her, ending the infestation. <br>
Good luck, Officer.<br>
"}
/obj/item/paper/terrorspiders8
name = "paper - 'Last Words'"
info = {"<b>The Last Words of Nurse Barnes</b><br>
<br>
It is too much. First Phil, then those damn spiders bite Mary too. Heaven help us. <br>
I'll be evacuating as soon as I've grabbed my supplies. I had to pay for those myself. Stupid budget cuts. <br>
The new world they've found for us isn't that hospitable, but at least there are no deadly spid---<br>
(the writing trails off, as if the writer was interrupted)<br>
"}
/obj/item/gun/energy/laser/awaymission_aeg
name = "wireless energy gun"
desc = "An energy gun that recharges wirelessly during away missions. Does not work on the main station."
force = 10
origin_tech = null
selfcharge = TRUE
can_charge = FALSE
// Selfcharge is enabled and disabled, and used as the away mission tracker
selfcharge = TRUE
/obj/item/gun/energy/laser/awaymission_aeg/Initialize(mapload)
. = ..()
// Force update it incase it spawns outside an away mission and shouldnt be charged
onTransitZ(new_z = loc.z)
/obj/item/gun/energy/laser/awaymission_aeg/onTransitZ(old_z, new_z)
if(is_away_level(new_z))
if(ismob(loc))
to_chat(loc, "<span class='notice'>Your [src] activates, starting to draw power from a nearby wireless power source.</span>")
selfcharge = TRUE
else
if(selfcharge)
if(ismob(loc))
to_chat(loc, "<span class='danger'>Your [src] deactivates, as it is out of range from its power source.</span>")
cell.charge = 0
selfcharge = FALSE
update_icon()
/obj/item/reagent_containers/glass/beaker/terror_black_toxin
name = "beaker 'Black Terror Venom'"
/obj/item/reagent_containers/glass/beaker/terror_black_toxin/Initialize(mapload)
. = ..()
reagents.add_reagent("terror_black_toxin", 50)
update_icon()
/obj/machinery/computer/id_upgrader
name = "ID Upgrade Machine"
icon_state = "guest"
icon_screen = "pass"
var/list/access_to_give = list(ACCESS_AWAY01)
var/beenused = 0
var/door_to_open = "UO71_Start"
/obj/machinery/computer/id_upgrader/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/card/id))
var/obj/item/card/id/D = I
if(!access_to_give.len)
to_chat(user, "<span class='notice'>This machine appears to be configured incorrectly.</span>")
return
var/did_upgrade = 0
var/list/id_access = D.GetAccess()
for(var/this_access in access_to_give)
if(!(this_access in id_access))
// don't have it - add it
D.access |= this_access
did_upgrade = 1
if(did_upgrade)
to_chat(user, "<span class='notice'>An access type was added to your ID card.</span>")
if(beenused)
return
spawn(1)
beenused = 1
var/unlocked_something = 0
for(var/obj/machinery/door/poddoor/P in GLOB.airlocks)
if(P.density && P.id_tag == door_to_open && P.z == z)
P.open()
unlocked_something = 1
if(unlocked_something)
to_chat(user, "<span class='danger'>Activating the machine has unlocked a way forward!</span>")
else
to_chat(user, "<span class='notice'>Your ID card already has all the access this machine can give.</span>")
return
return ..()
@@ -18,8 +18,6 @@
error_on_humanize = "You are not able to control any terror spider this round."
else if(cannotPossess(user))
error_on_humanize = "You have enabled antag HUD and are unable to re-enter the round."
else if(spider_awaymission)
error_on_humanize = "Terror spiders that are part of an away mission cannot be controlled by ghosts."
else if(!ai_playercontrol_allowtype)
error_on_humanize = "This specific type of terror spider is not player-controllable."
else if(degenerate)
@@ -6,8 +6,6 @@
to_chat(src, "Your Brood: ")
for(var/thing in GLOB.ts_spiderlist)
var/mob/living/simple_animal/hostile/poison/terror_spider/T = thing
if(T.spider_awaymission != spider_awaymission)
continue
hsline = "* [T] in [get_area(T)], "
if(T.stat == DEAD)
hsline += "DEAD"
@@ -23,7 +21,7 @@
var/numspiders = 0
for(var/thing in GLOB.ts_spiderlist)
var/mob/living/simple_animal/hostile/poison/terror_spider/T = thing
if(T.stat != DEAD && !T.spider_placed && spider_awaymission == T.spider_awaymission)
if(T.stat != DEAD && !T.spider_placed)
numspiders += 1
return numspiders
@@ -34,7 +32,7 @@
spider_totals[thistype] = 0
for(var/thing in GLOB.ts_spiderlist)
var/mob/living/simple_animal/hostile/poison/terror_spider/T = thing
if(T.stat == DEAD || T.spider_placed || spider_awaymission != T.spider_awaymission)
if(T.stat == DEAD || T.spider_placed)
continue
if(check_mine && T.spider_myqueen != src)
continue
@@ -32,11 +32,6 @@
ai_spins_webs = FALSE
gender = MALE
/mob/living/simple_animal/hostile/poison/terror_spider/prince/death(gibbed)
if(can_die() && !hasdied && spider_uo71)
UnlockBlastDoors("UO71_SciStorage")
return ..()
/mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L)
L.KnockDown(10 SECONDS)
return ..()
@@ -59,10 +59,7 @@
var/datum/action/innate/terrorspider/remoteview/remoteview_action = new
remoteview_action.Grant(src)
grant_queen_subtype_abilities()
spider_myqueen = src
if(spider_awaymission)
spider_growinstantly = TRUE
spider_spawnfrequency = 150
spider_myqueen = src // ???
/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/grant_queen_subtype_abilities()
@@ -96,8 +93,6 @@
/mob/living/simple_animal/hostile/poison/terror_spider/queen/death(gibbed)
if(can_die() && !hasdied)
if(spider_uo71)
UnlockBlastDoors("UO71_Caves")
// When a queen (or subtype!) dies, so do all of her spiderlings, and half of all her fully grown offspring
// This feature is intended to provide a way for crew to still win even if the queen has overwhelming numbers - by sniping the queen.
for(var/thing in GLOB.ts_spiderlist)
@@ -194,8 +189,6 @@
if(world.time > (spider_lastspawn + spider_spawnfrequency))
if(prob(20))
if(ai_nest_is_full())
if(spider_awaymission)
spider_spawnfrequency = spider_spawnfrequency_stable
neststep = 4
else
spider_lastspawn = world.time
@@ -345,12 +345,3 @@
if(!target)
return
. = ..()
// --------------------------------------------------------------------------------
// --------------------- TERROR SPIDERS: MISC AI CODE -----------------------------
// --------------------------------------------------------------------------------
/mob/living/simple_animal/hostile/poison/terror_spider/proc/UnlockBlastDoors(target_id_tag)
for(var/obj/machinery/door/poddoor/P in GLOB.airlocks)
if(P.density && P.id_tag == target_id_tag && P.z == z && !P.operating)
P.open()
@@ -119,9 +119,6 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/spider_opens_doors = 1 // all spiders can open firedoors (they have no security). 1 = can open depowered doors. 2 = can open powered doors
faction = list("terrorspiders")
var/spider_awaymission = FALSE // if TRUE, limits certain behavior in away missions
var/spider_uo71 = FALSE // if TRUE, spider is in the UO71 away mission
var/spider_unlock_id_tag = "" // if defined, unlock awaymission blast doors with this tag on death
var/spider_role_summary = "UNDEFINED"
var/spider_placed = FALSE
@@ -162,6 +159,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/spider_debug = FALSE
footstep_type = FOOTSTEP_MOB_CLAW
// --------------------------------------------------------------------------------
// --------------------- TERROR SPIDERS: SHARED ATTACK CODE -----------------------
// --------------------------------------------------------------------------------
@@ -278,19 +276,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
name += " ([rand(1, 1000)])"
real_name = name
msg_terrorspiders("[src] has grown in [get_area(src)].")
if(is_away_level(z))
spider_awaymission = TRUE
GLOB.ts_count_alive_awaymission++
if(spider_tier >= 3)
ai_ventcrawls = FALSE // means that pre-spawned bosses on away maps won't ventcrawl. Necessary to keep prince/mother in one place.
if(istype(get_area(src), /area/awaymission/UO71)) // if we are playing the away mission with our special spiders...
spider_uo71 = TRUE
if(world.time < 600)
// these are static spiders, specifically for the UO71 away mission, make them stay in place
ai_ventcrawls = FALSE
spider_placed = TRUE
else
GLOB.ts_count_alive_station++
GLOB.ts_count_alive_station++
// after 3 seconds, assuming nobody took control of it yet, offer it to ghosts.
addtimer(CALLBACK(src, .proc/CheckFaction), 20)
addtimer(CALLBACK(src, .proc/announcetoghosts), 30)
@@ -299,8 +285,6 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
spider_creation_time = world.time
/mob/living/simple_animal/hostile/poison/terror_spider/proc/announcetoghosts()
if(spider_awaymission)
return
if(stat == DEAD)
return
if(ckey)
@@ -353,10 +337,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
hasdied = TRUE
GLOB.ts_count_dead++
GLOB.ts_death_last = world.time
if(spider_awaymission)
GLOB.ts_count_alive_awaymission--
else
GLOB.ts_count_alive_station--
GLOB.ts_count_alive_station--
/mob/living/simple_animal/hostile/poison/terror_spider/death(gibbed)
if(can_die())
@@ -469,8 +450,6 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/mob/living/simple_animal/hostile/poison/terror_spider/T = thing
if(T.stat == DEAD)
continue
if(T.spider_awaymission != spider_awaymission)
continue
targets |= T // we use |= instead of += to avoid adding src to the list twice
var/mob/living/L = input("Choose a terror to watch.", "Selection") in targets
if(istype(L))
@@ -30,11 +30,6 @@
attackcycles = 0
..()
/mob/living/simple_animal/hostile/poison/terror_spider/white/death(gibbed)
if(can_die() && !hasdied && spider_uo71)
UnlockBlastDoors("UO71_Bridge")
return ..(gibbed)
/mob/living/simple_animal/hostile/poison/terror_spider/white/spider_specialattack(mob/living/carbon/human/L, poisonable)
if(!poisonable)
..()
@@ -0,0 +1,34 @@
// ID upgrader - swipe an ID on it to gain access types. Used on ruins.
/obj/machinery/computer/id_upgrader
name = "ID Upgrade Machine"
icon_state = "guest"
icon_screen = "pass"
/// Access to give
var/list/access_to_give = list(ACCESS_AWAY01)
/// Have we been used?
var/used = FALSE
/obj/machinery/computer/id_upgrader/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/card/id))
var/obj/item/card/id/D = I
if(!length(access_to_give))
to_chat(user, "<span class='notice'>This machine appears to be configured incorrectly.</span>")
return
var/did_upgrade = FALSE
var/list/id_access = D.GetAccess()
for(var/this_access in access_to_give)
if(!(this_access in id_access))
// don't have it - add it
D.access |= this_access
did_upgrade = TRUE
if(did_upgrade)
to_chat(user, "<span class='notice'>An access type was added to your ID card.</span>")
else
to_chat(user, "<span class='notice'>Your ID card already has all the access this machine can give.</span>")
return
return ..()
-17
View File
@@ -52,13 +52,6 @@
var/egg_progress = 0 // # of on_life() cycles completed, unlike cycle_num this is reset on each hatch event
var/egg_progress_per_hatch = 90 // if egg_progress > this, chance to hatch and reset egg_progress
var/eggs_hatched = 0 // num of hatch events completed
var/awaymission_infection = FALSE // TRUE if infection occurred inside gateway
/obj/item/organ/internal/body_egg/terror_eggs/Initialize(mapload)
. = ..()
var/turf/T = get_turf(src)
if(istype(T) && is_away_level(T.z))
awaymission_infection = TRUE
/obj/item/organ/internal/body_egg/terror_eggs/on_life()
// Safety first.
@@ -91,16 +84,6 @@
return extra_progress
/obj/item/organ/internal/body_egg/terror_eggs/proc/hatch_egg()
// Detect & stop people attempting to bring a gateway white spider infection back to the main station.
if(awaymission_infection)
var/turf/T = get_turf(owner)
if(istype(T) && !is_away_level(T.z))
owner.gib()
// give a hint of the cause of death
new /obj/effect/decal/cleanable/spiderling_remains(T)
qdel(src)
return
var/infection_completed = FALSE
var/obj/structure/spider/spiderling/terror_spiderling/S = new(get_turf(owner))
switch(eggs_hatched)
-1
View File
@@ -272,7 +272,6 @@ enabled_away_missions = [
"_maps/map_files/RandomZLevels/centcomAway.dmm",
#"_maps/map_files/RandomZLevels/evil_santa.dmm", # Special christmas mission. Enable for festivities
#"_maps/map_files/RandomZLevels/example.dmm", # Example file. Do not enable.
"_maps/map_files/RandomZLevels/terrorspiders.dmm",
]
+1 -1
View File
@@ -1404,7 +1404,6 @@
#include "code\modules\awaymissions\mission_code\centcomAway.dm"
#include "code\modules\awaymissions\mission_code\challenge.dm"
#include "code\modules\awaymissions\mission_code\evil_santa.dm"
#include "code\modules\awaymissions\mission_code\UO71-terrorspiders.dm"
#include "code\modules\awaymissions\mission_code\ghost_role_spawners\golems.dm"
#include "code\modules\awaymissions\mission_code\ghost_role_spawners\oldstation.dm"
#include "code\modules\awaymissions\mission_code\ruins\gps.dm"
@@ -2447,6 +2446,7 @@
#include "code\modules\ruins\lavalandruin_code\seed_vault.dm"
#include "code\modules\ruins\lavalandruin_code\sin_ruins.dm"
#include "code\modules\ruins\objects_and_mobs\gym.dm"
#include "code\modules\ruins\objects_and_mobs\id_upgrader.dm"
#include "code\modules\ruins\objects_and_mobs\necropolis_gate.dm"
#include "code\modules\security_levels\keycard_authentication.dm"
#include "code\modules\security_levels\security_levels.dm"