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
@@ -19,6 +19,12 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list()
BUMP_TELEPORTERS -= src
return ..()
/obj/effect/bump_teleporter/singularity_act()
return
/obj/effect/bump_teleporter/singularity_pull()
return
/obj/effect/bump_teleporter/Bumped(atom/user)
if(!ismob(user))
//user.loc = src.loc //Stop at teleporter location
+3
View File
@@ -10,6 +10,9 @@
icon = 'icons/obj/chempuff.dmi'
pass_flags = PASSTABLE | PASSGRILLE
/obj/effect/decal/chempuff/blob_act(obj/structure/blob/B)
return
/obj/effect/decal/snow
name = "snow"
density = FALSE
@@ -192,7 +192,7 @@
move_update_air(T)
/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()
if(metal == MFOAM_ALUMINUM)
+14
View File
@@ -15,12 +15,22 @@
/obj/effect/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 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)
return
/obj/effect/acid_act()
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()
return
@@ -64,4 +74,8 @@
if(reagents)
reagents.temperature_reagents(exposed_temperature)
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)
+4
View File
@@ -179,6 +179,10 @@
if(prob(5))
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)
..()
if(exposed_temperature > 300)
+10
View File
@@ -104,6 +104,16 @@
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
name = "start"
icon = 'icons/mob/screen_gen.dmi'
-24
View File
@@ -54,30 +54,6 @@
health -= damage
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()
if(health <= 0)
qdel(src)
+24 -9
View File
@@ -22,6 +22,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
var/health = null
var/hitsound = null
var/usesound = null
var/throwhitsound
var/w_class = WEIGHT_CLASS_NORMAL
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
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_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_ignore_throwspeed_threshold = FALSE
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
return 1
/obj/item/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
qdel(src)
/obj/item/ex_act(severity)
switch(severity)
if(1.0)
@@ -151,9 +157,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
else
return
/obj/item/blob_act()
qdel(src)
/obj/item/water_act(volume, temperature, source, method = TOUCH)
. = ..()
extinguish()
@@ -289,13 +292,13 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
return 1
/obj/item/attack_alien(mob/user as mob)
/obj/item/attack_alien(mob/user)
var/mob/living/carbon/alien/A = user
if(!A.has_fine_manipulation)
if(src in A.contents) // To stop Aliens having items stuck in their pockets
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
attack_hand(A)
@@ -552,10 +555,11 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
return
/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)
throw_at(S,14,3)
else ..()
..()
if(current_size >= STAGE_FOUR)
throw_at(S, 14, 3, spin = 0)
else
return
/obj/item/throw_impact(atom/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))
return TRUE
/obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
return
/obj/item/attack_hulk(mob/living/carbon/human/user)
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)
openToolTip(user, src, params, title = name, content = "[desc]", theme = "")
+1 -1
View File
@@ -63,7 +63,7 @@
push_over()
/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)
if(prob(P.damage))
push_over()
@@ -112,6 +112,15 @@
to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>")
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
for(var/mob/M in src)
to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>")
+4 -2
View File
@@ -46,8 +46,10 @@
if(prob(50))
qdel(src)
/obj/item/latexballon/bullet_act()
burst()
/obj/item/latexballon/bullet_act(obj/item/projectile/P)
if(!P.nodamage)
burst()
return ..()
/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume)
..()
+3 -3
View File
@@ -38,10 +38,10 @@
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))
merge(AM)
..()
. = ..()
/obj/item/stack/Destroy()
if(usr && usr.machine == src)
@@ -129,7 +129,7 @@
if(R.max_res_amount > 1 && max_multiplier > 1)
max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount))
t1 += " |"
var/list/multipliers = list(5, 10, 25)
for(var/n in multipliers)
if(max_multiplier >= n)
@@ -52,7 +52,7 @@
can_charge = 0
fire_delay = 50
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
/obj/item/gun/energy/chrono_gun/New(var/obj/item/chrono_eraser/T)
@@ -79,7 +79,7 @@
field_disconnect(field)
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
if(F.gun)
if(isliving(user) && F.captured)
@@ -93,7 +93,7 @@
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)
var/mob/living/user = src.loc
if(F.gun == src)
@@ -103,7 +103,7 @@
field = 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(field == F)
var/turf/currentpos = get_turf(src)
@@ -135,7 +135,7 @@
/obj/item/projectile/energy/chrono_beam/on_hit(atom/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)
/obj/item/ammo_casing/energy/chrono_beam
@@ -144,27 +144,27 @@
icon_state = "chronobolt"
e_cost = 0
/obj/effect/chrono_field
/obj/structure/chrono_field
name = "eradication field"
desc = "An aura of time-bluespace energy."
icon = 'icons/effects/effects.dmi'
icon_state = "chronofield"
density = TRUE
density = FALSE
anchored = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
move_resist = INFINITY
blend_mode = BLEND_MULTIPLY
var/mob/living/captured = null
var/obj/item/gun/energy/chrono_gun/gun = null
var/tickstokill = 30
var/image/mob_underlay = null
var/tickstokill = 15
var/mutable_appearance/mob_underlay
var/preloaded = 0
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)
target.loc = src
src.captured = target
target.forceMove(src)
captured = target
var/icon/mob_snapshot = getFlatIcon(target)
var/icon/cached_icon = new()
@@ -174,18 +174,19 @@
mob_icon.Blend(removing_frame, ICON_MULTIPLY)
cached_icon.Insert(mob_icon, "frame[i]")
mob_underlay = new(cached_icon, "frame1")
mob_underlay = mutable_appearance(cached_icon, "frame1")
update_icon()
desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>"
START_PROCESSING(SSobj, src)
return ..()
/obj/effect/chrono_field/Destroy()
/obj/structure/chrono_field/Destroy()
if(gun && gun.field_check(src))
gun.field_disconnect(src)
return ..()
/obj/effect/chrono_field/update_icon()
/obj/structure/chrono_field/update_icon()
var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
ttk_frame = Clamp(Ceiling(ttk_frame * CHRONO_FRAME_COUNT), 1, CHRONO_FRAME_COUNT)
if(ttk_frame != RPpos)
@@ -194,11 +195,11 @@
underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise
underlays += mob_underlay
/obj/effect/chrono_field/process()
/obj/structure/chrono_field/process()
if(captured)
if(tickstokill > initial(tickstokill))
for(var/atom/movable/AM in contents)
AM.loc = loc
AM.forceMove(drop_location())
qdel(src)
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>")
@@ -212,12 +213,8 @@
qdel(src)
else
captured.Paralyse(4)
if(captured.reagents)
captured.reagents.del_reagent("synaptizine") //you pesky thing you
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 .()
if(captured.loc != src)
captured.forceMove(src)
update_icon()
if(gun)
if(gun.field_check(src))
@@ -230,7 +227,8 @@
else
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))
var/obj/item/projectile/energy/chrono_beam/beam = P
var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun
@@ -239,28 +237,28 @@
else
return 0
/obj/effect/chrono_field/assume_air()
/obj/structure/chrono_field/assume_air()
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
GM.oxygen = MOLES_O2STANDARD
GM.nitrogen = MOLES_N2STANDARD
GM.temperature = T20C
return GM
/obj/effect/chrono_field/Move()
/obj/structure/chrono_field/Move()
return
/obj/effect/chrono_field/singularity_act()
/obj/structure/chrono_field/singularity_act()
return
/obj/effect/chrono_field/ex_act()
/obj/structure/chrono_field/ex_act()
return
/obj/effect/chrono_field/blob_act()
/obj/structure/chrono_field/blob_act(obj/structure/blob/B)
return
#undef CHRONO_BEAM_RANGE
#undef CHRONO_FRAME_COUNT
#undef CHRONO_FRAME_COUNT
@@ -15,6 +15,12 @@
var/det_time = 50
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)
if((CLUMSY in user.mutations) && prob(50))
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
@@ -87,7 +87,6 @@
/obj/item/storage/backpack/holding/singularity_act(current_size)
var/dist = max((current_size - 2),1)
explosion(src.loc,(dist),(dist*2),(dist*4))
return
/obj/item/storage/backpack/santabag
name = "Santa's Gift Bag"
+13 -4
View File
@@ -109,10 +109,10 @@
return
/obj/item/tank/blob_act()
if(prob(50))
var/turf/location = loc
if(!( istype(location, /turf) ))
/obj/item/tank/blob_act(obj/structure/blob/B)
if(B && B.loc == loc)
var/turf/location = get_turf(src)
if(!location)
qdel(src)
if(air_contents)
@@ -120,6 +120,15 @@
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)
..()
+1 -1
View File
@@ -120,7 +120,7 @@
else
. = 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)
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)
return TRUE
+3 -5
View File
@@ -273,11 +273,9 @@ a {
onclose(user, "mtcomputer")
/obj/singularity_pull(S, current_size)
if(anchored)
if(current_size >= STAGE_FIVE)
anchored = 0
step_towards(src,S)
else step_towards(src,S)
..()
if(!anchored || current_size >= STAGE_FIVE)
step_towards(src,S)
/obj/proc/container_resist(var/mob/living)
return
-11
View File
@@ -5,10 +5,6 @@
var/mob/climber
var/broken = FALSE
/obj/structure/blob_act()
if(prob(50))
qdel(src)
/obj/structure/ex_act(severity)
switch(severity)
if(1.0)
@@ -21,13 +17,6 @@
if(3.0)
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()
if (!armor)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
+3 -3
View File
@@ -28,12 +28,12 @@
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
if(damage_amount)
playsound(loc, 'sound/items/welder.ogg', 100, 1)
playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/*
* Resin
+10
View File
@@ -38,7 +38,17 @@
else
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)
return src.attack_hand(user)
@@ -146,27 +146,6 @@
new /obj/item/stack/sheet/metal(loc)
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)
if(istype(W, /obj/item/rcs) && !opened)
if(user in contents) //to prevent self-teleporting.
@@ -40,7 +40,7 @@
if(isanimal(M) && "syndicate" in M.faction)
to_chat(M, "<span class='warning'>The [src] resists your attack!</span>")
return
return ..(M)
return ..()
/obj/structure/closet/secure_closet/syndicate/depot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/rcs))
@@ -92,19 +92,6 @@
for(var/mob/M in src)
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)
for(var/mob/M in src)
M.ex_act(severity)
@@ -194,9 +194,10 @@
if(3.0)
if(prob(50))
qdel(src)
return
else
return
/obj/structure/closet/singularity_act()
dump_contents()
..()
/obj/structure/closet/crate/attack_hand(mob/user)
if(manifest)
+10 -7
View File
@@ -14,18 +14,21 @@
layer = SHOWER_OPEN_LAYER
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)
playsound(get_turf(loc), "rustle", 15, 1, -5)
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()
set_opacity(!opacity)
if(opacity)
-5
View File
@@ -33,11 +33,6 @@
obj_integrity = 0
healthcheck()
/obj/structure/fusionreactor/bullet_act(obj/item/projectile/Proj)
obj_integrity -= Proj.damage
..()
healthcheck()
/obj/structure/fusionreactor/proc/healthcheck()
if(obj_integrity <= 0 && istype(depotarea))
overload(TRUE)
+15 -13
View File
@@ -163,6 +163,21 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
occupant = 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)
switch(severity)
if(1)
@@ -179,19 +194,6 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
src.health -= 5
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()
if(src.health <= 0)
health = 0
@@ -281,7 +281,7 @@
qdel(source)
/obj/structure/door_assembly/deconstruct(disassembled = TRUE)
if(can_deconstruct)
if(!(flags & NODECONSTRUCT))
var/turf/T = get_turf(src)
if(!disassembled)
material_amt = rand(2,4)
+12 -8
View File
@@ -80,11 +80,15 @@
user.visible_message("[user] has secured [src]'s bolts.", \
"<span class='notice'>You have secured [src]'s bolts.</span>")
anchored = 1
else
if(iscrowbar(W) && !anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is attempting to dismantle [src].", \
"<span class='notice'>You begin to dismantle [src]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
new /obj/item/stack/sheet/wood (loc, 30)
qdel(src)
return
if(iscrowbar(W) && !anchored)
playsound(loc, W.usesound, 100, 1)
user.visible_message("[user] is attempting to dismantle [src].", "<span class='notice'>You begin to dismantle [src]...</span>")
if(do_after(user, 40 * W.toolspeed, target = src))
deconstruct()
return
return ..()
/obj/structure/dresser/deconstruct(disassembled = TRUE)
new /obj/item/stack/sheet/wood(drop_location(), 30)
qdel(src)
@@ -140,6 +140,15 @@
playsound(src, 'sound/items/welder.ogg', 100, 1)
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
*/
+4 -28
View File
@@ -29,18 +29,6 @@
for(var/i=0;i < metalAmount;i++)
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)
..()
var/temp_check = exposed_temperature
@@ -372,28 +360,16 @@
. = . || mover.checkpass(PASSGRILLE)
/obj/structure/girder/deconstruct(disassembled = TRUE)
if(can_deconstruct)
var/remains = pick(/obj/item/stack/rods,/obj/item/stack/sheet/metal)
if(!(flags & NODECONSTRUCT))
var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/metal)
new remains(loc)
qdel(src)
/obj/structure/girder/blob_act()
if(prob(40))
qdel(src)
/obj/structure/girder/narsie_act()
if(prob(25))
new /obj/structure/girder/cult(loc)
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)
switch(severity)
if(1)
@@ -500,6 +476,6 @@
return
/obj/structure/girder/cult/deconstruct(disassembled = TRUE)
if(can_deconstruct)
new/obj/item/stack/sheet/runed_metal/(get_turf(src), 1)
if(!(flags & NODECONSTRUCT))
new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
qdel(src)
+22 -24
View File
@@ -53,10 +53,6 @@
. = ..()
update_icon()
/obj/structure/grille/blob_act()
if(!broken)
obj_break()
/obj/structure/grille/examine(mob/user)
..()
if(anchored)
@@ -78,6 +74,11 @@
shock(user, 70)
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()
return 60
@@ -98,14 +99,9 @@
take_damage(rand(5,10), BRUTE, "melee", 1)
/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.visible_message("<span class='warning'>[user] mangles [src].</span>", \
"<span class='warning'>You mangle [src].</span>", \
"You hear twisting metal.")
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='warning'>[user] mangles [src].</span>")
if(!shock(user, 70))
take_damage(20, BRUTE, "melee", 1)
@@ -222,17 +218,17 @@
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, 'sound/effects/grillehit.ogg', 80, 1)
playsound(src, 'sound/effects/grillehit.ogg', 80, TRUE)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 80, 1)
playsound(src, 'sound/items/welder.ogg', 80, TRUE)
/obj/structure/grille/deconstruct(disassembled = TRUE)
if(!loc) //if already qdel'd somehow, we do nothing
return
if(can_deconstruct)
var/obj/R = new rods_type(loc, rods_amount)
if(!(flags & NODECONSTRUCT))
var/obj/R = new rods_type(drop_location(), rods_amount)
transfer_fingerprints_to(R)
qdel(src)
..()
@@ -270,15 +266,17 @@
if(exposed_temperature > T0C + 1500)
take_damage(1, BURN, 0, 0)
/obj/structure/grille/hitby(atom/movable/AM)
if(istype(AM, /obj))
/obj/structure/grille/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(isobj(AM))
if(prob(50) && anchored && !broken)
var/turf/T = get_turf(src)
var/obj/structure/cable/C = T.get_cable_node()
if(C)
playsound(loc, 'sound/magic/lightningshock.ogg', 100, 1, 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.
var/obj/O = AM
if(O.throwforce != 0)//don't want to let people spam tesla bolts, this way it will break after time
var/turf/T = get_turf(src)
var/obj/structure/cable/C = T.get_cable_node()
if(C)
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 ..()
/obj/structure/grille/broken // Pre-broken grilles for map placement
+2 -2
View File
@@ -32,9 +32,9 @@
/obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
if(BURN)
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
playsound(loc, 'sound/weapons/egloves.ogg', 80, TRUE)
/obj/structure/holosign/wetsign
name = "wet floor sign"
@@ -41,13 +41,6 @@
/obj/structure/inflatable/CanAtmosPass(turf/T)
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)
switch(severity)
if(1.0)
@@ -61,9 +54,6 @@
deflate(1)
return
/obj/structure/inflatable/blob_act()
deflate(1)
/obj/structure/inflatable/attack_hand(mob/user as mob)
add_fingerprint(user)
return
@@ -76,25 +66,6 @@
else //for nicer text~
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)
if(!istype(W))
return
@@ -136,3 +136,11 @@
M.emote("scream")
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)
@@ -25,20 +25,6 @@
src.health -= 5
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()
if(src.health <= 0)
if(!( src.destroyed ))
+6 -4
View File
@@ -41,11 +41,13 @@
return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc)
/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)
/obj/structure/lattice/blob_act()
qdel(src)
/obj/structure/lattice/blob_act(obj/structure/blob/B)
return
/obj/structure/lattice/ex_act(severity)
switch(severity)
@@ -58,7 +60,7 @@
/obj/structure/lattice/singularity_pull(S, current_size)
if(current_size >= STAGE_FOUR)
qdel(src)
deconstruct()
/obj/structure/lattice/clockwork
name = "cog lattice"
@@ -52,9 +52,6 @@
/obj/structure/mineral_door/attack_hand(mob/user)
return TryToSwitchState(user)
/obj/structure/mineral_door/attack_animal(mob/user)
return TryToSwitchState(user)
/obj/structure/mineral_door/attack_ghost(mob/user)
if(user.can_advanced_admin_interact())
SwitchState()
+13 -51
View File
@@ -42,16 +42,6 @@
playsound(src, "shatter", 70, 1)
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)
user.changeNext_move(CLICK_CD_MELEE)
if(isscrewdriver(I))
@@ -78,46 +68,18 @@
visible_message("<span class='warning'>[user] hits [src] with [I]!</span>")
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)
user.changeNext_move(CLICK_CD_MELEE)
if(islarva(user))
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/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/structure/mirror/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
if(BURN)
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE)
/obj/item/mounted/mirror
name = "mirror"
@@ -153,7 +115,7 @@
H.dna.real_name = newname
if(H.mind)
H.mind.name = newname
if(newname)
curse(user)
@@ -197,7 +159,7 @@
if(voice_choice)
curse(user)
/obj/structure/mirror/magic/on_ui_close(mob/user)
curse(user)
+1 -1
View File
@@ -82,7 +82,7 @@ GLOBAL_LIST_EMPTY(safes)
if(open)
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
/obj/structure/safe/ex_act(severity)
+10 -7
View File
@@ -6,6 +6,16 @@
layer = 3.5
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)
switch(severity)
if(1.0)
@@ -16,13 +26,6 @@
return
if(3.0)
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
if(istype(tool, /obj/item/screwdriver) && !istype(src, /obj/structure/sign/double))
-36
View File
@@ -24,42 +24,6 @@
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
name = "warp beacon"
icon = 'icons/obj/device.dmi'
-5
View File
@@ -85,11 +85,6 @@
/obj/structure/statue/CanAtmosPass()
return !density
/obj/structure/statue/bullet_act(obj/item/projectile/Proj)
hardness -= Proj.damage
..()
CheckHardness()
/obj/structure/statue/proc/CheckHardness()
if(hardness <= 0)
Dismantle(TRUE)
@@ -77,15 +77,15 @@
M.layer = initial(M.layer)
overlays -= nest_overlay
/obj/structure/bed/nest/attackby(obj/item/W as obj, mob/user as mob, params)
user.changeNext_move(CLICK_CD_MELEE)
var/aforce = W.force
health = max(0, health - aforce)
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
visible_message("<span class='warning'>[user] hits [src] with [W]!</span>", 1)
healthcheck()
/obj/structure/bed/nest/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE)
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/bed/nest/proc/healthcheck()
if(health <= 0)
density = FALSE
qdel(src)
/obj/structure/bed/nest/attack_alien(mob/living/carbon/alien/user)
if(user.a_intent != INTENT_HARM)
return attack_hand(user)
else
return ..()
@@ -47,14 +47,6 @@
playsound(loc, W.usesound, 50, 1)
new buildstacktype(loc, buildstackamount)
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
*/
@@ -304,12 +304,6 @@
if(prob(50))
new buildstacktype(loc, buildstackamount)
qdel(src)
return
/obj/structure/chair/stool/blob_act()
if(prob(75))
new buildstacktype(loc, buildstackamount)
qdel(src)
/obj/item/chair
name = "chair"
+3 -3
View File
@@ -706,11 +706,11 @@
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
playsound(loc, 'sound/items/dodgeball.ogg', 80, TRUE)
else
playsound(loc, 'sound/weapons/tap.ogg', 50, 1)
playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(loc, 'sound/items/welder.ogg', 40, 1)
playsound(loc, 'sound/items/welder.ogg', 40, TRUE)
/obj/structure/rack/skeletal_bar
name = "skeletal minibar"
+4 -3
View File
@@ -129,6 +129,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
return
/obj/structure/window/singularity_pull(S, current_size)
..()
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
@@ -333,11 +334,11 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, hitsound, 75, 1)
playsound(src, hitsound, 75, TRUE)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, 1)
playsound(src, 'sound/items/Welder.ogg', 100, TRUE)
/obj/structure/window/deconstruct(disassembled = TRUE)
if(QDELETED(src))