Merge branch 'master' of https://github.com/tgstation/-tg-station into PreliminaryDamageRefactor

# Conflicts:
#	code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
#	code/game/objects/effects/portals.dm
This commit is contained in:
phil235
2016-09-29 01:44:27 +02:00
173 changed files with 879 additions and 839 deletions
@@ -17,6 +17,18 @@
viruses = null
return ..()
/obj/effect/decal/cleanable/xenoblood/xsplatter
random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5")
/obj/effect/decal/cleanable/xenoblood/xgibs
name = "xeno gibs"
desc = "Gnarly..."
icon = 'icons/effects/blood.dmi'
icon_state = "xgib1"
layer = LOW_OBJ_LAYER
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
mergeable_decal = 0
/obj/effect/decal/cleanable/xenoblood/xgibs/proc/streak(list/directions)
set waitfor = 0
var/direction = pick(directions)
@@ -31,20 +43,6 @@
if (!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/xenoblood/xgibs/replace_decal(obj/effect/decal/cleanable/C)
return //gibs can stack, so gibspawner can work properly
/obj/effect/decal/cleanable/xenoblood/xsplatter
random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5")
/obj/effect/decal/cleanable/xenoblood/xgibs
name = "xeno gibs"
desc = "Gnarly..."
icon = 'icons/effects/blood.dmi'
icon_state = "xgib1"
layer = LOW_OBJ_LAYER
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
/obj/effect/decal/cleanable/xenoblood/xgibs/ex_act()
return
@@ -48,17 +48,29 @@
icon_state = "gibbl5"
layer = LOW_OBJ_LAYER
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
mergeable_decal = 0
/obj/effect/decal/cleanable/blood/gibs/New()
..()
reagents.add_reagent("liquidgibs", 5)
/obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C)
return
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
return
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
set waitfor = 0
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
sleep(2)
if (i > 0)
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
for(var/datum/disease/D in src.viruses)
var/datum/disease/ND = D.Copy(1)
b.viruses += ND
ND.holder = b
if (!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/blood/gibs/up
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
@@ -79,23 +91,6 @@
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
set waitfor = 0
var/direction = pick(directions)
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
sleep(2)
if (i > 0)
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
for(var/datum/disease/D in src.viruses)
var/datum/disease/ND = D.Copy(1)
b.viruses += ND
ND.holder = b
if (!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C)
return //gibs can stack, so gibspawner can work properly
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."
@@ -9,6 +9,7 @@
desc = "Ashes to ashes, dust to dust, and into space."
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
mergeable_decal = 0
/obj/effect/decal/cleanable/ash/New()
..()
@@ -16,6 +17,15 @@
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/effect/decal/cleanable/ash/large
name = "large pile of ashes"
icon_state = "big_ash"
/obj/effect/decal/cleanable/ash/large/New()
..()
reagents.add_reagent("ash", 30) //double the amount of ash.
/obj/effect/decal/cleanable/dirt
name = "dirt"
desc = "Someone should clean that up."
@@ -62,6 +72,11 @@
gender = NEUTER
icon = 'icons/obj/chemical.dmi'
icon_state = "molten"
mergeable_decal = 0
/obj/effect/decal/cleanable/molten_object/large
name = "big gooey grey mass"
icon_state = "big_molten"
//Vomit (sorry)
/obj/effect/decal/cleanable/vomit
@@ -133,6 +148,7 @@
desc = "The shredded remains of what appears to be clothing."
icon_state = "shreds"
gender = PLURAL
mergeable_decal = 0
/obj/effect/decal/cleanable/shreds/New()
pixel_x = rand(-5, 5)
@@ -9,6 +9,7 @@
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
blood_state = BLOOD_STATE_OIL
bloodiness = MAX_SHOE_BLOODINESS
mergeable_decal = 0
/obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions)
set waitfor = 0
@@ -25,9 +26,6 @@
if (!step_to(src, get_step(src, direction), 0))
break
/obj/effect/decal/cleanable/robot_debris/replace_decal(obj/effect/decal/cleanable/C)
return //robot debris can stack, so gibspawner can work properly
/obj/effect/decal/cleanable/robot_debris/ex_act()
return
@@ -4,6 +4,7 @@
var/list/random_icon_states = list()
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
var/mergeable_decal = 1 //when two of these are on a same tile or do we need to merge them into just one?
/obj/effect/decal/cleanable/New()
if (random_icon_states && length(src.random_icon_states) > 0)
@@ -18,7 +19,8 @@
/obj/effect/decal/cleanable/proc/replace_decal(obj/effect/decal/cleanable/C)
qdel(C)
if(mergeable_decal)
qdel(C)
/obj/effect/decal/cleanable/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food/drinks))
@@ -39,10 +39,11 @@
/obj/effect/particle_effect/foam/proc/kill_foam()
STOP_PROCESSING(SSfastprocess, src)
if(metal)
var/obj/structure/foamedmetal/M = new(src.loc)
M.metal = metal
M.updateicon()
switch(metal)
if(1)
new /obj/structure/foamedmetal(src.loc)
if(2)
new /obj/structure/foamedmetal/iron(src.loc)
flick("[icon_state]-disolve", src)
QDEL_IN(src, 5)
@@ -206,7 +207,7 @@
qdel(src)
/obj/structure/foamedmetal/blob_act(obj/effect/blob/B)
/obj/structure/foamedmetal/blob_act(obj/structure/blob/B)
qdel(src)
@@ -281,3 +282,8 @@
/obj/structure/foamedmetal/CanAtmosPass()
return !density
/obj/structure/foamedmetal/iron
icon_state = "ironfoam"
metal = 2
+7
View File
@@ -0,0 +1,7 @@
//objects in /obj/effect should never be things that are attackable, use obj/structure instead.
//Effects are mostly temporary visual effects like sparks, smoke, as well as decals, etc...
/obj/effect
icon = 'icons/effects/effects.dmi'
+16 -16
View File
@@ -4,7 +4,7 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list(
/turf/open/floor/plating/lava,
/turf/open/floor/plating/beach/water))
/obj/effect/glowshroom
/obj/structure/glowshroom
name = "glowshroom"
desc = "Mycena Bregprox, a species of mushroom that glows in the dark."
anchored = 1
@@ -21,18 +21,18 @@ var/list/blacklisted_glowshroom_turfs = typecacheof(list(
var/generation = 1
var/spreadIntoAdjacentChance = 60
obj/effect/glowshroom/glowcap
obj/structure/glowshroom/glowcap
name = "glowcap"
icon_state = "glowcap"
/obj/effect/glowshroom/single
/obj/structure/glowshroom/single
yield = 0
/obj/effect/glowshroom/examine(mob/user)
/obj/structure/glowshroom/examine(mob/user)
. = ..()
user << "This is a [generation]\th generation [name]!"
/obj/effect/glowshroom/New()
/obj/structure/glowshroom/New()
..()
SetLuminosity(round(potency/10))
setDir(CalcDir())
@@ -53,7 +53,7 @@ obj/effect/glowshroom/glowcap
addtimer(src, "Spread", delay)
/obj/effect/glowshroom/proc/Spread()
/obj/structure/glowshroom/proc/Spread()
for(var/i = 1 to yield)
if(prob(1/(generation * generation) * 100))//This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2...
var/list/possibleLocs = list()
@@ -65,7 +65,7 @@ obj/effect/glowshroom/glowcap
for(var/turf/open/floor/earth in view(3,src))
if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs))
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
@@ -76,7 +76,7 @@ obj/effect/glowshroom/glowcap
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)
@@ -85,7 +85,7 @@ obj/effect/glowshroom/glowcap
if(shroomCount >= placeCount)
continue
var/obj/effect/glowshroom/child = new type(newLoc)//The baby mushrooms have different stats :3
var/obj/structure/glowshroom/child = new type(newLoc)//The baby mushrooms have different stats :3
child.potency = max(potency + rand(-3,6), 0)
child.yield = max(yield + rand(-1,2), 0)
child.delay = max(delay + rand(-30,60), 0)
@@ -94,7 +94,7 @@ obj/effect/glowshroom/glowcap
CHECK_TICK
/obj/effect/glowshroom/proc/CalcDir(turf/location = loc)
/obj/structure/glowshroom/proc/CalcDir(turf/location = loc)
var/direction = 16
for(var/wallDir in cardinal)
@@ -102,7 +102,7 @@ obj/effect/glowshroom/glowcap
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
@@ -126,13 +126,13 @@ obj/effect/glowshroom/glowcap
floor = 1
return 1
/obj/effect/glowshroom/attacked_by(obj/item/I, mob/user)
/obj/structure/glowshroom/attacked_by(obj/item/I, mob/user)
..()
if(I.damtype != STAMINA)
endurance -= I.force
CheckEndurance()
/obj/effect/glowshroom/ex_act(severity, target)
/obj/structure/glowshroom/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
@@ -143,16 +143,16 @@ obj/effect/glowshroom/glowcap
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)
/obj/effect/glowshroom/acid_act(acidpwr, toxpwr, acid_volume)
/obj/structure/glowshroom/acid_act(acidpwr, toxpwr, acid_volume)
visible_message("<span class='danger'>[src] melts away!</span>")
var/obj/effect/decal/cleanable/molten_item/I = new (get_turf(src))
I.desc = "Looks like this was \an [src] some time ago."
-4
View File
@@ -1,8 +1,4 @@
/obj/effect
icon = 'icons/effects/effects.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE
/obj/effect/portal
name = "portal"
desc = "Looks unstable. Best to test it with the clown."
+22 -22
View File
@@ -1,5 +1,5 @@
//generic procs copied from obj/effect/alien
/obj/effect/spider
/obj/structure/spider
name = "web"
desc = "it's stringy and sticky"
anchored = 1
@@ -7,7 +7,7 @@
var/health = 15
//similar to weeds, but only barfed out by nurses manually
/obj/effect/spider/ex_act(severity, target)
/obj/structure/spider/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
@@ -18,16 +18,16 @@
if (prob(5))
qdel(src)
/obj/effect/spider/attacked_by(obj/item/I, mob/user)
/obj/structure/spider/attacked_by(obj/item/I, mob/user)
..()
var/damage = I.force
take_damage(damage, I.damtype, 1)
/obj/effect/spider/bullet_act(obj/item/projectile/P)
/obj/structure/spider/bullet_act(obj/item/projectile/P)
. = ..()
take_damage(P.damage, P.damage_type, 0)
/obj/effect/spider/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
/obj/structure/spider/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
switch(damage_type)
if(BURN)
damage *= 2
@@ -41,18 +41,18 @@
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)
take_damage(5, BURN, 0)
/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
@@ -64,7 +64,7 @@
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"
@@ -74,17 +74,17 @@
var/poison_per_bite = 5
var/list/faction = list("spiders")
/obj/effect/spider/eggcluster/New()
/obj/structure/spider/eggcluster/New()
pixel_x = rand(3,-3)
pixel_y = rand(3,-3)
START_PROCESSING(SSobj, 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.poison_type = poison_type
S.poison_per_bite = poison_per_bite
S.faction = faction.Copy()
@@ -92,7 +92,7 @@
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"
@@ -108,18 +108,18 @@
var/poison_per_bite = 5
var/list/faction = list("spiders")
/obj/effect/spider/spiderling/New()
/obj/structure/spider/spiderling/New()
pixel_x = rand(6,-6)
pixel_y = rand(6,-6)
START_PROCESSING(SSobj, src)
/obj/effect/spider/spiderling/Bump(atom/user)
/obj/structure/spider/spiderling/Bump(atom/user)
if(istype(user, /obj/structure/table))
src.loc = user.loc
else
..()
/obj/effect/spider/spiderling/process()
/obj/structure/spider/spiderling/process()
if(travelling_in_vent)
if(istype(src.loc, /turf))
travelling_in_vent = 0
@@ -193,16 +193,16 @@
/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()
icon_state = pick("cocoon1","cocoon2","cocoon3")
/obj/structure/spider/cocoon/New()
icon_state = pick("cocoon1","cocoon2","cocoon3")
/obj/effect/spider/cocoon/container_resist()
/obj/structure/spider/cocoon/container_resist()
var/mob/living/user = usr
var/breakout_time = 2
user.changeNext_move(CLICK_CD_BREAKOUT)
@@ -216,7 +216,7 @@
/obj/effect/spider/cocoon/Destroy()
/obj/structure/spider/cocoon/Destroy()
src.visible_message("<span class='warning'>\The [src] splits open.</span>")
for(var/atom/movable/A in contents)
A.loc = src.loc
+2 -2
View File
@@ -99,7 +99,7 @@
if(W.reinf && W.fulltile)
cached_exp_block[T] += W.explosion_block
for(var/obj/effect/blob/B in T)
for(var/obj/structure/blob/B in T)
cached_exp_block[T] += B.explosion_block
CHECK_TICK
@@ -226,7 +226,7 @@
if(W.explosion_block && W.fulltile)
dist += W.explosion_block
for(var/obj/effect/blob/B in T)
for(var/obj/structure/blob/B in T)
dist += B.explosion_block
if(dist < dev)
+1 -1
View File
@@ -116,7 +116,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
qdel(X)
return ..()
/obj/item/blob_act(obj/effect/blob/B)
/obj/item/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
qdel(src)
+3 -1
View File
@@ -36,6 +36,8 @@
flick("carp_swell", src)
//Wait for animation to end
sleep(6)
if(!src || qdeleted(src))//we got toasted while animating
return
//Make space carp
var/mob/living/M = new mobtype(get_turf(src))
//Make carp non-hostile to user, and their allies
@@ -49,4 +51,4 @@
visible_message("<span class='warning'>You have a bad feeling about this.</span>") //welcome to the hostile carp enjoy your die
else
visible_message("<span class='notice'>The newly grown [M.name] looks up at you with friendly eyes.</span>")
qdel(src)
qdel(src)
@@ -883,6 +883,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/Destroy()
PDAs -= src
if(inserted_item)
qdel(inserted_item)
inserted_item = null
return ..()
//AI verb and proc for sending PDA messages.
+28 -15
View File
@@ -136,11 +136,16 @@
return .(cameras)
return html
/obj/item/device/camera_bug/proc/get_seens()
if(current && current.can_use())
var/list/seen = current.can_see()
return seen
/obj/item/device/camera_bug/proc/camera_report()
// this should only be called if current exists
var/dat = ""
if(current && current.can_use())
var/list/seen = current.can_see()
var/list/seen = get_seens()
if(seen && seen.len >= 1)
var/list/names = list()
for(var/obj/singularity/S in seen) // god help you if you see more than one
if(S.name in names)
@@ -190,23 +195,29 @@
if("mode" in href_list)
track_mode = text2num(href_list["mode"])
if("monitor" in href_list)
var/obj/machinery/camera/C = locate(href_list["monitor"])
if(C)
//You can't locate on a list with keys
var/list/cameras = flatten_list(bugged_cameras)
var/obj/machinery/camera/C = locate(href_list["monitor"]) in cameras
if(C && istype(C))
track_mode = BUGMODE_MONITOR
current = C
usr.reset_perspective(null)
interact()
if("track" in href_list)
var/atom/A = locate(href_list["track"])
if(A)
tracking = A
tracked_name = A.name
last_found = current.c_tag
last_seen = world.time
track_mode = BUGMODE_TRACK
var/list/seen = get_seens()
if(seen && seen.len >= 1)
var/atom/A = locate(href_list["track"]) in seen
if(A && istype(A))
tracking = A
tracked_name = A.name
last_found = current.c_tag
last_seen = world.time
track_mode = BUGMODE_TRACK
if("emp" in href_list)
var/obj/machinery/camera/C = locate(href_list["emp"])
if(istype(C) && C.bug == src)
//You can't locate on a list with keys
var/list/cameras = flatten_list(bugged_cameras)
var/obj/machinery/camera/C = locate(href_list["emp"]) in cameras
if(C && istype(C) && C.bug == src)
C.emp_act(1)
C.bug = null
bugged_cameras -= C.c_tag
@@ -217,8 +228,10 @@
current = null
return
if("view" in href_list)
var/obj/machinery/camera/C = locate(href_list["view"])
if(istype(C))
//You can't locate on a list with keys
var/list/cameras = flatten_list(bugged_cameras)
var/obj/machinery/camera/C = locate(href_list["view"]) in cameras
if(C && istype(C))
if(!C.can_use())
usr << "<span class='warning'>Something's wrong with that camera! You can't get a feed.</span>"
return
@@ -254,7 +254,7 @@
/obj/effect/chrono_field/ex_act()
return
/obj/effect/chrono_field/blob_act(obj/effect/blob/B)
/obj/effect/chrono_field/blob_act(obj/structure/blob/B)
return
@@ -641,7 +641,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
super = 0
user << "<span class='notice'>You decrease the voltage in the [src]</span>"
add_overlay(image(icon, "vapeopen_low"))
if(screw && emagged)
user << "<span class='notice'>The [name] can't be modified!</span>"
@@ -725,13 +725,13 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(super && vapetime > 3)//Time to start puffing those fat vapes, yo.
var/datum/effect_system/smoke_spread/chem/s = new
s.set_up(reagents, 1, loc)
s.set_up(reagents, 1, loc, silent=TRUE)
s.start()
vapetime = 0
if(emagged && vapetime > 3)
var/datum/effect_system/smoke_spread/chem/s = new
s.set_up(reagents, 4, loc)
s.set_up(reagents, 4, loc, silent=TRUE)
s.start()
vapetime = 0
if(prob(5))//small chance for the vape to break and deal damage if it's emagged
@@ -12,7 +12,7 @@
for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf))
bang(get_turf(M), M)
for(var/obj/effect/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
for(var/obj/structure/blob/B in get_hear(8,flashbang_turf)) //Blob damage here
var/distance = get_dist(B, get_turf(src))
var/damage = round(100/(distance*distance)+1)
B.take_damage(damage, BURN)
@@ -24,7 +24,7 @@
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()
@@ -137,7 +137,7 @@
..()
take_damage(I.force * 0.5, I.damtype)
/obj/effect/overlay/holograph/blob_act(obj/effect/blob/B)
/obj/effect/overlay/holograph/blob_act(obj/structure/blob/B)
qdel(src)
/obj/effect/overlay/holograph/attack_animal(mob/living/simple_animal/M)
@@ -24,11 +24,11 @@
/obj/item/weapon/implant/chem/New()
..()
create_reagents(50)
tracked_implants += src
tracked_chem_implants += src
/obj/item/weapon/implant/chem/Destroy()
..()
tracked_implants -= src
tracked_chem_implants -= src
@@ -21,7 +21,6 @@
var/l_set = 0
var/l_setshort = 0
var/l_hacking = 0
var/emagged = 0
var/open = 0
w_class = 3
max_w_class = 2
@@ -42,7 +41,7 @@
user.show_message("<span class='danger'>Now attempting to reset internal memory, please hold.</span>", 1)
src.l_hacking = 1
if (do_after(usr, 100/W.toolspeed, target = src))
if (prob(40))
if (prob(33))
src.l_setshort = 1
src.l_set = 0
user.show_message("<span class='danger'>Internal memory reset. Please give it a few seconds to reinitialize.</span>", 1)
@@ -62,17 +61,13 @@
// -> storage/attackby() what with handle insertion, etc
return ..()
/obj/item/weapon/storage/secure/emag_act(mob/user)
if(locked)
if(!emagged)
emagged = 1
src.add_overlay(image('icons/obj/storage.dmi', icon_sparking))
sleep(6)
src.overlays = null
add_overlay(image('icons/obj/storage.dmi', icon_locking))
locked = 0
user << "<span class='notice'>You short out the lock on [src].</span>"
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/card/emag))
if(locked)
user << "<span class='notice'>You take a second to realize there's no ID slot for you to emag this with.</span>"
else
user << "<span class='notice'>You take a second to realize the case is already open, making you look really silly. Hopefully no one saw.</span>"
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
if (locked)
src.add_fingerprint(usr)
@@ -84,10 +79,8 @@
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort))
if ((src.l_set == 0) && (!src.l_setshort))
dat += text("<p>\n<b>5-DIGIT PASSCODE NOT SET.<br>ENTER NEW PASSCODE.</b>")
if (src.emagged)
dat += text("<p>\n<font color=red><b>LOCKING SYSTEM ERROR - 1701</b></font>")
if (src.l_setshort)
dat += text("<p>\n<font color=red><b>ALERT: MEMORY SYSTEM ERROR - 6040 201</b></font>")
message = text("[]", src.code)
@@ -105,7 +98,7 @@
if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR"))
src.l_code = src.code
src.l_set = 1
else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
else if ((src.code == src.l_code) && (src.l_set == 1))
src.locked = 0
src.overlays = null
add_overlay(image('icons/obj/storage.dmi', icon_opened))
@@ -113,7 +106,7 @@
else
src.code = "ERROR"
else
if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
if ((href_list["type"] == "R") && (!src.l_setshort))
src.locked = 1
src.overlays = null
src.code = null
@@ -219,4 +212,4 @@
/obj/item/weapon/storage/secure/safe/HoS/New()
..()
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
@@ -91,7 +91,7 @@
user << "<span class='notice'>It feels [descriptive].</span>"
/obj/item/weapon/tank/blob_act(obj/effect/blob/B)
/obj/item/weapon/tank/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
var/turf/location = get_turf(src)
if(!location)
+1 -1
View File
@@ -15,7 +15,7 @@
if(ticker)
cameranet.updateVisibility(src)
/obj/structure/blob_act(obj/effect/blob/B)
/obj/structure/blob_act(obj/structure/blob/B)
if(density && prob(50))
qdel(src)
+1 -1
View File
@@ -119,7 +119,7 @@
if(3)
take_damage(50, BRUTE, 0)
/obj/structure/alien/blob_act(obj/effect/blob/B)
/obj/structure/alien/blob_act(obj/structure/blob/B)
take_damage(50, BRUTE, 0)
/obj/structure/alien/resin/hitby(atom/movable/AM)
@@ -120,7 +120,7 @@
if(user.environment_smash)
shatter()
/obj/structure/closet/statue/blob_act(obj/effect/blob/B)
/obj/structure/closet/statue/blob_act(obj/structure/blob/B)
shatter()
/obj/structure/closet/statue/attacked_by(obj/item/I, mob/living/user)
+1 -1
View File
@@ -48,7 +48,7 @@
showpiece.loc = src.loc
showpiece = null
/obj/structure/displaycase/blob_act(obj/effect/blob/B)
/obj/structure/displaycase/blob_act(obj/structure/blob/B)
take_damage(30)
/obj/structure/displaycase/hitby(atom/movable/AM)
+1 -1
View File
@@ -83,7 +83,7 @@
take_damage(P.damage, P.damage_type, 0)
/obj/structure/fireaxecabinet/blob_act(obj/effect/blob/B)
/obj/structure/fireaxecabinet/blob_act(obj/structure/blob/B)
if(fireaxe)
fireaxe.forceMove(loc)
qdel(src)
+1 -1
View File
@@ -272,7 +272,7 @@
qdel(src)
/obj/structure/girder/blob_act(obj/effect/blob/B)
/obj/structure/girder/blob_act(obj/structure/blob/B)
if(prob(40))
qdel(src)
+1 -1
View File
@@ -32,7 +32,7 @@
new /obj/structure/grille/ratvar(src.loc)
qdel(src)
/obj/structure/grille/blob_act(obj/effect/blob/B)
/obj/structure/grille/blob_act(obj/structure/blob/B)
if(!destroyed)
Break()
+3 -1
View File
@@ -76,7 +76,9 @@
/obj/structure/guncase/Topic(href, href_list)
if(href_list["retrieve"])
var/obj/item/O = locate(href_list["retrieve"])
var/obj/item/O = locate(href_list["retrieve"]) in contents
if(!O || !istype(O))
return
if(!usr.canUseTopic(src))
return
if(ishuman(usr))
+1 -1
View File
@@ -27,7 +27,7 @@
stored = null
return ..()
/obj/structure/lattice/blob_act(obj/effect/blob/B)
/obj/structure/lattice/blob_act(obj/structure/blob/B)
return
/obj/structure/lattice/ex_act(severity, target)
+1 -1
View File
@@ -164,7 +164,7 @@ FLOOR SAFES
return ..()
obj/structure/safe/blob_act(obj/effect/blob/B)
obj/structure/safe/blob_act(obj/structure/blob/B)
return
obj/structure/safe/ex_act(severity, target)
+1 -1
View File
@@ -13,7 +13,7 @@
/obj/structure/sign/ex_act(severity, target)
qdel(src)
/obj/structure/sign/blob_act(obj/effect/blob/B)
/obj/structure/sign/blob_act(obj/structure/blob/B)
qdel(src)
/obj/structure/sign/attackby(obj/item/O, mob/user, params)
+2 -2
View File
@@ -53,7 +53,7 @@
if(3)
take_damage(rand(40,80), BRUTE, 0)
/obj/structure/table/blob_act(obj/effect/blob/B)
/obj/structure/table/blob_act(obj/structure/blob/B)
take_damage(rand(75,150), BRUTE, 0)
/obj/structure/table/narsie_act()
@@ -477,7 +477,7 @@
if(3)
take_damage(rand(5,25), BRUTE, 0)
/obj/structure/rack/blob_act(obj/effect/blob/B)
/obj/structure/rack/blob_act(obj/structure/blob/B)
rack_destroy()
+1 -1
View File
@@ -65,7 +65,7 @@
if(3)
take_damage(rand(25,75), BRUTE, 0)
/obj/structure/window/blob_act(obj/effect/blob/B)
/obj/structure/window/blob_act(obj/structure/blob/B)
take_damage(rand(75,150), BRUTE, 0)
/obj/structure/window/narsie_act()