nor-shall-our-souls-falter

This commit is contained in:
Fox McCloud
2019-09-17 16:06:09 -04:00
parent 6f637b6014
commit aa49033844
157 changed files with 762 additions and 1057 deletions

View File

@@ -337,6 +337,7 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
/obj/machinery/atmospherics/singularity_pull(S, current_size) /obj/machinery/atmospherics/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE) if(current_size >= STAGE_FIVE)
deconstruct(FALSE) deconstruct(FALSE)
return ..()
/obj/machinery/atmospherics/update_remote_sight(mob/user) /obj/machinery/atmospherics/update_remote_sight(mob/user)
user.sight |= (SEE_TURFS|BLIND) user.sight |= (SEE_TURFS|BLIND)

View File

@@ -326,6 +326,16 @@
/obj/machinery/atmospherics/unary/vent_pump/can_crawl_through() /obj/machinery/atmospherics/unary/vent_pump/can_crawl_through()
return !welded return !welded
/obj/machinery/atmospherics/unary/vent_pump/attack_alien(mob/user)
if(!welded || !(do_after(user, 20, target = src)))
return
user.visible_message("<span class='warning'>[user] furiously claws at [src]!</span>", "<span class='notice'>You manage to clear away the stuff blocking the vent.</span>", "<span class='italics'>You hear loud scraping noises.</span>")
welded = FALSE
update_icon()
pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir)
pipe_image.plane = ABOVE_HUD_PLANE
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE)
/obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user, params) /obj/machinery/atmospherics/unary/vent_pump/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weldingtool)) if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W var/obj/item/weldingtool/WT = W

View File

@@ -382,6 +382,16 @@
/obj/machinery/atmospherics/unary/vent_scrubber/can_crawl_through() /obj/machinery/atmospherics/unary/vent_scrubber/can_crawl_through()
return !welded return !welded
/obj/machinery/atmospherics/unary/vent_scrubber/attack_alien(mob/user)
if(!welded || !(do_after(user, 20, target = src)))
return
user.visible_message("<span class='warning'>[user] furiously claws at [src]!</span>", "<span class='notice'>You manage to clear away the stuff blocking the scrubber.</span>", "<span class='italics'>You hear loud scraping noises.</span>")
welded = FALSE
update_icon()
pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir)
pipe_image.plane = ABOVE_HUD_PLANE
playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE)
/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/W as obj, var/mob/user as mob, params) /obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/W as obj, var/mob/user as mob, params)
if(istype(W, /obj/item/weldingtool)) if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W var/obj/item/weldingtool/WT = W

View File

@@ -193,6 +193,9 @@
if(isliving(L)) if(isliving(L))
L.fire_act() L.fire_act()
/obj/effect/hotspot/singularity_pull()
return
/obj/effect/hotspot/fake // Largely for the fireflash procs below /obj/effect/hotspot/fake // Largely for the fireflash procs below
fake = TRUE fake = TRUE
burn_time = 30 burn_time = 30

View File

@@ -14,6 +14,7 @@
#define ABSTRACT 64 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way #define ABSTRACT 64 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
#define ON_BORDER 128 // item has priority to check when entering or leaving #define ON_BORDER 128 // item has priority to check when entering or leaving
#define PREVENT_CLICK_UNDER 256 #define PREVENT_CLICK_UNDER 256
#define NODECONSTRUCT 512
#define EARBANGPROTECT 1024 #define EARBANGPROTECT 1024

View File

@@ -12,6 +12,8 @@
#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) #define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct))
//Objects //Objects
#define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs
#define isitem(A) (istype(A, /obj/item)) #define isitem(A) (istype(A, /obj/item))
#define ismachinery(A) (istype(A, /obj/machinery)) #define ismachinery(A) (istype(A, /obj/machinery))

View File

@@ -55,8 +55,9 @@
target = A target = A
AttackingTarget() AttackingTarget()
/atom/proc/attack_animal(mob/user as mob) /atom/proc/attack_animal(mob/user)
return return
/mob/living/RestrainedClickOn(var/atom/A) /mob/living/RestrainedClickOn(var/atom/A)
return return
@@ -64,18 +65,20 @@
Aliens Aliens
Defaults to same as monkey in most places Defaults to same as monkey in most places
*/ */
/mob/living/carbon/alien/UnarmedAttack(var/atom/A) /mob/living/carbon/alien/UnarmedAttack(atom/A)
A.attack_alien(src) A.attack_alien(src)
/atom/proc/attack_alien(mob/user as mob)
/atom/proc/attack_alien(mob/living/carbon/alien/user)
attack_hand(user) attack_hand(user)
return
/mob/living/carbon/alien/RestrainedClickOn(var/atom/A) /mob/living/carbon/alien/RestrainedClickOn(atom/A)
return return
// Babby aliens // Babby aliens
/mob/living/carbon/alien/larva/UnarmedAttack(var/atom/A) /mob/living/carbon/alien/larva/UnarmedAttack(atom/A)
A.attack_larva(src) A.attack_larva(src)
/atom/proc/attack_larva(mob/user as mob)
/atom/proc/attack_larva(mob/user)
return return

View File

@@ -119,6 +119,12 @@
owner = null owner = null
return ..() return ..()
/obj/effect/ebeam/singularity_pull()
return
/obj/effect/ebeam/singularity_act()
return
/obj/effect/ebeam/deadly/Crossed(atom/A, oldloc) /obj/effect/ebeam/deadly/Crossed(atom/A, oldloc)
..() ..()
A.ex_act(1) A.ex_act(1)

View File

@@ -7,6 +7,12 @@
var/ranged_mousepointer var/ranged_mousepointer
var/mob/living/ranged_ability_user var/mob/living/ranged_ability_user
/obj/effect/proc_holder/singularity_act()
return
/obj/effect/proc_holder/singularity_pull()
return
var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now
/obj/effect/proc_holder/proc/InterceptClickOn(mob/living/user, params, atom/A) /obj/effect/proc_holder/proc/InterceptClickOn(mob/living/user, params, atom/A)

View File

@@ -164,6 +164,10 @@
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir) SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir dir = newdir
///Handle melee attack by a mech
/atom/proc/mech_melee_attack(obj/mecha/M)
return
/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) /atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE)
SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user)
if(does_attack_animation) if(does_attack_animation)
@@ -235,6 +239,7 @@
return return
/atom/proc/bullet_act(obj/item/projectile/P, def_zone) /atom/proc/bullet_act(obj/item/projectile/P, def_zone)
SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone)
. = P.on_hit(src, 0, def_zone) . = P.on_hit(src, 0, def_zone)
/atom/proc/in_contents_of(container)//can take class or object instance as argument /atom/proc/in_contents_of(container)//can take class or object instance as argument
@@ -716,8 +721,8 @@ var/list/blood_splatter_icons = list()
/atom/proc/singularity_act() /atom/proc/singularity_act()
return return
/atom/proc/singularity_pull() /atom/proc/singularity_pull(obj/singularity/S, current_size)
return SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, S, current_size)
/** /**
* Respond to acid being used on our atom * Respond to acid being used on our atom

View File

@@ -321,7 +321,7 @@
if(!QDELETED(hit_atom)) if(!QDELETED(hit_atom))
return hit_atom.hitby(src) return hit_atom.hitby(src)
/atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked, datum/thrownthing/throwingdatum) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum)
if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO)))) if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO))))
step(src, AM.dir) step(src, AM.dir)
..() ..()

View File

@@ -310,15 +310,6 @@
//Foreach goto(181) //Foreach goto(181)
//SN src = null //SN src = null
qdel(src) qdel(src)
return
else
return
/obj/machinery/dna_scannernew/blob_act()
if(prob(75))
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
qdel(src)
// Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations // Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations
/obj/machinery/dna_scannernew/proc/radiation_check() /obj/machinery/dna_scannernew/proc/radiation_check()
@@ -387,13 +378,6 @@
if(prob(50)) if(prob(50))
//SN src = null //SN src = null
qdel(src) qdel(src)
return
else
return
/obj/machinery/computer/scan_consolenew/blob_act()
if(prob(75))
qdel(src)
/obj/machinery/computer/scan_consolenew/New() /obj/machinery/computer/scan_consolenew/New()
..() ..()

View File

@@ -7,7 +7,7 @@
/mob/living/simple_animal/hostile/blob /mob/living/simple_animal/hostile/blob
icon = 'icons/mob/blob.dmi' icon = 'icons/mob/blob.dmi'
pass_flags = PASSBLOB pass_flags = PASSBLOB
faction = list("blob") faction = list(ROLE_BLOB)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0 minbodytemp = 0
maxbodytemp = 360 maxbodytemp = 360
@@ -21,7 +21,14 @@
color = a_color color = a_color
/mob/living/simple_animal/hostile/blob/blob_act() /mob/living/simple_animal/hostile/blob/blob_act()
return if(stat != DEAD && health < maxHealth)
for(var/i in 1 to 2)
var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed
if(overmind)
H.color = overmind.blob_reagent_datum.complementary_color
else
H.color = "#000000"
adjustHealth(-maxHealth * 0.0125)
//////////////// ////////////////
@@ -185,9 +192,6 @@
adjustBruteLoss(0.2) // If you are at full health, you won't lose health. You'll need it. However the moment anybody sneezes on you, the decaying will begin. adjustBruteLoss(0.2) // If you are at full health, you won't lose health. You'll need it. However the moment anybody sneezes on you, the decaying will begin.
adjustFireLoss(0.2) adjustFireLoss(0.2)
/mob/living/simple_animal/hostile/blob/blobbernaut/blob_act()
return
/mob/living/simple_animal/hostile/blob/blobbernaut/New() /mob/living/simple_animal/hostile/blob/blobbernaut/New()
..() ..()
if(name == "blobbernaut") if(name == "blobbernaut")

View File

@@ -55,7 +55,4 @@
else else
playsound(src, P.hitsound, 50, 1) playsound(src, P.hitsound, 50, 1)
visible_message("<span class='danger'>[src] is hit by \a [P]!</span>") visible_message("<span class='danger'>[src] is hit by \a [P]!</span>")
take_damage(P.damage, P.damage_type) take_damage(P.damage, P.damage_type)
/obj/structure/blob/shield/reflective/bullet_act()
return

View File

@@ -9,7 +9,7 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
pass_flags = PASSBLOB pass_flags = PASSBLOB
faction = list("blob") faction = list(ROLE_BLOB)
var/obj/structure/blob/core/blob_core = null // The blob overmind's core var/obj/structure/blob/core/blob_core = null // The blob overmind's core
var/blob_points = 0 var/blob_points = 0
@@ -90,7 +90,7 @@
/mob/camera/blob/emote(act, m_type = 1, message = null, force) /mob/camera/blob/emote(act, m_type = 1, message = null, force)
return return
/mob/camera/blob/blob_act() /mob/camera/blob/blob_act(obj/structure/blob/B)
return return
/mob/camera/blob/Stat() /mob/camera/blob/Stat()

View File

@@ -333,7 +333,7 @@
last_attack = world.time last_attack = world.time
OB.expand(T, 0, blob_reagent_datum.color) OB.expand(T, 0, blob_reagent_datum.color)
for(var/mob/living/L in T) for(var/mob/living/L in T)
if("blob" in L.faction) //no friendly fire if(ROLE_BLOB in L.faction) //no friendly/dead fire
continue continue
var/mob_protection = L.get_permeability_protection() var/mob_protection = L.get_permeability_protection()
blob_reagent_datum.reaction_mob(L, TOUCH, 25, 1, mob_protection) blob_reagent_datum.reaction_mob(L, TOUCH, 25, 1, mob_protection)

View File

@@ -50,7 +50,7 @@
Life() Life()
return return
/obj/structure/blob/blob_act() /obj/structure/blob/blob_act(obj/structure/blob/B)
return return
/obj/structure/blob/proc/Life() /obj/structure/blob/proc/Life()
@@ -134,11 +134,6 @@
var/damage = 150 - 20 * severity var/damage = 150 - 20 * severity
take_damage(damage, BRUTE) take_damage(damage, BRUTE)
/obj/structure/blob/bullet_act(var/obj/item/projectile/Proj)
..()
take_damage(Proj.damage, Proj.damage_type)
return 0
/obj/structure/blob/Crossed(var/mob/living/L, oldloc) /obj/structure/blob/Crossed(var/mob/living/L, oldloc)
..() ..()
L.blob_act(src) L.blob_act(src)
@@ -159,23 +154,20 @@
playsound(src.loc, 'sound/items/welder.ogg', 100, 1) playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
take_damage(W.force, W.damtype) take_damage(W.force, W.damtype)
/obj/structure/blob/attack_animal(mob/living/simple_animal/M as mob) /obj/structure/blob/attack_animal(mob/living/simple_animal/M)
M.changeNext_move(CLICK_CD_MELEE) if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut
M.do_attack_animation(src) return
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) ..()
visible_message("<span class='danger'>\The [M] has attacked the [src.name]!</span>")
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
take_damage(damage, BRUTE)
return
/obj/structure/blob/attack_alien(mob/living/carbon/alien/humanoid/M as mob) /obj/structure/blob/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
M.changeNext_move(CLICK_CD_MELEE) switch(damage_type)
M.do_attack_animation(src) if(BRUTE)
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1) if(damage_amount)
visible_message("<span class='danger'>[M] has slashed the [src.name]!</span>") playsound(src.loc, 'sound/effects/attackblob.ogg', 50, TRUE)
var/damage = rand(15, 30) else
take_damage(damage, BRUTE) playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
return if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) /obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir)
switch(damage_type) switch(damage_type)

View File

@@ -78,9 +78,6 @@
take_damage(I.force, I.damtype) take_damage(I.force, I.damtype)
playsound(loc, I.hitsound, 80, 1) playsound(loc, I.hitsound, 80, 1)
/obj/structure/cult/functional/bullet_act(var/obj/item/projectile/P)
take_damage(P.damage, P.damage_type)
/obj/structure/cult/functional/attack_hand(mob/living/user) /obj/structure/cult/functional/attack_hand(mob/living/user)
if(!iscultist(user)) if(!iscultist(user))
to_chat(user, "[heathen_message]") to_chat(user, "[heathen_message]")
@@ -260,6 +257,12 @@ var/list/blacklisted_pylon_turfs = typecacheof(list(
density = 1 density = 1
anchored = 1.0 anchored = 1.0
/obj/effect/gateway/singularity_act()
return
/obj/effect/gateway/singularity_pull()
return
/obj/effect/gateway/Bumped(mob/M as mob|obj) /obj/effect/gateway/Bumped(mob/M as mob|obj)
spawn(0) spawn(0)
return return

View File

@@ -487,6 +487,13 @@
. = ..() . = ..()
set_light(lon_range) set_light(lon_range)
/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src, 'sound/weapons/egloves.ogg', 80, TRUE)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/swarmer/disintegration /obj/structure/swarmer/disintegration
icon_state = "disintegrate" icon_state = "disintegrate"
@@ -509,12 +516,6 @@
spawn(5) spawn(5)
qdel(src) qdel(src)
/obj/structure/swarmer/bullet_act(obj/item/projectile/Proj)
if(Proj.damage)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
take_damage(Proj.damage)
..()
/obj/structure/swarmer/attackby(obj/item/I, mob/living/user, params) /obj/structure/swarmer/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item)) if(istype(I, /obj/item))
user.changeNext_move(CLICK_CD_MELEE) user.changeNext_move(CLICK_CD_MELEE)
@@ -526,21 +527,8 @@
qdel(src) qdel(src)
return return
/obj/structure/swarmer/blob_act()
qdel(src)
return
/obj/structure/swarmer/emp_act() /obj/structure/swarmer/emp_act()
qdel(src) qdel(src)
return
/obj/structure/swarmer/attack_animal(mob/living/user)
if(isanimal(user))
var/mob/living/simple_animal/S = user
S.do_attack_animation(src)
user.changeNext_move(CLICK_CD_MELEE)
if(S.melee_damage_type == BRUTE || S.melee_damage_type == BURN)
take_damage(rand(S.melee_damage_lower, S.melee_damage_upper))
return
/obj/structure/swarmer/trap /obj/structure/swarmer/trap
name = "swarmer trap" name = "swarmer trap"

View File

@@ -101,6 +101,11 @@
var/mob/living/spawner var/mob/living/spawner
invisibility = 1 invisibility = 1
/obj/effect/snare/singularity_act()
return
/obj/effect/snare/singularity_pull()
return
/obj/item/effect/snare/Crossed(AM as mob|obj, oldloc) /obj/item/effect/snare/Crossed(AM as mob|obj, oldloc)
if(isliving(AM)) if(isliving(AM))

View File

@@ -76,8 +76,8 @@
/mob/living/simple_animal/revenant/ex_act(severity) /mob/living/simple_animal/revenant/ex_act(severity)
return 1 //Immune to the effects of explosions. return 1 //Immune to the effects of explosions.
/mob/living/simple_animal/revenant/blob_act() /mob/living/simple_animal/revenant/blob_act(obj/structure/blob/B)
return 1 //blah blah blobs aren't in tune with the spirit world, or something. return //blah blah blobs aren't in tune with the spirit world, or something.
/mob/living/simple_animal/revenant/singularity_act() /mob/living/simple_animal/revenant/singularity_act()
return //don't walk into the singularity expecting to find corpses, okay? return //don't walk into the singularity expecting to find corpses, okay?

View File

@@ -336,12 +336,10 @@ var/bomb_set
/obj/machinery/nuclearbomb/ex_act(severity) /obj/machinery/nuclearbomb/ex_act(severity)
return return
/obj/machinery/nuclearbomb/blob_act() /obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B)
if(timing == -1.0) if(timing == -1.0)
return return
else qdel(src)
return ..()
return
/obj/machinery/nuclearbomb/tesla_act(power, explosive) /obj/machinery/nuclearbomb/tesla_act(power, explosive)
..() ..()

View File

@@ -174,6 +174,12 @@
return return
..() ..()
/obj/effect/rend/singularity_pull()
return
/obj/effect/rend/singularity_pull()
return
/obj/item/veilrender/vealrender /obj/item/veilrender/vealrender
name = "veal render" name = "veal render"
desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm." desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast farm."

View File

@@ -49,12 +49,6 @@
if(3.0) if(3.0)
if(prob(25)) if(prob(25))
src.density = 0 src.density = 0
else
return
/obj/machinery/optable/blob_act()
if(prob(75))
qdel(src)
/obj/machinery/optable/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) /obj/machinery/optable/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE)
if(user.a_intent == INTENT_HARM) if(user.a_intent == INTENT_HARM)

View File

@@ -264,15 +264,6 @@
add_fingerprint(usr) add_fingerprint(usr)
return 1 return 1
/obj/machinery/sleeper/blob_act()
if(prob(75))
var/atom/movable/A = occupant
go_out()
A.blob_act()
qdel(src)
return
/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params) /obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/glass)) if(istype(I, /obj/item/reagent_containers/glass))
if(!beaker) if(!beaker)

View File

@@ -194,28 +194,12 @@
A.forceMove(loc) A.forceMove(loc)
A.ex_act(severity) A.ex_act(severity)
qdel(src) qdel(src)
return
/obj/machinery/bodyscanner/blob_act()
if(prob(50))
var/atom/movable/A = occupant
go_out()
A.blob_act()
qdel(src)
/obj/machinery/bodyscanner/narsie_act() /obj/machinery/bodyscanner/narsie_act()
go_out() go_out()
new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH! new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH!
qdel(src) qdel(src)
/obj/machinery/bodyscanner/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
if(M.environment_smash)
M.do_attack_animation(src)
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
go_out()
qdel(src)
return
/obj/machinery/body_scanconsole /obj/machinery/body_scanconsole
name = "Body Scanner Console" name = "Body Scanner Console"
icon = 'icons/obj/cryogenic2.dmi' icon = 'icons/obj/cryogenic2.dmi'
@@ -269,20 +253,6 @@
if(prob(50)) if(prob(50))
//SN src = null //SN src = null
qdel(src) qdel(src)
return
else
return
/obj/machinery/body_scanconsole/blob_act()
if(prob(50))
qdel(src)
/obj/machinery/body_scanconsole/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
if(M.environment_smash)
M.do_attack_animation(src)
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
qdel(src)
return
/obj/machinery/body_scanconsole/proc/findscanner() /obj/machinery/body_scanconsole/proc/findscanner()
for(dir in list(NORTH,EAST,SOUTH,WEST)) for(dir in list(NORTH,EAST,SOUTH,WEST))

View File

@@ -326,18 +326,6 @@ update_flag
return GM.return_pressure() return GM.return_pressure()
return 0 return 0
/obj/machinery/portable_atmospherics/canister/blob_act()
src.health -= 200
healthcheck()
return
/obj/machinery/portable_atmospherics/canister/bullet_act(var/obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
if(Proj.damage)
src.health -= round(Proj.damage / 2)
healthcheck()
..()
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob, params) /obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE) user.changeNext_move(CLICK_CD_MELEE)
if(iswelder(W) && src.destroyed) if(iswelder(W) && src.destroyed)
@@ -385,9 +373,6 @@ update_flag
src.add_hiddenprint(user) src.add_hiddenprint(user)
return src.attack_hand(user) return src.attack_hand(user)
/obj/machinery/portable_atmospherics/canister/attack_alien(mob/living/carbon/alien/humanoid/user)
return
/obj/machinery/portable_atmospherics/canister/attack_ghost(var/mob/user as mob) /obj/machinery/portable_atmospherics/canister/attack_ghost(var/mob/user as mob)
return src.ui_interact(user) return src.ui_interact(user)

View File

@@ -139,6 +139,11 @@
new /obj/item/pipe_meter(src.loc) new /obj/item/pipe_meter(src.loc)
qdel(src) qdel(src)
/obj/machinery/meter/singularity_pull(S, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct()
// TURF METER - REPORTS A TILE'S AIR CONTENTS // TURF METER - REPORTS A TILE'S AIR CONTENTS
/obj/machinery/meter/turf/New() /obj/machinery/meter/turf/New()

View File

@@ -118,6 +118,11 @@
view_range = num view_range = num
cameranet.updateVisibility(src, 0) cameranet.updateVisibility(src, 0)
/obj/machinery/camera/singularity_pull(S, current_size)
if (status && current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects and the camera is still active, turn off the camera as it gets ripped off the wall.
toggle_cam(null, 0)
..()
/obj/machinery/camera/attackby(obj/item/I, mob/living/user, params) /obj/machinery/camera/attackby(obj/item/I, mob/living/user, params)
var/msg = "<span class='notice'>You attach [I] into the assembly inner circuits.</span>" var/msg = "<span class='notice'>You attach [I] into the assembly inner circuits.</span>"
var/msg2 = "<span class='notice'>The camera already has that upgrade!</span>" var/msg2 = "<span class='notice'>The camera already has that upgrade!</span>"

View File

@@ -192,9 +192,9 @@
emergencyShutdown() emergencyShutdown()
..() ..()
/obj/machinery/computer/HolodeckControl/blob_act() /obj/machinery/computer/HolodeckControl/blob_act(obj/structure/blob/B)
emergencyShutdown() emergencyShutdown()
..() return ..()
/obj/machinery/computer/HolodeckControl/process() /obj/machinery/computer/HolodeckControl/process()
for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down. for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down.
@@ -505,6 +505,18 @@
else else
return ..(mover, target, height) return ..(mover, target, height)
/obj/structure/holohoop/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(isitem(AM) && !istype(AM,/obj/item/projectile))
if(prob(50))
AM.forceMove(get_turf(src))
visible_message("<span class='warning'>Swish! [AM] lands in [src].</span>")
return
else
visible_message("<span class='danger'>[AM] bounces off of [src]'s rim!</span>")
return ..()
else
return ..()
/obj/machinery/readybutton /obj/machinery/readybutton
name = "Ready Declaration Device" name = "Ready Declaration Device"
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!" desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"

View File

@@ -177,6 +177,17 @@
feedback_inc("cyborg_ais_created",1) feedback_inc("cyborg_ais_created",1)
qdel(src) qdel(src)
/obj/structure/AIcore/deconstruct(disassembled = TRUE)
if(state == 4)
new /obj/item/stack/sheet/rglass(loc, 2)
if(state >= 3)
new /obj/item/stack/cable_coil(loc, 5)
if(circuit)
circuit.forceMove(loc)
circuit = null
new /obj/item/stack/sheet/plasteel(loc, 4)
qdel(src)
/obj/structure/AIcore/deactivated /obj/structure/AIcore/deactivated
name = "Inactive AI" name = "Inactive AI"
icon = 'icons/mob/AI.dmi' icon = 'icons/mob/AI.dmi'

View File

@@ -55,19 +55,6 @@
verbs -= x verbs -= x
set_broken() set_broken()
/obj/machinery/computer/bullet_act(var/obj/item/projectile/Proj)
if(prob(Proj.damage))
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
set_broken()
..()
/obj/machinery/computer/blob_act()
if(prob(75))
for(var/x in verbs)
verbs -= x
set_broken()
density = 0
/obj/machinery/computer/extinguish_light() /obj/machinery/computer/extinguish_light()
set_light(0) set_light(0)
visible_message("<span class='danger'>[src] grows dim, its screen barely readable.</span>") visible_message("<span class='danger'>[src] grows dim, its screen barely readable.</span>")
@@ -96,6 +83,16 @@
else else
set_light(light_range_on, light_power_on) set_light(light_range_on, light_power_on)
/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(stat & BROKEN)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
else
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/machinery/computer/proc/set_broken() /obj/machinery/computer/proc/set_broken()
if(!(resistance_flags & INDESTRUCTIBLE)) if(!(resistance_flags & INDESTRUCTIBLE))
stat |= BROKEN stat |= BROKEN
@@ -136,24 +133,4 @@
A.icon_state = "4" A.icon_state = "4"
qdel(src) qdel(src)
else else
attack_hand(user) attack_hand(user)
return
/obj/machinery/computer/attack_alien(mob/living/user)
if(isalien(user) && user.a_intent == INTENT_HELP)
var/mob/living/carbon/alien/humanoid/xeno = user
if(xeno.has_fine_manipulation)
return attack_hand(user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
if(circuit)
if(prob(80))
user.visible_message("<span class='danger'>[user.name] smashes the [src.name] with its claws.</span>",\
"<span class='danger'>You smash the [src.name] with your claws.</span>",\
"<span class='danger'>You hear a smashing sound.</span>")
set_broken()
return
user.visible_message("<span class='danger'>[user.name] smashes against the [src.name] with its claws.</span>",\
"<span class='danger'>You smash against the [src.name] with your claws.</span>",\
"<span class='danger'>You hear a clicking sound.</span>")

View File

@@ -19,46 +19,11 @@
var/drop_amount = 3 var/drop_amount = 3
var/stacktype = /obj/item/stack/sheet/metal var/stacktype = /obj/item/stack/sheet/metal
/obj/structure/barricade/blob_act(obj/structure/blob/B) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
/obj/structure/barricade/ex_act(severity) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
if(resistance_flags & INDESTRUCTIBLE)
return
switch(severity)
if(1)
obj_integrity = 0
qdel(src)
if(2)
take_damage(rand(100, 250), BRUTE, "bomb", 0)
if(3)
take_damage(rand(10, 90), BRUTE, "bomb", 0)
/obj/structure/barricade/mech_melee_attack(obj/mecha/M) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
M.do_attack_animation(src)
var/play_soundeffect = 0
var/mech_damtype = M.damtype
if(M.selected)
mech_damtype = M.selected.damtype
play_soundeffect = 1
else
switch(M.damtype)
if(BRUTE)
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 50, 1)
if(TOX)
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
return 0
else
return 0
visible_message("<span class='danger'>[M.name] has hit [src].</span>")
return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
/obj/structure/barricade/deconstruct(disassembled = TRUE) /obj/structure/barricade/deconstruct(disassembled = TRUE)
make_debris() make_debris()
qdel(src) qdel(src)
/obj/structure/barricade/proc/make_debris() /obj/structure/barricade/proc/make_debris()
if(stacktype) if(stacktype)
new stacktype(get_turf(src), drop_amount) new stacktype(get_turf(src), drop_amount)

View File

@@ -648,6 +648,11 @@ About the new airlock wires panel:
do_sparks(5, 1, src) do_sparks(5, 1, src)
return ..() return ..()
/obj/machinery/door/airlock/attack_animal(mob/user)
. = ..()
if(isElectrified())
shock(user, 100)
/obj/machinery/door/airlock/attack_hand(mob/user) /obj/machinery/door/airlock/attack_hand(mob/user)
if(shock_user(user, 100)) if(shock_user(user, 100))
return return
@@ -1230,11 +1235,11 @@ About the new airlock wires panel:
var/time_to_open = 5 var/time_to_open = 5
if(arePowerSystemsOn()) if(arePowerSystemsOn())
time_to_open = 50 //Powered airlocks take longer to open, and are loud. time_to_open = 50 //Powered airlocks take longer to open, and are loud.
playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, 1) playsound(src, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE)
if(do_after(user, time_to_open, target = src)) if(do_after(user, time_to_open, TRUE, src))
if(density && !open(1)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
to_chat(user, "<span class='warning'>Despite your efforts, [src] managed to resist your attempts to open it!</span>") to_chat(user, "<span class='warning'>Despite your efforts, [src] managed to resist your attempts to open it!</span>")
/obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason /obj/machinery/door/airlock/power_change() //putting this is obj/machinery/door itself makes non-airlock doors turn invisible for some reason

View File

@@ -213,13 +213,13 @@
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
if(glass) if(glass)
playsound(loc, 'sound/effects/glasshit.ogg', 90, 1) playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE)
else if(damage_amount) else if(damage_amount)
playsound(loc, 'sound/weapons/smash.ogg', 50, 1) playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE)
else else
playsound(loc, 'sound/weapons/tap.ogg', 50, 1) playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN) if(BURN)
playsound(loc, 'sound/items/welder.ogg', 100, 1) playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/machinery/door/emag_act(mob/user) /obj/machinery/door/emag_act(mob/user)
if(density) if(density)
@@ -372,32 +372,5 @@
if(!stat) //Opens only powered doors. if(!stat) //Opens only powered doors.
open() //Open everything! open() //Open everything!
/obj/machinery/door/blob_act(obj/structure/blob/B)
if(isturf(loc))
var/turf/T = loc
if(T.intact && level == 1) //the blob doesn't destroy thing below the floor
return
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
/obj/machinery/door/ex_act(severity, target)
if(severity)
severity = max(1, severity - 1)
else
severity = 0
if(resistance_flags & INDESTRUCTIBLE)
return
if(target == src)
obj_integrity = 0
qdel(src)
return
switch(severity)
if(1)
obj_integrity = 0
qdel(src)
if(2)
take_damage(rand(100, 250), BRUTE, "bomb", 0)
if(3)
take_damage(rand(10, 90), BRUTE, "bomb", 0)
/obj/machinery/door/GetExplosionBlock() /obj/machinery/door/GetExplosionBlock()
return density ? real_explosion_block : 0 return density ? real_explosion_block : 0

View File

@@ -180,10 +180,9 @@
/obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) /obj/machinery/door/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
playsound(loc, 'sound/effects/glasshit.ogg', 90, 1) playsound(src, 'sound/effects/glasshit.ogg', 90, TRUE)
if(BURN) if(BURN)
playsound(loc, 'sound/items/welder.ogg', 100, 1) playsound(src, 'sound/items/welder.ogg', 100, TRUE)
/obj/machinery/door/window/deconstruct(disassembled = TRUE) /obj/machinery/door/window/deconstruct(disassembled = TRUE)
if(can_deconstruct && !disassembled) if(can_deconstruct && !disassembled)

View File

@@ -150,6 +150,11 @@ FIRE ALARM
if(prob(33)) if(prob(33))
alarm() alarm()
/obj/machinery/firealarm/singularity_pull(S, current_size)
if (current_size >= STAGE_FIVE) // If the singulo is strong enough to pull anchored objects, the fire alarm experiences integrity failure
deconstruct()
..()
/obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed /obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
return return

View File

@@ -188,13 +188,7 @@ Class Procs:
if(3.0) if(3.0)
if(prob(25)) if(prob(25))
qdel(src) qdel(src)
return
else
return
/obj/machinery/blob_act()
if(prob(50))
qdel(src)
//sets the use_power var and then forces an area power update //sets the use_power var and then forces an area power update
/obj/machinery/proc/update_use_power(var/new_use_power) /obj/machinery/proc/update_use_power(var/new_use_power)

View File

@@ -113,9 +113,6 @@
/obj/machinery/navbeacon/attack_ai(mob/user) /obj/machinery/navbeacon/attack_ai(mob/user)
interact(user, 1) interact(user, 1)
/obj/machinery/navbeacon/attack_animal()
return
/obj/machinery/navbeacon/attack_hand(mob/user) /obj/machinery/navbeacon/attack_hand(mob/user)
interact(user, 0) interact(user, 0)

View File

@@ -615,6 +615,16 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
update_icon() update_icon()
..() ..()
/obj/machinery/newscaster/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(stat & BROKEN)
playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, TRUE)
else
playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/machinery/newscaster/proc/AttachPhoto(mob/user) /obj/machinery/newscaster/proc/AttachPhoto(mob/user)
if(photo) if(photo)
if(!issilicon(user)) if(!issilicon(user))

View File

@@ -77,21 +77,19 @@
else else
icon_state = "[lasercolor]grey_target_prism" icon_state = "[lasercolor]grey_target_prism"
/obj/machinery/porta_turret/tag/bullet_act(obj/item/projectile/Proj) /obj/machinery/porta_turret/tag/bullet_act(obj/item/projectile/P)
..() ..()
if(!disabled)
if(lasercolor == "b" && disabled == 0) if(lasercolor == "b")
if(istype(Proj, /obj/item/gun/energy/laser/tag/red)) if(istype(P, /obj/item/projectile/beam/lasertag/redtag))
disabled = 1 disabled = TRUE
qdel(Proj) // qdel spawn(100)
sleep(100) disabled = FALSE
disabled = 0 else if(lasercolor == "r")
if(lasercolor == "r" && disabled == 0) if(istype(P, /obj/item/projectile/beam/lasertag/bluetag))
if(istype(Proj, /obj/item/gun/energy/laser/tag/blue)) disabled = TRUE
disabled = 1 spawn(100)
qdel(Proj) // qdel disabled = FALSE
sleep(100)
disabled = 0
/obj/machinery/porta_turret/tag/assess_living(var/mob/living/L) /obj/machinery/porta_turret/tag/assess_living(var/mob/living/L)
if(!L) if(!L)

View File

@@ -415,29 +415,6 @@ var/list/turret_icons
..() ..()
/obj/machinery/porta_turret/attack_animal(mob/living/simple_animal/M)
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
if(M.melee_damage_upper == 0 || (M.melee_damage_type != BRUTE && M.melee_damage_type != BURN))
return
if(!(stat & BROKEN))
visible_message("<span class='danger'>[M] [M.attacktext] [src]!</span>")
take_damage(M.melee_damage_upper)
else
to_chat(M, "<span class='danger'>That object is useless to you.</span>")
return
/obj/machinery/porta_turret/attack_alien(mob/living/carbon/alien/humanoid/M)
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
if(!(stat & BROKEN))
playsound(src.loc, 'sound/weapons/slash.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has slashed at [src]!</span>")
take_damage(15)
else
to_chat(M, "<span class='noticealien'>That object is useless to you.</span>")
return
/obj/machinery/porta_turret/emag_act(user as mob) /obj/machinery/porta_turret/emag_act(user as mob)
if(!emagged) if(!emagged)
//Emagging the turret makes it go bonkers and stun everyone. It also makes //Emagging the turret makes it go bonkers and stun everyone. It also makes
@@ -452,21 +429,6 @@ var/list/turret_icons
sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit
enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here enabled = 1 //turns it back on. The cover popUp() popDown() are automatically called in process(), no need to define it here
/obj/machinery/porta_turret/bullet_act(obj/item/projectile/Proj)
if(Proj.damage_type == STAMINA)
return
if(enabled)
if(!attacked && !emagged)
attacked = 1
spawn(60)
attacked = 0
..()
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
take_damage(Proj.damage)
/obj/machinery/porta_turret/emp_act(severity) /obj/machinery/porta_turret/emp_act(severity)
if(enabled && emp_vulnerable) if(enabled && emp_vulnerable)
//if the turret is on, the EMP no matter how severe disables the turret for a while //if the turret is on, the EMP no matter how severe disables the turret for a while

View File

@@ -83,29 +83,12 @@
A.forceMove(src.loc) A.forceMove(src.loc)
A.ex_act(severity) A.ex_act(severity)
qdel(src) qdel(src)
return
/obj/machinery/recharge_station/blob_act()
if(prob(50))
var/atom/movable/A = occupant
go_out()
A.blob_act()
qdel(src)
/obj/machinery/recharge_station/narsie_act() /obj/machinery/recharge_station/narsie_act()
go_out() go_out()
new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH! new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH!
qdel(src) qdel(src)
/obj/machinery/recharge_station/attack_animal(var/mob/living/simple_animal/M)//Stop putting hostile mobs in things guise
if(M.environment_smash)
M.do_attack_animation(src)
visible_message("<span class='danger'>[M.name] smashes [src] apart!</span>")
go_out()
qdel(src)
return
/obj/machinery/recharge_station/Bumped(var/mob/AM) /obj/machinery/recharge_station/Bumped(var/mob/AM)
move_inside(AM) move_inside(AM)

View File

@@ -97,7 +97,7 @@
qdel(src) qdel(src)
/obj/machinery/shield/hitby(AM as mob|obj) /obj/machinery/shield/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
..() ..()
var/tforce = 0 var/tforce = 0
if(ismob(AM)) if(ismob(AM))

View File

@@ -213,16 +213,6 @@
var/datum/data/vending_product/record = R var/datum/data/vending_product/record = R
.[record.product_path] += record.amount .[record.product_path] += record.amount
/obj/machinery/vending/ex_act(severity) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
switch(severity)
if(1)
obj_integrity = 0
qdel(src)
if(2)
take_damage(rand(100, 250), BRUTE, "bomb", 0)
if(3)
take_damage(rand(10, 90), BRUTE, "bomb", 0)
/obj/machinery/vending/deconstruct(disassembled = TRUE) /obj/machinery/vending/deconstruct(disassembled = TRUE)
eject_item() eject_item()
if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame.
@@ -231,9 +221,6 @@
else else
..() ..()
/obj/machinery/vending/blob_act(obj/structure/blob/B) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
/obj/machinery/vending/attackby(obj/item/I, mob/user, params) /obj/machinery/vending/attackby(obj/item/I, mob/user, params)
if(currently_vending && vendor_account && !vendor_account.suspended) if(currently_vending && vendor_account && !vendor_account.suspended)
var/paid = 0 var/paid = 0

View File

@@ -25,6 +25,7 @@
var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South.
var/normal_step_energy_drain = 10 var/normal_step_energy_drain = 10
var/step_energy_drain = 10 var/step_energy_drain = 10
var/melee_energy_drain = 15
var/overload_step_energy_drain_min = 100 var/overload_step_energy_drain_min = 100
var/health = 300 //health is health var/health = 300 //health is health
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
@@ -235,24 +236,6 @@
if(target.reagents.get_reagent_amount("toxin") + force < force*2) if(target.reagents.get_reagent_amount("toxin") + force < force*2)
target.reagents.add_reagent("toxin", force/2.5) target.reagents.add_reagent("toxin", force/2.5)
/atom/proc/mech_melee_attack(obj/mecha/M)
return
/obj/mecha/mech_melee_attack(obj/mecha/M)
if(M.damtype =="brute")
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
else if(M.damtype == "fire")
playsound(src, 'sound/items/welder.ogg', 50, 1)
else
return
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>")
take_damage(M.force, damtype)
add_attack_logs(M.occupant, src, "Mecha-attacked with [M] (INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
return
/obj/mecha/proc/range_action(atom/target) /obj/mecha/proc/range_action(atom/target)
return return
@@ -575,7 +558,7 @@
/obj/mecha/attack_alien(mob/living/user) /obj/mecha/attack_alien(mob/living/user)
log_message("Attack by alien. Attacker - [user].") log_message("Attack by alien. Attacker - [user].", color = "red")
playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE) playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE)
attack_generic(user, 15, BRUTE, "melee", 0) attack_generic(user, 15, BRUTE, "melee", 0)
@@ -894,6 +877,13 @@
take_damage(round(I.force * dam_coeff), I.damtype) take_damage(round(I.force * dam_coeff), I.damtype)
check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
/obj/mecha/mech_melee_attack(obj/mecha/M)
if(!has_charge(melee_energy_drain))
return 0
use_power(melee_energy_drain)
if(M.damtype == BRUTE || M.damtype == BURN)
add_attack_logs(M.occupant, src, "Mecha-attacked with [M] (INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
. = ..()
/obj/mecha/emag_act(mob/user) /obj/mecha/emag_act(mob/user)
to_chat(user, "<span class='warning'>[src]'s ID slot rejects the card.</span>") to_chat(user, "<span class='warning'>[src]'s ID slot rejects the card.</span>")

View File

@@ -26,7 +26,7 @@
qdel(src) qdel(src)
return return
/obj/effect/decal/mecha_wreckage/bullet_act(var/obj/item/projectile/Proj) /obj/effect/decal/mecha_wreckage/bullet_act(obj/item/projectile/Proj)
return return

View File

@@ -19,6 +19,12 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list()
BUMP_TELEPORTERS -= src BUMP_TELEPORTERS -= src
return ..() return ..()
/obj/effect/bump_teleporter/singularity_act()
return
/obj/effect/bump_teleporter/singularity_pull()
return
/obj/effect/bump_teleporter/Bumped(atom/user) /obj/effect/bump_teleporter/Bumped(atom/user)
if(!ismob(user)) if(!ismob(user))
//user.loc = src.loc //Stop at teleporter location //user.loc = src.loc //Stop at teleporter location

View File

@@ -10,6 +10,9 @@
icon = 'icons/obj/chempuff.dmi' icon = 'icons/obj/chempuff.dmi'
pass_flags = PASSTABLE | PASSGRILLE pass_flags = PASSTABLE | PASSGRILLE
/obj/effect/decal/chempuff/blob_act(obj/structure/blob/B)
return
/obj/effect/decal/snow /obj/effect/decal/snow
name = "snow" name = "snow"
density = FALSE density = FALSE

View File

@@ -192,7 +192,7 @@
move_update_air(T) move_update_air(T)
/obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) /obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
playsound(loc, 'sound/weapons/tap.ogg', 100, 1) playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE)
/obj/structure/foamedmetal/proc/updateicon() /obj/structure/foamedmetal/proc/updateicon()
if(metal == MFOAM_ALUMINUM) if(metal == MFOAM_ALUMINUM)

View File

@@ -15,12 +15,22 @@
/obj/effect/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE) /obj/effect/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE)
return FALSE return FALSE
/obj/effect/singularity_act()
qdel(src)
return FALSE
/obj/effect/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) /obj/effect/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
return return
/obj/effect/acid_act() /obj/effect/acid_act()
return return
/obj/effect/mech_melee_attack(obj/mecha/M)
return 0
/obj/effect/blob_act(obj/structure/blob/B)
return
/obj/effect/experience_pressure_difference() /obj/effect/experience_pressure_difference()
return return
@@ -64,4 +74,8 @@
if(reagents) if(reagents)
reagents.temperature_reagents(exposed_temperature) reagents.temperature_reagents(exposed_temperature)
if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava
qdel(src)
/obj/effect/decal/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
qdel(src) qdel(src)

View File

@@ -179,6 +179,10 @@
if(prob(5)) if(prob(5))
qdel(src) qdel(src)
/obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
if(damage_type == BURN && damage_amount)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/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) if(exposed_temperature > 300)

View File

@@ -104,6 +104,16 @@
tag = text("landmark*[]", name) tag = text("landmark*[]", name)
/obj/effect/landmark/singularity_act()
return
// Please stop bombing the Observer-Start landmark.
/obj/effect/landmark/ex_act()
return
/obj/effect/landmark/singularity_pull()
return
/obj/effect/landmark/start /obj/effect/landmark/start
name = "start" name = "start"
icon = 'icons/mob/screen_gen.dmi' icon = 'icons/mob/screen_gen.dmi'

View File

@@ -54,30 +54,6 @@
health -= damage health -= damage
healthcheck() healthcheck()
/obj/structure/spider/attack_animal(mob/living/simple_animal/M)
if(M.melee_damage_upper == 0)
return
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
visible_message("<span class='danger'>\The [M] [M.attacktext] [src]!</span>")
health -= damage
healthcheck()
/obj/structure/spider/attack_alien(mob/living/carbon/alien/humanoid/M)
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has slashed at [src]!</span>", "<span class='userdanger'>[M] has slashed at [src]!</span>")
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
var/damage = rand(10, 20)
health -= damage
healthcheck()
/obj/structure/spider/bullet_act(obj/item/projectile/Proj)
..()
health -= Proj.damage
healthcheck()
/obj/structure/spider/proc/healthcheck() /obj/structure/spider/proc/healthcheck()
if(health <= 0) if(health <= 0)
qdel(src) qdel(src)

View File

@@ -22,6 +22,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
var/health = null var/health = null
var/hitsound = null var/hitsound = null
var/usesound = null var/usesound = null
var/throwhitsound
var/w_class = WEIGHT_CLASS_NORMAL var/w_class = WEIGHT_CLASS_NORMAL
var/slot_flags = 0 //This is used to determine on which slots an item can fit. var/slot_flags = 0 //This is used to determine on which slots an item can fit.
pass_flags = PASSTABLE pass_flags = PASSTABLE
@@ -80,6 +81,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class) var/embedded_impact_pain_multiplier = EMBEDDED_IMPACT_PAIN_MULTIPLIER //The coefficient of multiplication for the damage this item does when first embedded (this*w_class)
var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class) var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class)
var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class. var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class.
var/embedded_ignore_throwspeed_threshold = FALSE
var/toolspeed = 1 // If this item is a tool, the speed multiplier var/toolspeed = 1 // If this item is a tool, the speed multiplier
@@ -135,6 +137,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
else else
return 1 return 1
/obj/item/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
qdel(src)
/obj/item/ex_act(severity) /obj/item/ex_act(severity)
switch(severity) switch(severity)
if(1.0) if(1.0)
@@ -151,9 +157,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
else else
return return
/obj/item/blob_act()
qdel(src)
/obj/item/water_act(volume, temperature, source, method = TOUCH) /obj/item/water_act(volume, temperature, source, method = TOUCH)
. = ..() . = ..()
extinguish() extinguish()
@@ -289,13 +292,13 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
return 1 return 1
/obj/item/attack_alien(mob/user as mob) /obj/item/attack_alien(mob/user)
var/mob/living/carbon/alien/A = user var/mob/living/carbon/alien/A = user
if(!A.has_fine_manipulation) if(!A.has_fine_manipulation)
if(src in A.contents) // To stop Aliens having items stuck in their pockets if(src in A.contents) // To stop Aliens having items stuck in their pockets
A.unEquip(src) A.unEquip(src)
to_chat(user, "Your claws aren't capable of such fine manipulation.") to_chat(user, "<span class='warning'>Your claws aren't capable of such fine manipulation!</span>")
return return
attack_hand(A) attack_hand(A)
@@ -552,10 +555,11 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
return return
/obj/item/singularity_pull(S, current_size) /obj/item/singularity_pull(S, current_size)
spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously ..()
if(current_size >= STAGE_FOUR) if(current_size >= STAGE_FOUR)
throw_at(S,14,3) throw_at(S, 14, 3, spin = 0)
else ..() else
return
/obj/item/throw_impact(atom/A) /obj/item/throw_impact(atom/A)
if(A && !QDELETED(A)) if(A && !QDELETED(A))
@@ -621,9 +625,20 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
if(H.slip(src, trip_stun, trip_weaken, trip_tiles, trip_walksafe, trip_any, trip_verb)) if(H.slip(src, trip_stun, trip_weaken, trip_tiles, trip_walksafe, trip_any, trip_verb))
return TRUE return TRUE
/obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
return
/obj/item/attack_hulk(mob/living/carbon/human/user) /obj/item/attack_hulk(mob/living/carbon/human/user)
return FALSE return FALSE
/obj/item/attack_animal(mob/living/simple_animal/M)
if(can_be_hit)
return ..()
return FALSE
/obj/item/mech_melee_attack(obj/mecha/M)
return 0
/obj/item/proc/openTip(location, control, params, user) /obj/item/proc/openTip(location, control, params, user)
openToolTip(user, src, params, title = name, content = "[desc]", theme = "") openToolTip(user, src, params, title = name, content = "[desc]", theme = "")

View File

@@ -63,7 +63,7 @@
push_over() push_over()
/obj/item/cardboard_cutout/bullet_act(obj/item/projectile/P) /obj/item/cardboard_cutout/bullet_act(obj/item/projectile/P)
visible_message("<span class='danger'>[src] has been hit by [P]!</span>") visible_message("<span class='danger'>[src] is hit by [P]!</span>")
playsound(src, 'sound/weapons/slice.ogg', 50, 1) playsound(src, 'sound/weapons/slice.ogg', 50, 1)
if(prob(P.damage)) if(prob(P.damage))
push_over() push_over()

View File

@@ -112,6 +112,15 @@
to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>") to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>")
master.disrupt() master.disrupt()
/obj/effect/dummy/chameleon/attack_animal()
master.disrupt()
/obj/effect/dummy/chameleon/attack_slime()
master.disrupt()
/obj/effect/dummy/chameleon/attack_alien()
master.disrupt()
/obj/effect/dummy/chameleon/ex_act(var/severity) //no longer bomb-proof /obj/effect/dummy/chameleon/ex_act(var/severity) //no longer bomb-proof
for(var/mob/M in src) for(var/mob/M in src)
to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>") to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>")

View File

@@ -46,8 +46,10 @@
if(prob(50)) if(prob(50))
qdel(src) qdel(src)
/obj/item/latexballon/bullet_act() /obj/item/latexballon/bullet_act(obj/item/projectile/P)
burst() if(!P.nodamage)
burst()
return ..()
/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume) /obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume)
..() ..()

View File

@@ -38,10 +38,10 @@
merge(O) merge(O)
..() ..()
/obj/item/stack/hitby(atom/movable/AM, skipcatch, hitpush) /obj/item/stack/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(istype(AM, merge_type) && !(amount >= max_amount)) if(istype(AM, merge_type) && !(amount >= max_amount))
merge(AM) merge(AM)
..() . = ..()
/obj/item/stack/Destroy() /obj/item/stack/Destroy()
if(usr && usr.machine == src) if(usr && usr.machine == src)
@@ -129,7 +129,7 @@
if(R.max_res_amount > 1 && max_multiplier > 1) if(R.max_res_amount > 1 && max_multiplier > 1)
max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount)) max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount))
t1 += " |" t1 += " |"
var/list/multipliers = list(5, 10, 25) var/list/multipliers = list(5, 10, 25)
for(var/n in multipliers) for(var/n in multipliers)
if(max_multiplier >= n) if(max_multiplier >= n)

View File

@@ -52,7 +52,7 @@
can_charge = 0 can_charge = 0
fire_delay = 50 fire_delay = 50
var/obj/item/chrono_eraser/TED = null var/obj/item/chrono_eraser/TED = null
var/obj/effect/chrono_field/field = null var/obj/structure/chrono_field/field = null
var/turf/startpos = null var/turf/startpos = null
/obj/item/gun/energy/chrono_gun/New(var/obj/item/chrono_eraser/T) /obj/item/gun/energy/chrono_gun/New(var/obj/item/chrono_eraser/T)
@@ -79,7 +79,7 @@
field_disconnect(field) field_disconnect(field)
return ..() return ..()
/obj/item/gun/energy/chrono_gun/proc/field_connect(var/obj/effect/chrono_field/F) /obj/item/gun/energy/chrono_gun/proc/field_connect(obj/structure/chrono_field/F)
var/mob/living/user = src.loc var/mob/living/user = src.loc
if(F.gun) if(F.gun)
if(isliving(user) && F.captured) if(isliving(user) && F.captured)
@@ -93,7 +93,7 @@
to_chat(user, "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>") to_chat(user, "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>")
/obj/item/gun/energy/chrono_gun/proc/field_disconnect(var/obj/effect/chrono_field/F) /obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/structure/chrono_field/F)
if(F && field == F) if(F && field == F)
var/mob/living/user = src.loc var/mob/living/user = src.loc
if(F.gun == src) if(F.gun == src)
@@ -103,7 +103,7 @@
field = null field = null
startpos = null startpos = null
/obj/item/gun/energy/chrono_gun/proc/field_check(var/obj/effect/chrono_field/F) /obj/item/gun/energy/chrono_gun/proc/field_check(obj/structure/chrono_field/F)
if(F) if(F)
if(field == F) if(field == F)
var/turf/currentpos = get_turf(src) var/turf/currentpos = get_turf(src)
@@ -135,7 +135,7 @@
/obj/item/projectile/energy/chrono_beam/on_hit(atom/target) /obj/item/projectile/energy/chrono_beam/on_hit(atom/target)
if(target && gun && isliving(target)) if(target && gun && isliving(target))
var/obj/effect/chrono_field/F = new(target.loc, target, gun) var/obj/structure/chrono_field/F = new(target.loc, target, gun)
gun.field_connect(F) gun.field_connect(F)
/obj/item/ammo_casing/energy/chrono_beam /obj/item/ammo_casing/energy/chrono_beam
@@ -144,27 +144,27 @@
icon_state = "chronobolt" icon_state = "chronobolt"
e_cost = 0 e_cost = 0
/obj/effect/chrono_field /obj/structure/chrono_field
name = "eradication field" name = "eradication field"
desc = "An aura of time-bluespace energy." desc = "An aura of time-bluespace energy."
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "chronofield" icon_state = "chronofield"
density = TRUE density = FALSE
anchored = TRUE anchored = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
move_resist = INFINITY move_resist = INFINITY
blend_mode = BLEND_MULTIPLY blend_mode = BLEND_MULTIPLY
var/mob/living/captured = null var/mob/living/captured = null
var/obj/item/gun/energy/chrono_gun/gun = null var/obj/item/gun/energy/chrono_gun/gun = null
var/tickstokill = 30 var/tickstokill = 15
var/image/mob_underlay = null var/mutable_appearance/mob_underlay
var/preloaded = 0 var/preloaded = 0
var/RPpos = null var/RPpos = null
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/gun/energy/chrono_gun/G) /obj/structure/chrono_field/New(loc, mob/living/target, obj/item/gun/energy/chrono_gun/G)
if(target && isliving(target) && G) if(target && isliving(target) && G)
target.loc = src target.forceMove(src)
src.captured = target captured = target
var/icon/mob_snapshot = getFlatIcon(target) var/icon/mob_snapshot = getFlatIcon(target)
var/icon/cached_icon = new() var/icon/cached_icon = new()
@@ -174,18 +174,19 @@
mob_icon.Blend(removing_frame, ICON_MULTIPLY) mob_icon.Blend(removing_frame, ICON_MULTIPLY)
cached_icon.Insert(mob_icon, "frame[i]") cached_icon.Insert(mob_icon, "frame[i]")
mob_underlay = new(cached_icon, "frame1") mob_underlay = mutable_appearance(cached_icon, "frame1")
update_icon() update_icon()
desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>" desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>"
START_PROCESSING(SSobj, src) START_PROCESSING(SSobj, src)
return ..()
/obj/effect/chrono_field/Destroy() /obj/structure/chrono_field/Destroy()
if(gun && gun.field_check(src)) if(gun && gun.field_check(src))
gun.field_disconnect(src) gun.field_disconnect(src)
return ..() return ..()
/obj/effect/chrono_field/update_icon() /obj/structure/chrono_field/update_icon()
var/ttk_frame = 1 - (tickstokill / initial(tickstokill)) var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
ttk_frame = Clamp(Ceiling(ttk_frame * CHRONO_FRAME_COUNT), 1, CHRONO_FRAME_COUNT) ttk_frame = Clamp(Ceiling(ttk_frame * CHRONO_FRAME_COUNT), 1, CHRONO_FRAME_COUNT)
if(ttk_frame != RPpos) if(ttk_frame != RPpos)
@@ -194,11 +195,11 @@
underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise
underlays += mob_underlay underlays += mob_underlay
/obj/effect/chrono_field/process() /obj/structure/chrono_field/process()
if(captured) if(captured)
if(tickstokill > initial(tickstokill)) if(tickstokill > initial(tickstokill))
for(var/atom/movable/AM in contents) for(var/atom/movable/AM in contents)
AM.loc = loc AM.forceMove(drop_location())
qdel(src) qdel(src)
else if(tickstokill <= 0) else if(tickstokill <= 0)
to_chat(captured, "<span class='boldnotice'>As the last essence of your being is erased from time, you begin to re-experience your most enjoyable memory. You feel happy...</span>") to_chat(captured, "<span class='boldnotice'>As the last essence of your being is erased from time, you begin to re-experience your most enjoyable memory. You feel happy...</span>")
@@ -212,12 +213,8 @@
qdel(src) qdel(src)
else else
captured.Paralyse(4) captured.Paralyse(4)
if(captured.reagents) if(captured.loc != src)
captured.reagents.del_reagent("synaptizine") //you pesky thing you captured.forceMove(src)
if(captured.loc != src) //If they manage to escape, immediately kill them, this is so that even if there IS a way to get out, they won't use it
captured.loc = src
tickstokill = 0
return .()
update_icon() update_icon()
if(gun) if(gun)
if(gun.field_check(src)) if(gun.field_check(src))
@@ -230,7 +227,8 @@
else else
qdel(src) qdel(src)
/obj/effect/chrono_field/bullet_act(var/obj/item/projectile/P)
/obj/structure/chrono_field/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy/chrono_beam)) if(istype(P, /obj/item/projectile/energy/chrono_beam))
var/obj/item/projectile/energy/chrono_beam/beam = P var/obj/item/projectile/energy/chrono_beam/beam = P
var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun
@@ -239,28 +237,28 @@
else else
return 0 return 0
/obj/effect/chrono_field/assume_air() /obj/structure/chrono_field/assume_air()
return 0 return 0
/obj/effect/chrono_field/return_air() //we always have nominal air and temperature /obj/structure/chrono_field/return_air() //we always have nominal air and temperature
var/datum/gas_mixture/GM = new var/datum/gas_mixture/GM = new
GM.oxygen = MOLES_O2STANDARD GM.oxygen = MOLES_O2STANDARD
GM.nitrogen = MOLES_N2STANDARD GM.nitrogen = MOLES_N2STANDARD
GM.temperature = T20C GM.temperature = T20C
return GM return GM
/obj/effect/chrono_field/Move() /obj/structure/chrono_field/Move()
return return
/obj/effect/chrono_field/singularity_act() /obj/structure/chrono_field/singularity_act()
return return
/obj/effect/chrono_field/ex_act() /obj/structure/chrono_field/ex_act()
return return
/obj/effect/chrono_field/blob_act() /obj/structure/chrono_field/blob_act(obj/structure/blob/B)
return return
#undef CHRONO_BEAM_RANGE #undef CHRONO_BEAM_RANGE
#undef CHRONO_FRAME_COUNT #undef CHRONO_FRAME_COUNT

View File

@@ -15,6 +15,12 @@
var/det_time = 50 var/det_time = 50
var/display_timer = 1 var/display_timer = 1
/obj/item/grenade/deconstruct(disassembled = TRUE)
if(!disassembled)
prime()
if(!QDELETED(src))
qdel(src)
/obj/item/grenade/proc/clown_check(var/mob/living/user) /obj/item/grenade/proc/clown_check(var/mob/living/user)
if((CLUMSY in user.mutations) && prob(50)) if((CLUMSY in user.mutations) && prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>") to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")

View File

@@ -87,7 +87,6 @@
/obj/item/storage/backpack/holding/singularity_act(current_size) /obj/item/storage/backpack/holding/singularity_act(current_size)
var/dist = max((current_size - 2),1) var/dist = max((current_size - 2),1)
explosion(src.loc,(dist),(dist*2),(dist*4)) explosion(src.loc,(dist),(dist*2),(dist*4))
return
/obj/item/storage/backpack/santabag /obj/item/storage/backpack/santabag
name = "Santa's Gift Bag" name = "Santa's Gift Bag"

View File

@@ -109,10 +109,10 @@
return return
/obj/item/tank/blob_act() /obj/item/tank/blob_act(obj/structure/blob/B)
if(prob(50)) if(B && B.loc == loc)
var/turf/location = loc var/turf/location = get_turf(src)
if(!( istype(location, /turf) )) if(!location)
qdel(src) qdel(src)
if(air_contents) if(air_contents)
@@ -120,6 +120,15 @@
qdel(src) qdel(src)
/obj/item/tank/deconstruct(disassembled = TRUE)
if(!disassembled)
var/turf/T = get_turf(src)
if(T)
T.assume_air(air_contents)
air_update_turf()
playsound(src.loc, 'sound/effects/spray.ogg', 10, TRUE, -3)
qdel(src)
/obj/item/tank/attackby(obj/item/W as obj, mob/user as mob, params) /obj/item/tank/attackby(obj/item/W as obj, mob/user as mob, params)
..() ..()

View File

@@ -120,7 +120,7 @@
else else
. = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration)
if(. && !play_soundeffect) if(. && !play_soundeffect)
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE)
/obj/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) /obj/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return TRUE return TRUE

View File

@@ -273,11 +273,9 @@ a {
onclose(user, "mtcomputer") onclose(user, "mtcomputer")
/obj/singularity_pull(S, current_size) /obj/singularity_pull(S, current_size)
if(anchored) ..()
if(current_size >= STAGE_FIVE) if(!anchored || current_size >= STAGE_FIVE)
anchored = 0 step_towards(src,S)
step_towards(src,S)
else step_towards(src,S)
/obj/proc/container_resist(var/mob/living) /obj/proc/container_resist(var/mob/living)
return return

View File

@@ -5,10 +5,6 @@
var/mob/climber var/mob/climber
var/broken = FALSE var/broken = FALSE
/obj/structure/blob_act()
if(prob(50))
qdel(src)
/obj/structure/ex_act(severity) /obj/structure/ex_act(severity)
switch(severity) switch(severity)
if(1.0) if(1.0)
@@ -21,13 +17,6 @@
if(3.0) if(3.0)
return return
/obj/structure/mech_melee_attack(obj/mecha/M)
if(M.damtype == "brute")
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>")
return 1
return 0
/obj/structure/New() /obj/structure/New()
if (!armor) if (!armor)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)

View File

@@ -28,12 +28,12 @@
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
if(damage_amount) if(damage_amount)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE)
else else
playsound(src, 'sound/weapons/tap.ogg', 50, 1) playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN) if(BURN)
if(damage_amount) if(damage_amount)
playsound(loc, 'sound/items/welder.ogg', 100, 1) playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/* /*
* Resin * Resin

View File

@@ -38,7 +38,17 @@
else else
desc = "It displays \"[name]\"." desc = "It displays \"[name]\"."
/obj/structure/sign/barsign/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/metal(drop_location(), 2)
new /obj/item/stack/cable_coil(drop_location(), 2)
qdel(src)
/obj/structure/sign/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/sign/barsign/attack_ai(mob/user as mob) /obj/structure/sign/barsign/attack_ai(mob/user as mob)
return src.attack_hand(user) return src.attack_hand(user)

View File

@@ -146,27 +146,6 @@
new /obj/item/stack/sheet/metal(loc) new /obj/item/stack/sheet/metal(loc)
qdel(src) qdel(src)
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
..()
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
if(health <= 0)
dump_contents()
qdel(src)
/obj/structure/closet/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("<span class='warning'>[user] destroys the [src].</span>")
dump_contents()
qdel(src)
// this should probably use dump_contents()
/obj/structure/closet/blob_act()
if(prob(75))
dump_contents()
qdel(src)
/obj/structure/closet/attackby(obj/item/W, mob/user, params) /obj/structure/closet/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/rcs) && !opened) if(istype(W, /obj/item/rcs) && !opened)
if(user in contents) //to prevent self-teleporting. if(user in contents) //to prevent self-teleporting.

View File

@@ -40,7 +40,7 @@
if(isanimal(M) && "syndicate" in M.faction) if(isanimal(M) && "syndicate" in M.faction)
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>") to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
return return
return ..(M) return ..()
/obj/structure/closet/secure_closet/syndicate/depot/attackby(obj/item/W, mob/user, params) /obj/structure/closet/secure_closet/syndicate/depot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/rcs)) if(istype(W, /obj/item/rcs))

View File

@@ -92,19 +92,6 @@
for(var/mob/M in src) for(var/mob/M in src)
shatter(M) shatter(M)
/obj/structure/closet/statue/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
check_health()
/obj/structure/closet/statue/attack_animal(mob/living/simple_animal/user as mob)
if(user.environment_smash)
for(var/mob/M in src)
shatter(M)
/obj/structure/closet/statue/blob_act()
for(var/mob/M in src)
shatter(M)
/obj/structure/closet/statue/ex_act(severity) /obj/structure/closet/statue/ex_act(severity)
for(var/mob/M in src) for(var/mob/M in src)
M.ex_act(severity) M.ex_act(severity)

View File

@@ -194,9 +194,10 @@
if(3.0) if(3.0)
if(prob(50)) if(prob(50))
qdel(src) qdel(src)
return
else /obj/structure/closet/singularity_act()
return dump_contents()
..()
/obj/structure/closet/crate/attack_hand(mob/user) /obj/structure/closet/crate/attack_hand(mob/user)
if(manifest) if(manifest)

View File

@@ -14,18 +14,21 @@
layer = SHOWER_OPEN_LAYER layer = SHOWER_OPEN_LAYER
opacity = 0 opacity = 0
/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone)
if(!P.nodamage)
visible_message("<span class='warning'>[P] tears [src] down!</span>")
qdel(src)
else
..(P, def_zone)
/obj/structure/curtain/attack_hand(mob/user) /obj/structure/curtain/attack_hand(mob/user)
playsound(get_turf(loc), "rustle", 15, 1, -5) playsound(get_turf(loc), "rustle", 15, 1, -5)
toggle() toggle()
..() ..()
/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE)
else
playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 80, TRUE)
/obj/structure/curtain/proc/toggle() /obj/structure/curtain/proc/toggle()
set_opacity(!opacity) set_opacity(!opacity)
if(opacity) if(opacity)

View File

@@ -33,11 +33,6 @@
obj_integrity = 0 obj_integrity = 0
healthcheck() healthcheck()
/obj/structure/fusionreactor/bullet_act(obj/item/projectile/Proj)
obj_integrity -= Proj.damage
..()
healthcheck()
/obj/structure/fusionreactor/proc/healthcheck() /obj/structure/fusionreactor/proc/healthcheck()
if(obj_integrity <= 0 && istype(depotarea)) if(obj_integrity <= 0 && istype(depotarea))
overload(TRUE) overload(TRUE)

View File

@@ -163,6 +163,21 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
occupant = null occupant = null
occupant_overlay = null occupant_overlay = null
/obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src.loc, 'sound/effects/glasshit.ogg', 75, TRUE)
if(BURN)
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/displaycase/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
dump()
if(!disassembled)
new /obj/item/shard( src.loc )
burglar_alarm()
qdel(src)
/obj/structure/displaycase/ex_act(severity) /obj/structure/displaycase/ex_act(severity)
switch(severity) switch(severity)
if(1) if(1)
@@ -179,19 +194,6 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
src.health -= 5 src.health -= 5
src.healthcheck() src.healthcheck()
/obj/structure/displaycase/bullet_act(var/obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
..()
src.healthcheck()
return
/obj/structure/displaycase/blob_act()
if(prob(75))
new /obj/item/shard(loc)
if(occupant) dump()
qdel(src)
/obj/structure/displaycase/proc/healthcheck() /obj/structure/displaycase/proc/healthcheck()
if(src.health <= 0) if(src.health <= 0)
health = 0 health = 0

View File

@@ -281,7 +281,7 @@
qdel(source) qdel(source)
/obj/structure/door_assembly/deconstruct(disassembled = TRUE) /obj/structure/door_assembly/deconstruct(disassembled = TRUE)
if(can_deconstruct) if(!(flags & NODECONSTRUCT))
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!disassembled) if(!disassembled)
material_amt = rand(2,4) material_amt = rand(2,4)

View File

@@ -80,11 +80,15 @@
user.visible_message("[user] has secured [src]'s bolts.", \ user.visible_message("[user] has secured [src]'s bolts.", \
"<span class='notice'>You have secured [src]'s bolts.</span>") "<span class='notice'>You have secured [src]'s bolts.</span>")
anchored = 1 anchored = 1
else return
if(iscrowbar(W) && !anchored) if(iscrowbar(W) && !anchored)
playsound(loc, W.usesound, 100, 1) playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is attempting to dismantle [src].", \ user.visible_message("[user] is attempting to dismantle [src].", "<span class='notice'>You begin to dismantle [src]...</span>")
"<span class='notice'>You begin to dismantle [src]...</span>") if(do_after(user, 40 * W.toolspeed, target = src))
if(do_after(user, 40 * W.toolspeed, target = src)) deconstruct()
new /obj/item/stack/sheet/wood (loc, 30) return
qdel(src) return ..()
/obj/structure/dresser/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/wood(drop_location(), 30)
qdel(src)

View File

@@ -140,6 +140,15 @@
playsound(src, 'sound/items/welder.ogg', 100, 1) playsound(src, 'sound/items/welder.ogg', 100, 1)
qdel(src) qdel(src)
/obj/structure/falsewall/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
if(disassembled)
new girder_type(loc)
if(mineral_amount)
for(var/i in 1 to mineral_amount)
new mineral(loc)
qdel(src)
/* /*
* False R-Walls * False R-Walls
*/ */

View File

@@ -29,18 +29,6 @@
for(var/i=0;i < metalAmount;i++) for(var/i=0;i < metalAmount;i++)
new /obj/item/stack/sheet/metal(get_turf(src)) new /obj/item/stack/sheet/metal(get_turf(src))
/obj/structure/girder/attack_animal(mob/living/simple_animal/M)
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
if((M.environment_smash & ENVIRONMENT_SMASH_STRUCTURES) || (M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS))
if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS)
ex_act(2)
M.visible_message("<span class='warning'>[M] smashes through \the [src].</span>", "<span class='warning'>You smash through \the [src].</span>")
else
M.visible_message("<span class='warning'>[M] smashes against \the [src].</span>", "<span class='warning'>You smash against \the [src].</span>")
take_damage(rand(25, 75))
return
/obj/structure/girder/temperature_expose(datum/gas_mixture/air, exposed_temperature) /obj/structure/girder/temperature_expose(datum/gas_mixture/air, exposed_temperature)
..() ..()
var/temp_check = exposed_temperature var/temp_check = exposed_temperature
@@ -372,28 +360,16 @@
. = . || mover.checkpass(PASSGRILLE) . = . || mover.checkpass(PASSGRILLE)
/obj/structure/girder/deconstruct(disassembled = TRUE) /obj/structure/girder/deconstruct(disassembled = TRUE)
if(can_deconstruct) if(!(flags & NODECONSTRUCT))
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal) var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/metal)
new remains(loc) new remains(loc)
qdel(src) qdel(src)
/obj/structure/girder/blob_act()
if(prob(40))
qdel(src)
/obj/structure/girder/narsie_act() /obj/structure/girder/narsie_act()
if(prob(25)) if(prob(25))
new /obj/structure/girder/cult(loc) new /obj/structure/girder/cult(loc)
qdel(src) qdel(src)
/obj/structure/girder/bullet_act(obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam/pulse))
ex_act(2)
else
take_damage(Proj.damage)
..()
return 0
/obj/structure/girder/ex_act(severity) /obj/structure/girder/ex_act(severity)
switch(severity) switch(severity)
if(1) if(1)
@@ -500,6 +476,6 @@
return return
/obj/structure/girder/cult/deconstruct(disassembled = TRUE) /obj/structure/girder/cult/deconstruct(disassembled = TRUE)
if(can_deconstruct) if(!(flags & NODECONSTRUCT))
new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1) new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
qdel(src) qdel(src)

View File

@@ -53,10 +53,6 @@
. = ..() . = ..()
update_icon() update_icon()
/obj/structure/grille/blob_act()
if(!broken)
obj_break()
/obj/structure/grille/examine(mob/user) /obj/structure/grille/examine(mob/user)
..() ..()
if(anchored) if(anchored)
@@ -78,6 +74,11 @@
shock(user, 70) shock(user, 70)
shockcooldown = world.time + my_shockcooldown shockcooldown = world.time + my_shockcooldown
/obj/structure/grille/attack_animal(mob/user)
. = ..()
if(!shock(user, 70))
take_damage(rand(5,10), BRUTE, "melee", 1)
/obj/structure/grille/hulk_damage() /obj/structure/grille/hulk_damage()
return 60 return 60
@@ -98,14 +99,9 @@
take_damage(rand(5,10), BRUTE, "melee", 1) take_damage(rand(5,10), BRUTE, "melee", 1)
/obj/structure/grille/attack_alien(mob/living/user) /obj/structure/grille/attack_alien(mob/living/user)
if(istype(user, /mob/living/carbon/alien/larva))
return
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src) user.do_attack_animation(src)
user.visible_message("<span class='warning'>[user] mangles [src].</span>", \ user.changeNext_move(CLICK_CD_MELEE)
"<span class='warning'>You mangle [src].</span>", \ user.visible_message("<span class='warning'>[user] mangles [src].</span>")
"You hear twisting metal.")
if(!shock(user, 70)) if(!shock(user, 70))
take_damage(20, BRUTE, "melee", 1) take_damage(20, BRUTE, "melee", 1)
@@ -222,17 +218,17 @@
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
if(damage_amount) if(damage_amount)
playsound(src, 'sound/effects/grillehit.ogg', 80, 1) playsound(src, 'sound/effects/grillehit.ogg', 80, TRUE)
else else
playsound(src, 'sound/weapons/tap.ogg', 50, 1) playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN) if(BURN)
playsound(src, 'sound/items/welder.ogg', 80, 1) playsound(src, 'sound/items/welder.ogg', 80, TRUE)
/obj/structure/grille/deconstruct(disassembled = TRUE) /obj/structure/grille/deconstruct(disassembled = TRUE)
if(!loc) //if already qdel'd somehow, we do nothing if(!loc) //if already qdel'd somehow, we do nothing
return return
if(can_deconstruct) if(!(flags & NODECONSTRUCT))
var/obj/R = new rods_type(loc, rods_amount) var/obj/R = new rods_type(drop_location(), rods_amount)
transfer_fingerprints_to(R) transfer_fingerprints_to(R)
qdel(src) qdel(src)
..() ..()
@@ -270,15 +266,17 @@
if(exposed_temperature > T0C + 1500) if(exposed_temperature > T0C + 1500)
take_damage(1, BURN, 0, 0) take_damage(1, BURN, 0, 0)
/obj/structure/grille/hitby(atom/movable/AM) /obj/structure/grille/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(istype(AM, /obj)) if(isobj(AM))
if(prob(50) && anchored && !broken) if(prob(50) && anchored && !broken)
var/turf/T = get_turf(src) var/obj/O = AM
var/obj/structure/cable/C = T.get_cable_node() if(O.throwforce != 0)//don't want to let people spam tesla bolts, this way it will break after time
if(C) var/turf/T = get_turf(src)
playsound(loc, 'sound/magic/lightningshock.ogg', 100, 1, extrarange = 5) var/obj/structure/cable/C = T.get_cable_node()
tesla_zap(src, 3, C.newavail() * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot. if(C)
C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock. playsound(src, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5)
tesla_zap(src, 3, C.newavail() * 0.01) //Zap for 1/100 of the amount of power. At a million watts in the grid, it will be as powerful as a tesla revolver shot.
C.add_delayedload(C.newavail() * 0.0375) // you can gain up to 3.5 via the 4x upgrades power is halved by the pole so thats 2x then 1X then .5X for 3.5x the 3 bounces shock.
return ..() return ..()
/obj/structure/grille/broken // Pre-broken grilles for map placement /obj/structure/grille/broken // Pre-broken grilles for map placement

View File

@@ -32,9 +32,9 @@
/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) /obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
if(BURN) if(BURN)
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1) playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
/obj/structure/holosign/wetsign /obj/structure/holosign/wetsign
name = "wet floor sign" name = "wet floor sign"

View File

@@ -41,13 +41,6 @@
/obj/structure/inflatable/CanAtmosPass(turf/T) /obj/structure/inflatable/CanAtmosPass(turf/T)
return !density return !density
/obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
if(health <= 0)
deflate(1)
return
/obj/structure/inflatable/ex_act(severity) /obj/structure/inflatable/ex_act(severity)
switch(severity) switch(severity)
if(1.0) if(1.0)
@@ -61,9 +54,6 @@
deflate(1) deflate(1)
return return
/obj/structure/inflatable/blob_act()
deflate(1)
/obj/structure/inflatable/attack_hand(mob/user as mob) /obj/structure/inflatable/attack_hand(mob/user as mob)
add_fingerprint(user) add_fingerprint(user)
return return
@@ -76,25 +66,6 @@
else //for nicer text~ else //for nicer text~
user.visible_message("<span class='danger'>[user] tears at [src]!</span>") user.visible_message("<span class='danger'>[user] tears at [src]!</span>")
/obj/structure/inflatable/attack_alien(mob/user as mob)
if(islarva(user))
return
attack_generic(user, 15)
/obj/structure/inflatable/attack_animal(mob/user as mob)
if(!isanimal(user))
return
var/mob/living/simple_animal/M = user
if(M.melee_damage_upper <= 0)
return
attack_generic(M, M.melee_damage_upper)
/obj/structure/inflatable/attack_slime(mob/user as mob)
var/mob/living/carbon/slime/S = user
if(!S.is_adult)
return
attack_generic(user, rand(10, 15))
/obj/structure/inflatable/attackby(obj/item/W as obj, mob/user as mob, params) /obj/structure/inflatable/attackby(obj/item/W as obj, mob/user as mob, params)
if(!istype(W)) if(!istype(W))
return return

View File

@@ -136,3 +136,11 @@
M.emote("scream") M.emote("scream")
M.AdjustWeakened(10) M.AdjustWeakened(10)
/obj/structure/kitchenspike/deconstruct(disassembled = TRUE)
if(disassembled)
var/obj/F = new /obj/structure/kitchenspike_frame(loc)
transfer_fingerprints_to(F)
else
new /obj/item/stack/sheet/metal(src.loc, 4)
new /obj/item/stack/rods(loc, 4)
qdel(src)

View File

@@ -25,20 +25,6 @@
src.health -= 5 src.health -= 5
src.healthcheck() src.healthcheck()
/obj/structure/lamarr/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
src.healthcheck()
return
/obj/structure/lamarr/blob_act()
if(prob(75))
new /obj/item/shard(loc)
Break()
qdel(src)
/obj/structure/lamarr/proc/healthcheck() /obj/structure/lamarr/proc/healthcheck()
if(src.health <= 0) if(src.health <= 0)
if(!( src.destroyed )) if(!( src.destroyed ))

View File

@@ -41,11 +41,13 @@
return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc)
/obj/structure/lattice/deconstruct(disassembled = TRUE) /obj/structure/lattice/deconstruct(disassembled = TRUE)
new /obj/item/stack/rods(get_turf(src), number_of_rods) if(!(flags & NODECONSTRUCT))
new /obj/item/stack/rods(get_turf(src), number_of_rods)
qdel(src) qdel(src)
/obj/structure/lattice/blob_act()
qdel(src) /obj/structure/lattice/blob_act(obj/structure/blob/B)
return
/obj/structure/lattice/ex_act(severity) /obj/structure/lattice/ex_act(severity)
switch(severity) switch(severity)
@@ -58,7 +60,7 @@
/obj/structure/lattice/singularity_pull(S, current_size) /obj/structure/lattice/singularity_pull(S, current_size)
if(current_size >= STAGE_FOUR) if(current_size >= STAGE_FOUR)
qdel(src) deconstruct()
/obj/structure/lattice/clockwork /obj/structure/lattice/clockwork
name = "cog lattice" name = "cog lattice"

View File

@@ -52,9 +52,6 @@
/obj/structure/mineral_door/attack_hand(mob/user) /obj/structure/mineral_door/attack_hand(mob/user)
return TryToSwitchState(user) return TryToSwitchState(user)
/obj/structure/mineral_door/attack_animal(mob/user)
return TryToSwitchState(user)
/obj/structure/mineral_door/attack_ghost(mob/user) /obj/structure/mineral_door/attack_ghost(mob/user)
if(user.can_advanced_admin_interact()) if(user.can_advanced_admin_interact())
SwitchState() SwitchState()

View File

@@ -42,16 +42,6 @@
playsound(src, "shatter", 70, 1) playsound(src, "shatter", 70, 1)
desc = "Oh no, seven years of bad luck!" desc = "Oh no, seven years of bad luck!"
/obj/structure/mirror/bullet_act(obj/item/projectile/Proj)
if(prob(Proj.damage * 2))
if(!broken)
shatter()
else
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
..()
/obj/structure/mirror/attackby(obj/item/I, mob/living/user, params) /obj/structure/mirror/attackby(obj/item/I, mob/living/user, params)
user.changeNext_move(CLICK_CD_MELEE) user.changeNext_move(CLICK_CD_MELEE)
if(isscrewdriver(I)) if(isscrewdriver(I))
@@ -78,46 +68,18 @@
visible_message("<span class='warning'>[user] hits [src] with [I]!</span>") visible_message("<span class='warning'>[user] hits [src] with [I]!</span>")
playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1) playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1)
/obj/structure/mirror/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
if(!disassembled)
new /obj/item/shard( src.loc )
qdel(src)
/obj/structure/mirror/attack_alien(mob/living/user) /obj/structure/mirror/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
user.changeNext_move(CLICK_CD_MELEE) switch(damage_type)
if(islarva(user)) if(BRUTE)
return playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
user.do_attack_animation(src) if(BURN)
if(broken) playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
shatter()
/obj/structure/mirror/attack_animal(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
if(!isanimal(user))
return
var/mob/living/simple_animal/M = user
if(M.melee_damage_upper <= 0)
return
M.do_attack_animation(src)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
shatter()
/obj/structure/mirror/attack_slime(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
var/mob/living/carbon/slime/S = user
if(!S.is_adult)
return
user.do_attack_animation(src)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
shatter()
/obj/item/mounted/mirror /obj/item/mounted/mirror
name = "mirror" name = "mirror"
@@ -153,7 +115,7 @@
H.dna.real_name = newname H.dna.real_name = newname
if(H.mind) if(H.mind)
H.mind.name = newname H.mind.name = newname
if(newname) if(newname)
curse(user) curse(user)
@@ -197,7 +159,7 @@
if(voice_choice) if(voice_choice)
curse(user) curse(user)
/obj/structure/mirror/magic/on_ui_close(mob/user) /obj/structure/mirror/magic/on_ui_close(mob/user)
curse(user) curse(user)

View File

@@ -82,7 +82,7 @@ GLOBAL_LIST_EMPTY(safes)
if(open) if(open)
to_chat(user, "The inside of the the door has numbers written on it: <b>[get_combination()]</b>") to_chat(user, "The inside of the the door has numbers written on it: <b>[get_combination()]</b>")
/obj/structure/safe/blob_act() /obj/structure/safe/blob_act(obj/structure/blob/B)
return return
/obj/structure/safe/ex_act(severity) /obj/structure/safe/ex_act(severity)

View File

@@ -6,6 +6,16 @@
layer = 3.5 layer = 3.5
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src.loc, 'sound/weapons/slash.ogg', 80, TRUE)
else
playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 80, TRUE)
/obj/structure/sign/ex_act(severity) /obj/structure/sign/ex_act(severity)
switch(severity) switch(severity)
if(1.0) if(1.0)
@@ -16,13 +26,6 @@
return return
if(3.0) if(3.0)
qdel(src) qdel(src)
return
else
return
/obj/structure/sign/blob_act()
qdel(src)
return
/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction
if(istype(tool, /obj/item/screwdriver) && !istype(src, /obj/structure/sign/double)) if(istype(tool, /obj/item/screwdriver) && !istype(src, /obj/structure/sign/double))

View File

@@ -24,42 +24,6 @@
return return
..() ..()
/obj/structure/spawner/blob_act(obj/structure/blob/B) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
take_damage(400, BRUTE, "melee", 0, get_dir(src, B))
/obj/structure/spawner/ex_act(severity) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
if(resistance_flags & INDESTRUCTIBLE)
return
switch(severity)
if(1)
obj_integrity = 0
qdel(src)
if(2)
take_damage(rand(100, 250), BRUTE, "bomb", 0)
if(3)
take_damage(rand(10, 90), BRUTE, "bomb", 0)
/obj/structure/spawner/mech_melee_attack(obj/mecha/M) //TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
M.do_attack_animation(src)
var/play_soundeffect = 0
var/mech_damtype = M.damtype
if(M.selected)
mech_damtype = M.selected.damtype
play_soundeffect = 1
else
switch(M.damtype)
if(BRUTE)
playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 50, 1)
if(TOX)
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
return 0
else
return 0
visible_message("<span class='danger'>[M.name] has hit [src].</span>")
return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs.
/obj/structure/spawner/syndicate /obj/structure/spawner/syndicate
name = "warp beacon" name = "warp beacon"
icon = 'icons/obj/device.dmi' icon = 'icons/obj/device.dmi'

View File

@@ -85,11 +85,6 @@
/obj/structure/statue/CanAtmosPass() /obj/structure/statue/CanAtmosPass()
return !density return !density
/obj/structure/statue/bullet_act(obj/item/projectile/Proj)
hardness -= Proj.damage
..()
CheckHardness()
/obj/structure/statue/proc/CheckHardness() /obj/structure/statue/proc/CheckHardness()
if(hardness <= 0) if(hardness <= 0)
Dismantle(TRUE) Dismantle(TRUE)

View File

@@ -77,15 +77,15 @@
M.layer = initial(M.layer) M.layer = initial(M.layer)
overlays -= nest_overlay overlays -= nest_overlay
/obj/structure/bed/nest/attackby(obj/item/W as obj, mob/user as mob, params) /obj/structure/bed/nest/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
user.changeNext_move(CLICK_CD_MELEE) switch(damage_type)
var/aforce = W.force if(BRUTE)
health = max(0, health - aforce) playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) if(BURN)
visible_message("<span class='warning'>[user] hits [src] with [W]!</span>", 1) playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
healthcheck()
/obj/structure/bed/nest/proc/healthcheck() /obj/structure/bed/nest/attack_alien(mob/living/carbon/alien/user)
if(health <= 0) if(user.a_intent != INTENT_HARM)
density = FALSE return attack_hand(user)
qdel(src) else
return ..()

View File

@@ -47,14 +47,6 @@
playsound(loc, W.usesound, 50, 1) playsound(loc, W.usesound, 50, 1)
new buildstacktype(loc, buildstackamount) new buildstacktype(loc, buildstackamount)
qdel(src) qdel(src)
/obj/structure/bed/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
user.do_attack_animation(src)
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
new buildstacktype(loc, buildstackamount)
qdel(src)
/* /*
* Roller beds * Roller beds
*/ */

View File

@@ -304,12 +304,6 @@
if(prob(50)) if(prob(50))
new buildstacktype(loc, buildstackamount) new buildstacktype(loc, buildstackamount)
qdel(src) qdel(src)
return
/obj/structure/chair/stool/blob_act()
if(prob(75))
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/item/chair /obj/item/chair
name = "chair" name = "chair"

View File

@@ -706,11 +706,11 @@
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
if(damage_amount) if(damage_amount)
playsound(loc, 'sound/items/dodgeball.ogg', 80, 1) playsound(loc, 'sound/items/dodgeball.ogg', 80, TRUE)
else else
playsound(loc, 'sound/weapons/tap.ogg', 50, 1) playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN) if(BURN)
playsound(loc, 'sound/items/welder.ogg', 40, 1) playsound(loc, 'sound/items/welder.ogg', 40, TRUE)
/obj/structure/rack/skeletal_bar /obj/structure/rack/skeletal_bar
name = "skeletal minibar" name = "skeletal minibar"

View File

@@ -129,6 +129,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
return return
/obj/structure/window/singularity_pull(S, current_size) /obj/structure/window/singularity_pull(S, current_size)
..()
if(current_size >= STAGE_FIVE) if(current_size >= STAGE_FIVE)
deconstruct(FALSE) deconstruct(FALSE)
@@ -333,11 +334,11 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
switch(damage_type) switch(damage_type)
if(BRUTE) if(BRUTE)
if(damage_amount) if(damage_amount)
playsound(src, hitsound, 75, 1) playsound(src, hitsound, 75, TRUE)
else else
playsound(src, 'sound/weapons/tap.ogg', 50, 1) playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN) if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, 1) playsound(src, 'sound/items/Welder.ogg', 100, TRUE)
/obj/structure/window/deconstruct(disassembled = TRUE) /obj/structure/window/deconstruct(disassembled = TRUE)
if(QDELETED(src)) if(QDELETED(src))

View File

@@ -86,7 +86,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
if(A.level == 3) if(A.level == 3)
return 1 return 1
/turf/simulated/floor/blob_act() /turf/simulated/floor/blob_act(obj/structure/blob/B)
return return
/turf/simulated/floor/proc/update_icon() /turf/simulated/floor/proc/update_icon()
@@ -211,6 +211,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","
return make_plating() return make_plating()
/turf/simulated/floor/singularity_pull(S, current_size) /turf/simulated/floor/singularity_pull(S, current_size)
..()
if(current_size == STAGE_THREE) if(current_size == STAGE_THREE)
if(prob(30)) if(prob(30))
if(builtin_tile) if(builtin_tile)

View File

@@ -4,7 +4,7 @@
/turf/simulated/floor/indestructible/ex_act(severity) /turf/simulated/floor/indestructible/ex_act(severity)
return return
/turf/simulated/floor/indestructible/blob_act() /turf/simulated/floor/indestructible/blob_act(obj/structure/blob/B)
return return
/turf/simulated/floor/indestructible/singularity_act() /turf/simulated/floor/indestructible/singularity_act()

View File

@@ -24,7 +24,7 @@
if(burn_stuff(AM)) if(burn_stuff(AM))
START_PROCESSING(SSprocessing, src) START_PROCESSING(SSprocessing, src)
/turf/simulated/floor/plating/lava/hitby(atom/movable/AM) /turf/simulated/floor/plating/lava/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(burn_stuff(AM)) if(burn_stuff(AM))
START_PROCESSING(SSprocessing, src) START_PROCESSING(SSprocessing, src)

View File

@@ -186,7 +186,7 @@
if(prob(50)) if(prob(50))
ChangeTurf(baseturf) ChangeTurf(baseturf)
/turf/simulated/floor/engine/blob_act() /turf/simulated/floor/engine/blob_act(obj/structure/blob/B)
if(prob(25)) if(prob(25))
ChangeTurf(baseturf) ChangeTurf(baseturf)
@@ -221,12 +221,14 @@
assume_air(adding) assume_air(adding)
/turf/simulated/floor/engine/singularity_pull(S, current_size) /turf/simulated/floor/engine/singularity_pull(S, current_size)
..()
if(current_size >= STAGE_FIVE) if(current_size >= STAGE_FIVE)
if(prob(30)) if(floor_tile)
make_plating() //does not actually do anything
else
if(prob(30)) if(prob(30))
ReplaceWithLattice() new floor_tile(src)
make_plating()
else if(prob(30))
ReplaceWithLattice()
/turf/simulated/floor/engine/vacuum /turf/simulated/floor/engine/vacuum
name = "vacuum floor" name = "vacuum floor"

Some files were not shown because too many files have changed in this diff Show More