diff --git a/baystation12.dme b/baystation12.dme
index 90bce9b897d..d0c7c3b7dc7 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -5,50 +5,6 @@
// END_INTERNALS
// BEGIN_FILE_DIR
#define FILE_DIR .
-#define FILE_DIR "code"
-#define FILE_DIR "code/TriDimension"
-#define FILE_DIR "code/WorkInProgress"
-#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
-#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle"
-#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
-#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
-#define FILE_DIR "code/WorkInProgress/Susan"
-#define FILE_DIR "html"
-#define FILE_DIR "icons"
-#define FILE_DIR "icons/48x48"
-#define FILE_DIR "icons/effects"
-#define FILE_DIR "icons/mecha"
-#define FILE_DIR "icons/misc"
-#define FILE_DIR "icons/mob"
-#define FILE_DIR "icons/mob/human_races"
-#define FILE_DIR "icons/obj"
-#define FILE_DIR "icons/obj/assemblies"
-#define FILE_DIR "icons/obj/atmospherics"
-#define FILE_DIR "icons/obj/clothing"
-#define FILE_DIR "icons/obj/doors"
-#define FILE_DIR "icons/obj/flora"
-#define FILE_DIR "icons/obj/machines"
-#define FILE_DIR "icons/obj/pipes"
-#define FILE_DIR "icons/pda_icons"
-#define FILE_DIR "icons/spideros_icons"
-#define FILE_DIR "icons/Testing"
-#define FILE_DIR "icons/turf"
-#define FILE_DIR "icons/vending_icons"
-#define FILE_DIR "sound"
-#define FILE_DIR "sound/AI"
-#define FILE_DIR "sound/ambience"
-#define FILE_DIR "sound/effects"
-#define FILE_DIR "sound/effects/wind"
-#define FILE_DIR "sound/hallucinations"
-#define FILE_DIR "sound/items"
-#define FILE_DIR "sound/machines"
-#define FILE_DIR "sound/mecha"
-#define FILE_DIR "sound/misc"
-#define FILE_DIR "sound/music"
-#define FILE_DIR "sound/piano"
-#define FILE_DIR "sound/violin"
-#define FILE_DIR "sound/voice"
-#define FILE_DIR "sound/weapons"
// END_FILE_DIR
// BEGIN_PREFERENCES
diff --git a/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm b/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
index a69f364e0ff..5d0159b3949 100644
--- a/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Economy/Accounts.dm
@@ -157,6 +157,9 @@ var/global/next_account_number = 0
for(var/datum/money_account/M in src.accounts)
if(!A.accounts.Find(M))
A.accounts.Add(M)
+ for(var/datum/money_account/M in A.accounts)
+ if(!src.accounts.Find(M))
+ src.accounts.Add(M)
usr << "\icon[src] Accounts synched across all databases in range."
if("create_account")
diff --git a/code/WorkInProgress/Mini/ATM.dm b/code/WorkInProgress/Mini/ATM.dm
index 7551e96e9c5..68a6c39942e 100644
--- a/code/WorkInProgress/Mini/ATM.dm
+++ b/code/WorkInProgress/Mini/ATM.dm
@@ -91,7 +91,8 @@ log transactions
user << "You insert [I] into [src]."
src.attack_hand(user)
del I
- else ..()
+ else
+ ..()
/obj/machinery/atm/attack_hand(mob/user as mob)
if(istype(user, /mob/living/silicon))
@@ -324,6 +325,8 @@ log transactions
held_card = I
if("logout")
authenticated_account = null
+ usr << browse(null,"window=atm")
+ return
src.attack_hand(usr)
//create the most effective combination of notes to make up the requested amount
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index 3818fb070af..bdd9859ccd8 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -41,9 +41,9 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
return 1
var/datum/gas/volatile_fuel/fuel = locate() in air_contents.trace_gases
var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src
- if(air_contents.calculate_firelevel(liquid) > vsc.IgnitionLevel && (fuel || liquid || air_contents.toxins > 0.5))
+ if(air_contents.calculate_firelevel(liquid) > vsc.IgnitionLevel && (fuel || liquid || air_contents.toxins > 0.1))
igniting = 1
- if(air_contents.oxygen < 0.5)
+ if(air_contents.oxygen < 0.1)
return 0
if(! (locate(/obj/fire) in src))
@@ -97,7 +97,7 @@ obj
firelevel = air_contents.calculate_firelevel(liquid)
//Ensure that there is an appropriate amount of fuel and O2 here.
- if(firelevel > 0.25 && flow.oxygen > 0.3 && (air_contents.toxins || fuel || liquid))
+ if(firelevel > 0.25 && flow.oxygen > 0.1 && (air_contents.toxins || fuel || liquid))
for(var/direction in cardinal)
if(S.air_check_directions&direction) //Grab all valid bordering tiles
@@ -119,7 +119,7 @@ obj
if(flow)
//Ensure adequate oxygen and fuel.
- if(flow.oxygen > 0.3 && (flow.toxins || fuel || liquid))
+ if(flow.oxygen > 0.1 && (flow.toxins || fuel || liquid))
//Change icon depending on the fuel, and thus temperature.
if(firelevel > 6)
@@ -130,7 +130,7 @@ obj
icon_state = "1"
//Ensure flow temperature is higher than minimum fire temperatures.
- flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature)
+ flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.2,flow.temperature)
//Burn the gas mixture.
if(!flow.zburn(liquid))
@@ -205,11 +205,11 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid)
fuel_sources++
//Toxins
- if(toxins > 0.3) fuel_sources++
+ if(toxins > 0.1) fuel_sources++
if(!fuel_sources) return 0 //If there's no fuel, there's no burn. Can't divide by zero anyway.
- if(oxygen > 0.3)
+ if(oxygen > 0.1)
//Calculate the firelevel.
var/firelevel = calculate_firelevel(liquid)
diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm
index b219a10b132..c463b1550cf 100644
--- a/code/ZAS/ZAS_Zones.dm
+++ b/code/ZAS/ZAS_Zones.dm
@@ -481,11 +481,11 @@ proc/play_wind_sound(var/turf/random_border, var/n)
if(random_border)
var/windsound = 'sound/effects/wind/wind_2_1.ogg'
switch(n)
- if(0 to 30)
- windsound = pick('sound/effects/wind/wind_2_1.ogg', 'sound/effects/wind/wind_2_2.ogg')
if(31 to 40)
+ windsound = pick('sound/effects/wind/wind_2_1.ogg', 'sound/effects/wind/wind_2_2.ogg')
+ if(41 to 50)
windsound = pick('sound/effects/wind/wind_3_1.ogg')
- if(41 to 60)
+ if(51 to 60)
windsound = pick('sound/effects/wind/wind_4_1.ogg', 'sound/effects/wind/wind_4_2.ogg')
if(61 to 1000000)
windsound = pick('sound/effects/wind/wind_5_1.ogg')
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 70409123457..ef6d605d1db 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -116,12 +116,12 @@ datum/controller/game_controller/proc/process()
vote.process()
//AIR
+
if(!air_processing_killed)
timer = world.timeofday
last_thing_processed = air_master.type
air_master.tick()
- air_cost = (world.timeofday - timer) / 10
- // this might make atmos slower
+ air_cost = (world.timeofday - timer) / 10 // this might make atmos slower
// 1. atmos won't process if the game is generally lagged out(no deadlocks)
// 2. if the server frequently crashes during atmos processing we will knowif(!kill_air)
//src.set_debug_state("Air Master")
@@ -135,9 +135,7 @@ datum/controller/game_controller/proc/process()
world << "RUNTIMES IN ATMOS TICKER. Killing air simulation!"
kill_air = 1
air_master.failed_ticks = 0
- /*else if (air_master.failed_ticks > 10)
- air_master.failed_ticks = 0*/
- //air_master_ready = 1
+ air_cost = (world.timeofday - timer) / 10
sleep(breather_ticks)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 265c66551e7..412a4065fae 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -225,21 +225,35 @@
if (istype(W,/turf/simulated/floor))
W.RemoveLattice()
+ //if the old turf had a zone, connect the new turf to it as well - Cael
+ if(src.zone)
+ src.zone.RemoveTurf(src)
+ W.zone = src.zone
+ W.zone.AddTurf(W)
+
W.levelupdate()
return W
else
+
+ /*if(istype(src, /turf/simulated) && src.zone)
+ src.zone.rebuild = 1*/
+
var/turf/W = new N( locate(src.x, src.y, src.z) )
W.lighting_lumcount += old_lumcount
if(old_lumcount != W.lighting_lumcount)
W.lighting_changed = 1
lighting_controller.changed_turfs += W
+ if(src.zone)
+ src.zone.RemoveTurf(src)
+ W.zone = src.zone
+ W.zone.AddTurf(W)
+
W.levelupdate()
return W
//////Assimilate Air//////
/turf/simulated/proc/Assimilate_Air()
- /*
var/aoxy = 0//Holders to assimilate air from nearby turfs
var/anitro = 0
var/aco = 0
@@ -266,7 +280,22 @@
air.carbon_dioxide = (aco/max(turf_count,1))
air.toxins = (atox/max(turf_count,1))
air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant
- */
+ air.update_values()
+
+ //cael - duplicate the averaged values across adjacent turfs to enforce a seamless atmos change
+ for(var/direction in cardinal)//Only use cardinals to cut down on lag
+ var/turf/T = get_step(src,direction)
+ if(istype(T,/turf/space))//Counted as no air
+ continue
+ else if(istype(T,/turf/simulated/floor))
+ var/turf/simulated/S = T
+ if(S.air)//Add the air's contents to the holders
+ S.air.oxygen = air.oxygen
+ S.air.nitrogen = air.nitrogen
+ S.air.carbon_dioxide = air.carbon_dioxide
+ S.air.toxins = air.toxins
+ S.air.temperature = air.temperature
+ S.air.update_values()
/turf/proc/ReplaceWithLattice()
src.ChangeTurf(/turf/space)
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index d029320a67b..a967ed8b59a 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -319,9 +319,8 @@
if(job && IsJobAvailable(job.title))
var/active = 0
// Only players with the job assigned and AFK for less than 10 minutes count as active
- for(var/mob/M in player_list)
- if(M.mind && M.mind.assigned_job == job && M.client && M.client.inactivity <= 10 * 60 * 10)
- active++
+ for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10)
+ active++
dat += "[job.title] ([job.current_positions]) (Active: [active])
"
dat += ""
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index f8130b3fde3..a4891b8c7cd 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -420,7 +420,7 @@
taj_ears
name = "Tajaran Ears"
- icon_state = "tajears"
+ icon_state = "ears_plain"
species_allowed = list("Tajaran")
taj_ears_clean
@@ -460,7 +460,7 @@
taj_ears_spiky
name = "Spiky"
- icon_state = "hair_spiky"
+ icon_state = "hair_tajspiky"
species_allowed = list("Tajaran")
taj_ears_messy
@@ -499,7 +499,6 @@
name = "Smallsatche"
icon_state = "facial_smallstache"
species_allowed = list("Tajaran")
-
//skin styles - WIP
//going to have to re-integrate this with surgery
//let the icon_state hold an icon preview for now
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 79b9c1e1d49..d45c2ddb0b0 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1741,8 +1741,8 @@ datum
M.sleeping += 1
if(51 to INFINITY)
M.sleeping += 1
- M.adjustToxLoss((data - 50)*REM)
..()
+
return
beer2 //copypasta of chloral hydrate, disguised as normal beer for use by emagged brobots
@@ -1765,6 +1765,8 @@ datum
M.sleeping += 1
M.adjustToxLoss(data - 50)
data++
+ // Sleep toxins should always be consumed pretty fast
+ holder.remove_reagent(src.id, 0.4)
..()
return
@@ -1859,6 +1861,7 @@ datum
M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature += rand(15,20)
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
data++
..()
return
@@ -1902,21 +1905,21 @@ datum
return
else if ( mouth_covered ) // Reduced effects if partially protected
victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 3)
- victim.eye_blind = max(M.eye_blind, 1)
+ victim.eye_blurry = max(M.eye_blurry, 15)
+ victim.eye_blind = max(M.eye_blind, 5)
victim.Paralyse(1)
victim.drop_item()
return
else if ( eyes_covered ) // Eye cover is better than mouth cover
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
victim.emote("scream")
- victim.eye_blurry = max(M.eye_blurry, 1)
+ victim.eye_blurry = max(M.eye_blurry, 5)
return
else // Oh dear :D
victim.emote("scream")
victim << "\red You're sprayed directly in the eyes with pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 5)
- victim.eye_blind = max(M.eye_blind, 2)
+ victim.eye_blurry = max(M.eye_blurry, 25)
+ victim.eye_blind = max(M.eye_blind, 10)
victim.Paralyse(1)
victim.drop_item()
@@ -1947,6 +1950,7 @@ datum
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature -= rand(15,20)
data++
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
..()
return
@@ -2375,7 +2379,6 @@ datum
holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
holder.remove_reagent(src.id, 0.1)
-
icecoffee
name = "Iced Coffee"
id = "icecoffee"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 10069dfb68c..dda76d623e0 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -478,7 +478,6 @@ datum
var/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/mineral/plasma(location)
return
-
virus_food
name = "Virus Food"
id = "virusfood"
@@ -524,8 +523,13 @@ datum
if(D)
D.Devolve()
-
-
+ condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ result = "condensedcapsaicin"
+ required_reagents = list("capsaicin" = 2)
+ required_catalysts = list("plasma" = 5)
+ result_amount = 1
///////////////////////////////////////////////////////////////////////////////////
// foam and foam precursor
diff --git a/code/setup.dm b/code/setup.dm
index 896d6bf1c4e..f4f1262b49d 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -70,7 +70,11 @@
#define DOOR_CRUSH_DAMAGE 10
// Factor of how fast mob nutrition decreases
-#define HUNGER_FACTOR 0.1
+#define HUNGER_FACTOR 0.05
+#define REAGENTS_METABOLISM 0.04
+// By defining the effect multiplier this way, it'll exactly adjust
+// all effects according to how they originally were with the 0.4 metabolism
+#define REAGENTS_EFFECT_MULTIPLIER REAGENTS_METABOLISM / 0.4
// How many units of reagent are consumed per tick, by default.
#define REAGENTS_METABOLISM 0.4
diff --git a/html/changelog.html b/html/changelog.html
index 7ffa4bf5824..f27197babae 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -68,6 +68,17 @@ should be listed in the changelog upon commit though. Thanks. -->
+