Merge pull request #8515 from Kyep/depot

Reworks Syndicate Supply Depot
This commit is contained in:
Crazy Lemon
2018-08-07 09:34:02 -07:00
committed by GitHub
39 changed files with 2244 additions and 186 deletions
+3 -6
View File
@@ -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 )
+21
View File
@@ -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()
+106
View File
@@ -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)