diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 238cb575b32..c2302a6b404 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -487,28 +487,34 @@ steam.start() -- spawns the effect
M.Weaken(rand(1,5))
return
else
- var/devastation = -1
+ var/devst = -1
var/heavy = -1
var/light = -1
var/flash = -1
- // Clamp all values to max_explosion_range
+ // Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs
if (round(amount/12) > 0)
- devastation = min (max_explosion_range, devastation + round(amount/12))
+ devst = devst + amount/12
if (round(amount/6) > 0)
- heavy = min (max_explosion_range, heavy + round(amount/6))
+ heavy = heavy + amount/6
if (round(amount/3) > 0)
- light = min (max_explosion_range, light + round(amount/3))
+ light = light + amount/3
- if (flash && flashing_factor)
- flash += (round(amount/4) * flashing_factor)
+ if (flashing && flashing_factor)
+ flash = (amount/4) * flashing_factor
for(var/mob/M in viewers(8, location))
M << "\red The solution violently explodes."
- explosion(location, devastation, heavy, light, flash)
+ explosion(
+ location,
+ round(min(devst, BOMBCAP_DVSTN_RADIUS)),
+ round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
+ round(min(light, BOMBCAP_LIGHT_RADIUS)),
+ round(min(flash, BOMBCAP_FLASH_RADIUS))
+ )
proc/holder_damage(var/atom/holder)
if(holder)
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 58c053aa669..6ad69f099b6 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -16,16 +16,16 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
explosion_rec(epicenter, power)
return
+ var/start = world.timeofday
+ epicenter = get_turf(epicenter)
+ if(!epicenter) return
+
///// Z-Level Stuff
if(z_transfer && (devastation_range > 0 || heavy_impact_range > 0))
//transfer the explosion in both directions
explosion_z_transfer(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
///// Z-Level Stuff
- var/start = world.timeofday
- epicenter = get_turf(epicenter)
- if(!epicenter) return
-
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flash_range)
//playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
//playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) )
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index f1cd0286baa..59627bad116 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -261,19 +261,22 @@
if(!istype(src.loc,/obj/item/device/transfer_valve))
message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].")
log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].")
- //world << "\blue[x],[y] tank is exploding: [pressure] kPa"
+
//Give the gas a chance to build up more pressure through reacting
air_contents.react()
air_contents.react()
air_contents.react()
+
pressure = air_contents.return_pressure()
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
- range = min(range, max_explosion_range) // was 8 - - - Changed to a configurable define -- TLE
- var/turf/epicenter = get_turf(loc)
- //world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
-
- explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5))
+ explosion(
+ get_turf(loc),
+ round(min(BOMBCAP_DVSTN_RADIUS, range*0.25)),
+ round(min(BOMBCAP_HEAVY_RADIUS, range*0.50)),
+ round(min(BOMBCAP_LIGHT_RADIUS, range*1.00)),
+ round(min(BOMBCAP_FLASH_RADIUS, range*1.50)),
+ )
qdel(src)
else if(pressure > TANK_RUPTURE_PRESSURE)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index c8d5651b299..2c338bcfe7a 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -670,9 +670,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images -= ghostimage //remove ourself
mob/dead/observer/MayRespawn(var/feedback = 0)
- if(!client || !mind)
+ if(!client)
return 0
- if(mind.current && mind.current.stat != DEAD)
+ if(mind && mind.current && mind.current.stat != DEAD)
if(feedback)
src << "Your non-dead body prevent you from respawning."
return 0
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 709ab2bfb85..f07351c7055 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1469,7 +1469,7 @@
return
if(shock_stage == 10)
- src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!")
+ src << "[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!"
if(shock_stage >= 30)
if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
@@ -1477,22 +1477,22 @@
stuttering = max(stuttering, 5)
if(shock_stage == 40)
- src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
+ src << "[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!"
if (shock_stage >= 60)
if(shock_stage == 60) emote("me",1,"'s body becomes limp.")
if (prob(2))
- src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
+ src << "[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!"
Weaken(20)
if(shock_stage >= 80)
if (prob(5))
- src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
+ src << "[pick("The pain is excruciating", "Please, just end the pain", "Your whole body is going numb")]!"
Weaken(20)
if(shock_stage >= 120)
if (prob(2))
- src << ""+pick("You black out!", "You feel like you could die any moment now.", "You're about to lose consciousness.")
+ src << "[pick("You black out", "You feel like you could die any moment now", "You're about to lose consciousness")]!"
Paralyse(5)
if(shock_stage == 150)
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index bf5d6957a6a..771d1855d4e 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -103,7 +103,8 @@
grav_pulling = 1
exploded = 1
for(var/mob/living/mob in living_mob_list)
- if(loc.z == mob.loc.z)
+ var/turf/T = get_turf(mob)
+ if(T && (loc.z == T.z))
if(istype(mob, /mob/living/carbon/human))
//Hilariously enough, running into a closet should make you get hit the hardest.
var/mob/living/carbon/human/H = mob
diff --git a/code/setup.dm b/code/setup.dm
index 815f5b52f3f..26ce7e3c1ce 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -795,6 +795,11 @@ var/list/be_special_flags = list(
#define ROBOT_NOTIFICATION_NEW_MODULE 3
#define ROBOT_NOTIFICATION_MODULE_RESET 4
+#define BOMBCAP_DVSTN_RADIUS (max_explosion_range/4)
+#define BOMBCAP_HEAVY_RADIUS (max_explosion_range/2)
+#define BOMBCAP_LIGHT_RADIUS max_explosion_range
+#define BOMBCAP_FLASH_RADIUS (max_explosion_range*1.5)
+
#define DEFAULT_JOB_TYPE /datum/job/assistant
// Appearance change flags