Ports "Fixes default supplypods exploding their contents" & co.

This commit is contained in:
Ghommie
2019-07-04 22:35:13 +02:00
parent a814442fa5
commit b41e289db3
7 changed files with 31 additions and 11 deletions

View File

@@ -198,7 +198,8 @@ GLOBAL_LIST_EMPTY(explosions)
var/list/items = list() var/list/items = list()
for(var/I in T) for(var/I in T)
var/atom/A = I var/atom/A = I
items += A.GetAllContents() if (!A.prevent_content_explosion()) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't.
items += A.GetAllContents()
for(var/O in items) for(var/O in items)
var/atom/A = O var/atom/A = O
if(!QDELETED(A)) if(!QDELETED(A))

View File

@@ -289,8 +289,11 @@
to_chat(user, "<span class='warning'>You can't move while buckled to [src]!</span>") to_chat(user, "<span class='warning'>You can't move while buckled to [src]!</span>")
return return
/atom/proc/prevent_content_explosion()
return FALSE
/atom/proc/contents_explosion(severity, target) /atom/proc/contents_explosion(severity, target)
return return //For handling the effects of explosions on contents that would not normally be effected
/atom/proc/ex_act(severity, target) /atom/proc/ex_act(severity, target)
set waitfor = FALSE set waitfor = FALSE

View File

@@ -86,13 +86,15 @@
/obj/structure/closet/supplypod/contents_explosion() //Supplypods also protect their contents from the harmful effects of fucking exploding. /obj/structure/closet/supplypod/contents_explosion() //Supplypods also protect their contents from the harmful effects of fucking exploding.
return return
/obj/structure/closet/supplypod/prevent_content_explosion() //Useful for preventing epicenter explosions from damaging contents
return TRUE
/obj/structure/closet/supplypod/toggle(mob/living/user) //Supplypods shouldn't be able to be manually opened under any circumstances, as the open() proc generates supply order datums /obj/structure/closet/supplypod/toggle(mob/living/user) //Supplypods shouldn't be able to be manually opened under any circumstances, as the open() proc generates supply order datums
return return
/obj/structure/closet/supplypod/proc/preOpen() //Called before the open() proc. Handles anything that occurs right as the pod lands. /obj/structure/closet/supplypod/proc/preOpen() //Called before the open() proc. Handles anything that occurs right as the pod lands.
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
var/list/B = explosionSize //Mostly because B is more readable than explosionSize :p var/list/B = explosionSize //Mostly because B is more readable than explosionSize :p
var/boomTotal = 0 //A counter used to check if the explosion does nothing
if (landingSound) if (landingSound)
playsound(get_turf(src), landingSound, soundVolume, 0, 0) playsound(get_turf(src), landingSound, soundVolume, 0, 0)
for (var/mob/living/M in T) for (var/mob/living/M in T)
@@ -108,10 +110,8 @@
M.gib() //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs M.gib() //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs
M.adjustBruteLoss(damage) M.adjustBruteLoss(damage)
for (var/i in B)
boomTotal += i //Count up all the values of the explosion
if (boomTotal != 0) //If the explosion list isn't all zeroes, call an explosion if (B[1] || B[2] || B[3] || B[4]) //If the explosion list isn't all zeroes, call an explosion
explosion(get_turf(src), B[1], B[2], B[3], flame_range = B[4], silent = effectQuiet, ignorecap = istype(src, /obj/structure/closet/supplypod/centcompod)) //less advanced equipment than bluespace pod, so larger explosion when landing explosion(get_turf(src), B[1], B[2], B[3], flame_range = B[4], silent = effectQuiet, ignorecap = istype(src, /obj/structure/closet/supplypod/centcompod)) //less advanced equipment than bluespace pod, so larger explosion when landing
else if (!effectQuiet) //If our explosion list IS all zeroes, we still make a nice explosion sound (unless the effectQuiet var is true) else if (!effectQuiet) //If our explosion list IS all zeroes, we still make a nice explosion sound (unless the effectQuiet var is true)
playsound(src, "explosion", landingSound ? 15 : 80, 1) playsound(src, "explosion", landingSound ? 15 : 80, 1)

View File

@@ -100,6 +100,9 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
/obj/effect/immovablerod/ex_act(severity, target) /obj/effect/immovablerod/ex_act(severity, target)
return 0 return 0
/obj/structure/closet/supplypod/prevent_content_explosion()
return TRUE
/obj/effect/immovablerod/singularity_act() /obj/effect/immovablerod/singularity_act()
return return

View File

@@ -69,6 +69,9 @@
/mob/living/silicon/contents_explosion(severity, target) /mob/living/silicon/contents_explosion(severity, target)
return return
/mob/living/silicon/prevent_content_explosion()
return TRUE
/mob/living/silicon/proc/cancelAlarm() /mob/living/silicon/proc/cancelAlarm()
return return

View File

@@ -41,6 +41,9 @@
QDEL_NULL(internal) QDEL_NULL(internal)
. = ..() . = ..()
/mob/living/simple_animal/hostile/megafauna/prevent_content_explosion()
return TRUE
/mob/living/simple_animal/hostile/megafauna/death(gibbed) /mob/living/simple_animal/hostile/megafauna/death(gibbed)
if(health > 0) if(health > 0)
return return

View File

@@ -653,6 +653,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
else else
L.show_message("<span class='italics'>You hear an unearthly ringing and notice your skin is covered in fresh radiation burns.</span>", 2) L.show_message("<span class='italics'>You hear an unearthly ringing and notice your skin is covered in fresh radiation burns.</span>", 2)
//Do not blow up our internal radio
/obj/machinery/power/supermatter_crystal/contents_explosion(severity, target)
return
/obj/machinery/power/supermatter_crystal/prevent_content_explosion()
return TRUE
/obj/machinery/power/supermatter_crystal/engine /obj/machinery/power/supermatter_crystal/engine
is_main_engine = TRUE is_main_engine = TRUE