mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 04:27:35 +01:00
Merge pull request #8515 from Kyep/depot
Reworks Syndicate Supply Depot
This commit is contained in:
@@ -26,12 +26,9 @@
|
||||
|
||||
/obj/effect/portal/Destroy()
|
||||
portals -= src
|
||||
if(istype(creator, /obj/item/hand_tele))
|
||||
var/obj/item/hand_tele/O = creator
|
||||
O.active_portals--
|
||||
else if(istype(creator, /obj/item/gun/energy/wormhole_projector))
|
||||
var/obj/item/gun/energy/wormhole_projector/P = creator
|
||||
P.portal_destroyed(src)
|
||||
if(istype(creator, /obj))
|
||||
var/obj/O = creator
|
||||
O.portal_destroyed(src)
|
||||
creator = null
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
@@ -2,27 +2,36 @@
|
||||
name = "random spawners"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
color = "#00FF00"
|
||||
var/list/result = list(
|
||||
/turf/simulated/floor/plasteel = 1,
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 1)
|
||||
var/spawn_inside = null
|
||||
|
||||
// This needs to come before the initialization wave because
|
||||
// the thing it creates might need to be initialized too
|
||||
/obj/effect/spawner/random_spawners/Initialize()
|
||||
// This needs to use New() instead of Initialize() because the thing it creates might need to be initialized too
|
||||
/obj/effect/spawner/random_spawners/New()
|
||||
. = ..()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
log_runtime(EXCEPTION("Spawner placed in nullspace!"), src)
|
||||
return
|
||||
randspawn(T)
|
||||
|
||||
/obj/effect/spawner/random_spawners/proc/randspawn(turf/T)
|
||||
var/thing_to_place = pickweight(result)
|
||||
if(ispath(thing_to_place, /turf))
|
||||
if(ispath(thing_to_place, /datum/nothing))
|
||||
// Nothing.
|
||||
else if(ispath(thing_to_place, /turf))
|
||||
T.ChangeTurf(thing_to_place)
|
||||
else
|
||||
new thing_to_place(T)
|
||||
if(ispath(spawn_inside, /obj))
|
||||
var/obj/O = new thing_to_place(T)
|
||||
var/obj/E = new spawn_inside(T)
|
||||
O.forceMove(E)
|
||||
else
|
||||
new thing_to_place(T)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spawner/random_spawners/blood_maybe
|
||||
@@ -108,3 +117,195 @@
|
||||
result = list(
|
||||
/turf/simulated/wall = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 7)
|
||||
|
||||
|
||||
|
||||
// z6 DEPOT SPAWNERS
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate
|
||||
|
||||
|
||||
|
||||
// Turrets
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/turret
|
||||
name = "50pc int turret"
|
||||
icon_state = "x"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/machinery/porta_turret/syndicate/interior = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/turret/external
|
||||
name = "50pc ext turret"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/machinery/porta_turret/syndicate/exterior = 1)
|
||||
|
||||
|
||||
// Mobs
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/mob
|
||||
name = "50pc melee syndimob"
|
||||
icon_state = "x"
|
||||
color = "#333333"
|
||||
result = list(/datum/nothing = 1,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot = 1)
|
||||
|
||||
|
||||
// Traps
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap
|
||||
icon_state = "x"
|
||||
color = "#000000"
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/pizzabomb
|
||||
name = "50pc trap pizza"
|
||||
result = list(/obj/item/pizzabox/meat = 1,
|
||||
/obj/item/pizza_bomb/autoarm = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/medbot
|
||||
name = "50pc trap medibot"
|
||||
result = list(/datum/nothing = 1,
|
||||
/mob/living/simple_animal/bot/medbot/syndicate/emagged = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/mine
|
||||
name = "50pc trap landmine"
|
||||
result = list(/datum/nothing = 1,
|
||||
/obj/effect/mine/explosive = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/trap/documents
|
||||
name = "66pc trapped documents"
|
||||
result = list(/obj/item/documents/syndicate/yellow = 1,
|
||||
/obj/item/documents/syndicate/yellow/trapped = 1)
|
||||
|
||||
|
||||
|
||||
|
||||
// Loot
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot
|
||||
name = "common loot"
|
||||
icon_state = "x3"
|
||||
spawn_inside = /obj/structure/closet/secure_closet/syndicate/depot
|
||||
// Loot schema: costumes, toys, useless gimmick items, trapped items
|
||||
result = list(/datum/nothing = 13,
|
||||
/obj/item/storage/toolbox/syndicate = 1,
|
||||
/obj/item/storage/toolbox/syndicate/trapped = 1,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1,
|
||||
/obj/item/toy/cards/deck/syndicate = 1,
|
||||
/obj/item/storage/secure/briefcase/syndie = 1,
|
||||
/obj/item/toy/syndicateballoon = 1,
|
||||
/obj/item/soap/syndie = 1,
|
||||
/obj/item/clothing/under/syndicate = 1,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 1,
|
||||
/obj/item/clothing/mask/gas/syndicate = 1,
|
||||
/obj/item/suppressor = 1,
|
||||
/obj/item/coin/antagtoken/syndicate = 1,
|
||||
/obj/item/storage/box/syndie_kit/cutouts = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level2
|
||||
name = "rare loot"
|
||||
// Loot schema: space gear, basic armor, basic ammo (10mm, rcd), drugs, more dangerous/useful gimmick items, lower-value minerals
|
||||
result = list(/datum/nothing = 27,
|
||||
/obj/item/storage/box/syndie_kit/space = 1,
|
||||
/obj/item/storage/box/syndie_kit/hardsuit = 1,
|
||||
/obj/item/clothing/shoes/magboots/syndie = 1,
|
||||
/obj/item/clothing/suit/armor/vest/combat = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm = 1,
|
||||
/obj/item/storage/pill_bottle/happy = 1,
|
||||
/obj/item/storage/pill_bottle/zoom = 1,
|
||||
/obj/item/storage/pill_bottle/random_drug_bottle = 2,
|
||||
/obj/item/storage/backpack/duffel/syndie/surgery = 1,
|
||||
/obj/item/clothing/shoes/syndigaloshes = 1,
|
||||
/obj/item/storage/belt/military = 1,
|
||||
/obj/item/clothing/under/chameleon = 1,
|
||||
/obj/item/storage/backpack/satchel_flat = 1,
|
||||
/obj/item/rcd = 1,
|
||||
/obj/item/rcd_ammo = 1,
|
||||
/obj/item/stamp/chameleon = 1,
|
||||
/obj/item/flag/chameleon = 1,
|
||||
/obj/item/lighter/zippo/gonzofist = 1,
|
||||
/obj/item/clothing/gloves/fingerless/rapid = 1,
|
||||
/obj/item/grenade/spawnergrenade/manhacks = 1,
|
||||
/obj/item/grenade/syndieminibomb = 1,
|
||||
/obj/item/storage/box/syndie_kit/throwing_weapons = 1,
|
||||
/obj/item/pen/edagger = 1,
|
||||
/obj/item/stack/sheet/mineral/plasma{amount = 20} = 1,
|
||||
/obj/item/stack/sheet/mineral/silver{amount = 20} = 1,
|
||||
/obj/item/stack/sheet/mineral/gold{amount = 20} = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level3
|
||||
name = "officer loot"
|
||||
// Loot schema: medkits, very useful devices (jammer, illegal upgrade, RCD), better quality ammo (AP, fire), basic weapons (pistol, empgrenade), high value ores (diamond, uranium)
|
||||
result = list(/datum/nothing = 25,
|
||||
/obj/item/jammer = 1,
|
||||
/obj/item/storage/firstaid = 1,
|
||||
/obj/item/storage/box/syndie_kit/bonerepair = 1,
|
||||
/obj/item/gun/projectile/automatic/pistol = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
/obj/item/card/emag = 1,
|
||||
/obj/item/encryptionkey/binary = 1,
|
||||
/obj/item/pinpointer/advpinpointer = 1,
|
||||
/obj/item/borg/upgrade/vtec = 1,
|
||||
/obj/item/borg/upgrade/syndicate = 1,
|
||||
/obj/item/borg/upgrade/selfrepair = 1,
|
||||
/obj/item/stack/sheet/mineral/diamond{amount = 10} = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium{amount = 10} = 1,
|
||||
/obj/item/clothing/shoes/magboots/syndie/advance = 1,
|
||||
/obj/item/grenade/empgrenade = 1,
|
||||
/obj/item/grenade/clown_grenade = 1,
|
||||
/obj/item/grenade/spawnergrenade/feral_cats = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/ap = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/fire = 1,
|
||||
/obj/item/ammo_box/magazine/m10mm/hp = 1,
|
||||
/obj/item/rad_laser = 1,
|
||||
/obj/item/storage/box/syndie_kit/emp = 1,
|
||||
/obj/item/batterer = 1,
|
||||
/obj/item/toy/carpplushie/dehy_carp = 1,
|
||||
/obj/item/clothing/glasses/hud/security/chameleon = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/loot/level4
|
||||
name = "armory loot"
|
||||
// Loot schema: high-power weapons (m90, esword, ebow, revolver), devices that negate depot challenges (thermal glasses, chameleon device), explosives
|
||||
result = list(/obj/item/gun/projectile/automatic/c20r = 1,
|
||||
/obj/item/gun/projectile/automatic/m90 = 1,
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/syndicate = 1,
|
||||
/obj/item/melee/energy/sword/saber = 1,
|
||||
/obj/item/gun/energy/kinetic_accelerator/crossbow = 1,
|
||||
/obj/item/gun/projectile/revolver = 1,
|
||||
/obj/item/clothing/gloves/color/yellow/power = 1,
|
||||
/obj/item/twohanded/chainsaw = 1,
|
||||
/obj/item/bee_briefcase = 1,
|
||||
/obj/item/twohanded/energizedfireaxe = 1,
|
||||
/obj/item/clothing/glasses/thermal = 1,
|
||||
/obj/item/chameleon = 1,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/stimulants = 1,
|
||||
/obj/item/storage/box/syndie_kit/atmosgasgrenades = 1,
|
||||
/obj/item/grenade/plastic/x4 = 1)
|
||||
|
||||
|
||||
// Layout-affecting spawns
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout
|
||||
icon_state = "x2"
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door
|
||||
name = "50pc door 25pc falsewall 25pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate = 6,
|
||||
/turf/simulated/wall/r_wall = 2,
|
||||
/obj/structure/falsewall/reinforced = 2)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door/secret
|
||||
name = "50pc falsewall 50pc wall"
|
||||
result = list(/turf/simulated/wall/r_wall = 1,
|
||||
/obj/structure/falsewall/reinforced = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/door/vault
|
||||
name = "60pc vaultdoor 20pc falsewall 20pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 6,
|
||||
/turf/simulated/wall/r_wall = 2,
|
||||
/obj/structure/falsewall/reinforced = 2)
|
||||
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
|
||||
name = "50pc loot spacepod"
|
||||
result = list(/obj/spacepod/syndi = 1,
|
||||
/obj/spacepod/syndi/unlocked = 1)
|
||||
@@ -98,4 +98,8 @@
|
||||
|
||||
/obj/item/pizza_bomb/New()
|
||||
..()
|
||||
correct_wire = pick(wires)
|
||||
correct_wire = pick(wires)
|
||||
|
||||
/obj/item/pizza_bomb/autoarm
|
||||
timer_set = 1
|
||||
timer = 10
|
||||
@@ -54,9 +54,15 @@
|
||||
name = "suspicious beacon"
|
||||
desc = "A label on it reads: <i>Activate to have a singularity beacon teleported to your location</i>."
|
||||
origin_tech = "bluespace=6;syndicate=5"
|
||||
syndicate = 1
|
||||
syndicate = TRUE
|
||||
var/obj/machinery/computer/syndicate_depot/teleporter/mycomputer
|
||||
|
||||
/obj/item/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/Destroy()
|
||||
if(mycomputer)
|
||||
mycomputer.mybeacon = null
|
||||
return ..()
|
||||
|
||||
/obj/item/radio/beacon/syndicate/attack_self(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
|
||||
@@ -69,7 +75,7 @@
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a high-ordinance explosive to your location</i>."
|
||||
origin_tech = "bluespace=5;syndicate=5"
|
||||
|
||||
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
|
||||
/obj/item/radio/beacon/syndicate/bomb/attack_self(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/syndicatebomb( user.loc )
|
||||
|
||||
@@ -27,3 +27,24 @@
|
||||
name = "'Blue' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Blue\"."
|
||||
icon_state = "docs_blue"
|
||||
|
||||
/obj/item/documents/syndicate/yellow
|
||||
name = "'Yellow' secret documents"
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\"."
|
||||
icon_state = "docs_yellow"
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped
|
||||
desc = "\"Top Secret\" documents printed on special copy-protected paper. It details sensitive Syndicate operational intelligence. These documents are marked \"Yellow\", and have a thin film of clear material covering their surface."
|
||||
var/poison_type = "amanitin"
|
||||
var/poison_dose = 20
|
||||
var/poison_total = 60
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped/pickup(user)
|
||||
if(ishuman(user) && poison_total > 0)
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(!istype(G) || G.transfer_prints)
|
||||
H.reagents.add_reagent(poison_type, poison_dose)
|
||||
poison_total -= poison_dose
|
||||
add_attack_logs(src, user, "Picked up [src], the trapped syndicate documents")
|
||||
..()
|
||||
@@ -159,6 +159,10 @@
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
|
||||
|
||||
/obj/item/grenade/chem_grenade/explosion/mine_armed/New()
|
||||
..()
|
||||
CreateDefaultTrigger(/obj/item/assembly/mousetrap/armed)
|
||||
|
||||
|
||||
// Water + Potassium = Boom
|
||||
|
||||
@@ -198,6 +202,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
// Basic EMP grenade
|
||||
/obj/item/grenade/chem_grenade/emp
|
||||
payload_name = "EMP"
|
||||
|
||||
@@ -86,6 +86,16 @@
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
|
||||
|
||||
/obj/item/storage/toolbox/syndicate/trapped
|
||||
name = "suspicious looking toolbox"
|
||||
desc = "Danger. Very robust. Has a small red marker by the handle."
|
||||
|
||||
/obj/item/storage/toolbox/syndicate/trapped/New()
|
||||
..()
|
||||
new /obj/item/grenade/chem_grenade/explosion/mine_armed(src)
|
||||
|
||||
|
||||
/obj/item/storage/toolbox/drone
|
||||
name = "mechanical toolbox"
|
||||
icon_state = "blue"
|
||||
|
||||
@@ -141,3 +141,6 @@ Frequency:
|
||||
active_portals++
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/hand_tele/portal_destroyed(obj/effect/portal/P)
|
||||
active_portals--
|
||||
@@ -121,26 +121,25 @@
|
||||
if(!(opened ? close() : open()))
|
||||
to_chat(user, "<span class='notice'>It won't budge!</span>")
|
||||
|
||||
// this should probably use dump_contents()
|
||||
/obj/structure/closet/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
for(var/atom/movable/A in src)//pulls everything out of the locker and hits it with an explosion
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
if(2)
|
||||
if(prob(50))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
if(3)
|
||||
if(prob(5))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
A.ex_act(severity++)
|
||||
dump_contents()
|
||||
new /obj/item/stack/sheet/metal(loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -149,23 +148,20 @@
|
||||
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
health -= Proj.damage
|
||||
if(health <= 0)
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
|
||||
if(user.environment_smash)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("<span class='warning'>[user] destroys the [src].</span>")
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
// this should probably use dump_contents()
|
||||
/obj/structure/closet/blob_act()
|
||||
if(prob(75))
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
dump_contents()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot
|
||||
name = "depot supply closet"
|
||||
desc = ""
|
||||
locked = 0
|
||||
anchored = 1
|
||||
health = 200
|
||||
req_access = list()
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/New()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/emag_act()
|
||||
. = ..()
|
||||
loot_pickup()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/open()
|
||||
. = ..()
|
||||
if(opened)
|
||||
loot_pickup()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/dump_contents()
|
||||
loot_pickup()
|
||||
. = ..()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/proc/loot_pickup()
|
||||
var/area/syndicate_depot/core/depotarea = areaMaster
|
||||
if(depotarea)
|
||||
depotarea.locker_looted()
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/attack_animal(mob/M)
|
||||
if(isanimal(M) && "syndicate" in M.faction)
|
||||
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
|
||||
return
|
||||
return ..(M)
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/emp_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/syndicate/depot/togglelock(mob/user)
|
||||
. = ..()
|
||||
if(!locked)
|
||||
loot_pickup()
|
||||
@@ -0,0 +1,106 @@
|
||||
|
||||
/obj/structure/fusionreactor
|
||||
name = "syndicate fusion reactor"
|
||||
desc = ""
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "powersink1"
|
||||
anchored = 1
|
||||
max_integrity = 50
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
|
||||
/obj/structure/fusionreactor/Initialize()
|
||||
. = ..()
|
||||
depotarea = areaMaster
|
||||
if(depotarea)
|
||||
depotarea.reactor = src
|
||||
|
||||
/obj/structure/fusionreactor/Destroy()
|
||||
if(depotarea)
|
||||
depotarea.reactor = null
|
||||
..()
|
||||
|
||||
/obj/structure/fusionreactor/ex_act(severity)
|
||||
if(severity < 3)
|
||||
obj_integrity = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/fusionreactor/bullet_act(obj/item/projectile/Proj)
|
||||
obj_integrity -= Proj.damage
|
||||
..()
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/fusionreactor/proc/healthcheck()
|
||||
if(obj_integrity <= 0)
|
||||
overload(TRUE)
|
||||
|
||||
/obj/structure/fusionreactor/attackby(obj/item/I, mob/user, params)
|
||||
if(iswrench(I))
|
||||
playsound(loc, I.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>The [src] is too well secured to the floor.</span>")
|
||||
else if(isscrewdriver(I))
|
||||
to_chat(user, "<span class='notice'>You try to screwdriver open [src], but accidentally release some radiation!</span>")
|
||||
if(prob(50))
|
||||
empulse(src, 4, 10)
|
||||
else
|
||||
for(var/mob/living/M in range(10, loc))
|
||||
M.apply_effect(rand(5, 25), IRRADIATE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/fusionreactor/proc/overload(containment_failure)
|
||||
var/obj/effect/overload/O = new /obj/effect/overload(get_turf(src))
|
||||
if(containment_failure)
|
||||
playsound(loc, 'sound/machines/Alarm.ogg', 100, 0, 0)
|
||||
O.deliberate = TRUE
|
||||
O.max_cycles = 6
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/overload
|
||||
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
|
||||
icon_state = "energy_ball"
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
anchored = 1
|
||||
var/cycles = 0
|
||||
var/beepsound = 'sound/items/timer.ogg'
|
||||
var/deliberate = FALSE
|
||||
var/max_cycles = 10
|
||||
var/max_fire_range = 9
|
||||
var/area/syndicate_depot/core/depotarea
|
||||
|
||||
/obj/effect/overload/Initialize()
|
||||
. = ..()
|
||||
processing_objects.Add(src)
|
||||
depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
if(!depotarea.used_self_destruct)
|
||||
depotarea.used_self_destruct = TRUE // Silences all further alerts from this point onwards.
|
||||
depotarea.updateicon()
|
||||
depotarea.shields_down()
|
||||
|
||||
/obj/effect/overload/process()
|
||||
var/turf/T = get_turf(src)
|
||||
if(cycles < max_cycles)
|
||||
if(!deliberate)
|
||||
playsound(loc, beepsound, 50, 0)
|
||||
cycles++
|
||||
var/fire_range = min(cycles, max_fire_range)
|
||||
|
||||
for(var/turf/simulated/turf in range(fire_range, T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
return
|
||||
|
||||
if(!istype(depotarea))
|
||||
depotarea = areaMaster
|
||||
if(istype(depotarea))
|
||||
depotarea.destroyed = TRUE
|
||||
depotarea.updateicon()
|
||||
|
||||
for(var/obj/structure/closet/L in range(30, T))
|
||||
L.open()
|
||||
for(var/mob/living/M in range(30, T))
|
||||
M.gib()
|
||||
explosion(get_turf(src), 25, 35, 45, 55, 1, 1, 60, 0, 0)
|
||||
processing_objects.Remove(src)
|
||||
qdel(src)
|
||||
|
||||
Reference in New Issue
Block a user