diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index e54ac11d389..5bd99703b80 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -59,6 +59,10 @@
var/wikiurl
var/forumurl
+ var/fast_atmos_1 = 0
+ var/fast_atmos_2 = 0
+ var/fast_atmos_3 = 0
+
//Alert level description
var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced."
var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted."
@@ -97,6 +101,7 @@
var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database
var/use_recursive_explosions //Defines whether the server uses recursive or circular explosions.
+ var/roundstart_station_randomization = 1 //Enable this to have some randomization happen on the station.
var/assistant_maint = 0 //Do assistants get maint access?
var/gateway_delay = 18000 //How long the gateway takes before it activates. Default is half an hour.
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index ee764eb1a37..a1a9e426ec2 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -122,10 +122,11 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
- //SUN
+ //SUN AND LIQUID
timer = world.timeofday
last_thing_processed = sun.type
sun.calc_position()
+ process_liquid()
sun_cost = (world.timeofday - timer) / 10
sleep(breather_ticks)
@@ -142,6 +143,14 @@ datum/controller/game_controller/proc/process()
process_diseases()
diseases_cost = (world.timeofday - timer) / 10
+ //AIR (Faster atmos 1!)
+ if(config.fast_atmos_1)
+ if(!air_processing_killed)
+ timer = world.timeofday
+ last_thing_processed = air_master.type
+ air_master.process()
+ air_cost += (world.timeofday - timer) / 10
+
sleep(breather_ticks)
//MACHINES
@@ -156,6 +165,14 @@ datum/controller/game_controller/proc/process()
process_objects()
objects_cost = (world.timeofday - timer) / 10
+ //AIR (Faster atmos 2!)
+ if(config.fast_atmos_2)
+ if(!air_processing_killed)
+ timer = world.timeofday
+ last_thing_processed = air_master.type
+ air_master.process()
+ air_cost += (world.timeofday - timer) / 10
+
sleep(breather_ticks)
//PIPENETS
@@ -173,6 +190,14 @@ datum/controller/game_controller/proc/process()
sleep(breather_ticks)
+ //AIR (Faster atmos 3!)
+ if(config.fast_atmos_3)
+ if(!air_processing_killed)
+ timer = world.timeofday
+ last_thing_processed = air_master.type
+ air_master.process()
+ air_cost += (world.timeofday - timer) / 10
+
//EVENTS
timer = world.timeofday
process_events()
@@ -194,6 +219,17 @@ datum/controller/game_controller/proc/process()
else
sleep(10)
+datum/controller/game_controller/proc/process_liquid()
+ last_thing_processed = /datum/puddle
+ var/i = 1
+ while(i<=puddles.len)
+ var/datum/puddle/Puddle = puddles[i]
+ if(Puddle)
+ Puddle.process()
+ i++
+ continue
+ puddles.Cut(i,i+1)
+
datum/controller/game_controller/proc/process_mobs()
var/i = 1
while(i<=mob_list.len)
@@ -288,4 +324,3 @@ datum/controller/game_controller/proc/Recover() //Mostly a placeholder for now.
else
msg += "\t [varname] = [varval]\n"
world.log << msg
-
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 912b032a03f..3c961d83d7a 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -1107,13 +1107,13 @@ steam.start() -- spawns the effect
// Clamp all values to MAX_EXPLOSION_RANGE
if (round(amount/12) > 0)
- devastation = min (MAX_EXPLOSION_RANGE, devastation + round(amount/12))
+ devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12))
if (round(amount/6) > 0)
- heavy = min (MAX_EXPLOSION_RANGE, heavy + round(amount/6))
+ heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6))
if (round(amount/3) > 0)
- light = min (MAX_EXPLOSION_RANGE, light + round(amount/3))
+ light = min (MAX_EX_LIGHT_RANGE, light + round(amount/3))
if (flash && flashing_factor)
flash += (round(amount/4) * flashing_factor)
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index 4c0557197b0..090cbdac7ee 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -7,11 +7,23 @@
else return dy + (0.5*dx)
-proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
+proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0)
src = null //so we don't abort once src is deleted
+
+ if(!ignorecap)
+ // Clamp all values to MAX_EXPLOSION_RANGE
+ devastation_range = min (MAX_EX_DEVESTATION_RANGE, devastation_range)
+ heavy_impact_range = min (MAX_EX_HEAVY_RANGE, heavy_impact_range)
+ light_impact_range = min (MAX_EX_LIGHT_RANGE, light_impact_range)
+ flash_range = min (MAX_EX_FLASH_RANGE, flash_range)
+
spawn(0)
if(config.use_recursive_explosions)
- var/power = devastation_range * 2 + heavy_impact_range + light_impact_range //The ranges add up, ie light 14 includes both heavy 7 and devestation 3. So this calculation means devestation counts for 4, heavy for 2 and light for 1 power, giving us a cap of 27 power.
+ devastation_range += 1 //Original code uses -1 as no explosion, this code uses 0 as no explosion and -1 would ruin everything
+ heavy_impact_range += 1
+ light_impact_range += 1
+ var/power = devastation_range * 3 + heavy_impact_range * 1.5 + light_impact_range * 0.75
+ //So max power is (3 * 4) + (1.5 * 8) + (0.75 * 15) = 36,25
explosion_rec(epicenter, power)
return
diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm
index cfa1d7e0e53..50882bc3e65 100644
--- a/code/game/objects/explosion_recursive.dm
+++ b/code/game/objects/explosion_recursive.dm
@@ -110,7 +110,7 @@ proc/explosion_rec(turf/epicenter, power)
explosion_resistance = 5
/turf/simulated/wall/r_wall
- explosion_resistance = 25
+ explosion_resistance = 15
//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station.
//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force.
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index 143ff13a041..3db382f01fc 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -229,7 +229,7 @@
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
+ range = min(range, MAX_EX_LIGHT_RANGE) // was 8 - - - Changed to a configurable define -- TLE
var/turf/epicenter = get_turf(loc)
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index b98ed58551c..8dbcf41bab1 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1835,18 +1835,33 @@
if("togglebombcap")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BC")
- switch(MAX_EXPLOSION_RANGE)
- if(14) MAX_EXPLOSION_RANGE = 16
- if(16) MAX_EXPLOSION_RANGE = 20
- if(20) MAX_EXPLOSION_RANGE = 28
- if(28) MAX_EXPLOSION_RANGE = 56
- if(56) MAX_EXPLOSION_RANGE = 128
- if(128) MAX_EXPLOSION_RANGE = 14
- var/range_dev = MAX_EXPLOSION_RANGE *0.25
- var/range_high = MAX_EXPLOSION_RANGE *0.5
- var/range_low = MAX_EXPLOSION_RANGE
- message_admins("\red [key_name_admin(usr)] changed the bomb cap to [range_dev], [range_high], [range_low]", 1)
- log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EXPLOSION_RANGE]")
+ switch(MAX_EX_LIGHT_RANGE)
+ if(14)
+ MAX_EX_LIGHT_RANGE = 16
+ MAX_EX_HEAVY_RANGE = 8
+ MAX_EX_DEVESTATION_RANGE = 4
+ if(16)
+ MAX_EX_LIGHT_RANGE = 20
+ MAX_EX_HEAVY_RANGE = 10
+ MAX_EX_DEVESTATION_RANGE = 5
+ if(20)
+ MAX_EX_LIGHT_RANGE = 28
+ MAX_EX_HEAVY_RANGE = 14
+ MAX_EX_DEVESTATION_RANGE = 7
+ if(28)
+ MAX_EX_LIGHT_RANGE = 56
+ MAX_EX_HEAVY_RANGE = 28
+ MAX_EX_DEVESTATION_RANGE = 14
+ if(56)
+ MAX_EX_LIGHT_RANGE = 128
+ MAX_EX_HEAVY_RANGE = 64
+ MAX_EX_DEVESTATION_RANGE = 32
+ if(128)
+ MAX_EX_LIGHT_RANGE = 14
+ MAX_EX_HEAVY_RANGE = 7
+ MAX_EX_DEVESTATION_RANGE = 3
+ message_admins("\red [key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]", 1)
+ log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
if("flicklights")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/setup.dm b/code/setup.dm
index f1d7f83b5e8..4ca3a470343 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -137,7 +137,10 @@ var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference whe
// was 2 atm
//This was a define, but I changed it to a variable so it can be changed in-game.(kept the all-caps definition because... code...) -Errorage
-var/MAX_EXPLOSION_RANGE = 14
+var/MAX_EX_DEVESTATION_RANGE = 3
+var/MAX_EX_HEAVY_RANGE = 7
+var/MAX_EX_LIGHT_RANGE = 14
+var/MAX_EX_FLASH_RANGE = 14
//#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE
#define HUMAN_STRIP_DELAY 40 //takes 40ds = 4s to strip someone.