mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Airlocks can now crush more things.
Airlocks can now crush mobs, canisters, closets, and mechas. Fixes #8983.
This commit is contained in:
@@ -856,40 +856,65 @@ About the new airlock wires panel:
|
|||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
/atom/movable/proc/blocks_airlock()
|
||||||
|
return density
|
||||||
|
|
||||||
|
/obj/machinery/door/blocks_airlock()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/mob/living/blocks_airlock()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/atom/movable/proc/airlock_crush(var/crush_damage)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/portable_atmospherics/canister/airlock_crush(var/crush_damage)
|
||||||
|
health -= crush_damage
|
||||||
|
healthcheck()
|
||||||
|
|
||||||
|
/obj/structure/closet/airlock_crush(var/crush_damage)
|
||||||
|
damage(crush_damage)
|
||||||
|
for(var/atom/movable/AM in src)
|
||||||
|
AM.airlock_crush()
|
||||||
|
|
||||||
|
/mob/living/airlock_crush(var/crush_damage)
|
||||||
|
adjustBruteLoss(crush_damage)
|
||||||
|
SetStunned(5)
|
||||||
|
SetWeakened(5)
|
||||||
|
var/obj/effect/stop/S
|
||||||
|
S = new /obj/effect/stop
|
||||||
|
S.victim = src
|
||||||
|
S.loc = loc
|
||||||
|
spawn(20)
|
||||||
|
qdel(S)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
T.add_blood(src)
|
||||||
|
|
||||||
|
/mob/living/carbon/airlock_crush(var/crush_damage)
|
||||||
|
..()
|
||||||
|
if (!(species && (species.flags & NO_PAIN)))
|
||||||
|
emote("scream")
|
||||||
|
|
||||||
|
/mob/living/silicon/robot/airlock_crush(var/crush_damage)
|
||||||
|
adjustBruteLoss(crush_damage)
|
||||||
|
|
||||||
/obj/machinery/door/airlock/close(var/forced=0)
|
/obj/machinery/door/airlock/close(var/forced=0)
|
||||||
if(!can_close(forced))
|
if(!can_close(forced))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if(safe)
|
if(safe)
|
||||||
for(var/turf/turf in locs)
|
for(var/turf/turf in locs)
|
||||||
if(locate(/mob/living) in turf)
|
for(var/atom/movable/AM in turf)
|
||||||
if(world.time > next_beep_at)
|
if(AM.blocks_airlock())
|
||||||
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
if(world.time > next_beep_at)
|
||||||
next_beep_at = world.time + SecondsToTicks(10)
|
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||||
close_door_at = world.time + 6
|
next_beep_at = world.time + SecondsToTicks(10)
|
||||||
return
|
close_door_at = world.time + 6
|
||||||
|
return
|
||||||
|
|
||||||
for(var/turf/turf in locs)
|
for(var/turf/turf in locs)
|
||||||
for(var/mob/living/M in turf)
|
for(var/atom/movable/AM in turf)
|
||||||
if(isrobot(M))
|
AM.airlock_crush(DOOR_CRUSH_DAMAGE)
|
||||||
M.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
|
||||||
else
|
|
||||||
M.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
|
||||||
M.SetStunned(5)
|
|
||||||
M.SetWeakened(5)
|
|
||||||
var/obj/effect/stop/S
|
|
||||||
S = new /obj/effect/stop
|
|
||||||
S.victim = M
|
|
||||||
S.loc = M.loc
|
|
||||||
spawn(20)
|
|
||||||
qdel(S)
|
|
||||||
if (iscarbon(M))
|
|
||||||
var/mob/living/carbon/C = M
|
|
||||||
if (!(C.species && (C.species.flags & NO_PAIN)))
|
|
||||||
M.emote("scream")
|
|
||||||
var/turf/location = src.loc
|
|
||||||
if(istype(location, /turf/simulated))
|
|
||||||
location.add_blood(M)
|
|
||||||
|
|
||||||
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
|
use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people
|
||||||
if(istype(src, /obj/machinery/door/airlock/glass))
|
if(istype(src, /obj/machinery/door/airlock/glass))
|
||||||
|
|||||||
@@ -388,7 +388,9 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/machinery/door/proc/open(var/forced = 0)
|
/obj/machinery/door/proc/open(var/forced = 0)
|
||||||
if(!can_open(forced)) return
|
if(!can_open(forced))
|
||||||
|
return
|
||||||
|
operating = 1
|
||||||
|
|
||||||
do_animate("opening")
|
do_animate("opening")
|
||||||
icon_state = "door0"
|
icon_state = "door0"
|
||||||
@@ -401,8 +403,7 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
SetOpacity(0)
|
SetOpacity(0)
|
||||||
update_nearby_tiles()
|
update_nearby_tiles()
|
||||||
|
operating = 0
|
||||||
if(operating) operating = 0
|
|
||||||
|
|
||||||
if(autoclose)
|
if(autoclose)
|
||||||
close_door_at = next_close_time()
|
close_door_at = next_close_time()
|
||||||
|
|||||||
@@ -497,6 +497,9 @@
|
|||||||
/obj/mecha/proc/dynabsorbdamage(damage,damage_type)
|
/obj/mecha/proc/dynabsorbdamage(damage,damage_type)
|
||||||
return damage*(listgetindex(damage_absorption,damage_type) || 1)
|
return damage*(listgetindex(damage_absorption,damage_type) || 1)
|
||||||
|
|
||||||
|
/obj/mecha/airlock_crush(var/crush_damage)
|
||||||
|
take_damage(crush_damage)
|
||||||
|
check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||||
|
|
||||||
/obj/mecha/proc/update_health()
|
/obj/mecha/proc/update_health()
|
||||||
if(src.health > 0)
|
if(src.health > 0)
|
||||||
|
|||||||
@@ -160,16 +160,19 @@
|
|||||||
A.ex_act(severity++)
|
A.ex_act(severity++)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/structure/closet/proc/damage(var/damage)
|
||||||
|
health -= damage
|
||||||
|
if(health <= 0)
|
||||||
|
for(var/atom/movable/A in src)
|
||||||
|
A.loc = src.loc
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
|
/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
|
||||||
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||||
return
|
return
|
||||||
|
|
||||||
health -= Proj.damage
|
|
||||||
..()
|
..()
|
||||||
if(health <= 0)
|
damage(Proj.damage)
|
||||||
for(var/atom/movable/A as mob|obj in src)
|
|
||||||
A.loc = src.loc
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
4
html/changelogs/PsiOmegaDelta-AirlockPressure.yml
Normal file
4
html/changelogs/PsiOmegaDelta-AirlockPressure.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
author: PsiOmegaDelta
|
||||||
|
changes:
|
||||||
|
- rscadd: "Beware. Airlocks can now crush more things than just mobs."
|
||||||
|
delete-after: True
|
||||||
Reference in New Issue
Block a user