mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'
This commit is contained in:
@@ -19,8 +19,9 @@
|
||||
var/new_frequency = sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ))
|
||||
aSignal.set_frequency(new_frequency)
|
||||
poi_list |= src
|
||||
|
||||
|
||||
/obj/effect/anomaly/Destroy()
|
||||
QDEL_NULL(aSignal)
|
||||
poi_list.Remove(src)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/obj/effect/decal/cleanable
|
||||
var/list/random_icon_states = list()
|
||||
var/targeted_by = null // Used so cleanbots can't claim a mess.
|
||||
var/noscoop = 0 //if it has this, don't let it be scooped up
|
||||
var/noclear = 0 //if it has this, don't delete it when its' scooped up
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/proc/can_bloodcrawl_in()
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -877,21 +877,22 @@ steam.start() -- spawns the effect
|
||||
// Similar to smoke, but spreads out more
|
||||
// metal foams leave behind a foamed metal wall
|
||||
|
||||
/obj/effect/effect/foam
|
||||
/obj/structure/foam
|
||||
name = "foam"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "foam"
|
||||
opacity = 0
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = OBJ_LAYER + 0.9
|
||||
mouse_opacity = 0
|
||||
animate_movement = 0
|
||||
var/amount = 3
|
||||
var/expand = 1
|
||||
animate_movement = 0
|
||||
var/metal = 0
|
||||
|
||||
|
||||
/obj/effect/effect/foam/New(loc, var/ismetal=0)
|
||||
/obj/structure/foam/New(loc, var/ismetal=0)
|
||||
..(loc)
|
||||
icon_state = "[ismetal ? "m":""]foam"
|
||||
if(!ismetal && reagents)
|
||||
@@ -918,11 +919,11 @@ steam.start() -- spawns the effect
|
||||
|
||||
flick("[icon_state]-disolve", src)
|
||||
sleep(5)
|
||||
delete()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
// on delete, transfer any reagents to the floor
|
||||
/obj/effect/effect/foam/Destroy()
|
||||
/obj/structure/foam/Destroy()
|
||||
if(!metal && reagents)
|
||||
reagents.handle_reactions()
|
||||
for(var/atom/A in oview(1, src))
|
||||
@@ -933,7 +934,7 @@ steam.start() -- spawns the effect
|
||||
reagents.reaction(A, TOUCH, fraction)
|
||||
return ..()
|
||||
|
||||
/obj/effect/effect/foam/process()
|
||||
/obj/structure/foam/process()
|
||||
if(--amount < 0)
|
||||
return
|
||||
|
||||
@@ -948,11 +949,11 @@ steam.start() -- spawns the effect
|
||||
if(!T.Enter(src))
|
||||
continue
|
||||
|
||||
var/obj/effect/effect/foam/F = locate() in T
|
||||
var/obj/structure/foam/F = locate() in T
|
||||
if(F)
|
||||
continue
|
||||
|
||||
F = new /obj/effect/effect/foam(T, metal)
|
||||
F = new /obj/structure/foam(T, metal)
|
||||
F.amount = amount
|
||||
if(!metal)
|
||||
F.create_reagents(15)
|
||||
@@ -963,15 +964,15 @@ steam.start() -- spawns the effect
|
||||
|
||||
// foam disolves when heated
|
||||
// except metal foams
|
||||
/obj/effect/effect/foam/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
/obj/structure/foam/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(!metal && prob(max(0, exposed_temperature - 475)))
|
||||
flick("[icon_state]-disolve", src)
|
||||
|
||||
spawn(5)
|
||||
delete()
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
|
||||
/obj/structure/foam/Crossed(var/atom/movable/AM)
|
||||
if(metal)
|
||||
return
|
||||
|
||||
@@ -1016,13 +1017,13 @@ steam.start() -- spawns the effect
|
||||
|
||||
/datum/effect/system/foam_spread/start()
|
||||
spawn(0)
|
||||
var/obj/effect/effect/foam/F = locate() in location
|
||||
var/obj/structure/foam/F = locate() in location
|
||||
if(F)
|
||||
F.amount += amount
|
||||
F.amount = min(F.amount, 27)
|
||||
return
|
||||
|
||||
F = new /obj/effect/effect/foam(location, metal)
|
||||
F = new /obj/structure/foam(location, metal)
|
||||
F.amount = amount
|
||||
|
||||
if(!metal) // don't carry other chemicals if a metal foam
|
||||
@@ -1154,10 +1155,10 @@ steam.start() -- spawns the effect
|
||||
s.start()
|
||||
|
||||
for(var/mob/M in viewers(5, location))
|
||||
to_chat(M, "\red The solution violently explodes.")
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
for(var/mob/M in viewers(1, location))
|
||||
if(prob (50 * amount))
|
||||
to_chat(M, "\red The explosion knocks you down.")
|
||||
to_chat(M, "<span class='warning'>The explosion knocks you down.</span>")
|
||||
M.Weaken(rand(1,5))
|
||||
return
|
||||
else
|
||||
@@ -1180,7 +1181,7 @@ steam.start() -- spawns the effect
|
||||
flash += (round(amount/4) * flashing_factor)
|
||||
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "\red The solution violently explodes.")
|
||||
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
|
||||
|
||||
explosion(location, devastation, heavy, light, flash)
|
||||
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
..()
|
||||
spawn (10)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/datum/effect/system/explosion/set_up(turf/loc)
|
||||
..(loc=loc)
|
||||
@@ -58,6 +57,11 @@
|
||||
var/datum/effect/system/expl_particles/P = new/datum/effect/system/expl_particles()
|
||||
P.set_up(10,location)
|
||||
P.start()
|
||||
|
||||
/datum/effect/system/explosion/smoke
|
||||
|
||||
/datum/effect/system/explosion/smoke/start()
|
||||
..()
|
||||
spawn(5)
|
||||
var/datum/effect/system/harmless_smoke_spread/S = new/datum/effect/system/harmless_smoke_spread()
|
||||
S.set_up(5,0,location,null)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
|
||||
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
|
||||
to_chat(world, "\red Gib list length mismatch!")
|
||||
to_chat(world, "<span class='warning'>Gib list length mismatch!</span>")
|
||||
return
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/gibs/gib = null
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//separate dm since hydro is getting bloated already
|
||||
|
||||
/obj/effect/glowshroom
|
||||
/obj/structure/glowshroom
|
||||
name = "glowshroom"
|
||||
desc = "Mycena Bregprox, a species of mushroom that glows in the dark."
|
||||
anchored = 1
|
||||
@@ -16,32 +16,30 @@
|
||||
var/spreadIntoAdjacentChance = 60
|
||||
var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom
|
||||
|
||||
/obj/effect/glowshroom/glowcap
|
||||
/obj/structure/glowshroom/glowcap
|
||||
name = "glowcap"
|
||||
desc = "Mycena Ruthenia, a species of mushroom that, while it does glow in the dark, is not actually bioluminescent."
|
||||
icon_state = "glowcap"
|
||||
myseed = /obj/item/seeds/glowshroom/glowcap
|
||||
|
||||
/obj/effect/glowshroom/shadowshroom
|
||||
/obj/structure/glowshroom/shadowshroom
|
||||
name = "shadowshroom"
|
||||
desc = "Mycena Umbra, a species of mushroom that emits shadow instead of light."
|
||||
icon_state = "shadowshroom"
|
||||
myseed = /obj/item/seeds/glowshroom/shadowshroom
|
||||
|
||||
/obj/effect/glowshroom/single/Spread()
|
||||
/obj/structure/glowshroom/single/Spread()
|
||||
return
|
||||
|
||||
/obj/effect/glowshroom/examine(mob/user)
|
||||
/obj/structure/glowshroom/examine(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "This is a [generation]\th generation [name]!")
|
||||
|
||||
/obj/effect/glowshroom/Destroy()
|
||||
if(myseed)
|
||||
qdel(myseed)
|
||||
myseed = null
|
||||
/obj/structure/glowshroom/Destroy()
|
||||
QDEL_NULL(myseed)
|
||||
return ..()
|
||||
|
||||
/obj/effect/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats)
|
||||
/obj/structure/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats)
|
||||
..()
|
||||
if(newseed)
|
||||
myseed = newseed.Copy()
|
||||
@@ -76,7 +74,7 @@
|
||||
|
||||
addtimer(src, "Spread", delay, FALSE)
|
||||
|
||||
/obj/effect/glowshroom/proc/Spread()
|
||||
/obj/structure/glowshroom/proc/Spread()
|
||||
var/turf/ownturf = get_turf(src)
|
||||
var/shrooms_planted = 0
|
||||
for(var/i in 1 to myseed.yield)
|
||||
@@ -90,7 +88,7 @@
|
||||
for(var/turf/simulated/floor/earth in view(3,src))
|
||||
if(!ownturf.CanAtmosPass(earth))
|
||||
continue
|
||||
if(spreadsIntoAdjacent || !locate(/obj/effect/glowshroom) in view(1,earth))
|
||||
if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth))
|
||||
possibleLocs += earth
|
||||
CHECK_TICK
|
||||
|
||||
@@ -101,7 +99,7 @@
|
||||
|
||||
var/shroomCount = 0 //hacky
|
||||
var/placeCount = 1
|
||||
for(var/obj/effect/glowshroom/shroom in newLoc)
|
||||
for(var/obj/structure/glowshroom/shroom in newLoc)
|
||||
shroomCount++
|
||||
for(var/wallDir in cardinal)
|
||||
var/turf/isWall = get_step(newLoc,wallDir)
|
||||
@@ -110,7 +108,7 @@
|
||||
if(shroomCount >= placeCount)
|
||||
continue
|
||||
|
||||
var/obj/effect/glowshroom/child = new type(newLoc, myseed, TRUE)
|
||||
var/obj/structure/glowshroom/child = new type(newLoc, myseed, TRUE)
|
||||
child.generation = generation + 1
|
||||
shrooms_planted++
|
||||
|
||||
@@ -121,7 +119,7 @@
|
||||
myseed.yield -= shrooms_planted
|
||||
addtimer(src, "Spread", delay, FALSE)
|
||||
|
||||
/obj/effect/glowshroom/proc/CalcDir(turf/location = loc)
|
||||
/obj/structure/glowshroom/proc/CalcDir(turf/location = loc)
|
||||
var/direction = 16
|
||||
|
||||
for(var/wallDir in cardinal)
|
||||
@@ -129,7 +127,7 @@
|
||||
if(newTurf.density)
|
||||
direction |= wallDir
|
||||
|
||||
for(var/obj/effect/glowshroom/shroom in location)
|
||||
for(var/obj/structure/glowshroom/shroom in location)
|
||||
if(shroom == src)
|
||||
continue
|
||||
if(shroom.floor) //special
|
||||
@@ -153,13 +151,22 @@
|
||||
floor = 1
|
||||
return 1
|
||||
|
||||
/obj/effect/glowshroom/attackby(obj/item/I, mob/user)
|
||||
/obj/structure/glowshroom/attackby(obj/item/I, mob/user)
|
||||
..()
|
||||
var/damage_to_do = I.force
|
||||
if(istype(I, /obj/item/weapon/scythe))
|
||||
var/obj/item/weapon/scythe/S = I
|
||||
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
|
||||
damage_to_do *= 4
|
||||
for(var/obj/structure/glowshroom/G in range(1,src))
|
||||
G.endurance -= damage_to_do
|
||||
G.CheckEndurance()
|
||||
return
|
||||
if(I.damtype != STAMINA)
|
||||
endurance -= I.force
|
||||
endurance -= damage_to_do
|
||||
CheckEndurance()
|
||||
|
||||
/obj/effect/glowshroom/ex_act(severity)
|
||||
/obj/structure/glowshroom/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
@@ -170,11 +177,11 @@
|
||||
if(prob(5))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
/obj/structure/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
endurance -= 5
|
||||
CheckEndurance()
|
||||
|
||||
/obj/effect/glowshroom/proc/CheckEndurance()
|
||||
/obj/structure/glowshroom/proc/CheckEndurance()
|
||||
if(endurance <= 0)
|
||||
qdel(src)
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
wizardstart += loc
|
||||
qdel(src)
|
||||
|
||||
if("avatarspawn")
|
||||
avatarspawn += loc
|
||||
|
||||
if("JoinLate")
|
||||
latejoin += loc
|
||||
qdel(src)
|
||||
@@ -251,7 +254,7 @@
|
||||
new /obj/item/clothing/mask/gas/sexymime(src.loc)
|
||||
new /obj/item/clothing/under/sexymime(src.loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/landmark/ruin
|
||||
var/datum/map_template/ruin/ruin_template
|
||||
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
/obj/item/weapon/wirecutters = 10,
|
||||
/obj/item/weapon/wrench = 40,
|
||||
/obj/item/weapon/relic = 35,
|
||||
/obj/item/weaponcrafting/receiver = 20,
|
||||
/obj/item/clothing/shoes/brown = 30,
|
||||
/obj/item/seeds/ambrosia/deus = 10,
|
||||
/obj/item/seeds/ambrosia = 20,
|
||||
@@ -148,7 +149,7 @@
|
||||
/obj/item/weapon/implanter/storage = 1,
|
||||
/obj/item/toy/cards/deck/syndicate = 2,
|
||||
/obj/item/weapon/storage/secure/briefcase/syndie = 2,
|
||||
"" = 90
|
||||
"" = 70
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/crate_spawner // for ruins
|
||||
|
||||
@@ -28,15 +28,13 @@
|
||||
name = "probably a wall"
|
||||
result = list(
|
||||
/turf/simulated/wall = 9,
|
||||
/obj/structure/falsewall = 1
|
||||
)
|
||||
/obj/structure/falsewall = 1)
|
||||
|
||||
/obj/effect/spawner/random_barrier/floor_probably
|
||||
name = "probably a floor"
|
||||
result = list(
|
||||
/turf/simulated/floor/plasteel = 3,
|
||||
/turf/simulated/wall = 1
|
||||
)
|
||||
/turf/simulated/wall = 1)
|
||||
|
||||
/obj/effect/spawner/random_barrier/obstruction
|
||||
name = "obstruction"
|
||||
@@ -44,12 +42,24 @@
|
||||
/turf/simulated/wall = 1,
|
||||
/obj/structure/falsewall = 1,
|
||||
/obj/structure/barricade/wooden = 1,
|
||||
/obj/machinery/door/airlock/welded = 1
|
||||
)
|
||||
/obj/machinery/door/airlock/welded = 1)
|
||||
|
||||
/obj/effect/spawner/random_barrier/possibly_welded_airlock
|
||||
/obj/effect/spawner/random_barrier/possibly_welded_airlock // these have no access restrictions, so for internal maintenance only
|
||||
name = "possibly welded airlock"
|
||||
result = list(
|
||||
/obj/machinery/door/airlock = 3,
|
||||
/obj/machinery/door/airlock/welded = 1
|
||||
)
|
||||
/obj/machinery/door/airlock/welded = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/grille_often
|
||||
name = "grille often"
|
||||
result = list(
|
||||
/obj/structure/grille = 8,
|
||||
/obj/structure/grille/broken = 4,
|
||||
/turf/simulated/floor/plating = 2)
|
||||
|
||||
/obj/effect/spawner/random_spawners/grille_maybe
|
||||
name = "grille maybe"
|
||||
result = list(
|
||||
/obj/structure/grille = 2,
|
||||
/obj/structure/grille/broken = 2,
|
||||
/turf/simulated/floor/plating = 5)
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/obj/effect/spawner/random_spawners
|
||||
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)
|
||||
|
||||
// This needs to come before the initialization wave 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
|
||||
var/thing_to_place = pickweight(result)
|
||||
if(ispath(thing_to_place, /turf))
|
||||
T.ChangeTurf(thing_to_place)
|
||||
else
|
||||
new thing_to_place(T)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spawner/random_spawners/blood_maybe
|
||||
name = "blood maybe"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 20,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/blood_often
|
||||
name = "blood often"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 5,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/oil_maybe
|
||||
name = "oil maybe"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 20,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/oil_maybe
|
||||
name = "oil often"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 5,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/wall_rusted_probably
|
||||
name = "rusted wall probably"
|
||||
result = list(
|
||||
/turf/simulated/wall = 2,
|
||||
/turf/simulated/wall/rust = 7)
|
||||
|
||||
/obj/effect/spawner/random_spawners/wall_rusted_maybe
|
||||
name = "rusted wall maybe"
|
||||
result = list(
|
||||
/turf/simulated/wall = 7,
|
||||
/turf/simulated/wall/rust = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_left_frequent
|
||||
name = "cobweb left frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/obj/effect/decal/cleanable/cobweb = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_right_frequent
|
||||
name = "cobweb right frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/obj/effect/decal/cleanable/cobweb2 = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_left_rare
|
||||
name = "cobweb left rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/obj/effect/decal/cleanable/cobweb = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_right_rare
|
||||
name = "cobweb right rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/obj/effect/decal/cleanable/cobweb2 = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/dirt_frequent
|
||||
name = "dirt frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/obj/effect/decal/cleanable/dirt = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/dirt_rare
|
||||
name = "dirt rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/obj/effect/decal/cleanable/dirt = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/fungus_maybe
|
||||
name = "rusted wall maybe"
|
||||
result = list(
|
||||
/turf/simulated/wall = 7,
|
||||
/obj/effect/decal/cleanable/fungus = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/fungus_probably
|
||||
name = "rusted wall maybe"
|
||||
result = list(
|
||||
/turf/simulated/wall = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 7)
|
||||
@@ -1,14 +1,19 @@
|
||||
//generic procs copied from obj/effect/alien
|
||||
/obj/effect/spider
|
||||
/obj/structure/spider
|
||||
name = "web"
|
||||
desc = "it's stringy and sticky"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/health = 15
|
||||
var/master_commander = null
|
||||
|
||||
/obj/structure/spider/Destroy()
|
||||
master_commander = null
|
||||
return ..()
|
||||
|
||||
//similar to weeds, but only barfed out by nurses manually
|
||||
/obj/effect/spider/ex_act(severity)
|
||||
/obj/structure/spider/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
@@ -20,7 +25,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user, params)
|
||||
/obj/structure/spider/attackby(var/obj/item/weapon/W, var/mob/user, params)
|
||||
if(W.attack_verb.len)
|
||||
visible_message("<span class='danger'>[user] has [pick(W.attack_verb)] \the [src] with \the [W]!</span>")
|
||||
else
|
||||
@@ -38,28 +43,28 @@
|
||||
health -= damage
|
||||
healthcheck()
|
||||
|
||||
/obj/effect/spider/bullet_act(var/obj/item/projectile/Proj)
|
||||
/obj/structure/spider/bullet_act(var/obj/item/projectile/Proj)
|
||||
..()
|
||||
health -= Proj.damage
|
||||
healthcheck()
|
||||
|
||||
/obj/effect/spider/proc/healthcheck()
|
||||
/obj/structure/spider/proc/healthcheck()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
/obj/structure/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > 300)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
/obj/effect/spider/stickyweb
|
||||
/obj/structure/spider/stickyweb
|
||||
icon_state = "stickyweb1"
|
||||
|
||||
/obj/effect/spider/stickyweb/New()
|
||||
/obj/structure/spider/stickyweb/New()
|
||||
if(prob(50))
|
||||
icon_state = "stickyweb2"
|
||||
|
||||
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
/obj/structure/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0) return 1
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider))
|
||||
return 1
|
||||
@@ -71,33 +76,32 @@
|
||||
return prob(30)
|
||||
return 1
|
||||
|
||||
/obj/effect/spider/eggcluster
|
||||
/obj/structure/spider/eggcluster
|
||||
name = "egg cluster"
|
||||
desc = "They seem to pulse slightly with an inner life"
|
||||
icon_state = "eggs"
|
||||
var/amount_grown = 0
|
||||
var/player_spiders = 0
|
||||
var/faction = list()
|
||||
var/master_commander = null
|
||||
|
||||
/obj/effect/spider/eggcluster/New()
|
||||
/obj/structure/spider/eggcluster/New()
|
||||
pixel_x = rand(3,-3)
|
||||
pixel_y = rand(3,-3)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/effect/spider/eggcluster/process()
|
||||
/obj/structure/spider/eggcluster/process()
|
||||
amount_grown += rand(0,2)
|
||||
if(amount_grown >= 100)
|
||||
var/num = rand(3,12)
|
||||
for(var/i=0, i<num, i++)
|
||||
var/obj/effect/spider/spiderling/S = new /obj/effect/spider/spiderling(src.loc)
|
||||
var/obj/structure/spider/spiderling/S = new /obj/structure/spider/spiderling(src.loc)
|
||||
S.faction = faction
|
||||
S.master_commander = master_commander
|
||||
if(player_spiders)
|
||||
S.player_spiders = 1
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/spiderling
|
||||
/obj/structure/spider/spiderling
|
||||
name = "spiderling"
|
||||
desc = "It never stays still for long."
|
||||
icon_state = "spiderling"
|
||||
@@ -110,30 +114,33 @@
|
||||
var/travelling_in_vent = 0
|
||||
var/player_spiders = 0
|
||||
var/faction = list()
|
||||
var/master_commander = null
|
||||
var/selecting_player = 0
|
||||
|
||||
/obj/effect/spider/spiderling/New()
|
||||
/obj/structure/spider/spiderling/New()
|
||||
pixel_x = rand(6,-6)
|
||||
pixel_y = rand(6,-6)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/effect/spider/spiderling/Bump(atom/user)
|
||||
/obj/structure/spider/spiderling/Destroy()
|
||||
entry_vent = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/spider/spiderling/Bump(atom/user)
|
||||
if(istype(user, /obj/structure/table))
|
||||
src.loc = user.loc
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/effect/spider/spiderling/proc/die()
|
||||
/obj/structure/spider/spiderling/proc/die()
|
||||
visible_message("<span class='alert'>[src] dies!</span>")
|
||||
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/spiderling/healthcheck()
|
||||
/obj/structure/spider/spiderling/healthcheck()
|
||||
if(health <= 0)
|
||||
die()
|
||||
|
||||
/obj/effect/spider/spiderling/process()
|
||||
/obj/structure/spider/spiderling/process()
|
||||
if(travelling_in_vent)
|
||||
if(istype(src.loc, /turf))
|
||||
travelling_in_vent = 0
|
||||
@@ -217,16 +224,16 @@
|
||||
icon_state = "greenshatter"
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/spider/cocoon
|
||||
/obj/structure/spider/cocoon
|
||||
name = "cocoon"
|
||||
desc = "Something wrapped in silky spider web"
|
||||
icon_state = "cocoon1"
|
||||
health = 60
|
||||
|
||||
/obj/effect/spider/cocoon/New()
|
||||
/obj/structure/spider/cocoon/New()
|
||||
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
||||
|
||||
/obj/effect/spider/cocoon/Destroy()
|
||||
/obj/structure/spider/cocoon/Destroy()
|
||||
src.visible_message("<span class='danger'>\The [src] splits open.</span>")
|
||||
for(var/atom/movable/A in contents)
|
||||
A.loc = src.loc
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//TODO: Flash range does nothing currently
|
||||
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0)
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1)
|
||||
src = null //so we don't abort once src is deleted
|
||||
epicenter = get_turf(epicenter)
|
||||
|
||||
@@ -64,9 +64,14 @@
|
||||
M << 'sound/effects/explosionfar.ogg'
|
||||
|
||||
if(heavy_impact_range > 1)
|
||||
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
|
||||
E.set_up(epicenter)
|
||||
E.start()
|
||||
if(smoke)
|
||||
var/datum/effect/system/explosion/smoke/E = new/datum/effect/system/explosion/smoke()
|
||||
E.set_up(epicenter)
|
||||
E.start()
|
||||
else
|
||||
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
|
||||
E.set_up(epicenter)
|
||||
E.start()
|
||||
|
||||
var/x0 = epicenter.x
|
||||
var/y0 = epicenter.y
|
||||
|
||||
@@ -62,7 +62,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
var/hit_reaction_chance = 0 //If you want to have something unrelated to blocking/armour piercing etc. Maybe not needed, but trying to think ahead/allow more freedom
|
||||
|
||||
var/toolspeed = 1 // If this item is a tool, the speed multiplier
|
||||
|
||||
|
||||
/* Species-specific sprites, concept stolen from Paradise//vg/.
|
||||
ex:
|
||||
sprite_sheets = list(
|
||||
@@ -81,6 +81,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
new path(src)
|
||||
|
||||
/obj/item/Destroy()
|
||||
QDEL_NULL(hidden_uplink)
|
||||
if(ismob(loc))
|
||||
var/mob/m = loc
|
||||
m.unEquip(src, 1)
|
||||
@@ -391,22 +392,22 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr))
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
|
||||
to_chat(usr, "\red You can't pick things up!")
|
||||
to_chat(usr, "<span class='warning'>You can't pick things up!</span>")
|
||||
return
|
||||
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
|
||||
to_chat(usr, "\red You can't pick things up!")
|
||||
to_chat(usr, "<span class='warning'>You can't pick things up!</span>")
|
||||
return
|
||||
if(src.anchored) //Object isn't anchored
|
||||
to_chat(usr, "\red You can't pick that up!")
|
||||
to_chat(usr, "<span class='warning'>You can't pick that up!</span>")
|
||||
return
|
||||
if(!usr.hand && usr.r_hand) //Right hand is not full
|
||||
to_chat(usr, "\red Your right hand is full.")
|
||||
to_chat(usr, "<span class='warning'>Your right hand is full.</span>")
|
||||
return
|
||||
if(usr.hand && usr.l_hand) //Left hand is not full
|
||||
to_chat(usr, "\red Your left hand is full.")
|
||||
to_chat(usr, "<span class='warning'>Your left hand is full.</span>")
|
||||
return
|
||||
if(!istype(src.loc, /turf)) //Object is on a turf
|
||||
to_chat(usr, "\red You can't pick that up!")
|
||||
to_chat(usr, "<span class='warning'>You can't pick that up!</span>")
|
||||
return
|
||||
//All checks are done, time to pick it up!
|
||||
usr.UnarmedAttack(src)
|
||||
|
||||
@@ -59,14 +59,14 @@
|
||||
die()
|
||||
return
|
||||
if(contents.len)
|
||||
src.visible_message("\red [src] slams into [hit_atom] spilling its contents!")
|
||||
src.visible_message("<span class='warning'>[src] slams into [hit_atom] spilling its contents!</span>")
|
||||
for(var/obj/item/clothing/mask/cigarette/O in contents)
|
||||
O.loc = src.loc
|
||||
icon_state = icon_empty
|
||||
return ..()
|
||||
|
||||
/obj/item/ashtray/proc/die()
|
||||
src.visible_message("\red [src] shatters spilling its contents!")
|
||||
src.visible_message("<span class='warning'>[src] shatters spilling its contents!</span>")
|
||||
for(var/obj/item/clothing/mask/cigarette/O in contents)
|
||||
O.loc = src.loc
|
||||
icon_state = icon_broken
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
MouseDrop(over_object, src_location, over_location)
|
||||
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
|
||||
if(!ishuman(usr)) return
|
||||
to_chat(usr, "\red You can't fold that up anymore..")
|
||||
to_chat(usr, "<span class='warning'>You can't fold that up anymore..</span>")
|
||||
..()
|
||||
|
||||
attackby(W as obj, mob/user as mob, params)
|
||||
@@ -135,5 +135,5 @@
|
||||
src.locked = !src.locked
|
||||
to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
|
||||
else
|
||||
to_chat(user, "\red Access denied.")
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
return
|
||||
@@ -19,9 +19,7 @@
|
||||
ID.access = get_region_accesses(region_access)
|
||||
|
||||
/obj/item/weapon/door_remote/Destroy()
|
||||
if(ID)
|
||||
qdel(ID)
|
||||
ID = null
|
||||
QDEL_NULL(ID)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/door_remote/attack_self(mob/user)
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
var/mob/owner = null // Carp doesn't attack owner, set when using in hand
|
||||
var/owned = 1 // Boolean, no owner to begin with
|
||||
|
||||
|
||||
/obj/item/toy/carpplushie/dehy_carp/Destroy()
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
// Attack self
|
||||
/obj/item/toy/carpplushie/dehy_carp/attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user) // Anyone can add their fingerprints to it with this
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
|
||||
//moved these here from code/defines/obj/weapon.dm
|
||||
//please preference put stuff where it's easy to find - C
|
||||
|
||||
/obj/item/weapon/autopsy_scanner
|
||||
name = "autopsy scanner"
|
||||
desc = "Extracts information on wounds."
|
||||
icon = 'icons/obj/autopsy_scanner.dmi'
|
||||
icon_state = ""
|
||||
flags = CONDUCT
|
||||
w_class = 1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
var/list/datum/autopsy_data_scanner/wdata = list()
|
||||
var/list/datum/autopsy_data_scanner/chemtraces = list()
|
||||
@@ -28,28 +24,23 @@
|
||||
var/hits = 0
|
||||
var/time_inflicted = 0
|
||||
|
||||
proc/copy()
|
||||
var/datum/autopsy_data/W = new()
|
||||
W.weapon = weapon
|
||||
W.pretend_weapon = pretend_weapon
|
||||
W.damage = damage
|
||||
W.hits = hits
|
||||
W.time_inflicted = time_inflicted
|
||||
return W
|
||||
/datum/autopsy_data/proc/copy()
|
||||
var/datum/autopsy_data/W = new()
|
||||
W.weapon = weapon
|
||||
W.pretend_weapon = pretend_weapon
|
||||
W.damage = damage
|
||||
W.hits = hits
|
||||
W.time_inflicted = time_inflicted
|
||||
return W
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/proc/add_data(var/obj/item/organ/external/O)
|
||||
if(!O.autopsy_data.len && !O.trace_chemicals.len) return
|
||||
/obj/item/weapon/autopsy_scanner/proc/add_data(obj/item/organ/external/O)
|
||||
if(!O.autopsy_data.len && !O.trace_chemicals.len)
|
||||
return
|
||||
|
||||
for(var/V in O.autopsy_data)
|
||||
var/datum/autopsy_data/W = O.autopsy_data[V]
|
||||
|
||||
if(!W.pretend_weapon)
|
||||
/*
|
||||
// the more hits, the more likely it is that we get the right weapon type
|
||||
if(prob(50 + W.hits * 10 + W.damage))
|
||||
*/
|
||||
|
||||
// Buffing this stuff up for now!
|
||||
if(1)
|
||||
W.pretend_weapon = W.weapon
|
||||
else
|
||||
@@ -75,11 +66,8 @@
|
||||
if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V))
|
||||
chemtraces += V
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/verb/print_data()
|
||||
set src in view(usr, 1)
|
||||
set name = "Print Data"
|
||||
if(usr.stat || !(istype(usr,/mob/living/carbon/human)))
|
||||
to_chat(usr, "No.")
|
||||
/obj/item/weapon/autopsy_scanner/attack_self(mob/user)
|
||||
if(!wdata.len && !chemtraces.len)
|
||||
return
|
||||
|
||||
var/scan_data = ""
|
||||
@@ -101,8 +89,10 @@
|
||||
|
||||
var/wname = W.pretend_weapon
|
||||
|
||||
if(wname in weapon_chances) weapon_chances[wname] += W.damage
|
||||
else weapon_chances[wname] = max(W.damage, 1)
|
||||
if(wname in weapon_chances)
|
||||
weapon_chances[wname] += W.damage
|
||||
else
|
||||
weapon_chances[wname] = max(W.damage, 1)
|
||||
total_score+=W.damage
|
||||
|
||||
|
||||
@@ -126,7 +116,8 @@
|
||||
if(30 to 1000)
|
||||
damage_desc = "<font color='red'>severe</font>"
|
||||
|
||||
if(!total_score) total_score = D.organs_scanned.len
|
||||
if(!total_score)
|
||||
total_score = D.organs_scanned.len
|
||||
|
||||
scan_data += "<b>Weapon #[n]</b><br>"
|
||||
if(damaging_weapon)
|
||||
@@ -147,36 +138,19 @@
|
||||
for(var/chemID in chemtraces)
|
||||
scan_data += chemID
|
||||
scan_data += "<br>"
|
||||
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message("\red \the [src] rattles and prints out a sheet of paper.", 1)
|
||||
user.visible_message("<span class='warning'>[src] rattles and prints out a sheet of paper.</span>")
|
||||
|
||||
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
|
||||
sleep(10)
|
||||
|
||||
var/obj/item/weapon/paper/P = new(usr.loc)
|
||||
var/obj/item/weapon/paper/P = new(user.loc)
|
||||
P.name = "Autopsy Data ([target_name])"
|
||||
P.info = "<tt>[scan_data]</tt>"
|
||||
P.overlays += "paper_words"
|
||||
|
||||
if(istype(usr,/mob/living/carbon))
|
||||
// place the item in the usr's hand if possible
|
||||
if(!usr.r_hand)
|
||||
P.loc = usr
|
||||
usr.r_hand = P
|
||||
P.layer = 20
|
||||
P.plane = HUD_PLANE
|
||||
else if(!usr.l_hand)
|
||||
P.loc = usr
|
||||
usr.l_hand = P
|
||||
P.layer = 20
|
||||
P.plane = HUD_PLANE
|
||||
user.put_in_hands(P)
|
||||
|
||||
if(istype(usr,/mob/living/carbon/human))
|
||||
usr:update_inv_l_hand()
|
||||
usr:update_inv_r_hand()
|
||||
|
||||
/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
|
||||
/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M, mob/living/carbon/user)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
@@ -185,23 +159,18 @@
|
||||
|
||||
if(target_name != M.name)
|
||||
target_name = M.name
|
||||
src.wdata = list()
|
||||
src.chemtraces = list()
|
||||
src.timeofdeath = null
|
||||
to_chat(user, "\red A new patient has been registered.. Purging data for previous patient.")
|
||||
wdata.Cut()
|
||||
chemtraces.Cut()
|
||||
timeofdeath = null
|
||||
to_chat(user, "<span class='warning'>A new patient has been registered. Purging data for previous patient.</span>")
|
||||
|
||||
src.timeofdeath = M.timeofdeath
|
||||
timeofdeath = M.timeofdeath
|
||||
|
||||
var/obj/item/organ/external/S = M.get_organ(user.zone_sel.selecting)
|
||||
if(!S)
|
||||
to_chat(usr, "<b>You can't scan this body part.</b>")
|
||||
to_chat(user, "<span class='warning'>You can't scan this body part.</span>")
|
||||
return
|
||||
if(!S.open)
|
||||
to_chat(usr, "<b>You have to cut the limb open first!</b>")
|
||||
return
|
||||
for(var/mob/O in viewers(M))
|
||||
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.name] with \the [src.name]", 1)
|
||||
M.visible_message("<span class='warning'>[user] scans the wounds on [M]'s [S] with [src]</span>")
|
||||
|
||||
src.add_data(S)
|
||||
|
||||
return 1
|
||||
add_data(S)
|
||||
return 1
|
||||
@@ -152,7 +152,7 @@
|
||||
if(M.stat == CONSCIOUS)
|
||||
M.mind_initialize() //give them a mind datum if they don't have one.
|
||||
var/resisted
|
||||
if(!isloyal(M))
|
||||
if(!ismindshielded(M))
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
if(ticker.mode.add_revolutionary(M.mind))
|
||||
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
song.instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/guitar/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
QDEL_NULL(song)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/guitar/attack_self(mob/user as mob)
|
||||
|
||||
@@ -35,9 +35,7 @@
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/Destroy()
|
||||
if(diode)
|
||||
qdel(diode)
|
||||
diode = null
|
||||
QDEL_NULL(diode)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
#define MODKIT_HELMET 1
|
||||
#define MODKIT_SUIT 2
|
||||
#define MODKIT_FULL 3
|
||||
|
||||
/obj/item/device/modkit
|
||||
name = "hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
|
||||
icon_state = "modkit"
|
||||
var/parts = MODKIT_FULL
|
||||
var/target_species = "Human"
|
||||
|
||||
var/list/permitted_types = list(
|
||||
/obj/item/clothing/head/helmet/space/hardsuit,
|
||||
/obj/item/clothing/suit/space/hardsuit
|
||||
)
|
||||
|
||||
/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!target_species)
|
||||
return //it shouldn't be null, okay?
|
||||
|
||||
if(!parts)
|
||||
to_chat(user, "<span class='warning'>This kit has no parts for this modification left.</span>")
|
||||
user.unEquip(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
var/allowed = 0
|
||||
for(var/permitted_type in permitted_types)
|
||||
if(istype(O, permitted_type))
|
||||
allowed = 1
|
||||
|
||||
var/obj/item/clothing/I = O
|
||||
if(!istype(I) || !allowed)
|
||||
to_chat(user, "<span class='notice'>[src] is unable to modify that.</span>")
|
||||
return
|
||||
|
||||
var/excluding = ("exclude" in I.species_restricted)
|
||||
var/in_list = (target_species in I.species_restricted)
|
||||
if(excluding ^ in_list)
|
||||
to_chat(user, "<span class='notice'>[I] is already modified.</span>")
|
||||
return
|
||||
|
||||
if(!isturf(O.loc))
|
||||
to_chat(user, "<span class='warning'>[O] must be safely placed on the ground for modification.</span>")
|
||||
return
|
||||
|
||||
playsound(user.loc, O.usesound, 100, 1)
|
||||
|
||||
user.visible_message("\red [user] opens \the [src] and modifies \the [O].","\red You open \the [src] and modify \the [O].")
|
||||
|
||||
I.refit_for_species(target_species)
|
||||
|
||||
if(istype(I, /obj/item/clothing/head/helmet))
|
||||
parts &= ~MODKIT_HELMET
|
||||
if(istype(I, /obj/item/clothing/suit))
|
||||
parts &= ~MODKIT_SUIT
|
||||
|
||||
if(!parts)
|
||||
user.unEquip(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/device/modkit/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.")
|
||||
|
||||
/obj/item/device/modkit/tajaran
|
||||
name = "Tajaran hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
|
||||
target_species = "Tajaran"
|
||||
|
||||
/obj/item/device/modkit/unathi
|
||||
name = "Unathi hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi."
|
||||
target_species = "Unathi"
|
||||
|
||||
/obj/item/device/modkit/skrell
|
||||
name = "Skrell hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Skrell."
|
||||
target_species = "Skrell"
|
||||
|
||||
/obj/item/device/modkit/vox
|
||||
name = "Vox hardsuit modification kit"
|
||||
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Vox."
|
||||
target_species = "Vox"
|
||||
@@ -32,6 +32,9 @@
|
||||
|
||||
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
|
||||
|
||||
/obj/item/device/multitool/Destroy()
|
||||
buffer = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/multitool/ai_detect
|
||||
var/track_cooldown = 0
|
||||
@@ -56,7 +59,7 @@
|
||||
multitool_detect()
|
||||
icon_state = "[initial(icon_state)][detect_state]"
|
||||
track_cooldown = world.time + track_delay
|
||||
|
||||
|
||||
/obj/item/device/multitool/ai_detect/proc/multitool_detect()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
for(var/mob/living/silicon/ai/AI in ai_list)
|
||||
@@ -76,7 +79,7 @@
|
||||
if(get_dist(our_turf, detect_turf) < rangewarning)
|
||||
detect_state = PROXIMITY_NEAR
|
||||
break
|
||||
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
|
||||
track_delay = 5
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/looking_for_personality = 0
|
||||
var/mob/living/silicon/pai/pai
|
||||
var/list/faction = list("neutral") // The factions the pAI will inherit from the card
|
||||
|
||||
|
||||
/obj/item/device/paicard/syndicate
|
||||
name = "syndicate personal AI device"
|
||||
faction = list("syndicate")
|
||||
@@ -33,9 +33,7 @@
|
||||
pai.ghostize()
|
||||
qdel(pai)
|
||||
pai = null
|
||||
if(radio)
|
||||
qdel(radio)
|
||||
radio = null
|
||||
QDEL_NULL(radio)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/paicard/attack_self(mob/user)
|
||||
@@ -262,7 +260,7 @@
|
||||
var/delta = (world.time / 10) - last_request
|
||||
if(request_cooldown > delta)
|
||||
var/cooldown_time = round(request_cooldown - ((world.time / 10) - last_request), 1)
|
||||
to_chat(usr, "\red The request system is currently offline. Please wait another [cooldown_time] seconds.")
|
||||
to_chat(usr, "<span class='warning'>The request system is currently offline. Please wait another [cooldown_time] seconds.</span>")
|
||||
return
|
||||
last_request = world.time / 10
|
||||
looking_for_personality = 1
|
||||
@@ -330,7 +328,7 @@
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
var/turf/T = get_turf_or_move(loc)
|
||||
for(var/mob/M in viewers(T))
|
||||
M.show_message("\blue [src] flashes a message across its screen, \"Additional personalities available for download.\"", 3, "\blue [src] bleeps electronically.", 2)
|
||||
M.show_message("<span class='notice'>[src] flashes a message across its screen, \"Additional personalities available for download.\"</span>", 3, "<span class='notice'>[src] bleeps electronically.</span>", 2)
|
||||
|
||||
/obj/item/device/paicard/emp_act(severity)
|
||||
for(var/mob/M in src)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
materials = list(MAT_METAL=750)
|
||||
origin_tech = "powerstorage=3;syndicate=5"
|
||||
var/drain_rate = 1600000 // amount of power to drain per tick
|
||||
var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts.
|
||||
var/apc_drain_rate = 50 // Max. amount drained from single APC. In Watts.
|
||||
var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts.
|
||||
var/power_drained = 0 // Amount of power drained.
|
||||
var/max_power = 1e10 // Detonation point.
|
||||
@@ -27,6 +27,8 @@
|
||||
/obj/item/device/powersink/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
processing_power_items.Remove(src)
|
||||
PN = null
|
||||
attached = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user)
|
||||
@@ -110,10 +112,10 @@
|
||||
if(istype(T.master, /obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = T.master
|
||||
if(A.operating && A.cell)
|
||||
var/cur_charge = A.cell.charge / CELLRATE
|
||||
var/drain_val = min(apc_drain_rate, cur_charge)
|
||||
A.cell.use(drain_val * CELLRATE)
|
||||
drained += drain_val
|
||||
A.cell.charge = max(0, A.cell.charge - apc_drain_rate)
|
||||
drained += apc_drain_rate
|
||||
if(A.charging == 2) // If the cell was full
|
||||
A.charging = 1 // It's no longer full
|
||||
power_drained += drained
|
||||
return 1
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
syndicate = 1
|
||||
to_chat(user, "\blue The This beacon now only be locked on to by emagged teleporters!")
|
||||
to_chat(user, "<span class='notice'>The This beacon now only be locked on to by emagged teleporters!</span>")
|
||||
|
||||
/obj/item/device/radio/beacon/hear_talk()
|
||||
return
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
|
||||
if(user)
|
||||
to_chat(user, "\blue Locked In")
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
||||
qdel(src)
|
||||
@@ -71,7 +71,7 @@
|
||||
|
||||
/obj/item/device/radio/beacon/syndicate/bomb/attack_self(mob/user as mob)
|
||||
if(user)
|
||||
to_chat(user, "\blue Locked In")
|
||||
to_chat(user, "<span class='notice'>Locked In</span>")
|
||||
new /obj/machinery/syndicatebomb( user.loc )
|
||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
||||
qdel(src)
|
||||
|
||||
@@ -32,12 +32,8 @@
|
||||
recalculateChannels(1)
|
||||
|
||||
/obj/item/device/radio/headset/Destroy()
|
||||
if(keyslot1)
|
||||
qdel(keyslot1)
|
||||
if(keyslot2)
|
||||
qdel(keyslot2)
|
||||
keyslot1 = null
|
||||
keyslot2 = null
|
||||
QDEL_NULL(keyslot1)
|
||||
QDEL_NULL(keyslot2)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/radio/headset/list_channels(var/mob/user)
|
||||
@@ -63,7 +59,7 @@
|
||||
return RADIO_CONNECTION_FAIL
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/radio/headset/is_listening()
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
@@ -71,7 +67,7 @@
|
||||
return ..()
|
||||
else if(isanimal(loc) || isAI(loc))
|
||||
return ..()
|
||||
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/radio/headset/alt
|
||||
|
||||
@@ -30,7 +30,6 @@ var/global/list/default_medbay_channels = list(
|
||||
var/frequency = PUB_FREQ //common chat
|
||||
var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies
|
||||
var/canhear_range = 3 // the range which mobs can hear this radio from
|
||||
var/obj/item/device/radio/patch_link = null
|
||||
var/datum/wires/radio/wires = null
|
||||
var/b_stat = 0
|
||||
var/broadcasting = 0
|
||||
@@ -54,14 +53,14 @@ var/global/list/default_medbay_channels = list(
|
||||
|
||||
var/list/internal_channels
|
||||
|
||||
/obj/item/device/radio
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/list/datum/radio_frequency/secure_radio_connections = new
|
||||
|
||||
proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
/obj/item/device/radio/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
|
||||
|
||||
/obj/item/device/radio/New()
|
||||
@@ -74,14 +73,13 @@ var/global/list/default_medbay_channels = list(
|
||||
global_radios |= src
|
||||
|
||||
/obj/item/device/radio/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
QDEL_NULL(wires)
|
||||
if(radio_controller)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
for(var/ch_name in channels)
|
||||
radio_controller.remove_object(src, radiochannels[ch_name])
|
||||
patch_link = null
|
||||
global_radios -= src
|
||||
follow_target = null
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -271,7 +269,7 @@ var/global/list/default_medbay_channels = list(
|
||||
/mob/living/automatedannouncer/Destroy()
|
||||
if(lifetime_timer)
|
||||
deltimer(lifetime_timer)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/mob/living/automatedannouncer/proc/autocleanup()
|
||||
log_runtime(EXCEPTION("An announcer somehow managed to outlive the radio! Deleting!"), src, list("Message: '[message]'"))
|
||||
@@ -315,7 +313,7 @@ var/global/list/default_medbay_channels = list(
|
||||
actually transmit large mass. Headsets are the only radio devices capable
|
||||
of sending subspace transmissions to the Communications Satellite.
|
||||
|
||||
A headset sends a signal to a subspace listener/reciever elsewhere in space,
|
||||
A headset sends a signal to a subspace listener/receiver elsewhere in space,
|
||||
the signal gets processed and logged, and an audible transmission gets sent
|
||||
to each individual headset.
|
||||
*/
|
||||
@@ -579,9 +577,9 @@ var/global/list/default_medbay_channels = list(
|
||||
. = ..(user, distance)
|
||||
if((in_range(src, user) || loc == user))
|
||||
if(b_stat)
|
||||
user.show_message("\blue \the [src] can be attached and modified!")
|
||||
user.show_message("<span class='notice'>\the [src] can be attached and modified!</span>")
|
||||
else
|
||||
user.show_message("\blue \the [src] can not be modified or attached!")
|
||||
user.show_message("<span class='notice'>\the [src] can not be modified or attached!</span>")
|
||||
return .
|
||||
|
||||
/obj/item/device/radio/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
@@ -592,9 +590,9 @@ var/global/list/default_medbay_channels = list(
|
||||
b_stat = !( b_stat )
|
||||
if(!istype(src, /obj/item/device/radio/beacon))
|
||||
if(b_stat)
|
||||
user.show_message("\blue The radio can now be attached and modified!")
|
||||
user.show_message("<span class='notice'>The radio can now be attached and modified!</span>")
|
||||
else
|
||||
user.show_message("\blue The radio can no longer be modified or attached!")
|
||||
user.show_message("<span class='notice'>The radio can no longer be modified or attached!</span>")
|
||||
updateDialog()
|
||||
//Foreach goto(83)
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -128,24 +128,24 @@ REAGENT SCANNER
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
|
||||
to_chat(user, text("\red You try to analyze the floor's vitals!"))
|
||||
to_chat(user, text("<span class='warning'>You try to analyze the floor's vitals!</span>"))
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
|
||||
user.show_message(text("\blue Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: [0]-[0]-[0]-[0]"), 1)
|
||||
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
|
||||
user.show_message("\blue Body Temperature: ???", 1)
|
||||
O.show_message(text("<span class='warning'>[user] has analyzed the floor's vitals!</span>"), 1)
|
||||
user.show_message(text("<span class='notice'>Analyzing Results for The floor:\n\t Overall Status: Healthy</span>"), 1)
|
||||
user.show_message(text("<span class='notice'>\t Damage Specifics: [0]-[0]-[0]-[0]</span>"), 1)
|
||||
user.show_message("<span class='notice'>Key: Suffocation/Toxin/Burns/Brute</span>", 1)
|
||||
user.show_message("<span class='notice'>Body Temperature: ???</span>", 1)
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>","<span class='notice'> You have analyzed [M]'s vitals.</span>")
|
||||
|
||||
if(!istype(M,/mob/living/carbon/human) || M.isSynthetic())
|
||||
//these sensors are designed for organic life
|
||||
user.show_message("\blue Analyzing Results for ERROR:\n\t Overall Status: ERROR")
|
||||
user.show_message("<span class='notice'>Analyzing Results for ERROR:\n\t Overall Status: ERROR</span>")
|
||||
user.show_message("\t Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font>", 1)
|
||||
user.show_message("\t Damage Specifics: <font color='blue'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font>")
|
||||
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
|
||||
user.show_message("\red <b>Warning: Blood Level ERROR: --% --cl.\blue Type: ERROR")
|
||||
user.show_message("\blue Subject's pulse: <font color='red'>-- bpm.</font>")
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
user.show_message("<span class='warning'><b>Warning: Blood Level ERROR: --% --cl.</span><span class='notice'>Type: ERROR</span>")
|
||||
user.show_message("<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>")
|
||||
return
|
||||
|
||||
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
|
||||
@@ -155,34 +155,34 @@ REAGENT SCANNER
|
||||
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
OX = fake_oxy > 50 ? "<b>[fake_oxy]</b>" : fake_oxy
|
||||
user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: dead")
|
||||
user.show_message("<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: dead</span>")
|
||||
else
|
||||
user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"]")
|
||||
user.show_message("<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[M.health]% healthy"]</span>")
|
||||
user.show_message("\t Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font>", 1)
|
||||
user.show_message("\t Damage Specifics: <font color='blue'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font>")
|
||||
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
|
||||
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span>", 1)
|
||||
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
user.show_message("\blue Time of Death: [worldtime2text(M.timeofdeath)]")
|
||||
user.show_message("<span class='notice'>Time of Death: [worldtime2text(M.timeofdeath)]</span>")
|
||||
if(istype(M, /mob/living/carbon/human) && mode == 1)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
user.show_message("\blue Localized Damage, Brute/Burn:",1)
|
||||
user.show_message("<span class='notice'>Localized Damage, Brute/Burn:</span>",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/obj/item/organ/external/org in damaged)
|
||||
user.show_message(text("\blue \t []: [][]\blue - []", \
|
||||
user.show_message(text("<span class='notice'>\t []: [][] - []</span>", \
|
||||
capitalize(org.name), \
|
||||
(org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \
|
||||
(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" :0, \
|
||||
(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":"\t", \
|
||||
(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" :0),1)
|
||||
else
|
||||
user.show_message("\blue \t Limbs are OK.",1)
|
||||
user.show_message("<span class='notice'>\t Limbs are OK.</span>",1)
|
||||
|
||||
OX = M.getOxyLoss() > 50 ? "<font color='blue'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
|
||||
TX = M.getToxLoss() > 50 ? "<font color='green'><b>Dangerous amount of toxins detected</b></font>" : "Subject bloodstream toxin level minimal"
|
||||
BU = M.getFireLoss() > 50 ? "<font color='#FFA500'><b>Severe burn damage detected</b></font>" : "Subject burn injury status O.K"
|
||||
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
OX = fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal"
|
||||
OX = fake_oxy > 50 ? "<span class='danger'>Severe oxygen deprivation detected</span>" : "<span class='notice'>Subject bloodstream oxygen level normal</span>"
|
||||
user.show_message("[OX] | [TX] | [BU] | [BR]")
|
||||
if(istype(M, /mob/living/carbon))
|
||||
if(upgraded)
|
||||
@@ -195,13 +195,13 @@ REAGENT SCANNER
|
||||
if(M.getCloneLoss())
|
||||
user.show_message("<span class='warning'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>")
|
||||
if(M.has_brain_worms())
|
||||
user.show_message("\red Subject suffering from aberrant brain activity. Recommend further scanning.")
|
||||
user.show_message("<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span>")
|
||||
else if(M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && !M.get_int_organ(/obj/item/organ/internal/brain))
|
||||
user.show_message("\red Subject is brain dead.")
|
||||
user.show_message("<span class='warning'>Subject is brain dead.</span>")
|
||||
else if(M.getBrainLoss() >= 60)
|
||||
user.show_message("\red Severe brain damage detected. Subject likely to have mental retardation.")
|
||||
user.show_message("<span class='warning'>Severe brain damage detected. Subject likely to have mental retardation.</span>")
|
||||
else if(M.getBrainLoss() >= 10)
|
||||
user.show_message("\red Significant brain damage detected. Subject may have had a concussion.")
|
||||
user.show_message("<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span>")
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/name in H.organs_by_name)
|
||||
@@ -211,20 +211,20 @@ REAGENT SCANNER
|
||||
var/limb = e.name
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
if((e.limb_name in list("l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot")) && !(e.status & ORGAN_SPLINTED))
|
||||
user.show_message("\red Unsecured fracture in subject [limb]. Splinting recommended for transport.")
|
||||
user.show_message("<span class='warning'>Unsecured fracture in subject [limb]. Splinting recommended for transport.</span>")
|
||||
if(e.has_infected_wound())
|
||||
user.show_message("\red Infected wound detected in subject [limb]. Disinfection recommended.")
|
||||
user.show_message("<span class='warning'>Infected wound detected in subject [limb]. Disinfection recommended.</span>")
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
var/obj/item/organ/external/e = H.organs_by_name[name]
|
||||
if(!e)
|
||||
continue
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
|
||||
user.show_message(text("<span class='warning'>Bone fractures detected. Advanced scanner required for location.</span>"), 1)
|
||||
break
|
||||
for(var/obj/item/organ/external/e in H.organs)
|
||||
for(var/datum/wound/W in e.wounds) if(W.internal)
|
||||
user.show_message(text("\red Internal bleeding detected. Advanced scanner required for location."), 1)
|
||||
user.show_message(text("<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span>"), 1)
|
||||
break
|
||||
if(H.vessel)
|
||||
var/blood_type = H.get_blood_name()
|
||||
@@ -232,17 +232,17 @@ REAGENT SCANNER
|
||||
var/blood_percent = blood_volume / BLOOD_VOLUME_NORMAL
|
||||
blood_percent *= 100
|
||||
if(blood_volume <= 500)
|
||||
user.show_message("\red <b>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
|
||||
user.show_message("<span class='warning'><b>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl</span>")
|
||||
else if(blood_volume <= 336)
|
||||
user.show_message("\red <b>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
|
||||
user.show_message("<span class='warning'><b>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl</span>")
|
||||
else
|
||||
user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
|
||||
user.show_message("<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl</span>")
|
||||
if(H.species.exotic_blood)
|
||||
user.show_message("<span class='warning'>Subject possesses exotic blood.</span>")
|
||||
user.show_message("<span class='warning'>Exotic blood type: [blood_type].</span>")
|
||||
if(H.heart_attack && H.stat != DEAD)
|
||||
user.show_message("<span class='userdanger'>Subject suffering from heart attack: Apply defibrillator immediately.</span>")
|
||||
user.show_message("\blue Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font>")
|
||||
user.show_message("<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span>")
|
||||
var/implant_detect
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs)
|
||||
if(CI.status == ORGAN_ROBOT)
|
||||
@@ -253,7 +253,7 @@ REAGENT SCANNER
|
||||
if(H.gene_stability < 40)
|
||||
user.show_message("<span class='userdanger'>Subject's genes are quickly breaking down!</span>")
|
||||
else if(H.gene_stability < 70)
|
||||
user.show_message("<span class='danger'>Subject's genes are showing signs of spontenous breakdown.</span>")
|
||||
user.show_message("<span class='danger'>Subject's genes are showing signs of spontaneous breakdown.</span>")
|
||||
else if(H.gene_stability < 85)
|
||||
user.show_message("<span class='warning'>Subject's genes are showing minor signs of instability.</span>")
|
||||
else
|
||||
@@ -279,7 +279,7 @@ REAGENT SCANNER
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You install the upgrade in the [src].</span>")
|
||||
overlays += "advanced"
|
||||
playsound(src.loc, usesound, 50, 1)
|
||||
playsound(loc, W.usesound, 50, 1)
|
||||
upgraded = 1
|
||||
qdel(W)
|
||||
|
||||
@@ -531,5 +531,5 @@ REAGENT SCANNER
|
||||
user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]", 1)
|
||||
user.show_message("Genetic destability: [T.mutation_chance]% chance of mutation on splitting", 1)
|
||||
if(T.cores > 1)
|
||||
user.show_message("Anomalious slime core amount detected", 1)
|
||||
user.show_message("Anomalous slime core amount detected", 1)
|
||||
user.show_message("Growth progress: [T.amount_grown]/10", 1)
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
crew_monitor = new(src)
|
||||
|
||||
/obj/item/device/sensor_device/Destroy()
|
||||
qdel(crew_monitor)
|
||||
crew_monitor = null
|
||||
QDEL_NULL(crew_monitor)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/sensor_device/attack_self(mob/user as mob)
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/taperecorder/Destroy()
|
||||
if(mytape)
|
||||
qdel(mytape)
|
||||
mytape = null
|
||||
QDEL_NULL(mytape)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/taperecorder/examine(mob/user)
|
||||
|
||||
@@ -13,15 +13,9 @@
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
|
||||
/obj/item/device/transfer_valve/Destroy()
|
||||
if(tank_one)
|
||||
qdel(tank_one)
|
||||
tank_one = null
|
||||
if(tank_two)
|
||||
qdel(tank_two)
|
||||
tank_two = null
|
||||
if(attached_device)
|
||||
qdel(attached_device)
|
||||
attached_device = null
|
||||
QDEL_NULL(tank_one)
|
||||
QDEL_NULL(tank_two)
|
||||
QDEL_NULL(attached_device)
|
||||
attacher = null
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@
|
||||
song.instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/violin/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
QDEL_NULL(song)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/violin/initialize()
|
||||
|
||||
@@ -26,6 +26,6 @@
|
||||
|
||||
/obj/item/device/hailer/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
to_chat(user, "\red You overload \the [src]'s voice synthesizer.")
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
emagged = 1
|
||||
|
||||
|
||||
@@ -12,9 +12,7 @@
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
|
||||
/obj/item/latexballon/Destroy()
|
||||
if(air_contents)
|
||||
qdel(air_contents)
|
||||
air_contents = null
|
||||
QDEL_NULL(air_contents)
|
||||
return ..()
|
||||
|
||||
/obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank, mob/user)
|
||||
|
||||
@@ -66,13 +66,13 @@ var/list/tape_roll_applications = list()
|
||||
/obj/item/taperoll/attack_self(mob/user as mob)
|
||||
if(icon_state == "[icon_base]_start")
|
||||
start = get_turf(src)
|
||||
to_chat(usr, "\blue You place the first end of the [src].")
|
||||
to_chat(usr, "<span class='notice'>You place the first end of the [src].</span>")
|
||||
icon_state = "[icon_base]_stop"
|
||||
else
|
||||
icon_state = "[icon_base]_start"
|
||||
end = get_turf(src)
|
||||
if(start.y != end.y && start.x != end.x || start.z != end.z)
|
||||
to_chat(usr, "\blue [src] can only be laid horizontally or vertically.")
|
||||
to_chat(usr, "<span class='notice'>[src] can only be laid horizontally or vertically.</span>")
|
||||
return
|
||||
|
||||
var/turf/cur = start
|
||||
@@ -101,7 +101,7 @@ var/list/tape_roll_applications = list()
|
||||
break
|
||||
cur = get_step_towards(cur,end)
|
||||
if(!can_place)
|
||||
to_chat(usr, "\blue You can't run \the [src] through that!")
|
||||
to_chat(usr, "<span class='notice'>You can't run \the [src] through that!</span>")
|
||||
return
|
||||
|
||||
cur = start
|
||||
@@ -115,7 +115,7 @@ var/list/tape_roll_applications = list()
|
||||
P.icon_state = "[P.icon_base]_[dir]"
|
||||
cur = get_step_towards(cur,end)
|
||||
//is_blocked_turf(var/turf/T)
|
||||
to_chat(usr, "\blue You finish placing the [src].")//Git Test
|
||||
to_chat(usr, "<span class='notice'>You finish placing the [src].</span>")//Git Test
|
||||
|
||||
|
||||
/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity)
|
||||
@@ -128,7 +128,7 @@ var/list/tape_roll_applications = list()
|
||||
P.loc = locate(T.x,T.y,T.z)
|
||||
P.icon_state = "[src.icon_base]_door"
|
||||
P.layer = 3.2
|
||||
to_chat(user, "\blue You finish placing the [src].")
|
||||
to_chat(user, "<span class='notice'>You finish placing the [src].</span>")
|
||||
|
||||
if(istype(A, /turf/simulated/floor) ||istype(A, /turf/unsimulated/floor))
|
||||
var/turf/F = A
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
/mob/living/simple_animal/hostile/creature,/mob/living/simple_animal/hostile/pirate/ranged,
|
||||
/mob/living/simple_animal/hostile/hivebot,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/pirate)
|
||||
|
||||
visible_message("\red Something falls out of the [src]!")
|
||||
visible_message("<span class='warning'>Something falls out of the [src]!</span>")
|
||||
var/obj/item/weapon/grenade/clusterbuster/C = new(src.loc)
|
||||
C.prime()
|
||||
spawn(10)
|
||||
|
||||
@@ -160,9 +160,9 @@
|
||||
src.chest = W
|
||||
src.updateicon()
|
||||
else if(!W:wires)
|
||||
to_chat(user, "\blue You need to attach wires to it first!")
|
||||
to_chat(user, "<span class='notice'>You need to attach wires to it first!</span>")
|
||||
else
|
||||
to_chat(user, "\blue You need to attach a cell to it first!")
|
||||
to_chat(user, "<span class='notice'>You need to attach a cell to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/head))
|
||||
if(src.head) return
|
||||
@@ -172,7 +172,7 @@
|
||||
src.head = W
|
||||
src.updateicon()
|
||||
else
|
||||
to_chat(user, "\blue You need to attach a flash to it first!")
|
||||
to_chat(user, "<span class='notice'>You need to attach a flash to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
if(check_completion())
|
||||
@@ -184,10 +184,10 @@
|
||||
var/obj/item/device/mmi/M = W
|
||||
if(check_completion())
|
||||
if(!istype(loc,/turf))
|
||||
to_chat(user, "\red You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.")
|
||||
to_chat(user, "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>")
|
||||
return
|
||||
if(!M.brainmob)
|
||||
to_chat(user, "\red Sticking an empty [W] into the frame would sort of defeat the purpose.")
|
||||
to_chat(user, "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
|
||||
if(!M.brainmob.key)
|
||||
@@ -206,15 +206,15 @@
|
||||
return
|
||||
|
||||
if(M.brainmob.stat == DEAD)
|
||||
to_chat(user, "\red Sticking a dead [W] into the frame would sort of defeat the purpose.")
|
||||
to_chat(user, "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
|
||||
if(M.brainmob.mind in ticker.mode.head_revolutionaries)
|
||||
to_chat(user, "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [W].")
|
||||
to_chat(user, "<span class='warning'>The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [W].</span>")
|
||||
return
|
||||
|
||||
if(jobban_isbanned(M.brainmob, "Cyborg") || jobban_isbanned(M.brainmob,"nonhumandept"))
|
||||
to_chat(user, "\red This [W] does not seem to fit.")
|
||||
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
|
||||
@@ -338,45 +338,45 @@
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(src.cell)
|
||||
to_chat(user, "\blue You have already inserted a cell!")
|
||||
to_chat(user, "<span class='notice'>You have already inserted a cell!</span>")
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.cell = W
|
||||
to_chat(user, "\blue You insert the cell!")
|
||||
to_chat(user, "<span class='notice'>You insert the cell!</span>")
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
if(src.wires)
|
||||
to_chat(user, "\blue You have already inserted wire!")
|
||||
to_chat(user, "<span class='notice'>You have already inserted wire!</span>")
|
||||
return
|
||||
else
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
coil.use(1)
|
||||
src.wires = 1.0
|
||||
to_chat(user, "\blue You insert the wire!")
|
||||
to_chat(user, "<span class='notice'>You insert the wire!</span>")
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
to_chat(user, "\red How do you propose to do that?")
|
||||
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
|
||||
return
|
||||
else if(src.flash1 && src.flash2)
|
||||
to_chat(user, "\blue You have already inserted the eyes!")
|
||||
to_chat(user, "<span class='notice'>You have already inserted the eyes!</span>")
|
||||
return
|
||||
else if(src.flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash2 = W
|
||||
to_chat(user, "\blue You insert the flash into the eye socket!")
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash1 = W
|
||||
to_chat(user, "\blue You insert the flash into the eye socket!")
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
|
||||
to_chat(user, "\blue You install some manipulators and modify the head, creating a functional spider-bot!")
|
||||
to_chat(user, "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>")
|
||||
new /mob/living/simple_animal/spiderbot(get_turf(loc))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
@@ -387,9 +387,9 @@
|
||||
/obj/item/robot_parts/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W,/obj/item/weapon/card/emag))
|
||||
if(sabotaged)
|
||||
to_chat(user, "\red [src] is already sabotaged!")
|
||||
to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
|
||||
else
|
||||
to_chat(user, "\red You slide [W] into the dataport on [src] and short out the safeties.")
|
||||
to_chat(user, "<span class='warning'>You slide [W] into the dataport on [src] and short out the safeties.</span>")
|
||||
sabotaged = 1
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
if(hp <= 0)
|
||||
for(var/mob/O in oviewers())
|
||||
if((O.client && !( O.blinded )))
|
||||
to_chat(O, "\red [src] breaks into tiny pieces and collapses!")
|
||||
to_chat(O, "<span class='warning'>[src] breaks into tiny pieces and collapses!</span>")
|
||||
qdel(src)
|
||||
|
||||
// Create a temporary object to represent the damage
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
heal_burn = 12
|
||||
|
||||
|
||||
//Splits//
|
||||
//Splints//
|
||||
|
||||
|
||||
/obj/item/stack/medical/splint
|
||||
@@ -203,14 +203,14 @@
|
||||
to_chat(user, "<span class='notice'>You remove the splint from [H]'s [limb].</span>")
|
||||
return
|
||||
if(M == user)
|
||||
user.visible_message("<span class='notice'>[user] starts to apply [src] to [H]'s [limb].</span>", \
|
||||
"<span class='notice'>You start to apply [src] to [H]'s [limb].</span>", \
|
||||
user.visible_message("<span class='notice'>[user] starts to apply [src] to their [limb].</span>", \
|
||||
"<span class='notice'>You start to apply [src] to your [limb].</span>", \
|
||||
"<span class='notice'>You hear something being wrapped.</span>")
|
||||
if(!do_mob(user, H, self_delay))
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='green'>[user] applies [src] to their [limb].</span>", \
|
||||
"<span class='green'>You apply [src] to your [limb].</span>", \
|
||||
user.visible_message("<span class='green'>[user] applies [src] to [H]'s [limb].</span>", \
|
||||
"<span class='green'>You apply [src] to [H]'s [limb].</span>", \
|
||||
"<span class='green'>You hear something being wrapped.</span>")
|
||||
|
||||
affecting.status |= ORGAN_SPLINTED
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
origin_tech = "materials=1"
|
||||
var/created_window = /obj/structure/window/basic
|
||||
var/full_window = /obj/structure/window/full/basic
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
|
||||
/obj/item/stack/sheet/glass/fifty
|
||||
amount = 50
|
||||
@@ -37,7 +38,7 @@
|
||||
if(istype(W,/obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/CC = W
|
||||
if(CC.amount < 5)
|
||||
to_chat(user, "\b There is not enough wire in this coil. You need 5 lengths.")
|
||||
to_chat(user, "<b>There is not enough wire in this coil. You need 5 lengths.</b>")
|
||||
return
|
||||
CC.use(5)
|
||||
to_chat(user, "<span class='notice'>You attach wire to the [name].</span>")
|
||||
@@ -155,6 +156,7 @@
|
||||
origin_tech = "materials=2"
|
||||
var/created_window = /obj/structure/window/reinforced
|
||||
var/full_window = /obj/structure/window/full/reinforced
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
|
||||
/obj/item/stack/sheet/rglass/cyborg
|
||||
materials = list()
|
||||
|
||||
@@ -22,6 +22,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
new /datum/stack_recipe("barber chair", /obj/structure/stool/bed/chair/barber, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("wheelchair", /obj/structure/stool/bed/chair/wheelchair, 15, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("bed", /obj/structure/stool/bed, 2, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("psychiatrist bed", /obj/structure/stool/psychbed, 5, one_per_turf = 1, on_floor = 1),
|
||||
null,
|
||||
new /datum/stack_recipe_list("office chairs",list(
|
||||
new /datum/stack_recipe("dark office chair", /obj/structure/stool/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1),
|
||||
@@ -100,6 +101,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
throwforce = 10.0
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
merge_type = /obj/item/stack/sheet/metal
|
||||
|
||||
/obj/item/stack/sheet/metal/cyborg
|
||||
materials = list()
|
||||
@@ -136,6 +138,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list(
|
||||
throwforce = 10.0
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=2"
|
||||
merge_type = /obj/item/stack/sheet/plasteel
|
||||
|
||||
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
|
||||
recipes = plasteel_recipes
|
||||
@@ -171,6 +174,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list(
|
||||
icon_state = "sheet-wood"
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
burn_state = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/wood
|
||||
|
||||
/obj/item/stack/sheet/wood/New(var/loc, var/amount=null)
|
||||
recipes = wood_recipes
|
||||
@@ -208,6 +212,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \
|
||||
burn_state = FLAMMABLE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
merge_type = /obj/item/stack/sheet/cloth
|
||||
|
||||
/obj/item/stack/sheet/cloth/New(loc, amount=null)
|
||||
recipes = cloth_recipes
|
||||
@@ -240,6 +245,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list (
|
||||
icon_state = "sheet-card"
|
||||
origin_tech = "materials=1"
|
||||
burn_state = FLAMMABLE
|
||||
merge_type = /obj/item/stack/sheet/cardboard
|
||||
|
||||
/obj/item/stack/sheet/cardboard/New(var/loc, var/amt = null)
|
||||
recipes = cardboard_recipes
|
||||
@@ -251,7 +257,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list (
|
||||
|
||||
var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
|
||||
new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("runed girder", /obj/structure/cultgirder, 1, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("pylon", /obj/structure/cult/functional/pylon, 3, time = 40, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("forge", /obj/structure/cult/functional/forge, 5, time = 40, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("archives", /obj/structure/cult/functional/tome, 2, time = 40, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -265,6 +271,7 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \
|
||||
icon_state = "sheet-runed"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
sheettype = "runed"
|
||||
merge_type = /obj/item/stack/sheet/runed_metal
|
||||
|
||||
/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user)
|
||||
if(!iscultist(user))
|
||||
@@ -320,6 +327,7 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \
|
||||
icon_state = "sheet-plastic"
|
||||
throwforce = 7
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
merge_type = /obj/item/stack/sheet/plastic
|
||||
|
||||
/obj/item/stack/sheet/plastic/New()
|
||||
recipes = plastic_recipes
|
||||
|
||||
@@ -14,11 +14,14 @@
|
||||
var/singular_name
|
||||
var/amount = 1
|
||||
var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount
|
||||
var/merge_type = null // This path and its children should merge with this stack, defaults to src.type
|
||||
|
||||
/obj/item/stack/New(var/loc, var/amt = null)
|
||||
..()
|
||||
if(amt != null) //Allow for stacks with the amount=0
|
||||
amount = amt
|
||||
if(!merge_type)
|
||||
merge_type = type
|
||||
|
||||
/obj/item/stack/Destroy()
|
||||
if(usr && usr.machine == src)
|
||||
@@ -232,7 +235,7 @@
|
||||
|
||||
/obj/item/stack/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, type))
|
||||
if(istype(W, merge_type))
|
||||
var/obj/item/stack/S = W
|
||||
if(S.amount >= max_amount)
|
||||
return 1
|
||||
|
||||
@@ -136,6 +136,7 @@
|
||||
icon_state = "tile_space"
|
||||
turf_type = /turf/simulated/floor/fakespace
|
||||
burn_state = FLAMMABLE
|
||||
merge_type = /obj/item/stack/tile/fakespace
|
||||
|
||||
/obj/item/stack/tile/fakespace/loaded
|
||||
amount = 30
|
||||
@@ -148,6 +149,7 @@
|
||||
icon_state = "tile_noslip"
|
||||
turf_type = /turf/simulated/floor/noslip
|
||||
origin_tech = "materials=3"
|
||||
merge_type = /obj/item/stack/tile/noslip
|
||||
|
||||
/obj/item/stack/tile/noslip/loaded
|
||||
amount = 20
|
||||
|
||||
@@ -367,7 +367,7 @@ AI MODULES
|
||||
log_law_changes(target, sender)
|
||||
|
||||
lawchanges.Add("The law is '[newFreeFormLaw]'")
|
||||
to_chat(target, "\red BZZZZT")
|
||||
to_chat(target, "<span class='warning'>BZZZZT</span>")
|
||||
var/law = "[newFreeFormLaw]"
|
||||
target.add_ion_law(law)
|
||||
target.show_laws()
|
||||
|
||||
@@ -59,8 +59,7 @@ RCD
|
||||
return
|
||||
|
||||
/obj/item/weapon/rcd/Destroy()
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
QDEL_NULL(spark_system)
|
||||
rcd_list -= src
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -62,9 +62,7 @@
|
||||
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
|
||||
|
||||
/obj/item/weapon/twohanded/rcl/Destroy()
|
||||
if(loaded)
|
||||
qdel(loaded)
|
||||
loaded = null
|
||||
QDEL_NULL(loaded)
|
||||
last = null
|
||||
active = 0
|
||||
return ..()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
burn_state = FLAMMABLE
|
||||
singular_name = "credit"
|
||||
max_amount = 1000000
|
||||
merge_type = /obj/item/stack/spacecash
|
||||
|
||||
/obj/item/stack/spacecash/New(loc, amt = null)
|
||||
..()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
return
|
||||
if(armed)
|
||||
armed = 0
|
||||
to_chat(user, "\blue You disarm \the [src].")
|
||||
to_chat(user, "<span class='notice'>You disarm \the [src].</span>")
|
||||
return
|
||||
timing = !timing
|
||||
if(timing)
|
||||
@@ -30,7 +30,7 @@
|
||||
else
|
||||
armed = 0
|
||||
timepassed = 0
|
||||
to_chat(H, "\blue You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]")
|
||||
to_chat(H, "<span class='notice'>You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]</span>")
|
||||
|
||||
process()
|
||||
if(!timing)
|
||||
|
||||
@@ -46,8 +46,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
reagents.set_reacting(FALSE) // so it doesn't react until you light it
|
||||
|
||||
/obj/item/clothing/mask/cigarette/Destroy()
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
QDEL_NULL(reagents)
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
@@ -94,6 +93,17 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
else if(istype(W, /obj/item/device/assembly/igniter))
|
||||
light("<span class='notice'>[user] fiddles with [W], and manages to light their [name].</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/gun/magic/wand/fireball))
|
||||
var/obj/item/weapon/gun/magic/wand/fireball/F = W
|
||||
if(F.charges)
|
||||
if(prob(50) || user.mind.assigned_role == "Wizard")
|
||||
light("<span class='notice'>Holy shit, did [user] just manage to light their [name] with [W], with only moderate eyebrow singing?</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Unsure which end of the wand is which, [user] fails to light [name] with [W].</span>")
|
||||
explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
|
||||
F.charges--
|
||||
|
||||
|
||||
//can't think of any other way to update the overlays :<
|
||||
user.update_inv_wear_mask()
|
||||
user.update_inv_l_hand()
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
|
||||
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == "mouth" )
|
||||
user.visible_message("\red \the [user] washes \the [target]'s mouth out with [src.name]!")
|
||||
user.visible_message("<span class='warning'>\the [user] washes \the [target]'s mouth out with [src.name]!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -172,12 +172,8 @@
|
||||
if(on)
|
||||
var/M = get(paddles, /mob)
|
||||
remove_paddles(M)
|
||||
if(paddles)
|
||||
qdel(paddles)
|
||||
paddles = null
|
||||
if(bcell)
|
||||
qdel(bcell)
|
||||
bcell = null
|
||||
QDEL_NULL(paddles)
|
||||
QDEL_NULL(bcell)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "dnainjector"
|
||||
item_state = "dnainjector"
|
||||
var/block = 0
|
||||
var/datum/dna2/record/buf=null
|
||||
var/datum/dna2/record/buf = null
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = 1
|
||||
@@ -26,6 +26,10 @@
|
||||
buf.dna.ResetSE()
|
||||
SetValue(value)
|
||||
|
||||
/obj/item/weapon/dnainjector/Destroy()
|
||||
QDEL_NULL(buf)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock)
|
||||
if(selblock==0)
|
||||
return block
|
||||
@@ -128,17 +132,17 @@
|
||||
|
||||
if(block)
|
||||
if(GetState() && block == MONKEYBLOCK && ishuman(M))
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] <span class='warning'>(MONKEY)</span>")
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] <span class='warning'>(MONKEY)</span>")
|
||||
else
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]")
|
||||
|
||||
else
|
||||
if(GetState(MONKEYBLOCK) && ishuman(M))
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] <span class='warning'>(MONKEY)</span>")
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)")
|
||||
log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] <span class='warning'>(MONKEY)</span>")
|
||||
else
|
||||
log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]")
|
||||
|
||||
|
||||
@@ -22,16 +22,22 @@
|
||||
if(src.used)
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species.flags & NO_DNA)
|
||||
to_chat(user, "<span class='warning'>You failed to inject [M], as they have no DNA to scramble, nor flesh to inject.</span>")
|
||||
return
|
||||
|
||||
if(M == user)
|
||||
user.visible_message("<span class='danger'>[user.name] injects \himself with [src]!</span>")
|
||||
user.visible_message("<span class='danger'>[user] injects \himself with [src]!</span>")
|
||||
src.injected(user,user)
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user.name] is trying to inject [M.name] with [src]!</span>")
|
||||
user.visible_message("<span class='danger'>[user] is trying to inject [M] with [src]!</span>")
|
||||
if(do_mob(user,M,30))
|
||||
user.visible_message("<span class='danger'>[user.name] injects [M.name] with [src].</span>")
|
||||
user.visible_message("<span class='danger'>[user] injects [M] with [src].</span>")
|
||||
src.injected(M, user)
|
||||
else
|
||||
to_chat(user, "\red You failed to inject [M.name].")
|
||||
to_chat(user, "<span class='warning'>You failed to inject [M].</span>")
|
||||
|
||||
proc/injected(var/mob/living/carbon/target, var/mob/living/carbon/user)
|
||||
scramble(1, target, 100)
|
||||
|
||||
@@ -18,10 +18,9 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/Destroy()
|
||||
qdel(nadeassembly)
|
||||
nadeassembly = null
|
||||
QDEL_NULL(nadeassembly)
|
||||
target = null
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
|
||||
if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
to_chat(usr, "[bicon(src)] [src.name] contains:")
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
to_chat(user, "\blue [R.volume] units of [R.name]")
|
||||
to_chat(user, "<span class='notice'>[R.volume] units of [R.name]</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/extinguisher/New()
|
||||
|
||||
@@ -25,15 +25,10 @@
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/Destroy()
|
||||
if(weldtool)
|
||||
qdel(weldtool)
|
||||
weldtool = null
|
||||
if(igniter)
|
||||
qdel(igniter)
|
||||
igniter = null
|
||||
if(ptank)
|
||||
qdel(ptank)
|
||||
ptank = null
|
||||
QDEL_NULL(weldtool)
|
||||
QDEL_NULL(igniter)
|
||||
QDEL_NULL(ptank)
|
||||
previousturf = null
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
var/improvised = 0
|
||||
var/garrote_time
|
||||
|
||||
/obj/item/weapon/twohanded/garrote/Destroy()
|
||||
strangling = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/garrote/update_icon()
|
||||
if(strangling) // If we're strangling someone we want our icon to stay wielded
|
||||
icon_state = "garrot_unwrap"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
user.put_in_active_hand(gift)
|
||||
src.gift.add_fingerprint(user)
|
||||
else
|
||||
to_chat(user, "\blue The gift was empty!")
|
||||
to_chat(user, "<span class='notice'>The gift was empty!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -42,16 +42,16 @@
|
||||
/obj/effect/spresent/relaymove(mob/user as mob)
|
||||
if(user.stat)
|
||||
return
|
||||
to_chat(user, "\blue You cant move.")
|
||||
to_chat(user, "<span class='notice'>You cant move.</span>")
|
||||
|
||||
/obj/effect/spresent/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
..()
|
||||
|
||||
if(!istype(W, /obj/item/weapon/wirecutters))
|
||||
to_chat(user, "\blue I need wirecutters for that.")
|
||||
to_chat(user, "<span class='notice'>I need wirecutters for that.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "\blue You cut open the present.")
|
||||
to_chat(user, "<span class='notice'>You cut open the present.</span>")
|
||||
|
||||
for(var/mob/M in src) //Should only be one but whatever.
|
||||
M.loc = src.loc
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
payload_name += " " // formatting, ignore me
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/Destroy()
|
||||
QDEL_NULL(nadeassembly)
|
||||
for(var/thing in beakers)
|
||||
qdel(thing)
|
||||
beakers.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
|
||||
..(user)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if((M:shoes.flags&NOSLIP) || (M:species.bodyflags & FEET_NOSLIP))
|
||||
return
|
||||
else
|
||||
to_chat(M, "\red Your feet feel like they're on fire!")
|
||||
to_chat(M, "<span class='warning'>Your feet feel like they're on fire!</span>")
|
||||
M.take_overall_damage(0, max(0, (burned - 2)))
|
||||
|
||||
if(!istype(M, /mob/living/carbon/slime) && !isrobot(M))
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
for(var/mob/living/M in hearers(7, flashbang_turf))
|
||||
bang(get_turf(M), M)
|
||||
|
||||
for(var/obj/effect/blob/B in hear(8,flashbang_turf)) //Blob damage here
|
||||
for(var/obj/structure/blob/B in hear(8,flashbang_turf)) //Blob damage here
|
||||
var/damage = round(30/(get_dist(B,get_turf(src))+1))
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
sleep(10)
|
||||
src.smoke.start()
|
||||
|
||||
for(var/obj/effect/blob/B in view(8,src))
|
||||
for(var/obj/structure/blob/B in view(8,src))
|
||||
var/damage = round(30/(get_dist(B,src)+1))
|
||||
B.health -= damage
|
||||
B.update_icon()
|
||||
|
||||
@@ -13,6 +13,12 @@
|
||||
var/list/signs = list()
|
||||
var/max_signs = 20
|
||||
|
||||
/obj/item/weapon/holosign_creator/Destroy()
|
||||
for(var/sign in signs)
|
||||
qdel(sign)
|
||||
signs.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
|
||||
if(flag)
|
||||
var/turf/T = get_turf(target)
|
||||
|
||||
@@ -592,7 +592,7 @@
|
||||
to_chat(missionary, "<span class='warning'>Your faith is strong, but their mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...</span>")
|
||||
faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor?
|
||||
return
|
||||
if(isloyal(target))
|
||||
if(ismindshielded(target))
|
||||
if(prob(20)) //loyalty implants typically overpower this, but you CAN get lucky and convert still (20% chance of success)
|
||||
faith -= 125 //yes, this puts it negative. it's gonna take longer to recharge if you manage to convert a one of these people to balance the new power you gained through them
|
||||
to_chat(missionary, "<span class='notice'>Through sheer willpower, you overcome their closed mind and rally [target] to your cause! You may need a bit longer than usual before your faith is fully recharged, and they won't remain loyal to you for long ...</span>")
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/obj/item/weapon/implant/abductor
|
||||
name = "recall implant"
|
||||
desc = "Returns you to the mothership."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "implant"
|
||||
activated = 1
|
||||
origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5"
|
||||
var/obj/machinery/abductor/pad/home
|
||||
var/cooldown = 30
|
||||
var/total_cooldown = 30
|
||||
|
||||
/obj/item/weapon/implant/abductor/activate()
|
||||
if(cooldown == total_cooldown)
|
||||
home.Retrieve(imp_in,1)
|
||||
cooldown = 0
|
||||
processing_objects.Add(src)
|
||||
else
|
||||
to_chat(imp_in, "<span class='warning'>You must wait [(total_cooldown - cooldown)*2] seconds to use [src] again!</span>")
|
||||
|
||||
/obj/item/weapon/implant/abductor/process()
|
||||
if(cooldown < total_cooldown)
|
||||
cooldown++
|
||||
if(cooldown == total_cooldown)
|
||||
processing_objects.Remove(src)
|
||||
|
||||
/obj/item/weapon/implant/abductor/implant(mob/source, mob/user)
|
||||
if(..())
|
||||
var/obj/machinery/abductor/console/console
|
||||
if(ishuman(source))
|
||||
var/mob/living/carbon/human/H = source
|
||||
if(H.get_species() == "Abductor")
|
||||
console = get_team_console(H.mind.abductor.team)
|
||||
home = console.pad
|
||||
|
||||
if(!home)
|
||||
console = get_team_console(pick(1, 2, 3, 4))
|
||||
home = console.pad
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
|
||||
var/obj/machinery/abductor/console/console
|
||||
for(var/obj/machinery/abductor/console/c in abductor_equipment)
|
||||
if(c.team == team)
|
||||
console = c
|
||||
break
|
||||
return console
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/item/weapon/implant/loyalty
|
||||
/obj/item/weapon/implant/mindshield
|
||||
name = "mindshield implant"
|
||||
desc = "Stops people messing with your mind."
|
||||
origin_tech = "materials=2;biotech=4;programming=4"
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/loyalty/get_data()
|
||||
/obj/item/weapon/implant/mindshield/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
|
||||
<b>Life:</b> Ten years.<BR>
|
||||
@@ -17,7 +17,7 @@
|
||||
return dat
|
||||
|
||||
|
||||
/obj/item/weapon/implant/loyalty/implant(mob/target)
|
||||
/obj/item/weapon/implant/mindshield/implant(mob/target)
|
||||
if(..())
|
||||
if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
|
||||
@@ -33,7 +33,7 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/implant/loyalty/removed(mob/target, var/silent = 0)
|
||||
/obj/item/weapon/implant/mindshield/removed(mob/target, var/silent = 0)
|
||||
if(..())
|
||||
if(target.stat != DEAD && !silent)
|
||||
to_chat(target, "<span class='boldnotice'>You feel a sense of liberation as Nanotrasen's grip on your mind fades away.</span>")
|
||||
@@ -41,19 +41,19 @@
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/loyalty
|
||||
/obj/item/weapon/implanter/mindshield
|
||||
name = "implanter (mindshield)"
|
||||
|
||||
/obj/item/weapon/implanter/loyalty/New()
|
||||
imp = new /obj/item/weapon/implant/loyalty(src)
|
||||
/obj/item/weapon/implanter/mindshield/New()
|
||||
imp = new /obj/item/weapon/implant/mindshield(src)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/loyalty
|
||||
/obj/item/weapon/implantcase/mindshield
|
||||
name = "implant case - 'mindshield'"
|
||||
desc = "A glass case containing a mindshield implant."
|
||||
|
||||
/obj/item/weapon/implantcase/loyalty/New()
|
||||
imp = new /obj/item/weapon/implant/loyalty(src)
|
||||
/obj/item/weapon/implantcase/mindshield/New()
|
||||
imp = new /obj/item/weapon/implant/mindshield(src)
|
||||
..()
|
||||
@@ -38,7 +38,7 @@
|
||||
removed(M)
|
||||
qdel(src)
|
||||
return -1
|
||||
if(isloyal(H))
|
||||
if(ismindshielded(H))
|
||||
H.visible_message("<span class='warning'>[H] seems to resist the implant!</span>", "<span class='warning'>You feel a strange sensation in your head that quickly dissipates.</span>")
|
||||
removed(M)
|
||||
qdel(src)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
var/ready = 1
|
||||
var/malfunction = 0
|
||||
var/list/obj/item/weapon/implant/loyalty/implant_list = list()
|
||||
var/list/obj/item/weapon/implant/mindshield/implant_list = list()
|
||||
var/max_implants = 5
|
||||
var/injection_cooldown = 600
|
||||
var/replenish_cooldown = 6000
|
||||
@@ -122,9 +122,9 @@
|
||||
if(!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if(!implant_list.len) return
|
||||
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
|
||||
for(var/obj/item/weapon/implant/mindshield/imp in implant_list)
|
||||
if(!imp) continue
|
||||
if(istype(imp, /obj/item/weapon/implant/loyalty))
|
||||
if(istype(imp, /obj/item/weapon/implant/mindshield))
|
||||
M.visible_message("<span class='warning'>[M] has been implanted by the [src.name].</span>")
|
||||
|
||||
if(imp.implant(M))
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
/obj/machinery/implantchair/add_implants()
|
||||
for(var/i=0, i<src.max_implants, i++)
|
||||
var/obj/item/weapon/implant/loyalty/I = new /obj/item/weapon/implant/loyalty(src)
|
||||
var/obj/item/weapon/implant/mindshield/I = new /obj/item/weapon/implant/mindshield(src)
|
||||
implant_list += I
|
||||
return
|
||||
|
||||
|
||||
@@ -27,12 +27,8 @@
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
|
||||
if(IED)
|
||||
qdel(IED)
|
||||
IED = null
|
||||
if(sig)
|
||||
qdel(sig)
|
||||
sig = null
|
||||
QDEL_NULL(IED)
|
||||
QDEL_NULL(sig)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
if(R.cell)
|
||||
var/obj/item/weapon/stock_parts/cell/C = R.cell
|
||||
if(active && !(C.use(hitcost)))
|
||||
attack_self()
|
||||
attack_self(R)
|
||||
to_chat(R, "<span class='notice'>It's out of charge!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/mopspeed = 30
|
||||
|
||||
/obj/item/weapon/mop/New()
|
||||
..()
|
||||
create_reagents(mopcap)
|
||||
janitorial_equipment += src
|
||||
|
||||
|
||||
@@ -17,9 +17,7 @@
|
||||
var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws
|
||||
|
||||
/obj/item/weapon/pneumatic_cannon/Destroy()
|
||||
if(tank)
|
||||
qdel(tank)
|
||||
tank = null
|
||||
QDEL_NULL(tank)
|
||||
for(var/obj/item/I in loadedItems)
|
||||
qdel(I)
|
||||
loadedItems.Cut()
|
||||
|
||||
@@ -5,18 +5,17 @@
|
||||
icon_state = "cell"
|
||||
item_state = "cell"
|
||||
origin_tech = "powerstorage=1"
|
||||
force = 5.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 3
|
||||
force = 5
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
w_class = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/charge = 0 // note %age conveted to actual charge in New
|
||||
var/maxcharge = 10000
|
||||
rating = 1
|
||||
var/maxcharge = 1000
|
||||
materials = list(MAT_METAL=700, MAT_GLASS=50)
|
||||
var/rigged = 0 // true if rigged to explode
|
||||
var/chargerate = 100 //how much power is given every tick in a recharger
|
||||
var/minor_fault = 0 //If not 100% reliable, it will build up faults.
|
||||
var/chargerate = 1000 //how much power is given every tick in a recharger
|
||||
var/self_recharge = 0 //does it self recharge, over time, or not?
|
||||
var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it.
|
||||
|
||||
@@ -62,10 +61,9 @@
|
||||
/obj/item/weapon/stock_parts/cell/crap
|
||||
name = "\improper Nanotrasen brand rechargable AA battery"
|
||||
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
|
||||
origin_tech = null
|
||||
maxcharge = 5000
|
||||
rating = 2
|
||||
maxcharge = 500
|
||||
materials = list(MAT_GLASS=40)
|
||||
rating = 2
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/crap/empty/New()
|
||||
..()
|
||||
@@ -74,9 +72,9 @@
|
||||
/obj/item/weapon/stock_parts/cell/secborg
|
||||
name = "\improper Security borg rechargable D battery"
|
||||
origin_tech = null
|
||||
maxcharge = 6000 //6000 max charge / 1000 charge per shot = six shots
|
||||
rating = 2.5
|
||||
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
|
||||
materials = list(MAT_GLASS=40)
|
||||
rating = 2.5
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/secborg/empty/New()
|
||||
..()
|
||||
@@ -86,11 +84,18 @@
|
||||
name = "high-capacity power cell"
|
||||
origin_tech = "powerstorage=2"
|
||||
icon_state = "hcell"
|
||||
maxcharge = 15000
|
||||
rating = 3
|
||||
maxcharge = 10000
|
||||
materials = list(MAT_GLASS=60)
|
||||
rating = 3
|
||||
chargerate = 1500
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/high/plus
|
||||
name = "high-capacity power cell+"
|
||||
desc = "Where did these come from?"
|
||||
icon_state = "h+cell"
|
||||
maxcharge = 15000
|
||||
chargerate = 2250
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/high/empty/New()
|
||||
..()
|
||||
charge = 0
|
||||
@@ -100,7 +105,7 @@
|
||||
origin_tech = "powerstorage=5"
|
||||
icon_state = "scell"
|
||||
maxcharge = 20000
|
||||
materials = list(MAT_GLASS=70)
|
||||
materials = list(MAT_GLASS=300)
|
||||
rating = 4
|
||||
chargerate = 2000
|
||||
|
||||
@@ -113,8 +118,8 @@
|
||||
origin_tech = "powerstorage=6"
|
||||
icon_state = "hpcell"
|
||||
maxcharge = 30000
|
||||
materials = list(MAT_GLASS=400)
|
||||
rating = 5
|
||||
materials = list(MAT_GLASS=80)
|
||||
chargerate = 3000
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/hyper/empty/New()
|
||||
@@ -126,7 +131,7 @@
|
||||
origin_tech = "powerstorage=7"
|
||||
icon_state = "bscell"
|
||||
maxcharge = 40000
|
||||
materials = list(MAT_GLASS=80)
|
||||
materials = list(MAT_GLASS=600)
|
||||
rating = 6
|
||||
chargerate = 4000
|
||||
|
||||
@@ -139,8 +144,8 @@
|
||||
icon_state = "icell"
|
||||
origin_tech = null
|
||||
maxcharge = 30000
|
||||
materials = list(MAT_GLASS=1000)
|
||||
rating = 6
|
||||
materials = list(MAT_GLASS=80)
|
||||
chargerate = 30000
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/infinite/use()
|
||||
@@ -153,7 +158,7 @@
|
||||
icon_state = "potato"
|
||||
origin_tech = "powerstorage=1;biotech=1"
|
||||
charge = 100
|
||||
maxcharge = 3000
|
||||
maxcharge = 300
|
||||
materials = list()
|
||||
rating = 1
|
||||
minor_fault = 1
|
||||
@@ -170,17 +175,17 @@
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/pulse //200 pulse shots
|
||||
name = "pulse rifle power cell"
|
||||
maxcharge = 400000
|
||||
maxcharge = 40000
|
||||
rating = 3
|
||||
chargerate = 1500
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/pulse/carbine
|
||||
/obj/item/weapon/stock_parts/cell/pulse/carbine //25 pulse shots
|
||||
name = "pulse carbine power cell"
|
||||
maxcharge = 40000
|
||||
maxcharge = 5000
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/pulse/pistol
|
||||
/obj/item/weapon/stock_parts/cell/pulse/pistol //10 pulse shots
|
||||
name = "pulse pistol power cell"
|
||||
maxcharge = 16000
|
||||
maxcharge = 2000
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/ninja
|
||||
name = "spider-clan power cell"
|
||||
@@ -192,7 +197,7 @@
|
||||
/obj/item/weapon/stock_parts/cell/emproof
|
||||
name = "\improper EMP-proof cell"
|
||||
desc = "An EMP-proof cell."
|
||||
maxcharge = 5000
|
||||
maxcharge = 500
|
||||
rating = 2
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/emproof/empty/New()
|
||||
|
||||
@@ -17,9 +17,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/melee/powerfist/Destroy()
|
||||
if(tank)
|
||||
qdel(tank)
|
||||
tank = null
|
||||
QDEL_NULL(tank)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/powerfist/examine(mob/user)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(crit_fail)
|
||||
to_chat(user, "\red The Bluespace generator isn't working.")
|
||||
to_chat(user, "<span class='warning'>The Bluespace generator isn't working.</span>")
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
|
||||
var/response = alert(user, "Are you sure you want to put the bag of holding inside another bag of holding?","Are you sure you want to die?","Yes","No")
|
||||
@@ -68,10 +68,10 @@
|
||||
proc/failcheck(mob/user as mob)
|
||||
if(prob(src.reliability)) return 1 //No failure
|
||||
if(prob(src.reliability))
|
||||
to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure
|
||||
to_chat(user, "<span class='warning'>The Bluespace portal resists your attempt to add another item.</span>")//light failure
|
||||
|
||||
else
|
||||
to_chat(user, "\red The Bluespace generator malfunctions!")
|
||||
to_chat(user, "<span class='warning'>The Bluespace generator malfunctions!</span>")
|
||||
for(var/obj/O in src.contents) //it broke, delete what was in it
|
||||
qdel(O)
|
||||
crit_fail = 1
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
/obj/item/weapon/storage/bag/plasticbag/mob_can_equip(M as mob, slot)
|
||||
|
||||
if(slot==slot_head && contents.len)
|
||||
to_chat(M, "\red You need to empty the bag first!")
|
||||
to_chat(M, "<span class='warning'>You need to empty the bag first!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
current += S.amount
|
||||
if(capacity == current)//If it's full, you're done
|
||||
if(!stop_messages)
|
||||
to_chat(usr, "\red The snatcher is full.")
|
||||
to_chat(usr, "<span class='warning'>The snatcher is full.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -451,9 +451,9 @@
|
||||
sleep(rand(2,4))
|
||||
if( droppedSomething )
|
||||
if( foundtable )
|
||||
user.visible_message("\blue [user] unloads their service tray.")
|
||||
user.visible_message("<span class='notice'>[user] unloads their service tray.</span>")
|
||||
else
|
||||
user.visible_message("\blue [user] drops all the items on their tray.")
|
||||
user.visible_message("<span class='notice'>[user] drops all the items on their tray.</span>")
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -515,10 +515,10 @@
|
||||
proc/failcheck(mob/user as mob)
|
||||
if(prob(src.reliability)) return 1 //No failure
|
||||
if(prob(src.reliability))
|
||||
to_chat(user, "\red The Bluespace portal resists your attempt to add another item.")//light failure
|
||||
to_chat(user, "<span class='warning'>The Bluespace portal resists your attempt to add another item.</span>")//light failure
|
||||
|
||||
else
|
||||
to_chat(user, "\red The Bluespace generator malfunctions!")
|
||||
to_chat(user, "<span class='warning'>The Bluespace generator malfunctions!</span>")
|
||||
for(var/obj/O in src.contents) //it broke, delete what was in it
|
||||
qdel(O)
|
||||
crit_fail = 1
|
||||
|
||||
@@ -54,15 +54,15 @@
|
||||
M.LAssailant = user
|
||||
|
||||
if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
to_chat(user, "\red You don't have the dexterity to do this!")
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(!chaplain)
|
||||
to_chat(user, "\red The book sizzles in your hands.")
|
||||
to_chat(user, "<span class='warning'>The book sizzles in your hands.</span>")
|
||||
user.take_organ_damage(0,10)
|
||||
return
|
||||
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
to_chat(user, "\red The [src] slips out of your hand and hits your head.")
|
||||
to_chat(user, "<span class='warning'>The [src] slips out of your hand and hits your head.</span>")
|
||||
user.take_organ_damage(10)
|
||||
user.Paralyse(20)
|
||||
return
|
||||
@@ -72,19 +72,19 @@
|
||||
|
||||
if(M.stat !=2)
|
||||
/*if((M.mind in ticker.mode.cult) && (prob(20)))
|
||||
to_chat(M, "\red The power of [src.deity_name] clears your mind of heresy!")
|
||||
to_chat(user, "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!")
|
||||
to_chat(M, "<span class='warning'>The power of [src.deity_name] clears your mind of heresy!</span>")
|
||||
to_chat(user, "<span class='warning'>You see how [M]'s eyes become clear, the cult no longer holds control over him!</span>")
|
||||
ticker.mode.remove_cultist(M.mind)*/
|
||||
if((istype(M, /mob/living/carbon/human) && prob(60)))
|
||||
bless(M)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("<span class='danger'>[] heals [] with the power of [src.deity_name]!</span>", user, M), 1)
|
||||
to_chat(M, "\red May the power of [src.deity_name] compel you to be healed!")
|
||||
to_chat(M, "<span class='warning'>May the power of [src.deity_name] compel you to be healed!</span>")
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
else
|
||||
if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet))
|
||||
M.adjustBrainLoss(10)
|
||||
to_chat(M, "\red You feel dumber.")
|
||||
to_chat(M, "<span class='warning'>You feel dumber.</span>")
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("<span class='danger'>[] beats [] over the head with []!</span>", user, M, src), 1)
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
|
||||
@@ -137,10 +137,14 @@
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
new /obj/item/weapon/dnainjector/m2h(src)
|
||||
|
||||
/obj/item/weapon/storage/box/gauge
|
||||
name = "box of 12 gauge slugs"
|
||||
desc = "It has a picture of a gun and several warning symbols on the front."
|
||||
materials = list(MAT_METAL=28000)
|
||||
/obj/item/weapon/storage/box/slug
|
||||
name = "Ammunition Box (Slug)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "slugbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -152,6 +156,120 @@
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
new /obj/item/ammo_casing/shotgun(src)
|
||||
|
||||
/obj/item/weapon/storage/box/buck
|
||||
name = "Ammunition Box (Buckshot)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "buckshotbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
new /obj/item/ammo_casing/shotgun/buckshot(src)
|
||||
|
||||
/obj/item/weapon/storage/box/dragonsbreath
|
||||
name = "Ammunition Box (Dragonsbreath)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "dragonsbreathbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
|
||||
|
||||
/obj/item/weapon/storage/box/stun
|
||||
name = "Ammunition Box (Stun shells)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "stunbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
new /obj/item/ammo_casing/shotgun/stunslug(src)
|
||||
|
||||
/obj/item/weapon/storage/box/beanbag
|
||||
name = "Ammunition Box (Beanbag shells)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "beanbagbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
/obj/item/weapon/storage/box/rubbershot
|
||||
name = "Ammunition Box (Rubbershot shells)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "rubbershotbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
new /obj/item/ammo_casing/shotgun/rubbershot(src)
|
||||
|
||||
/obj/item/weapon/storage/box/tranquilizer
|
||||
name = "Ammunition Box (Tranquilizer darts)"
|
||||
desc = "A small box capable of holding seven shotgun shells."
|
||||
icon_state = "tranqbox"
|
||||
storage_slots = 7
|
||||
can_hold = list(
|
||||
"/obj/item/ammo_casing/shotgun"
|
||||
)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
new /obj/item/ammo_casing/shotgun/tranquilizer(src)
|
||||
|
||||
/obj/item/weapon/storage/box/flashbangs
|
||||
name = "box of flashbangs (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
|
||||
@@ -423,11 +541,15 @@
|
||||
desc = "A box for containing construction permits, used to officially declare built rooms as additions to the station."
|
||||
icon_state = "id"
|
||||
|
||||
/obj/item/weapon/storage/box/permits/New() //There's only a few, so blueprints are still useful beyond setting every room's name to PRIMARY FART STORAGE
|
||||
/obj/item/weapon/storage/box/permits/New()
|
||||
..()
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
new /obj/item/areaeditor/permit(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/ids
|
||||
@@ -575,7 +697,9 @@
|
||||
item_state = "zippo"
|
||||
storage_slots = 10
|
||||
w_class = 1
|
||||
max_w_class = 1
|
||||
slot_flags = SLOT_BELT
|
||||
can_hold = list(/obj/item/weapon/match)
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/Destroy()
|
||||
qdel(reagents)
|
||||
QDEL_NULL(reagents)
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -80,16 +80,16 @@
|
||||
max_combined_w_class = 4 //The sum of the w_classes of all the items in this storage item.
|
||||
storage_slots = 1
|
||||
|
||||
/obj/item/weapon/storage/lockbox/loyalty
|
||||
/obj/item/weapon/storage/lockbox/mindshield
|
||||
name = "Lockbox (Mindshield Implants)"
|
||||
req_access = list(access_security)
|
||||
|
||||
/obj/item/weapon/storage/lockbox/loyalty/New()
|
||||
/obj/item/weapon/storage/lockbox/mindshield/New()
|
||||
..()
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implanter/loyalty(src)
|
||||
new /obj/item/weapon/implantcase/mindshield(src)
|
||||
new /obj/item/weapon/implantcase/mindshield(src)
|
||||
new /obj/item/weapon/implantcase/mindshield(src)
|
||||
new /obj/item/weapon/implanter/mindshield(src)
|
||||
|
||||
/obj/item/weapon/storage/lockbox/clusterbang
|
||||
name = "lockbox (clusterbang)"
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
..()
|
||||
|
||||
if(isrobot(user))
|
||||
to_chat(user, "\blue You're a robot. No.")
|
||||
to_chat(user, "<span class='notice'>You're a robot. No.</span>")
|
||||
return 1//Robots can't interact with storage items.
|
||||
|
||||
if(!can_be_inserted(W))
|
||||
@@ -454,8 +454,8 @@
|
||||
for(var/obj/O in contents)
|
||||
O.mouse_opacity = initial(O.mouse_opacity)
|
||||
|
||||
qdel(boxes)
|
||||
qdel(closer)
|
||||
QDEL_NULL(boxes)
|
||||
QDEL_NULL(closer)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/storage/emp_act(severity)
|
||||
|
||||
@@ -1,85 +1,84 @@
|
||||
/obj/item/weapon/storage/box/syndicate/
|
||||
New()
|
||||
..()
|
||||
switch(pickweight(list("bloodyspai" = 1, "stealth" = 1, "bond" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "implant" = 1, "hacker" = 1, "lordsingulo" = 1, "darklord" = 1)))
|
||||
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "gadgets" = 1)))
|
||||
if("bloodyspai")
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/weapon/twohanded/garrote(src)
|
||||
new /obj/item/weapon/pinpointer/advpinpointer(src)
|
||||
new /obj/item/clothing/mask/gas/voice(src)
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/syndigaloshes(src)
|
||||
new /obj/item/weapon/storage/box/syndie_kit/emp(src)
|
||||
new /obj/item/device/camera_bug(src)
|
||||
return
|
||||
|
||||
if("stealth")
|
||||
if("thief")
|
||||
new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/weapon/pen/sleepy(src)
|
||||
new /obj/item/device/chameleon(src)
|
||||
new /obj/item/clothing/gloves/color/black/thief(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
return
|
||||
|
||||
if("bond")
|
||||
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/weapon/suppressor(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm(src)
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
|
||||
if("screwed")
|
||||
new /obj/item/device/radio/beacon/syndicate/bomb(src)
|
||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||
new /obj/item/device/powersink(src)
|
||||
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src)
|
||||
new /obj/item/device/encryptionkey/syndicate(src)
|
||||
new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate(src)
|
||||
new /obj/item/weapon/implanter/krav_maga(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/alliescocktail(src)
|
||||
return
|
||||
|
||||
if("guns")
|
||||
if("sabotage")
|
||||
new /obj/item/device/powersink(src)
|
||||
new /obj/item/weapon/grenade/syndieminibomb(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/grenade/clusterbuster/n2o(src)
|
||||
new /obj/item/weapon/storage/box/syndie_kit/space(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/weapon/rcd/preloaded(src)
|
||||
return
|
||||
|
||||
if("payday")
|
||||
new /obj/item/weapon/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/weapon/grenade/plastic/c4(src)
|
||||
new /obj/item/weapon/grenade/plastic/x4(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
return
|
||||
|
||||
if("murder")
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/clothing/shoes/syndigaloshes(src)
|
||||
return
|
||||
|
||||
if("implant")
|
||||
new /obj/item/weapon/implanter/freedom(src)
|
||||
new /obj/item/weapon/implanter/uplink(src)
|
||||
new /obj/item/weapon/implanter/emp(src)
|
||||
new /obj/item/weapon/implanter/adrenalin(src)
|
||||
new /obj/item/weapon/implanter/explosive(src)
|
||||
new /obj/item/weapon/implanter/storage(src)
|
||||
new /obj/item/weapon/implanter/freedom(src)
|
||||
return
|
||||
|
||||
if("hacker")
|
||||
new /obj/item/weapon/aiModule/syndicate(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
new /obj/item/device/encryptionkey/binary(src)
|
||||
new /obj/item/weapon/aiModule/toyAI(src)
|
||||
return
|
||||
|
||||
if("lordsingulo")
|
||||
new /obj/item/device/radio/beacon/syndicate(src)
|
||||
new /obj/item/clothing/suit/space/syndicate/black/red(src)
|
||||
new /obj/item/clothing/head/helmet/space/syndicate/black/red(src)
|
||||
new /obj/item/weapon/card/emag(src)
|
||||
return
|
||||
|
||||
if("darklord")
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/weapon/melee/energy/sword/saber(src)
|
||||
new /obj/item/weapon/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/weapon/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||
new /obj/item/weapon/card/id/syndicate(src)
|
||||
return
|
||||
|
||||
if("gadgets")
|
||||
new /obj/item/clothing/gloves/color/yellow/power(src)
|
||||
new /obj/item/weapon/pen/sleepy(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/device/flashlight/emp(src)
|
||||
new /obj/item/clothing/shoes/syndigaloshes(src)
|
||||
new /obj/item/weapon/stamp/chameleon(src)
|
||||
new /obj/item/device/multitool/ai_detect(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit
|
||||
name = "Box"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "stunbaton"
|
||||
desc = "A stun baton for incapacitating people with."
|
||||
icon_state = "stunbaton"
|
||||
var/base_icon = "stunbaton"
|
||||
item_state = "baton"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 10
|
||||
@@ -12,7 +13,7 @@
|
||||
var/stunforce = 7
|
||||
var/status = 0
|
||||
var/obj/item/weapon/stock_parts/cell/high/bcell = null
|
||||
var/hitcost = 1500
|
||||
var/hitcost = 1000
|
||||
|
||||
/obj/item/weapon/melee/baton/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
|
||||
@@ -24,9 +25,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/melee/baton/Destroy()
|
||||
if(bcell)
|
||||
qdel(bcell)
|
||||
bcell = null
|
||||
QDEL_NULL(bcell)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed.
|
||||
@@ -48,11 +47,11 @@
|
||||
|
||||
/obj/item/weapon/melee/baton/update_icon()
|
||||
if(status)
|
||||
icon_state = "[initial(name)]_active"
|
||||
icon_state = "[base_icon]_active"
|
||||
else if(!bcell)
|
||||
icon_state = "[initial(name)]_nocell"
|
||||
icon_state = "[base_icon]_nocell"
|
||||
else
|
||||
icon_state = "[initial(name)]"
|
||||
icon_state = "[base_icon]"
|
||||
|
||||
/obj/item/weapon/melee/baton/examine(mob/user)
|
||||
..(user)
|
||||
@@ -184,28 +183,28 @@
|
||||
return 1
|
||||
..()
|
||||
|
||||
|
||||
//secborg stun baton module
|
||||
/obj/item/weapon/melee/baton/loaded/robot
|
||||
hitcost = 1000
|
||||
|
||||
//Makeshift stun baton. Replacement for stun gloves.
|
||||
/obj/item/weapon/melee/baton/cattleprod
|
||||
name = "stunprod"
|
||||
desc = "An improvised stun baton."
|
||||
icon_state = "stunprod_nocell"
|
||||
base_icon = "stunprod"
|
||||
item_state = "prod"
|
||||
w_class = 3
|
||||
force = 3
|
||||
throwforce = 5
|
||||
stunforce = 5
|
||||
hitcost = 3750
|
||||
hitcost = 2000
|
||||
slot_flags = SLOT_BACK
|
||||
var/obj/item/device/assembly/igniter/sparkler = 0
|
||||
var/obj/item/device/assembly/igniter/sparkler = null
|
||||
|
||||
/obj/item/weapon/melee/baton/cattleprod/New()
|
||||
..()
|
||||
sparkler = new (src)
|
||||
sparkler = new(src)
|
||||
|
||||
/obj/item/weapon/melee/baton/cattleprod/Destroy()
|
||||
QDEL_NULL(sparkler)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/baton/cattleprod/baton_stun()
|
||||
if(sparkler.activate())
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
ion_trail.set_up(src)
|
||||
|
||||
/obj/item/weapon/tank/jetpack/Destroy()
|
||||
qdel(ion_trail)
|
||||
ion_trail = null
|
||||
QDEL_NULL(ion_trail)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype)
|
||||
@@ -82,7 +81,7 @@
|
||||
|
||||
var/datum/gas_mixture/removed = air_contents.remove(num)
|
||||
if(removed.total_moles() < 0.005)
|
||||
turn_off()
|
||||
turn_off()
|
||||
return 0
|
||||
|
||||
var/turf/T = get_turf(user)
|
||||
|
||||
@@ -33,9 +33,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/tank/Destroy()
|
||||
if(air_contents)
|
||||
qdel(air_contents)
|
||||
air_contents = null
|
||||
QDEL_NULL(air_contents)
|
||||
|
||||
processing_objects.Remove(src)
|
||||
|
||||
@@ -247,7 +245,7 @@
|
||||
if(!istype(loc,/obj/item/device/transfer_valve))
|
||||
message_admins("Explosive tank rupture! last key to touch the tank was [fingerprintslast] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
|
||||
log_game("Explosive tank rupture! last key to touch the tank was [fingerprintslast] at [x], [y], [z]")
|
||||
// to_chat(world, "\blue[x],[y] tank is exploding: [pressure] kPa")
|
||||
// to_chat(world, "<span class='notice'>[x],[y] tank is exploding: [pressure] kPa</span>")
|
||||
//Give the gas a chance to build up more pressure through reacting
|
||||
air_contents.react()
|
||||
air_contents.react()
|
||||
@@ -256,7 +254,7 @@
|
||||
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
|
||||
var/turf/epicenter = get_turf(loc)
|
||||
|
||||
// to_chat(world, "\blue Exploding Pressure: [pressure] kPa, intensity: [range]")
|
||||
// to_chat(world, "<span class='notice'>Exploding Pressure: [pressure] kPa, intensity: [range]</span>")
|
||||
|
||||
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
|
||||
if(istype(loc,/obj/item/device/transfer_valve))
|
||||
@@ -265,7 +263,7 @@
|
||||
qdel(src)
|
||||
|
||||
else if(pressure > TANK_RUPTURE_PRESSURE)
|
||||
// to_chat(world, "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]")
|
||||
// to_chat(world, "<span class='notice'>[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]</span>")
|
||||
if(integrity <= 0)
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(!T)
|
||||
@@ -277,7 +275,7 @@
|
||||
integrity--
|
||||
|
||||
else if(pressure > TANK_LEAK_PRESSURE)
|
||||
// to_chat(world, "\blue[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]")
|
||||
// to_chat(world, "<span class='notice'>[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]</span>")
|
||||
if(integrity <= 0)
|
||||
var/turf/simulated/T = get_turf(src)
|
||||
if(!T)
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
if(!Adj|| !istype(target, /turf))
|
||||
return
|
||||
if(metal_synthesis_cooldown < 5)
|
||||
var/obj/effect/effect/foam/F = new /obj/effect/effect/foam(get_turf(target), 1)
|
||||
var/obj/structure/foam/F = new /obj/structure/foam(get_turf(target), 1)
|
||||
F.amount = 0
|
||||
metal_synthesis_cooldown++
|
||||
spawn(100)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "teleprod"
|
||||
desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch."
|
||||
icon_state = "teleprod_nocell"
|
||||
base_icon = "teleprod"
|
||||
item_state = "teleprod"
|
||||
origin_tech = "combat=2;bluespace=4;materials=3"
|
||||
|
||||
@@ -15,4 +16,4 @@
|
||||
deductcharge(hitcost)
|
||||
do_teleport(user, get_turf(user), 50)//honk honk
|
||||
else if(iscarbon(M) && !M.anchored)
|
||||
do_teleport(M, get_turf(M), 15)
|
||||
do_teleport(M, get_turf(M), 15)
|
||||
|
||||
@@ -472,7 +472,7 @@
|
||||
return TRUE
|
||||
else
|
||||
if(M)
|
||||
to_chat(M, "\blue You need more welding fuel to complete this task.")
|
||||
to_chat(M, "<span class='notice'>You need more welding fuel to complete this task.</span>")
|
||||
return FALSE
|
||||
|
||||
//Returns whether or not the welding tool is currently on.
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
return
|
||||
..()
|
||||
if((CLUMSY in user.mutations) && (wielded) &&prob(40))
|
||||
to_chat(user, "\red You twirl around a bit before losing your balance and impaling yourself on the [src].")
|
||||
to_chat(user, "<span class='warning'>You twirl around a bit before losing your balance and impaling yourself on the [src].</span>")
|
||||
user.take_organ_damage(20,25)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
/obj/item/weapon/wire/attack_self(mob/user as mob)
|
||||
if(src.laying)
|
||||
src.laying = 0
|
||||
to_chat(user, "\blue You're done laying wire!")
|
||||
to_chat(user, "<span class='notice'>You're done laying wire!</span>")
|
||||
else
|
||||
to_chat(user, "\blue You are not using this to lay wire...")
|
||||
to_chat(user, "<span class='notice'>You are not using this to lay wire...</span>")
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -71,11 +71,11 @@
|
||||
|
||||
for(var/obj/O in range(0, src))
|
||||
if(O.density == 1 && O != src && !istype(O, /obj/machinery/door/window)) //Ignores windoors, as those already block climbing, otherwise a windoor on the opposite side of a table would prevent climbing.
|
||||
to_chat(user, "\red You cannot climb [src], as it is blocked by \a [O]!")
|
||||
to_chat(user, "<span class='warning'>You cannot climb [src], as it is blocked by \a [O]!</span>")
|
||||
return
|
||||
for(var/turf/T in range(0, src))
|
||||
if(T.density == 1)
|
||||
to_chat(user, "\red You cannot climb [src], as it is blocked by \a [T]!")
|
||||
to_chat(user, "<span class='warning'>You cannot climb [src], as it is blocked by \a [T]!</span>")
|
||||
return
|
||||
var/turf/T = src.loc
|
||||
if(!T || !istype(T)) return
|
||||
@@ -111,14 +111,14 @@
|
||||
if(M.lying) return //No spamming this on people.
|
||||
|
||||
M.Weaken(5)
|
||||
to_chat(M, "\red You topple as \the [src] moves under you!")
|
||||
to_chat(M, "<span class='warning'>You topple as \the [src] moves under you!</span>")
|
||||
|
||||
if(prob(25))
|
||||
|
||||
var/damage = rand(15,30)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H))
|
||||
to_chat(H, "\red You land heavily!")
|
||||
to_chat(H, "<span class='warning'>You land heavily!</span>")
|
||||
M.adjustBruteLoss(damage)
|
||||
return
|
||||
|
||||
@@ -137,12 +137,12 @@
|
||||
affecting = H.get_organ("head")
|
||||
|
||||
if(affecting)
|
||||
to_chat(M, "\red You land heavily on your [affecting.name]!")
|
||||
to_chat(M, "<span class='warning'>You land heavily on your [affecting.name]!</span>")
|
||||
affecting.take_damage(damage, 0)
|
||||
if(affecting.parent)
|
||||
affecting.parent.add_autopsy_data("Misadventure", damage)
|
||||
else
|
||||
to_chat(H, "\red You land heavily!")
|
||||
to_chat(H, "<span class='warning'>You land heavily!</span>")
|
||||
H.adjustBruteLoss(damage)
|
||||
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
burntime = 15
|
||||
var/obj/item/weapon/canvas/painting = null
|
||||
|
||||
/obj/structure/easel/Destroy()
|
||||
QDEL_NULL(painting)
|
||||
return ..()
|
||||
|
||||
//Adding canvases
|
||||
/obj/structure/easel/attackby(var/obj/item/I, var/mob/user, params)
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
|
||||
if(user.environment_smash)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("\red [user] destroys the [src]. ")
|
||||
visible_message("<span class='warning'>[user] destroys the [src].</span>")
|
||||
for(var/atom/movable/A in src)
|
||||
A.forceMove(loc)
|
||||
qdel(src)
|
||||
@@ -194,7 +194,7 @@
|
||||
var/desc = input("Please select a telepad.", "RCS") in L
|
||||
E.pad = L[desc]
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "\blue Teleporting [name]...")
|
||||
to_chat(user, "<span class='notice'>Teleporting [name]...</span>")
|
||||
E.teleporting = 1
|
||||
if(!do_after(user, 50 * E.toolspeed, target = src))
|
||||
E.teleporting = 0
|
||||
@@ -216,7 +216,7 @@
|
||||
E.rand_y = rand(50,200)
|
||||
var/L = locate(E.rand_x, E.rand_y, 6)
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "\blue Teleporting [name]...")
|
||||
to_chat(user, "<span class='notice'>Teleporting [name]...</span>")
|
||||
E.teleporting = 1
|
||||
if(!do_after(user, 50, E.toolspeed, target = src))
|
||||
E.teleporting = 0
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
if(isrobot(user) || src.locked)
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
to_chat(user, "\red Resetting circuitry...")
|
||||
to_chat(user, "<span class='warning'>Resetting circuitry...</span>")
|
||||
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
|
||||
if(do_after(user, 20 * O.toolspeed, target = src))
|
||||
src.locked = 0
|
||||
@@ -43,7 +43,7 @@
|
||||
user.do_attack_animation(src)
|
||||
playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time
|
||||
if(W.force < 15)
|
||||
to_chat(user, "\blue The cabinet's protective glass glances off the hit.")
|
||||
to_chat(user, "<span class='notice'>The cabinet's protective glass glances off the hit.</span>")
|
||||
else
|
||||
src.hitstaken++
|
||||
if(src.hitstaken == 4)
|
||||
@@ -56,12 +56,12 @@
|
||||
if(istype(O, /obj/item/weapon/twohanded/fireaxe) && src.localopened)
|
||||
if(!fireaxe)
|
||||
if(O:wielded)
|
||||
to_chat(user, "\red Unwield the axe first.")
|
||||
to_chat(user, "<span class='warning'>Unwield the axe first.</span>")
|
||||
return
|
||||
fireaxe = O
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
to_chat(user, "\blue You place the fire axe back in the [src.name].")
|
||||
to_chat(user, "<span class='notice'>You place the fire axe back in the [src.name].</span>")
|
||||
update_icon()
|
||||
else
|
||||
if(src.smashed)
|
||||
@@ -84,10 +84,10 @@
|
||||
spawn(10) update_icon()
|
||||
return
|
||||
else
|
||||
to_chat(user, "\red Resetting circuitry...")
|
||||
to_chat(user, "<span class='warning'>Resetting circuitry...</span>")
|
||||
sleep(50)
|
||||
src.locked = 1
|
||||
to_chat(user, "\blue You re-enable the locking modules.")
|
||||
to_chat(user, "<span class='notice'>You re-enable the locking modules.</span>")
|
||||
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
|
||||
if(do_after(user, 20 * O.toolspeed, target = src))
|
||||
src.locked = 1
|
||||
@@ -112,13 +112,13 @@
|
||||
hasaxe = 1
|
||||
|
||||
if(src.locked)
|
||||
to_chat(user, "\red The cabinet won't budge!")
|
||||
to_chat(user, "<span class='warning'>The cabinet won't budge!</span>")
|
||||
return
|
||||
if(localopened)
|
||||
if(fireaxe)
|
||||
user.put_in_hands(fireaxe)
|
||||
fireaxe = null
|
||||
to_chat(user, "\blue You take the fire axe from the [name].")
|
||||
to_chat(user, "<span class='notice'>You take the fire axe from the [name].</span>")
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
else
|
||||
@@ -145,7 +145,7 @@
|
||||
attack_tk(mob/user as mob)
|
||||
if(localopened && fireaxe)
|
||||
fireaxe.forceMove(loc)
|
||||
to_chat(user, "\blue You telekinetically remove the fire axe.")
|
||||
to_chat(user, "<span class='notice'>You telekinetically remove the fire axe.</span>")
|
||||
fireaxe = null
|
||||
update_icon()
|
||||
return
|
||||
@@ -157,9 +157,9 @@
|
||||
|
||||
if(isrobot(usr) || src.locked || src.smashed)
|
||||
if(src.locked)
|
||||
to_chat(usr, "\red The cabinet won't budge!")
|
||||
to_chat(usr, "<span class='warning'>The cabinet won't budge!</span>")
|
||||
else if(src.smashed)
|
||||
to_chat(usr, "\blue The protective glass is broken!")
|
||||
to_chat(usr, "<span class='notice'>The protective glass is broken!</span>")
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
@@ -176,23 +176,23 @@
|
||||
if(fireaxe)
|
||||
usr.put_in_hands(fireaxe)
|
||||
fireaxe = null
|
||||
to_chat(usr, "\blue You take the Fire axe from the [name].")
|
||||
to_chat(usr, "<span class='notice'>You take the Fire axe from the [name].</span>")
|
||||
else
|
||||
to_chat(usr, "\blue The [src.name] is empty.")
|
||||
to_chat(usr, "<span class='notice'>The [src.name] is empty.</span>")
|
||||
else
|
||||
to_chat(usr, "\blue The [src.name] is closed.")
|
||||
to_chat(usr, "<span class='notice'>The [src.name] is closed.</span>")
|
||||
update_icon()
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
if(src.smashed)
|
||||
to_chat(user, "\red The security of the cabinet is compromised.")
|
||||
to_chat(user, "<span class='warning'>The security of the cabinet is compromised.</span>")
|
||||
return
|
||||
else
|
||||
locked = !locked
|
||||
if(locked)
|
||||
to_chat(user, "\red Cabinet locked.")
|
||||
to_chat(user, "<span class='warning'>Cabinet locked.</span>")
|
||||
else
|
||||
to_chat(user, "\blue Cabinet unlocked.")
|
||||
to_chat(user, "<span class='notice'>Cabinet unlocked.</span>")
|
||||
|
||||
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
|
||||
var/hasaxe = 0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/structure/closet/secure_closet/freezer
|
||||
desc = "It's an immobile card-locked refrigerative storage unit. This one is lead-lined."
|
||||
desc = "It's a card-locked refrigerative storage unit. This one is lead-lined."
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/update_icon()
|
||||
if(broken)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(W) W.forceMove(loc)
|
||||
else if(istype(W, /obj/item/weapon/card/id))
|
||||
if(src.broken)
|
||||
to_chat(user, "\red It appears to be broken.")
|
||||
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
|
||||
return
|
||||
var/obj/item/weapon/card/id/I = W
|
||||
if(!I || !I.registered_name) return
|
||||
@@ -82,8 +82,8 @@
|
||||
src.registered_name = I.registered_name
|
||||
src.desc = "Owned by [I.registered_name]."
|
||||
else
|
||||
to_chat(user, "\red Access Denied")
|
||||
to_chat(user, "<span class='warning'>Access Denied</span>")
|
||||
else if((istype(W, /obj/item/weapon/card/emag) || istype(W, /obj/item/weapon/melee/energy/blade)) && !broken)
|
||||
emag_act(user)
|
||||
else
|
||||
to_chat(user, "\red Access Denied")
|
||||
to_chat(user, "<span class='warning'>Access Denied</span>")
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
locked = 0
|
||||
welded = 0
|
||||
update_icon()
|
||||
to_chat(usr, "\red You successfully break out!")
|
||||
to_chat(usr, "<span class='warning'>You successfully break out!</span>")
|
||||
for(var/mob/O in viewers(L.loc))
|
||||
O.show_message("<span class='danger'>\the [usr] successfully broke out of \the [src]!</span>", 1)
|
||||
if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
new /obj/item/clothing/head/HoS(src)
|
||||
new /obj/item/clothing/head/HoS/beret(src)
|
||||
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
|
||||
new /obj/item/weapon/storage/lockbox/loyalty(src)
|
||||
new /obj/item/weapon/storage/lockbox/mindshield(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/clothing/mask/gas/sechailer/hos(src)
|
||||
new /obj/item/weapon/shield/riot/tele(src)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user