Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'

This commit is contained in:
scrubmcnoob
2017-04-29 19:42:10 -04:00
736 changed files with 17483 additions and 14420 deletions
+2 -1
View File
@@ -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
+17 -16
View File
@@ -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)
+1 -1
View File
@@ -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
+28 -21
View File
@@ -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)
+4 -1
View File
@@ -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)
+31 -24
View File
@@ -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
+9 -4
View File
@@ -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
+8 -7
View File
@@ -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)
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
+1 -3
View File
@@ -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)
+5
View File
@@ -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
+33 -64
View File
@@ -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
+1 -1
View File
@@ -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
+1 -2
View File
@@ -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()
-87
View File
@@ -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"
+5 -2
View File
@@ -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
+4 -6
View File
@@ -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)
+7 -5
View File
@@ -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
+13 -15
View File
@@ -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)
+34 -34
View File
@@ -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]&deg;C ([M.bodytemperature*1.8-459.67]&deg;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]&deg;C ([M.bodytemperature*1.8-459.67]&deg;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]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1)
user.show_message("<span class='notice'>Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;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 ..()
+1 -2
View File
@@ -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()
+1 -1
View File
@@ -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
+1 -3
View File
@@ -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)
+5 -5
View File
@@ -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
+1 -1
View File
@@ -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)
+19 -19
View File
@@ -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
..()
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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
+4 -1
View File
@@ -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()
+1 -2
View File
@@ -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 ..()
+1 -3
View File
@@ -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 ..()
+1
View File
@@ -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)
..()
+2 -2
View File
@@ -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)
+12 -2
View File
@@ -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
..()
+2 -6
View File
@@ -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
+2 -6
View File
@@ -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
..()
+1
View File
@@ -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()
+30 -25
View File
@@ -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()
+1 -3
View File
@@ -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"
+14 -15
View File
@@ -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 -1
View File
@@ -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)
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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))
+2 -2
View File
@@ -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
+6 -6
View File
@@ -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()
+3
View File
@@ -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