From 6f0025837601eb4910217361d3f9b85bda21709d Mon Sep 17 00:00:00 2001 From: Aryn Date: Sat, 26 May 2012 01:59:10 -0600 Subject: [PATCH 01/23] I accidentally ALL THE THINGS! But yeah, ZAS is updated. --- baystation12.dme | 450 ++++---- code/ATMOSPHERICS/datum_pipeline.dm | 35 +- code/ZAS/Airflow.dm | 3 +- code/ZAS/Connection.dm | 16 +- code/ZAS/Creation.dm | 1 + code/ZAS/Debug.dm | 8 +- code/ZAS/Definition.dm | 19 - code/ZAS/FEA_gas_mixture.dm | 1008 +++++++++++++++++ code/ZAS/FEA_system.dm | 178 +++ code/ZAS/FEA_turf_tile.dm | 205 ++++ code/ZAS/Fire.dm | 198 ++-- code/ZAS/Functions.dm | 32 +- code/ZAS/Plasma.dm | 195 ++-- code/ZAS/Processing.dm | 171 ++- code/ZAS/Variable Settings.dm | 30 +- code/defines/atom.dm | 4 +- code/defines/procs/helpers.dm | 15 +- code/defines/turf.dm | 2 - code/game/machinery/doors/door.dm | 55 +- code/game/machinery/doors/firedoor.dm | 16 +- code/game/machinery/doors/windowdoor.dm | 16 +- code/game/machinery/shieldgen.dm | 37 +- code/game/objects/closets/firecloset.dm | 4 +- code/game/objects/effect_system.dm | 37 +- .../objects/items/weapons/flamethrower.dm | 6 +- code/game/objects/mineral_doors.dm | 41 +- code/game/objects/weapons.dm | 4 - code/game/objects/window.dm | 16 +- code/modules/admin/admin_verbs.dm | 12 +- code/modules/admin/verbs/diagnostics.dm | 8 +- code/modules/admin/verbs/mapping.dm | 4 +- code/modules/chemical/Chemistry-Recipes.dm | 2 - code/modules/clothing/suits/fire.dm | 12 + .../mob/living/carbon/alien/humanoid/life.dm | 2 +- .../mob/living/carbon/alien/larva/life.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 17 +- code/modules/mob/living/carbon/monkey/life.dm | 2 +- code/modules/mob/living/living.dm | 8 +- code/modules/mob/organ/organ.dm | 2 +- code/modules/mob/organ/pain.dm | 31 +- code/setup.dm | 10 + icons/effects/contamination.dmi | Bin 0 -> 380 bytes icons/effects/plasma.dmi | Bin 712 -> 1024 bytes icons/effects/tile_effects.dmi | Bin 739 -> 1032 bytes 44 files changed, 2120 insertions(+), 794 deletions(-) create mode 100644 code/ZAS/FEA_gas_mixture.dm create mode 100644 code/ZAS/FEA_system.dm create mode 100644 code/ZAS/FEA_turf_tile.dm create mode 100644 icons/effects/contamination.dmi diff --git a/baystation12.dme b/baystation12.dme index 43e4dfcc446..a72955196df 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -3,222 +3,6 @@ // New source code should be placed in .dm files: choose File/New --> Code File. // BEGIN_INTERNALS // END_INTERNALS -// BEGIN_FILE_DIR -#define FILE_DIR . -#define FILE_DIR "code" -#define FILE_DIR "code/ATMOSPHERICS" -#define FILE_DIR "code/ATMOSPHERICS/components" -#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices" -#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices" -#define FILE_DIR "code/ATMOSPHERICS/components/unary" -#define FILE_DIR "code/datums" -#define FILE_DIR "code/datums/diseases" -#define FILE_DIR "code/datums/helper_datums" -#define FILE_DIR "code/datums/spells" -#define FILE_DIR "code/defines" -#define FILE_DIR "code/defines/area" -#define FILE_DIR "code/defines/mob" -#define FILE_DIR "code/defines/mob/dead" -#define FILE_DIR "code/defines/mob/living" -#define FILE_DIR "code/defines/mob/living/carbon" -#define FILE_DIR "code/defines/mob/living/silicon" -#define FILE_DIR "code/defines/obj" -#define FILE_DIR "code/defines/procs" -#define FILE_DIR "code/defines/sd_procs" -#define FILE_DIR "code/FEA" -#define FILE_DIR "code/game" -#define FILE_DIR "code/game/area" -#define FILE_DIR "code/game/asteroid" -#define FILE_DIR "code/game/events" -#define FILE_DIR "code/game/events/EventProcs" -#define FILE_DIR "code/game/events/Events" -#define FILE_DIR "code/game/gamemodes" -#define FILE_DIR "code/game/gamemodes/autotraitor" -#define FILE_DIR "code/game/gamemodes/blob" -#define FILE_DIR "code/game/gamemodes/changeling" -#define FILE_DIR "code/game/gamemodes/cult" -#define FILE_DIR "code/game/gamemodes/epidemic" -#define FILE_DIR "code/game/gamemodes/extended" -#define FILE_DIR "code/game/gamemodes/malfunction" -#define FILE_DIR "code/game/gamemodes/meme" -#define FILE_DIR "code/game/gamemodes/meteor" -#define FILE_DIR "code/game/gamemodes/nuclear" -#define FILE_DIR "code/game/gamemodes/revolution" -#define FILE_DIR "code/game/gamemodes/sandbox" -#define FILE_DIR "code/game/gamemodes/traitor" -#define FILE_DIR "code/game/gamemodes/wizard" -#define FILE_DIR "code/game/jobs" -#define FILE_DIR "code/game/jobs/job" -#define FILE_DIR "code/game/machinery" -#define FILE_DIR "code/game/machinery/atmoalter" -#define FILE_DIR "code/game/machinery/bots" -#define FILE_DIR "code/game/machinery/computer" -#define FILE_DIR "code/game/machinery/doors" -#define FILE_DIR "code/game/machinery/embedded_controller" -#define FILE_DIR "code/game/machinery/kitchen" -#define FILE_DIR "code/game/machinery/pipe" -#define FILE_DIR "code/game/machinery/telecomms" -#define FILE_DIR "code/game/magic" -#define FILE_DIR "code/game/magic/cultist" -#define FILE_DIR "code/game/mecha" -#define FILE_DIR "code/game/mecha/combat" -#define FILE_DIR "code/game/mecha/equipment" -#define FILE_DIR "code/game/mecha/equipment/tools" -#define FILE_DIR "code/game/mecha/equipment/weapons" -#define FILE_DIR "code/game/mecha/medical" -#define FILE_DIR "code/game/mecha/working" -#define FILE_DIR "code/game/objects" -#define FILE_DIR "code/game/objects/alien" -#define FILE_DIR "code/game/objects/closets" -#define FILE_DIR "code/game/objects/closets/secure" -#define FILE_DIR "code/game/objects/devices" -#define FILE_DIR "code/game/objects/devices/PDA" -#define FILE_DIR "code/game/objects/items" -#define FILE_DIR "code/game/objects/items/weapons" -#define FILE_DIR "code/game/objects/items/weapons/implants" -#define FILE_DIR "code/game/objects/radio" -#define FILE_DIR "code/game/objects/secstorage" -#define FILE_DIR "code/game/objects/stacks" -#define FILE_DIR "code/game/objects/storage" -#define FILE_DIR "code/game/objects/tanks" -#define FILE_DIR "code/game/player" -#define FILE_DIR "code/game/vehicles" -#define FILE_DIR "code/game/vehicles/airtight" -#define FILE_DIR "code/game/verbs" -#define FILE_DIR "code/js" -#define FILE_DIR "code/modules" -#define FILE_DIR "code/modules/admin" -#define FILE_DIR "code/modules/admin/verbs" -#define FILE_DIR "code/modules/assembly" -#define FILE_DIR "code/modules/chemical" -#define FILE_DIR "code/modules/clothing" -#define FILE_DIR "code/modules/clothing/glasses" -#define FILE_DIR "code/modules/clothing/head" -#define FILE_DIR "code/modules/clothing/spacesuits" -#define FILE_DIR "code/modules/clothing/suits" -#define FILE_DIR "code/modules/clothing/uniforms" -#define FILE_DIR "code/modules/critters" -#define FILE_DIR "code/modules/critters/hivebots" -#define FILE_DIR "code/modules/customitems" -#define FILE_DIR "code/modules/DetectiveWork" -#define FILE_DIR "code/modules/flufftext" -#define FILE_DIR "code/modules/food" -#define FILE_DIR "code/modules/maps" -#define FILE_DIR "code/modules/mining" -#define FILE_DIR "code/modules/mob" -#define FILE_DIR "code/modules/mob/dead" -#define FILE_DIR "code/modules/mob/dead/observer" -#define FILE_DIR "code/modules/mob/living" -#define FILE_DIR "code/modules/mob/living/blob" -#define FILE_DIR "code/modules/mob/living/carbon" -#define FILE_DIR "code/modules/mob/living/carbon/alien" -#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid" -#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste" -#define FILE_DIR "code/modules/mob/living/carbon/alien/larva" -#define FILE_DIR "code/modules/mob/living/carbon/alien/special" -#define FILE_DIR "code/modules/mob/living/carbon/brain" -#define FILE_DIR "code/modules/mob/living/carbon/human" -#define FILE_DIR "code/modules/mob/living/carbon/metroid" -#define FILE_DIR "code/modules/mob/living/carbon/monkey" -#define FILE_DIR "code/modules/mob/living/parasite" -#define FILE_DIR "code/modules/mob/living/silicon" -#define FILE_DIR "code/modules/mob/living/silicon/ai" -#define FILE_DIR "code/modules/mob/living/silicon/decoy" -#define FILE_DIR "code/modules/mob/living/silicon/pai" -#define FILE_DIR "code/modules/mob/living/silicon/robot" -#define FILE_DIR "code/modules/mob/new_player" -#define FILE_DIR "code/modules/mob/organ" -#define FILE_DIR "code/modules/mob/simple_animal" -#define FILE_DIR "code/modules/paperwork" -#define FILE_DIR "code/modules/power" -#define FILE_DIR "code/modules/power/antimatter" -#define FILE_DIR "code/modules/power/singularity" -#define FILE_DIR "code/modules/power/singularity/particle_accelerator" -#define FILE_DIR "code/modules/projectiles" -#define FILE_DIR "code/modules/projectiles/ammunition" -#define FILE_DIR "code/modules/projectiles/guns" -#define FILE_DIR "code/modules/projectiles/guns/energy" -#define FILE_DIR "code/modules/projectiles/guns/projectile" -#define FILE_DIR "code/modules/projectiles/projectile" -#define FILE_DIR "code/modules/recycling" -#define FILE_DIR "code/modules/research" -#define FILE_DIR "code/modules/scripting" -#define FILE_DIR "code/modules/scripting/AST" -#define FILE_DIR "code/modules/scripting/AST/Operators" -#define FILE_DIR "code/modules/scripting/Implementations" -#define FILE_DIR "code/modules/scripting/Interpreter" -#define FILE_DIR "code/modules/scripting/Parser" -#define FILE_DIR "code/modules/scripting/Scanner" -#define FILE_DIR "code/modules/security levels" -#define FILE_DIR "code/unused" -#define FILE_DIR "code/unused/beast" -#define FILE_DIR "code/unused/computer2" -#define FILE_DIR "code/unused/gamemodes" -#define FILE_DIR "code/unused/hivebot" -#define FILE_DIR "code/unused/mining" -#define FILE_DIR "code/unused/optics" -#define FILE_DIR "code/unused/pda2" -#define FILE_DIR "code/unused/powerarmor" -#define FILE_DIR "code/unused/spacecraft" -#define FILE_DIR "code/WorkInProgress" -#define FILE_DIR "code/WorkInProgress/AI_Visibility" -#define FILE_DIR "code/WorkInProgress/animusstation" -#define FILE_DIR "code/WorkInProgress/Apples" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" -#define FILE_DIR "code/WorkInProgress/Chinsky" -#define FILE_DIR "code/WorkInProgress/mapload" -#define FILE_DIR "code/WorkInProgress/Mini" -#define FILE_DIR "code/WorkInProgress/Mloc" -#define FILE_DIR "code/WorkInProgress/organs" -#define FILE_DIR "code/WorkInProgress/Ported" -#define FILE_DIR "code/WorkInProgress/Ported/Abi79" -#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy" -#define FILE_DIR "code/WorkInProgress/Ported/Spawners" -#define FILE_DIR "code/WorkInProgress/SkyMarshal" -#define FILE_DIR "code/WorkInProgress/Tastyfish" -#define FILE_DIR "code/WorkInProgress/virus2" -#define FILE_DIR "code/WorkInProgress/Wrongnumber" -#define FILE_DIR "code/ZAS" -#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/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/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 "interface" -#define FILE_DIR "maps" -#define FILE_DIR "maps/RandomZLevels" -#define FILE_DIR "sound" -#define FILE_DIR "sound/AI" -#define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/announcer" -#define FILE_DIR "sound/effects" -#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/piano" -#define FILE_DIR "sound/voice" -#define FILE_DIR "sound/weapons" -// END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG // END_PREFERENCES @@ -361,12 +145,6 @@ #include "code\defines\sd_procs\constants.dm" #include "code\defines\sd_procs\direction.dm" #include "code\defines\sd_procs\math.dm" -#include "code\FEA\FEA_airgroup.dm" -#include "code\FEA\FEA_fire.dm" -#include "code\FEA\FEA_gas_mixture.dm" -#include "code\FEA\FEA_group_helpers.dm" -#include "code\FEA\FEA_system.dm" -#include "code\FEA\FEA_turf_tile.dm" #include "code\game\algorithm.dm" #include "code\game\atom_procs.dm" #include "code\game\cellautomata.dm" @@ -1209,7 +987,235 @@ #include "code\WorkInProgress\virus2\monkeydispensor.dm" #include "code\WorkInProgress\virus2\Prob.dm" #include "code\WorkInProgress\Wrongnumber\weldbackpack.dm" +#include "code\ZAS\Airflow.dm" +#include "code\ZAS\Connection.dm" +#include "code\ZAS\Creation.dm" +#include "code\ZAS\Definition.dm" +#include "code\ZAS\FEA_gas_mixture.dm" +#include "code\ZAS\FEA_system.dm" +#include "code\ZAS\FEA_turf_tile.dm" +#include "code\ZAS\Fire.dm" +#include "code\ZAS\Functions.dm" +#include "code\ZAS\Plasma.dm" +#include "code\ZAS\Processing.dm" +#include "code\ZAS\Variable Settings.dm" #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\tgstation.2.0.8.dmm" // END_INCLUDE +// BEGIN_FILE_DIR +#define FILE_DIR . +#define FILE_DIR "code" +#define FILE_DIR "code/ATMOSPHERICS" +#define FILE_DIR "code/ATMOSPHERICS/components" +#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices" +#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices" +#define FILE_DIR "code/ATMOSPHERICS/components/unary" +#define FILE_DIR "code/datums" +#define FILE_DIR "code/datums/diseases" +#define FILE_DIR "code/datums/helper_datums" +#define FILE_DIR "code/datums/spells" +#define FILE_DIR "code/defines" +#define FILE_DIR "code/defines/area" +#define FILE_DIR "code/defines/mob" +#define FILE_DIR "code/defines/mob/dead" +#define FILE_DIR "code/defines/mob/living" +#define FILE_DIR "code/defines/mob/living/carbon" +#define FILE_DIR "code/defines/mob/living/silicon" +#define FILE_DIR "code/defines/obj" +#define FILE_DIR "code/defines/procs" +#define FILE_DIR "code/defines/sd_procs" +#define FILE_DIR "code/FEA" +#define FILE_DIR "code/game" +#define FILE_DIR "code/game/area" +#define FILE_DIR "code/game/asteroid" +#define FILE_DIR "code/game/events" +#define FILE_DIR "code/game/events/EventProcs" +#define FILE_DIR "code/game/events/Events" +#define FILE_DIR "code/game/gamemodes" +#define FILE_DIR "code/game/gamemodes/autotraitor" +#define FILE_DIR "code/game/gamemodes/blob" +#define FILE_DIR "code/game/gamemodes/changeling" +#define FILE_DIR "code/game/gamemodes/cult" +#define FILE_DIR "code/game/gamemodes/epidemic" +#define FILE_DIR "code/game/gamemodes/extended" +#define FILE_DIR "code/game/gamemodes/malfunction" +#define FILE_DIR "code/game/gamemodes/meme" +#define FILE_DIR "code/game/gamemodes/meteor" +#define FILE_DIR "code/game/gamemodes/nuclear" +#define FILE_DIR "code/game/gamemodes/revolution" +#define FILE_DIR "code/game/gamemodes/sandbox" +#define FILE_DIR "code/game/gamemodes/traitor" +#define FILE_DIR "code/game/gamemodes/wizard" +#define FILE_DIR "code/game/jobs" +#define FILE_DIR "code/game/jobs/job" +#define FILE_DIR "code/game/machinery" +#define FILE_DIR "code/game/machinery/atmoalter" +#define FILE_DIR "code/game/machinery/bots" +#define FILE_DIR "code/game/machinery/computer" +#define FILE_DIR "code/game/machinery/doors" +#define FILE_DIR "code/game/machinery/embedded_controller" +#define FILE_DIR "code/game/machinery/kitchen" +#define FILE_DIR "code/game/machinery/pipe" +#define FILE_DIR "code/game/machinery/telecomms" +#define FILE_DIR "code/game/magic" +#define FILE_DIR "code/game/magic/cultist" +#define FILE_DIR "code/game/mecha" +#define FILE_DIR "code/game/mecha/combat" +#define FILE_DIR "code/game/mecha/equipment" +#define FILE_DIR "code/game/mecha/equipment/tools" +#define FILE_DIR "code/game/mecha/equipment/weapons" +#define FILE_DIR "code/game/mecha/medical" +#define FILE_DIR "code/game/mecha/working" +#define FILE_DIR "code/game/objects" +#define FILE_DIR "code/game/objects/alien" +#define FILE_DIR "code/game/objects/closets" +#define FILE_DIR "code/game/objects/closets/secure" +#define FILE_DIR "code/game/objects/devices" +#define FILE_DIR "code/game/objects/devices/PDA" +#define FILE_DIR "code/game/objects/items" +#define FILE_DIR "code/game/objects/items/weapons" +#define FILE_DIR "code/game/objects/items/weapons/implants" +#define FILE_DIR "code/game/objects/radio" +#define FILE_DIR "code/game/objects/secstorage" +#define FILE_DIR "code/game/objects/stacks" +#define FILE_DIR "code/game/objects/storage" +#define FILE_DIR "code/game/objects/tanks" +#define FILE_DIR "code/game/player" +#define FILE_DIR "code/game/vehicles" +#define FILE_DIR "code/game/vehicles/airtight" +#define FILE_DIR "code/game/verbs" +#define FILE_DIR "code/js" +#define FILE_DIR "code/modules" +#define FILE_DIR "code/modules/admin" +#define FILE_DIR "code/modules/admin/verbs" +#define FILE_DIR "code/modules/assembly" +#define FILE_DIR "code/modules/chemical" +#define FILE_DIR "code/modules/clothing" +#define FILE_DIR "code/modules/clothing/glasses" +#define FILE_DIR "code/modules/clothing/head" +#define FILE_DIR "code/modules/clothing/spacesuits" +#define FILE_DIR "code/modules/clothing/suits" +#define FILE_DIR "code/modules/clothing/uniforms" +#define FILE_DIR "code/modules/critters" +#define FILE_DIR "code/modules/critters/hivebots" +#define FILE_DIR "code/modules/customitems" +#define FILE_DIR "code/modules/DetectiveWork" +#define FILE_DIR "code/modules/flufftext" +#define FILE_DIR "code/modules/food" +#define FILE_DIR "code/modules/maps" +#define FILE_DIR "code/modules/mining" +#define FILE_DIR "code/modules/mob" +#define FILE_DIR "code/modules/mob/dead" +#define FILE_DIR "code/modules/mob/dead/observer" +#define FILE_DIR "code/modules/mob/living" +#define FILE_DIR "code/modules/mob/living/blob" +#define FILE_DIR "code/modules/mob/living/carbon" +#define FILE_DIR "code/modules/mob/living/carbon/alien" +#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid" +#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste" +#define FILE_DIR "code/modules/mob/living/carbon/alien/larva" +#define FILE_DIR "code/modules/mob/living/carbon/alien/special" +#define FILE_DIR "code/modules/mob/living/carbon/brain" +#define FILE_DIR "code/modules/mob/living/carbon/human" +#define FILE_DIR "code/modules/mob/living/carbon/metroid" +#define FILE_DIR "code/modules/mob/living/carbon/monkey" +#define FILE_DIR "code/modules/mob/living/parasite" +#define FILE_DIR "code/modules/mob/living/silicon" +#define FILE_DIR "code/modules/mob/living/silicon/ai" +#define FILE_DIR "code/modules/mob/living/silicon/decoy" +#define FILE_DIR "code/modules/mob/living/silicon/pai" +#define FILE_DIR "code/modules/mob/living/silicon/robot" +#define FILE_DIR "code/modules/mob/new_player" +#define FILE_DIR "code/modules/mob/organ" +#define FILE_DIR "code/modules/mob/simple_animal" +#define FILE_DIR "code/modules/paperwork" +#define FILE_DIR "code/modules/power" +#define FILE_DIR "code/modules/power/antimatter" +#define FILE_DIR "code/modules/power/singularity" +#define FILE_DIR "code/modules/power/singularity/particle_accelerator" +#define FILE_DIR "code/modules/projectiles" +#define FILE_DIR "code/modules/projectiles/ammunition" +#define FILE_DIR "code/modules/projectiles/guns" +#define FILE_DIR "code/modules/projectiles/guns/energy" +#define FILE_DIR "code/modules/projectiles/guns/projectile" +#define FILE_DIR "code/modules/projectiles/projectile" +#define FILE_DIR "code/modules/recycling" +#define FILE_DIR "code/modules/research" +#define FILE_DIR "code/modules/scripting" +#define FILE_DIR "code/modules/scripting/AST" +#define FILE_DIR "code/modules/scripting/AST/Operators" +#define FILE_DIR "code/modules/scripting/Implementations" +#define FILE_DIR "code/modules/scripting/Interpreter" +#define FILE_DIR "code/modules/scripting/Parser" +#define FILE_DIR "code/modules/scripting/Scanner" +#define FILE_DIR "code/modules/security levels" +#define FILE_DIR "code/unused" +#define FILE_DIR "code/unused/beast" +#define FILE_DIR "code/unused/computer2" +#define FILE_DIR "code/unused/gamemodes" +#define FILE_DIR "code/unused/hivebot" +#define FILE_DIR "code/unused/mining" +#define FILE_DIR "code/unused/optics" +#define FILE_DIR "code/unused/pda2" +#define FILE_DIR "code/unused/powerarmor" +#define FILE_DIR "code/unused/spacecraft" +#define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/AI_Visibility" +#define FILE_DIR "code/WorkInProgress/animusstation" +#define FILE_DIR "code/WorkInProgress/Apples" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" +#define FILE_DIR "code/WorkInProgress/Chinsky" +#define FILE_DIR "code/WorkInProgress/mapload" +#define FILE_DIR "code/WorkInProgress/Mini" +#define FILE_DIR "code/WorkInProgress/Mloc" +#define FILE_DIR "code/WorkInProgress/organs" +#define FILE_DIR "code/WorkInProgress/Ported" +#define FILE_DIR "code/WorkInProgress/Ported/Abi79" +#define FILE_DIR "code/WorkInProgress/Ported/Bureaucracy" +#define FILE_DIR "code/WorkInProgress/Ported/Spawners" +#define FILE_DIR "code/WorkInProgress/SkyMarshal" +#define FILE_DIR "code/WorkInProgress/Tastyfish" +#define FILE_DIR "code/WorkInProgress/virus2" +#define FILE_DIR "code/WorkInProgress/Wrongnumber" +#define FILE_DIR "code/ZAS" +#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/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/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 "interface" +#define FILE_DIR "maps" +#define FILE_DIR "maps/RandomZLevels" +#define FILE_DIR "sound" +#define FILE_DIR "sound/AI" +#define FILE_DIR "sound/ambience" +#define FILE_DIR "sound/announcer" +#define FILE_DIR "sound/effects" +#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/piano" +#define FILE_DIR "sound/voice" +#define FILE_DIR "sound/weapons" +// END_FILE_DIR diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 1b63e605481..5ade345e08f 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -128,28 +128,19 @@ datum/pipeline var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume) air_sample.volume = mingle_volume - if(istype(target) && target.parent && target.parent.group_processing) + if(istype(target) && target.zone) //Have to consider preservation of group statuses var/datum/gas_mixture/turf_copy = new - turf_copy.copy_from(target.parent.air) - turf_copy.volume = target.parent.air.volume //Copy a good representation of the turf from parent group + turf_copy.copy_from(target.zone.air) + turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group equalize_gases(list(air_sample, turf_copy)) air.merge(air_sample) - if(target.parent.air.compare(turf_copy)) - //The new turf would be an acceptable group member so permit the integration + turf_copy.subtract(target.zone.air) - turf_copy.subtract(target.parent.air) - - target.parent.air.merge(turf_copy) - - else - //Comparison failure so dissemble group and copy turf - - target.parent.suspend_group_processing() - target.air.copy_from(turf_copy) + target.zone.air.merge(turf_copy) else var/datum/gas_mixture/turf_air = target.return_air() @@ -187,9 +178,9 @@ datum/pipeline var/delta_temperature = 0 var/sharer_heat_capacity = 0 - if(modeled_location.parent && modeled_location.parent.group_processing) - delta_temperature = (air.temperature - modeled_location.parent.air.temperature) - sharer_heat_capacity = modeled_location.parent.air.heat_capacity() + if(modeled_location.zone) + delta_temperature = (air.temperature - modeled_location.zone.air.temperature) + sharer_heat_capacity = modeled_location.zone.air.heat_capacity() else delta_temperature = (air.temperature - modeled_location.air.temperature) sharer_heat_capacity = modeled_location.air.heat_capacity() @@ -208,14 +199,8 @@ datum/pipeline air.temperature += self_temperature_delta - if(modeled_location.parent && modeled_location.parent.group_processing) - if((abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && (abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*modeled_location.parent.air.temperature)) - modeled_location.parent.suspend_group_processing() - - modeled_location.air.temperature += sharer_temperature_delta - - else - modeled_location.parent.air.temperature += sharer_temperature_delta/modeled_location.parent.air.group_multiplier + if(modeled_location.zone) + modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier else modeled_location.air.temperature += sharer_temperature_delta diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index a3cb01eb7ee..50d8888c853 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -64,14 +64,13 @@ atom/movable/RepelAirflowDest(n) */ -var/tick_multiplier = 2 vs_control/var zone_update_delay = 10 zone_update_delay_NAME = "Zone Update Delay" zone_update_delay_DESC = "The delay in ticks between updates of zones. Increase if lag is bad seemingly because of air." - zone_share_percent = 2 + zone_share_percent = 5 zone_share_percent_NAME = "Zone Connection Transfer %" zone_share_percent_DESC = "Percent of gas per connected tile that is shared between zones." diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm index bf43f90d1c0..022a714222e 100644 --- a/code/ZAS/Connection.dm +++ b/code/ZAS/Connection.dm @@ -5,6 +5,7 @@ connection B indirect = 0 //If the connection is purely indirect, the zones should not join. last_updated //The tick at which this was last updated. + no_zone_count = 0 New(turf/T,turf/O) A = T B = O @@ -31,6 +32,8 @@ connection B.zone.connected_zones[A.zone] = 1 else B.zone.connected_zones[A.zone]++ + else + world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]" Del() if(A.zone && A.zone.connections) A.zone.connections -= src @@ -57,5 +60,14 @@ connection . = ..() proc/Cleanup() - if(A.zone == B.zone) del src - if(!A.zone || !B.zone) del src \ No newline at end of file + if(!A || !B) + world.log << "Connection removed: [A] or [B] missing entirely." + del src + if(A.zone == B.zone) + world.log << "Connection removed: Zones now merged." + del src + if(!A.zone || !B.zone) + no_zone_count++ + if(no_zone_count >= 5) + world.log << "Connection removed: [A] or [B] missing a zone." + del src \ No newline at end of file diff --git a/code/ZAS/Creation.dm b/code/ZAS/Creation.dm index 5f256767fd3..1dba1d296ba 100644 --- a/code/ZAS/Creation.dm +++ b/code/ZAS/Creation.dm @@ -17,6 +17,7 @@ zone air.toxins += T.toxins / members air.temperature += T.temperature / members air.group_multiplier = contents.len + air.update_values() zones += src Del() zones -= src diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm index 28fc3caef53..66c6a12ca33 100644 --- a/code/ZAS/Debug.dm +++ b/code/ZAS/Debug.dm @@ -1,5 +1,5 @@ -client/proc/Zone_Info(turf/T as null|turf) +client/verb/Zone_Info(turf/T as null|turf) set category = "Debug" if(T) if(T.zone) @@ -28,9 +28,10 @@ zone/proc M << "Plasma: [air.toxins]" M << "Carbon Dioxide: [air.carbon_dioxide]" M << "Temperature: [air.temperature]" - M << "Heat Energy: [air.thermal_energy()]" + M << "Heat Energy: [air.temperature * air.heat_capacity()]" M << "Pressure: [air.return_pressure()]" M << "" + M << "Space Tiles: [length(space_tiles)]" M << "Connections: [length(connections)]" for(var/connection/C in connections) @@ -40,6 +41,9 @@ zone/proc spawn(50) C.A.overlays -= 'debug_connect.dmi' C.B.overlays -= 'debug_connect.dmi' + for(var/C in connections) + if(!istype(C,/connection)) + M << "[C] (Not Connection!)" else dbg_output = 0 diff --git a/code/ZAS/Definition.dm b/code/ZAS/Definition.dm index 729d19841fc..b092dc304b7 100644 --- a/code/ZAS/Definition.dm +++ b/code/ZAS/Definition.dm @@ -1,25 +1,6 @@ turf/var/zone/zone var/list/zones = list() -var/zone_controller/zone_master = new - -zone_controller - var - current_tick = 0 - proc - start() - set background = 1 - while(1) - current_tick++ - for(var/zone/Z in zones) - if(Z.last_update < current_tick) - Z.process() - if(Z) Z.last_update = current_tick - for(var/obj/fire/F) - F.process() - //for(var/obj/z_hotspot/H in z_hotspots) - // H.process() - sleep(max(5,vsc.zone_update_delay*tick_multiplier)) zone var diff --git a/code/ZAS/FEA_gas_mixture.dm b/code/ZAS/FEA_gas_mixture.dm new file mode 100644 index 00000000000..24a6682381b --- /dev/null +++ b/code/ZAS/FEA_gas_mixture.dm @@ -0,0 +1,1008 @@ +/* +What are the archived variables for? + Calculations are done using the archived variables with the results merged into the regular variables. + This prevents race conditions that arise based on the order of tile processing. +*/ + +datum + gas //These are used for the "Trace Gases" stuff, but is buggy. + sleeping_agent + specific_heat = 40 + + volatile_fuel + specific_heat = 30 + + var + moles = 0 + specific_heat = 0 + + moles_archived = 0 + + gas_mixture + var //Holds the "moles" of each of the four gases. + oxygen = 0 + carbon_dioxide = 0 + nitrogen = 0 + toxins = 0 + total_moles = 0 //Updated when a reaction occurs. + pressure = 0 + + volume = CELL_VOLUME + + temperature = 0 //in Kelvin, use calculate_temperature() to modify + + group_multiplier = 1 + //Size of the group this gas_mixture is representing. + //=1 for singletons + + graphic + + list/datum/gas/trace_gases = list() //Seemed to be a good idea that was abandoned + + tmp //These are variables for use with the archived data + oxygen_archived + carbon_dioxide_archived + nitrogen_archived + toxins_archived + + temperature_archived + + graphic_archived + fuel_burnt = 0 + +//FOR THE LOVE OF GOD PLEASE USE THIS PROC +//Call it with negative numbers to remove gases. + + proc/adjustGases(o2 = 0, co2 = 0, n2 = 0, tx = 0, list/datum/gas/traces = list()) + //Purpose: Adjusting the gases within a airmix + //Called by: Nothing, yet! + //Inputs: The values of the gases to adjust + //Outputs: null + + oxygen = max(0, oxygen + o2) + carbon_dioxide = max(0, carbon_dioxide + co2) + nitrogen = max(0, nitrogen + n2) + toxins = max(0, toxins + tx) + + //handle trace gasses + for(var/datum/gas/G in traces) + var/datum/gas/T = locate(G.type) in trace_gases + if(T) + T.moles = max(G.moles + T.moles, 0) + else if(G.moles > 0) + trace_gases |= G + update_values() + return + +/////////////////////////////// +//PV=nRT - related procedures// +/////////////////////////////// + + + proc/heat_capacity() + //Purpose: Returning the heat capacity of the gas mix + //Called by: UNKNOWN + //Inputs: None + //Outputs: Heat capacity + + var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + heat_capacity += trace_gas.moles*trace_gas.specific_heat + + return max(MINIMUM_HEAT_CAPACITY,heat_capacity) + + proc/heat_capacity_archived() + //Purpose: Returning the archived heat capacity of the gas mix + //Called by: UNKNOWN + //Inputs: None + //Outputs: Archived heat capacity + + var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived) + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat + + return max(MINIMUM_HEAT_CAPACITY,heat_capacity_archived) + + proc/return_pressure() + //Purpose: Calculating Current Pressure + //Called by: + //Inputs: None + //Outputs: Gas pressure. + + if(volume>0) + return total_moles*R_IDEAL_GAS_EQUATION*temperature/volume + return 0 + +// proc/return_temperature() + //Purpose: + //Inputs: + //Outputs: + +// return temperature + +// proc/return_volume() + //Purpose: + //Inputs: + //Outputs: + +// return max(0, volume) + +// proc/thermal_energy() + //Purpose: + //Inputs: + //Outputs: + +// return temperature*heat_capacity() + + proc/update_values() + //Purpose: Calculating and storing values which were normally called CONSTANTLY + //Called by: Anything that changes values within a gas mix. + //Inputs: None + //Outputs: None + + total_moles = oxygen + carbon_dioxide + nitrogen + toxins + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + total_moles += trace_gas.moles + + if(volume) + pressure = total_moles*R_IDEAL_GAS_EQUATION*temperature/volume + else + pressure = 0 + return + +//////////////////////////////////////////// +//Procedures used for very specific events// +//////////////////////////////////////////// + + + proc/check_tile_graphic() + //Purpose: Calculating the graphic for a tile + //Called by: Turfs updating + //Inputs: None + //Outputs: 1 if graphic changed, 0 if unchanged + + graphic = null + if(toxins > MOLES_PLASMA_VISIBLE) + graphic = "plasma" + else if(length(trace_gases)) + var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in trace_gases + if(sleeping_agent && (sleeping_agent.moles > 1)) + graphic = "sleeping_agent" + else + graphic = null + + return graphic != graphic_archived + + proc/react(atom/dump_location) + //Purpose: Calculating if it is possible for a fire to occur in the airmix + //Called by: Air mixes updating? + //Inputs: None + //Outputs: If a fire occured + + var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network) + + if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + if(fire() > 0) + reacting = 1 + + return reacting + + proc/fire() + //Purpose: Calculating any fire reactions. + //Called by: react() (See above) + //Inputs: None + //Outputs: How much fuel burned + + return zburn(null) + + /*var/energy_released = 0 + var/old_heat_capacity = heat_capacity() + + var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel) in trace_gases + if(fuel_store) //General volatile gas burn + var/burned_fuel = 0 + + if(oxygen < fuel_store.moles) + burned_fuel = oxygen + fuel_store.moles -= burned_fuel + oxygen = 0 + else + burned_fuel = fuel_store.moles + oxygen -= fuel_store.moles + del(fuel_store) + + energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel + carbon_dioxide += burned_fuel + fuel_burnt += burned_fuel + + //Handle plasma burning + if(toxins > MINIMUM_HEAT_CAPACITY) + var/plasma_burn_rate = 0 + var/oxygen_burn_rate = 0 + //more plasma released at higher temperatures + var/temperature_scale + if(temperature > PLASMA_UPPER_TEMPERATURE) + temperature_scale = 1 + else + temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) + if(temperature_scale > 0) + oxygen_burn_rate = 1.4 - temperature_scale + if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN) + plasma_burn_rate = (toxins*temperature_scale)/4 + else + plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/4 + if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) + toxins -= plasma_burn_rate + oxygen -= plasma_burn_rate*oxygen_burn_rate + carbon_dioxide += plasma_burn_rate + + energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) + + fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate) + + if(energy_released > 0) + var/new_heat_capacity = heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity + update_values() + + return fuel_burnt*/ + +////////////////////////////////////////////// +//Procs for general gas spread calculations.// +////////////////////////////////////////////// + + + proc/archive() + //Purpose: Archives the current gas values + //Called by: UNKNOWN + //Inputs: None + //Outputs: 1 + + oxygen_archived = oxygen + carbon_dioxide_archived = carbon_dioxide + nitrogen_archived = nitrogen + toxins_archived = toxins + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + trace_gas.moles_archived = trace_gas.moles + + temperature_archived = temperature + + graphic_archived = graphic + + return 1 + + proc/check_then_merge(datum/gas_mixture/giver) + //Purpose: Similar to merge(...) but first checks to see if the amount of air assumed is small enough + // that group processing is still accurate for source (aborts if not) + //Called by: airgroups/machinery expelling air, ? + //Inputs: The gas to try and merge + //Outputs: 1 on successful merge. 0 otherwise. + + if(!giver) + return 0 + if(((giver.oxygen > MINIMUM_AIR_TO_SUSPEND) && (giver.oxygen >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.carbon_dioxide > MINIMUM_AIR_TO_SUSPEND) && (giver.carbon_dioxide >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.nitrogen > MINIMUM_AIR_TO_SUSPEND) && (giver.nitrogen >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((giver.toxins > MINIMUM_AIR_TO_SUSPEND) && (giver.toxins >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + if(abs(giver.temperature - temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return 0 + + if(giver.trace_gases.len) + for(var/datum/gas/trace_gas in giver.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if((trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) && (!corresponding || (trace_gas.moles >= corresponding.moles*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + + return merge(giver) + + proc/merge(datum/gas_mixture/giver) + //Purpose: Merges all air from giver into self. Deletes giver. + //Called by: Machinery expelling air, check_then_merge, ? + //Inputs: The gas to merge. + //Outputs: 1 + + if(!giver) + return 0 + + if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity()*group_multiplier + var/giver_heat_capacity = giver.heat_capacity()*giver.group_multiplier + var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity + if(combined_heat_capacity != 0) + temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity + + if((group_multiplier>1)||(giver.group_multiplier>1)) + oxygen += giver.oxygen*giver.group_multiplier/group_multiplier + carbon_dioxide += giver.carbon_dioxide*giver.group_multiplier/group_multiplier + nitrogen += giver.nitrogen*giver.group_multiplier/group_multiplier + toxins += giver.toxins*giver.group_multiplier/group_multiplier + else + oxygen += giver.oxygen + carbon_dioxide += giver.carbon_dioxide + nitrogen += giver.nitrogen + toxins += giver.toxins + + if(giver.trace_gases.len) + for(var/datum/gas/trace_gas in giver.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(!corresponding) + corresponding = new trace_gas.type() + trace_gases += corresponding + corresponding.moles += trace_gas.moles*giver.group_multiplier/group_multiplier + update_values() + + del(giver) + return 1 + + proc/remove(amount) + //Purpose: Removes a certain number of moles from the air. + //Called by: ? + //Inputs: How many moles to remove. + //Outputs: Removed air. + + var/sum = total_moles + amount = min(amount,sum) //Can not take more air than tile has! + if(amount <= 0) + return null + + var/datum/gas_mixture/removed = new + + + removed.oxygen = QUANTIZE((oxygen/sum)*amount) + removed.nitrogen = QUANTIZE((nitrogen/sum)*amount) + removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) + removed.toxins = QUANTIZE((toxins/sum)*amount) + + oxygen -= removed.oxygen/group_multiplier + nitrogen -= removed.nitrogen/group_multiplier + carbon_dioxide -= removed.carbon_dioxide/group_multiplier + toxins -= removed.toxins/group_multiplier + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + removed.trace_gases += corresponding + + corresponding.moles = (trace_gas.moles/sum)*amount + trace_gas.moles -= corresponding.moles/group_multiplier + + removed.temperature = temperature + update_values() + removed.update_values() + + return removed + + proc/remove_ratio(ratio) + //Purpose: Removes a certain ratio of the air. + //Called by: ? + //Inputs: Percentage to remove. + //Outputs: Removed air. + + if(ratio <= 0) + return null + + ratio = min(ratio, 1) + + var/datum/gas_mixture/removed = new + + removed.oxygen = QUANTIZE(oxygen*ratio) + removed.nitrogen = QUANTIZE(nitrogen*ratio) + removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) + removed.toxins = QUANTIZE(toxins*ratio) + + oxygen -= removed.oxygen/group_multiplier + nitrogen -= removed.nitrogen/group_multiplier + carbon_dioxide -= removed.carbon_dioxide/group_multiplier + toxins -= removed.toxins/group_multiplier + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + removed.trace_gases += corresponding + + corresponding.moles = trace_gas.moles*ratio + trace_gas.moles -= corresponding.moles/group_multiplier + + removed.temperature = temperature + update_values() + removed.update_values() + + return removed + + proc/check_then_remove(amount) + //Purpose: Similar to remove(...) but first checks to see if the amount of air removed is small enough + // that group processing is still accurate for source (aborts if not) + //Called by: ? + //Inputs: Number of moles to remove + //Outputs: Removed air or 0 if it can remove air or not. + + amount = min(amount,total_moles) //Can not take more air than tile has! + + if((amount > MINIMUM_AIR_RATIO_TO_SUSPEND) && (amount > total_moles*MINIMUM_AIR_RATIO_TO_SUSPEND)) + return 0 + + return remove(amount) + + proc/copy_from(datum/gas_mixture/sample) + //Purpose: Duplicates the sample air mixture. + //Called by: airgroups splitting, ? + //Inputs: Gas to copy + //Outputs: 1 + + oxygen = sample.oxygen + carbon_dioxide = sample.carbon_dioxide + nitrogen = sample.nitrogen + toxins = sample.toxins + total_moles = sample.total_moles + + trace_gases.len=null + if(sample.trace_gases.len > 0) + for(var/datum/gas/trace_gas in sample.trace_gases) + var/datum/gas/corresponding = new trace_gas.type() + trace_gases += corresponding + + corresponding.moles = trace_gas.moles + + temperature = sample.temperature + + return 1 + + proc/check_gas_mixture(datum/gas_mixture/sharer) + //Purpose: Telling if one or both airgroups needs to disable group processing. + //Called by: Airgroups sharing air, checking if group processing needs disabled. + //Inputs: Gas to compare from other airgroup + //Outputs: 0 if the self-check failed (local airgroup breaks?) + // then -1 if sharer-check failed (sharing airgroup breaks?) + // then 1 if both checks pass (share succesful?) + if(!istype(sharer)) + return + + var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/TRANSFER_FRACTION + var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/TRANSFER_FRACTION + var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/TRANSFER_FRACTION + var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/TRANSFER_FRACTION + + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return 0 + + if(sharer.trace_gases.len) + for(var/datum/gas/trace_gas in sharer.trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(corresponding) + if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) + return 0 + else + return 0 + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + if(!locate(trace_gas.type) in sharer.trace_gases) + return 0 + + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= sharer.oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= sharer.carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= sharer.nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= sharer.toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return -1 + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases + if(corresponding) + if(trace_gas.moles_archived >= corresponding.moles_archived*MINIMUM_AIR_RATIO_TO_SUSPEND*4) + return -1 + else + return -1 + + return 1 + + proc/check_turf(turf/model) + //Purpose: Used to compare the gases in an unsimulated turf with the gas in a simulated one. + //Called by: Sharing air (mimicing) with adjacent unsimulated turfs + //Inputs: Unsimulated turf + //Outputs: 1 if safe to mimic, 0 if needs to break airgroup. + + var/delta_oxygen = (oxygen_archived - model.oxygen)/TRANSFER_FRACTION + var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/TRANSFER_FRACTION + var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/TRANSFER_FRACTION + var/delta_toxins = (toxins_archived - model.toxins)/TRANSFER_FRACTION + + var/delta_temperature = (temperature_archived - model.temperature) + + if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ + || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) + return 0 + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return 0 + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) + return 0 + + return 1 + + proc/share(datum/gas_mixture/sharer) + //Purpose: Used to transfer gas from a more pressurised tile to a less presurised tile + // (Two directional, if the other tile is more pressurised, air travels to current tile) + //Called by: Sharing air with adjacent simulated turfs + //Inputs: Air datum to share with + //Outputs: Amount of gas exchanged (Negative if lost air, positive if gained.) + + + if(!istype(sharer)) + return + + var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/TRANSFER_FRACTION + var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/TRANSFER_FRACTION + var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/TRANSFER_FRACTION + var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/TRANSFER_FRACTION + + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + var/old_self_heat_capacity = 0 + var/old_sharer_heat_capacity = 0 + + var/heat_self_to_sharer = 0 + var/heat_capacity_self_to_sharer = 0 + var/heat_sharer_to_self = 0 + var/heat_capacity_sharer_to_self = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + + var/delta_air = delta_oxygen+delta_nitrogen + if(delta_air) + var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air + if(delta_air > 0) + heat_self_to_sharer += air_heat_capacity*temperature_archived + heat_capacity_self_to_sharer += air_heat_capacity + else + heat_sharer_to_self -= air_heat_capacity*sharer.temperature_archived + heat_capacity_sharer_to_self -= air_heat_capacity + + if(delta_carbon_dioxide) + var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide + if(delta_carbon_dioxide > 0) + heat_self_to_sharer += carbon_dioxide_heat_capacity*temperature_archived + heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity + else + heat_sharer_to_self -= carbon_dioxide_heat_capacity*sharer.temperature_archived + heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity + + if(delta_toxins) + var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins + if(delta_toxins > 0) + heat_self_to_sharer += toxins_heat_capacity*temperature_archived + heat_capacity_self_to_sharer += toxins_heat_capacity + else + heat_sharer_to_self -= toxins_heat_capacity*sharer.temperature_archived + heat_capacity_sharer_to_self -= toxins_heat_capacity + + old_self_heat_capacity = heat_capacity()*group_multiplier + old_sharer_heat_capacity = sharer.heat_capacity()*sharer.group_multiplier + + oxygen -= delta_oxygen/group_multiplier + sharer.oxygen += delta_oxygen/sharer.group_multiplier + + carbon_dioxide -= delta_carbon_dioxide/group_multiplier + sharer.carbon_dioxide += delta_carbon_dioxide/sharer.group_multiplier + + nitrogen -= delta_nitrogen/group_multiplier + sharer.nitrogen += delta_nitrogen/sharer.group_multiplier + + toxins -= delta_toxins/group_multiplier + sharer.toxins += delta_toxins/sharer.group_multiplier + + var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) + + var/list/trace_types_considered = list() + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + + var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases + var/delta = 0 + + if(corresponding) + delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/TRANSFER_FRACTION + else + corresponding = new trace_gas.type() + sharer.trace_gases += corresponding + + delta = trace_gas.moles_archived/TRANSFER_FRACTION + + trace_gas.moles -= delta/group_multiplier + corresponding.moles += delta/sharer.group_multiplier + + if(delta) + var/individual_heat_capacity = trace_gas.specific_heat*delta + if(delta > 0) + heat_self_to_sharer += individual_heat_capacity*temperature_archived + heat_capacity_self_to_sharer += individual_heat_capacity + else + heat_sharer_to_self -= individual_heat_capacity*sharer.temperature_archived + heat_capacity_sharer_to_self -= individual_heat_capacity + + moved_moles += delta + + trace_types_considered += trace_gas.type + + + if(sharer.trace_gases.len) + for(var/datum/gas/trace_gas in sharer.trace_gases) + if(trace_gas.type in trace_types_considered) continue + else + var/datum/gas/corresponding + var/delta = 0 + + corresponding = new trace_gas.type() + trace_gases += corresponding + + delta = trace_gas.moles_archived/TRANSFER_FRACTION + + trace_gas.moles -= delta/sharer.group_multiplier + corresponding.moles += delta/group_multiplier + + //Guaranteed transfer from sharer to self + var/individual_heat_capacity = trace_gas.specific_heat*delta + heat_sharer_to_self += individual_heat_capacity*sharer.temperature_archived + heat_capacity_sharer_to_self += individual_heat_capacity + + moved_moles += -delta + update_values() + sharer.update_values() + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer + var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self + + if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) + temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity + + if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) + sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity + + if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY) + if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity + temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT) + + if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) + var/delta_pressure = temperature_archived*(total_moles + moved_moles) - sharer.temperature_archived*(sharer.total_moles - moved_moles) + return delta_pressure*R_IDEAL_GAS_EQUATION/volume + + else + return 0 + + proc/mimic(turf/model, border_multiplier) + //Purpose: Used transfer gas from a more pressurised tile to a less presurised unsimulated tile. + //Called by: "sharing" from unsimulated to simulated turfs. + //Inputs: Unsimulated turf, Multiplier for gas transfer (optional) + //Outputs: Amount of gas exchanged + + var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/TRANSFER_FRACTION + var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/TRANSFER_FRACTION + var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/TRANSFER_FRACTION + var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/TRANSFER_FRACTION + + var/delta_temperature = (temperature_archived - model.temperature) + + var/heat_transferred = 0 + var/old_self_heat_capacity = 0 + var/heat_capacity_transferred = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + + var/delta_air = delta_oxygen+delta_nitrogen + if(delta_air) + var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air + heat_transferred -= air_heat_capacity*model.temperature + heat_capacity_transferred -= air_heat_capacity + + if(delta_carbon_dioxide) + var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide + heat_transferred -= carbon_dioxide_heat_capacity*model.temperature + heat_capacity_transferred -= carbon_dioxide_heat_capacity + + if(delta_toxins) + var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins + heat_transferred -= toxins_heat_capacity*model.temperature + heat_capacity_transferred -= toxins_heat_capacity + + old_self_heat_capacity = heat_capacity()*group_multiplier + + if(border_multiplier) + oxygen -= delta_oxygen*border_multiplier/group_multiplier + carbon_dioxide -= delta_carbon_dioxide*border_multiplier/group_multiplier + nitrogen -= delta_nitrogen*border_multiplier/group_multiplier + toxins -= delta_toxins*border_multiplier/group_multiplier + else + oxygen -= delta_oxygen/group_multiplier + carbon_dioxide -= delta_carbon_dioxide/group_multiplier + nitrogen -= delta_nitrogen/group_multiplier + toxins -= delta_toxins/group_multiplier + + var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + var/delta = 0 + + delta = trace_gas.moles_archived/TRANSFER_FRACTION + + if(border_multiplier) + trace_gas.moles -= delta*border_multiplier/group_multiplier + else + trace_gas.moles -= delta/group_multiplier + + var/heat_cap_transferred = delta*trace_gas.specific_heat + heat_transferred += heat_cap_transferred*temperature_archived + heat_capacity_transferred += heat_cap_transferred + moved_moles += delta + update_values() + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred + if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) + if(border_multiplier) + temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity + else + temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*border_multiplier*temperature_archived)/new_self_heat_capacity + + temperature_mimic(model, model.thermal_conductivity, border_multiplier) + + if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) + var/delta_pressure = temperature_archived*(total_moles + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins) + return delta_pressure*R_IDEAL_GAS_EQUATION/volume + else + return 0 + + proc/check_both_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + sharer_temperature_delta = heat/(sharer_heat_capacity*sharer.group_multiplier) + else + return 1 + + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + + if((abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(sharer_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*sharer.temperature_archived)) + return -1 + + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta + + return 1 + //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency + + proc/check_me_then_temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + + self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + sharer_temperature_delta = heat/(sharer_heat_capacity*sharer.group_multiplier) + else + return 1 + + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta + + return 1 + //Logic integrated from: temperature_share(sharer, conduction_coefficient) for efficiency + + proc/check_me_then_temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature) + + var/self_temperature_delta = 0 + var/sharer_temperature_delta = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity_archived() + + if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) + + self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + sharer_temperature_delta = heat/sharer.heat_capacity + else + return 1 + + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + + temperature += self_temperature_delta + sharer.temperature += sharer_temperature_delta + + return 1 + //Logic integrated from: temperature_turf_share(sharer, conduction_coefficient) for efficiency + + proc/check_me_then_temperature_mimic(turf/model, conduction_coefficient) + var/delta_temperature = (temperature_archived - model.temperature) + var/self_temperature_delta = 0 + + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity_archived() + + if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) + + self_temperature_delta = -heat/(self_heat_capacity*group_multiplier) + + if((abs(self_temperature_delta) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) \ + && (abs(self_temperature_delta) > MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND*temperature_archived)) + return 0 + + temperature += self_temperature_delta + + return 1 + //Logic integrated from: temperature_mimic(model, conduction_coefficient) for efficiency + + proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) + + var/delta_temperature = (temperature_archived - sharer.temperature_archived) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity_archived() + var/sharer_heat_capacity = sharer.heat_capacity_archived() + if(!group_multiplier) + message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!") + return + + if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) + + temperature -= heat/(self_heat_capacity*group_multiplier) + sharer.temperature += heat/(sharer_heat_capacity*sharer.group_multiplier) + + proc/temperature_mimic(turf/model, conduction_coefficient, border_multiplier) + var/delta_temperature = (temperature - model.temperature) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity()//_archived() + if(!group_multiplier) + message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!") + return + + if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) + + if(border_multiplier) + temperature -= heat*border_multiplier/(self_heat_capacity*group_multiplier) + else + temperature -= heat/(self_heat_capacity*group_multiplier) + + proc/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) + var/delta_temperature = (temperature_archived - sharer.temperature) + if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/self_heat_capacity = heat_capacity() + + if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY)) + var/heat = conduction_coefficient*delta_temperature* \ + (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) + + temperature -= heat/(self_heat_capacity*group_multiplier) + sharer.temperature += heat/sharer.heat_capacity + + proc/compare(datum/gas_mixture/sample) + //Purpose: Compares sample to self to see if within acceptable ranges that group processing may be enabled + //Called by: Airgroups trying to rebuild + //Inputs: Gas mix to compare + //Outputs: 1 if can rebuild, 0 if not. + if(!sample) return 0 + + if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \ + ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen))) + return 0 + if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \ + ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) + return 0 + if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ + ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) + return 0 + if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ + ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) + return 0 + + if(total_moles > MINIMUM_AIR_TO_SUSPEND) + if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ + ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) + //world << "temp fail [temperature] & [sample.temperature]" + return 0 + + if(sample.trace_gases.len) + for(var/datum/gas/trace_gas in sample.trace_gases) + if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(corresponding) + if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ + ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles))) + return 0 + else + return 0 + + if(trace_gases.len) + for(var/datum/gas/trace_gas in trace_gases) + if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) + var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases + if(corresponding) + if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ + ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles))) + return 0 + else + return 0 + return 1 + + + proc/subtract(datum/gas_mixture/right_side) + //Purpose: Subtracts right_side from air_mixture. Used to help turfs mingle + //Called by: Pipelines ending in a break (or something) + //Inputs: Gas mix to remove + //Outputs: 1 + + oxygen -= right_side.oxygen + carbon_dioxide -= right_side.carbon_dioxide + nitrogen -= right_side.nitrogen + toxins -= right_side.toxins + + if((trace_gases.len > 0)||(right_side.trace_gases.len > 0)) + for(var/datum/gas/trace_gas in right_side.trace_gases) + var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases + if(!corresponding) + corresponding = new trace_gas.type() + trace_gases += corresponding + + corresponding.moles -= trace_gas.moles + update_values() + return 1 \ No newline at end of file diff --git a/code/ZAS/FEA_system.dm b/code/ZAS/FEA_system.dm new file mode 100644 index 00000000000..dd2fca6ef21 --- /dev/null +++ b/code/ZAS/FEA_system.dm @@ -0,0 +1,178 @@ +/* +Overview: + The air_master global variable is the workhorse for the system. + +Why are you archiving data before modifying it? + The general concept with archiving data and having each tile keep track of when they were last updated is to keep everything symmetric + and totally independent of the order they are read in an update cycle. + This prevents abnormalities like air/fire spreading rapidly in one direction and super slowly in the other. + +Why not just archive everything and then calculate? + Efficiency. While a for-loop that goes through all tils and groups to archive their information before doing any calculations seems simple, it is + slightly less efficient than the archive-before-modify/read method. + +Why is there a cycle check for calculating data as well? + This ensures that every connection between group-tile, tile-tile, and group-group is only evaluated once per loop. + + + + +Important variables: + air_master.groups_to_rebuild (list) + A list of air groups that have had their geometry occluded and thus may need to be split in half. + A set of adjacent groups put in here will join together if validly connected. + This is done before air system calculations for a cycle. + air_master.tiles_to_update (list) + Turfs that are in this list have their border data updated before the next air calculations for a cycle. + Place turfs in this list rather than call the proc directly to prevent race conditions + + turf/simulated.archive() and datum/air_group.archive() + This stores all data for. + If you modify, make sure to update the archived_cycle to prevent race conditions and maintain symmetry + + atom/CanPass(atom/movable/mover, turf/target, height, air_group) + returns 1 for allow pass and 0 for deny pass + Turfs automatically call this for all objects/mobs in its turf. + This is called both as source.CanPass(target, height, air_group) + and target.CanPass(source, height, air_group) + + Cases for the parameters + 1. This is called with args (mover, location, height>0, air_group=0) for normal objects. + 2. This is called with args (null, location, height=0, air_group=0) for flowing air. + 3. This is called with args (null, location, height=?, air_group=1) for determining group boundaries. + + Cases 2 and 3 would be different for doors or other objects open and close fairly often. + (Case 3 would return 0 always while Case 2 would return 0 only when the door is open) + This prevents the necessity of re-evaluating group geometry every time a door opens/closes. + + +Important Procedures + air_master.process() + This first processes the air_master update/rebuild lists then processes all groups and tiles for air calculations + + +*/ + +var/kill_air = 0 +var/tick_multiplier = 2 + +atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) + //Purpose: Determines if the object (or airflow) can pass this atom. + //Called by: Movement, airflow. + //Inputs: The moving atom (optional), target turf, "height" and air group + //Outputs: Boolean if can pass. + + return (!density || !height || air_group) + +turf + CanPass(atom/movable/mover, turf/target, height=1.5,air_group=0) + if(!target) return 0 + + if(istype(mover)) // turf/Enter(...) will perform more advanced checks + return !density + + else // Now, doing more detailed checks for air movement and air group formation + if(target.blocks_air||blocks_air) + return 0 + + for(var/obj/obstacle in src) + if(!obstacle.CanPass(mover, target, height, air_group)) + return 0 + for(var/obj/obstacle in target) + if(!obstacle.CanPass(mover, src, height, air_group)) + return 0 + + return 1 + + +var/global/datum/controller/air_system/air_master + +datum + controller + air_system + //Geoemetry lists + var/list/turf/simulated/active_singletons = list() + + //Special functions lists + var/list/turf/simulated/active_super_conductivity = list() + var/list/turf/simulated/high_pressure_delta = list() + + //Geometry updates lists + var/list/turf/simulated/tiles_to_update = list() + var/list/turf/simulated/groups_to_rebuild = list() + + var/current_cycle = 0 + var/update_delay = 5 //How long between check should it try to process atmos again. + var/failed_ticks = 0 //How many ticks have runtimed? + + +/* process() + //Call this to process air movements for a cycle + + process_rebuild_select_groups() + //Used by process() + //Warning: Do not call this + + rebuild_group(datum/air_group) + //Used by process_rebuild_select_groups() + //Warning: Do not call this, add the group to air_master.groups_to_rebuild instead + */ + + + proc/setup() + //Purpose: Call this at the start to setup air groups geometry + // (Warning: Very processor intensive but only must be done once per round) + //Called by: Gameticker/Master controller + //Inputs: None. + //Outputs: None. + + set background = 1 + world << "\red \b Processing Geometry..." + sleep(-1) + + var/start_time = world.timeofday + + for(var/turf/simulated/S in world) + if(S.z < 5) + if(!S.blocks_air && !S.zone && S.z < 5) // Added last check to force skipping asteroid z-levels -- TLE + new/zone(S) + + S.update_air_properties() + + world << "\red \b Geometry processed in [time2text(world.timeofday-start_time, "mm:ss")] minutes!" + spawn start() + + proc/start() + //Purpose: This is kicked off by the master controller, and controls the processing of all atmosphere. + //Called by: Master controller + //Inputs: None. + //Outputs: None. + + set background = 1 + while(1) + if(!kill_air) + current_cycle++ + var/success = tick() //Changed so that a runtime does not crash the ticker. + if(!success) //Runtimed. + failed_ticks++ + if(failed_ticks > 20) + world << "ERROR IN ATMOS TICKER. Killing air simulation!" + kill_air = 1 + sleep(max(5,update_delay*tick_multiplier)) + + proc/tick() + + if(tiles_to_update.len > 0) //If there are tiles to update, do so. + for(var/turf/simulated/T in tiles_to_update) + spawn T.update_air_properties() + tiles_to_update = list() + + for(var/zone/Z in zones) + if(Z.last_update < current_cycle) + Z.process() + if(Z) Z.last_update = current_cycle + + for(var/obj/fire/F) + F.process() + + return 1 \ No newline at end of file diff --git a/code/ZAS/FEA_turf_tile.dm b/code/ZAS/FEA_turf_tile.dm new file mode 100644 index 00000000000..d65d1d96650 --- /dev/null +++ b/code/ZAS/FEA_turf_tile.dm @@ -0,0 +1,205 @@ +atom/var/pressure_resistance = ONE_ATMOSPHERE +turf + assume_air(datum/gas_mixture/giver) //use this for machines to adjust air + del(giver) + return 0 + + return_air() + //Create gas mixture to hold data for passing + var/datum/gas_mixture/GM = new + + GM.oxygen = oxygen + GM.carbon_dioxide = carbon_dioxide + GM.nitrogen = nitrogen + GM.toxins = toxins + + GM.temperature = temperature + GM.update_values() + + return GM + + remove_air(amount as num) + var/datum/gas_mixture/GM = new + + var/sum = oxygen + carbon_dioxide + nitrogen + toxins + if(sum>0) + GM.oxygen = (oxygen/sum)*amount + GM.carbon_dioxide = (carbon_dioxide/sum)*amount + GM.nitrogen = (nitrogen/sum)*amount + GM.toxins = (toxins/sum)*amount + + GM.temperature = temperature + GM.update_values() + + return GM + + +turf + simulated + + var/current_graphic = null + + var/tmp + datum/gas_mixture/air + + processing = 1 + group_border = 0 + length_space_border = 0 + + air_check_directions = 0 //Do not modify this, just add turf to air_master.tiles_to_update + + archived_cycle = 0 + current_cycle = 0 + + obj/effect/hotspot/active_hotspot + + temperature_archived //USED ONLY FOR SOLIDS + being_superconductive = 0 + + + proc + process_cell() + update_air_properties() + archive() + + mimic_air_with_tile(turf/model) + share_air_with_tile(turf/simulated/sharer) + + mimic_temperature_with_tile(turf/model) + share_temperature_with_tile(turf/simulated/sharer) + + + super_conduct() + + update_visuals() + overlays = null + + var/siding_icon_state = return_siding_icon_state() + if(siding_icon_state) + overlays += image('floors.dmi',siding_icon_state) + var/datum/gas_mixture/model = return_air() + switch(model.graphic) + if("plasma") + overlays.Add(plmaster) + if("sleeping_agent") + overlays.Add(slmaster) + + + + New() + ..() + + if(!blocks_air) + air = new + + air.oxygen = oxygen + air.carbon_dioxide = carbon_dioxide + air.nitrogen = nitrogen + air.toxins = toxins + + air.temperature = temperature + air.update_values() + + if(air_master) + air_master.tiles_to_update.Add(src) + + find_zone() + +// air.parent = src //TODO DEBUG REMOVE + + else + if(air_master) + for(var/direction in cardinal) + var/turf/simulated/floor/target = get_step(src,direction) + if(istype(target)) + air_master.tiles_to_update.Add(target) + + Del() + if(active_hotspot) + del(active_hotspot) + if(blocks_air) + for(var/direction in list(NORTH, SOUTH, EAST, WEST)) + var/turf/simulated/tile = get_step(src,direction) + if(istype(tile) && !tile.blocks_air) + air_master.tiles_to_update.Add(tile) + ..() + + assume_air(datum/gas_mixture/giver) + if(!giver) return 0 + if(zone) + zone.air.merge(giver) + return 1 + else + return ..() + + archive() + if(air) //For open space like floors + air.archive() + + temperature_archived = temperature + archived_cycle = air_master.current_cycle + + share_air_with_tile(turf/simulated/T) + return air.share(T.air) + + mimic_air_with_tile(turf/T) + return air.mimic(T) + + return_air() + if(zone) + return zone.air + else if(air) + return air + + else + return ..() + + remove_air(amount as num) + if(zone) + var/datum/gas_mixture/removed = null + removed = zone.air.remove(amount) + return removed + else if(air) + var/datum/gas_mixture/removed = null + removed = air.remove(amount) + + if(air.check_tile_graphic()) + update_visuals(air) + return removed + + else + return ..() + + update_air_properties()//OPTIMIZE + air_check_directions = 0 + + for(var/direction in cardinal) + if(CanPass(null, get_step(src,direction), 0, 0)) + air_check_directions |= direction + + if(zone) + for(var/direction in cardinal) + if(air_check_directions&direction) + + var/turf/simulated/T = get_step(src,direction) + if(T) + ZConnect(src,T) + else + var/turf/simulated/T = get_step(src,direction) + if(T) + ZDisconnect(src,T) + else + + for(var/direction in cardinal) + if(air_check_directions&direction) + var/turf/simulated/T = get_step(src,direction) + if(T.zone) + T.zone.AddTurf(src) + break + if(!zone) + new/zone(src) + + if(air_check_directions) + processing = 1 + else + processing = 0 \ No newline at end of file diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index f265c45877a..24f98ccb02f 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -7,7 +7,7 @@ atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) - if(fire_protection) return + if(fire_protection > world.time-300) return var/datum/gas_mixture/air_contents = return_air(1) if(!air_contents) return 0 @@ -25,19 +25,11 @@ 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/liquid_fuel/liquid = locate() in src - var/fuel_level = 0 - var/liquid_level = 0 - if(fuel) fuel_level = fuel.moles - if(liquid) liquid_level = liquid.amount - var/total_fuel = air_contents.toxins + fuel_level + liquid_level - if((air_contents.oxygen + air_contents.toxins + fuel_level*1.5 + liquid_level*1.5) - (air_contents.carbon_dioxide*0.25) > vsc.IgnitionLevel && total_fuel > 0.5) + if(air_contents.calculate_firelevel(liquid) > vsc.IgnitionLevel && (fuel || liquid || air_contents.toxins > 0.5)) igniting = 1 if(air_contents.oxygen < 0.5) return 0 - if(parent&&parent.group_processing) - parent.suspend_group_processing() - if(! (locate(/obj/fire) in src)) var/obj/fire/F = new(src,1000) F.temperature = exposed_temperature @@ -180,31 +172,20 @@ obj var datum/gas_mixture/air_contents = S.return_air() datum/gas/volatile_fuel/fuel = locate(/datum/gas/volatile_fuel/) in air_contents.trace_gases - fuel_level = 0 obj/liquid_fuel/liquid = locate() in S - liquid_level = 0 - if(fuel) fuel_level = fuel.moles - if(liquid) - liquid_level = liquid.amount - if(liquid.amount <= 0) - del liquid - liquid_level = 0 + firelevel = air_contents.calculate_firelevel(liquid) - firelevel = (air_contents.oxygen + air_contents.toxins + fuel_level*1.5 + liquid_level*1.5) - (air_contents.carbon_dioxide*0.25) - - firelevel = min(firelevel,vsc.IgnitionLevel*5) - - if(firelevel > vsc.IgnitionLevel * 1.5 && (air_contents.toxins || fuel_level || liquid_level)) + if(firelevel > 25 && (air_contents.toxins || fuel || liquid)) for(var/direction in cardinal) if(S.air_check_directions&direction) //Grab all valid bordering tiles var/turf/simulated/enemy_tile = get_step(S, direction) if(istype(enemy_tile)) - if(enemy_tile.fire_protection) - firelevel -= vsc.IgnitionLevel + if(enemy_tile.fire_protection > world.time-30) + firelevel -= 150 continue if(!(locate(/obj/fire) in enemy_tile)) - if( prob( firelevel/(vsc.IgnitionLevel*0.1) ) ) + if( prob( firelevel/2.5 ) ) new/obj/fire(enemy_tile,firelevel) // else // world << "Spread Probability: [firelevel/(vsc.IgnitionLevel*0.1)]%." @@ -220,12 +201,12 @@ obj if(flow) - if(flow.oxygen > 0.3 && (flow.toxins || fuel_level || liquid)) + if(flow.oxygen > 0.3 && (flow.toxins || fuel || liquid)) icon_state = "1" - if(firelevel > vsc.IgnitionLevel * 2) + if(firelevel > 25) icon_state = "2" - if(firelevel > vsc.IgnitionLevel * 3.5) + if(firelevel > 100) icon_state = "3" flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature) flow.zburn(liquid) @@ -245,7 +226,7 @@ obj del src for(var/mob/living/carbon/human/M in loc) - M.FireBurn(firelevel/(vsc.IgnitionLevel*10)) + M.FireBurn(min(max(0.1,firelevel / 20),10)) New(newLoc,fl) @@ -254,7 +235,7 @@ obj sd_SetLuminosity(3) firelevel = fl for(var/mob/living/carbon/human/M in loc) - M.FireBurn(firelevel/(vsc.IgnitionLevel*10)) + M.FireBurn(min(max(0.1,firelevel / 20),10)) Del() if (istype(loc, /turf/simulated)) @@ -265,74 +246,135 @@ obj ..() obj/liquid_fuel - icon = 'effects.dmi' - icon_state = "slube" + icon = 'icons/effects/effects.dmi' + icon_state = "fuel" layer = TURF_LAYER+0.2 anchored = 1 var/amount = 1 - New(newLoc) + New(newLoc,amt=1) + src.amount = amt for(var/obj/liquid_fuel/other in newLoc) if(other != src) other.amount += src.amount + spawn other.Spread() del src + return + Spread() . = ..() + proc/Spread() + if(amount < 0.5) return + var/turf/simulated/S = loc + if(!istype(S)) return + for(var/d in cardinal) + if(S.air_check_directions & d) + if(rand(25)) + var/turf/simulated/O = get_step(src,d) + new/obj/liquid_fuel(O,amount*0.25) + amount *= 0.75 + + flamethrower_fuel + icon_state = "mustard" + anchored = 0 + New(newLoc, amt = 1, d = 0) + dir = d + . = ..() + Spread() + if(amount < 0.1) return + var/turf/simulated/S = loc + if(!istype(S)) return + for(var/d in list(turn(dir,90),turn(dir,-90))) + if(S.air_check_directions & d) + var/turf/simulated/O = get_step(S,d) + new/obj/liquid_fuel/flamethrower_fuel(O,amount*0.25,d) + O.hotspot_expose((T20C*2) + 380,500) + amount *= 0.5 vs_control/var/switch_fire = 1 turf/simulated/var/fire_protection = 0 -datum/gas_mixture/proc/zburn(obj/liquid_fuel/liquid) - if(vsc.switch_fire) - . = fire() - if(liquid && liquid.amount > 0) - oxygen -= fire_ratio_1 - liquid.amount = max(liquid.amount-fire_ratio_1,0) - carbon_dioxide += fire_ratio_1 - if(liquid.amount <= 0) - del liquid - return - if(temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) +turf/proc/apply_fire_protection() +turf/simulated/apply_fire_protection() + fire_protection = world.time + +datum/gas_mixture/proc + zburn(obj/liquid_fuel/liquid) + if(temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) + var + total_fuel = toxins + fuel_sources = 0 + datum/gas/volatile_fuel/fuel = locate() in trace_gases + if(fuel) + total_fuel += fuel.moles + fuel_sources++ + if(liquid) + if(liquid.amount <= 0) + del liquid + else + total_fuel += liquid.amount + fuel_sources++ + if(toxins > 0.3) fuel_sources++ + + if(!fuel_sources) return 0 + if(oxygen > 0.3 && total_fuel) + var/firelevel = calculate_firelevel(liquid) + //f(x) = 1000ln(0.01x + 1.45) + temperature = 1000*log(0.016*firelevel + 1.45) + var/consumed_gas = min(oxygen,0.002*firelevel,total_fuel) / fuel_sources + oxygen -= consumed_gas + toxins = max(0,toxins-consumed_gas) + if(fuel) + fuel.moles -= consumed_gas + if(fuel.moles <= 0) del fuel + if(liquid) + liquid.amount -= consumed_gas + if(liquid.amount <= 0) del liquid + update_values() + return consumed_gas*fuel_sources + return 0 + calculate_firelevel(obj/liquid_fuel/liquid) var - fuel_level = 0 datum/gas/volatile_fuel/fuel = locate() in trace_gases + fuel_level = 0 liquid_level = 0 if(fuel) fuel_level = fuel.moles if(liquid) liquid_level = liquid.amount - if(liquid && liquid_level <= 0) - del liquid - liquid_level = 0 - if(oxygen > 0.3 && (toxins || fuel_level || liquid_level)) - if(toxins && temperature < PLASMA_UPPER_TEMPERATURE) - temperature += (FIRE_PLASMA_ENERGY_RELEASED*fire_ratio_1) / heat_capacity() + return oxygen + toxins + liquid_level*15 + fuel_level*5 - if((fuel_level || liquid_level) && temperature < PLASMA_UPPER_TEMPERATURE) - temperature += (FIRE_CARBON_ENERGY_RELEASED*fire_ratio_1) / heat_capacity() +/mob/living/carbon/human/proc/FireBurn(mx as num) + //NO! NOT INTO THE PIT! IT BURRRRRNS! - if(toxins > fire_ratio_1) - oxygen -= vsc.plc.OXY_TO_PLASMA*fire_ratio_1 - toxins -= fire_ratio_1 - carbon_dioxide += fire_ratio_1 - else if(toxins) - oxygen -= toxins * vsc.plc.OXY_TO_PLASMA - carbon_dioxide += toxins - toxins = 0 + var + head_exposure = 1 + chest_exposure = 1 + groin_exposure = 1 + legs_exposure = 1 + arms_exposure = 1 - if(fuel_level > fire_ratio_1/1.5) - oxygen -= vsc.plc.OXY_TO_PLASMA*fire_ratio_1 - fuel.moles -= fire_ratio_1 - carbon_dioxide += fire_ratio_1 + for(var/obj/item/clothing/C in src) + if(l_hand == C || r_hand == C) continue + if(C.body_parts_covered & HEAD) + head_exposure *= C.heat_transfer_coefficient + if(C.body_parts_covered & UPPER_TORSO) + chest_exposure *= C.heat_transfer_coefficient + if(C.body_parts_covered & LOWER_TORSO) + groin_exposure *= C.heat_transfer_coefficient + if(C.body_parts_covered & LEGS) + legs_exposure *= C.heat_transfer_coefficient + if(C.body_parts_covered & ARMS) + arms_exposure *= C.heat_transfer_coefficient - else if(fuel_level) - oxygen -= fuel.moles * vsc.plc.OXY_TO_PLASMA - carbon_dioxide += fuel.moles - fuel.moles = 0 + mx *= 1 - if(liquid_level > 0) - oxygen -= fire_ratio_1 - liquid.amount = max(liquid.amount-fire_ratio_1,0) - carbon_dioxide += fire_ratio_1 - if(liquid.amount <= 0) - del liquid - return 1 - return 0 \ No newline at end of file + //Always check these damage procs first if fire damage isn't working. They're probably what's wrong. + + apply_damage(2.5*mx*head_exposure, BURN, "head", 0, 0, "Fire") + apply_damage(2.5*mx*chest_exposure, BURN, "chest", 0, 0, "Fire") + apply_damage(2.0*mx*groin_exposure, BURN, "groin", 0, 0, "Fire") + apply_damage(0.6*mx*legs_exposure, BURN, "l_leg", 0, 0, "Fire") + apply_damage(0.6*mx*legs_exposure, BURN, "r_leg", 0, 0, "Fire") + apply_damage(0.4*mx*arms_exposure, BURN, "l_arm", 0, 0, "Fire") + apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire") + + flash_pain() \ No newline at end of file diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm index ab52842dd1f..548289ade07 100644 --- a/code/ZAS/Functions.dm +++ b/code/ZAS/Functions.dm @@ -48,15 +48,29 @@ turf/proc/HasDoor(turf/O) return 1 turf/proc/find_zone() + if(world.time < 10) return for(var/d in cardinal) var/turf/T = get_step(src,d) - if(!T || !T.zone) continue + if(!T || !T.zone || !T.ZCanPass(src)) continue if(!zone) zone = T.zone zone.AddTurf(src) else if(T.zone != zone) ZConnect(src,T) +turf/proc/check_connections() + for(var/d in cardinal) + var/turf/T = get_step(src,d) + if(!T || !T.zone || !T.CanPass(0,src,0,0)) continue + if(T.zone != zone) + ZConnect(src,T) + +turf/proc/check_for_space() + for(var/d in cardinal) + var/turf/T = get_step(src,d) + if(istype(T,/turf/space) && T.CanPass(0,src,0,0)) + zone.AddSpace(T) + proc ZMerge(zone/A,zone/B) //world << "Merge occured." @@ -78,6 +92,7 @@ proc if((C.A in new_contents) && (C.B in new_contents)) del C continue + if(!A.connections) A.connections = list() A.connections += C A.space_tiles += B.space_tiles A.contents = new_contents @@ -93,7 +108,7 @@ proc return if(istype(A,/turf/space)) if(B.zone) - B.zone.AddSpace(B) + B.zone.AddSpace(A) //world << "Space added." return if(!A.zone || !B.zone) return @@ -124,7 +139,7 @@ proc A.overlays -= 'zone_connection_A.dmi' B.overlays -= 'zone_connection_B.dmi'*/ del C - /*else + else if(A == B) return if(A.CanPass(0,B,0,0)) return if(A.HasDoor(B) || B.HasDoor(A)) return @@ -137,6 +152,8 @@ proc if((A in Z.contents) || (B in Z.contents)) if(!Z.connections) Z.connections = list() Z.connections += C + for(var/turf/T in test) + T.check_for_space() var/datum/gas_mixture/Y_Air = new Y_Air.copy_from(oldzone.air) var/zone/Y = new(B,Y_Air) @@ -144,14 +161,11 @@ proc if((A in Y.contents) || (B in Y.contents)) if(!Y.connections) Y.connections = list() Y.connections += C + for(var/turf/space/T in oldzone.space_tiles) + if(!(T in Z.space_tiles)) + Y.AddSpace(T) oldzone.air = null del oldzone - world << "Zone Split: [A] / [B]" - A.overlays += 'zone_connection_A.dmi' - B.overlays += 'zone_connection_B.dmi' - spawn(10) - A.overlays -= 'zone_connection_A.dmi' - B.overlays -= 'zone_connection_B.dmi'*/ else if(istype(A,/turf/space) && B.zone) B.zone.RemoveSpace(A) diff --git a/code/ZAS/Plasma.dm b/code/ZAS/Plasma.dm index df25a974578..ab7f452fa9e 100644 --- a/code/ZAS/Plasma.dm +++ b/code/ZAS/Plasma.dm @@ -3,17 +3,12 @@ pl_control/var PLASMA_DMG_NAME = "Plasma Damage Multiplier" PLASMA_DMG_DESC = "Multiplier on how much damage inhaling plasma can do." - OXY_TO_PLASMA = 1 - OXY_TO_PLASMA_NAME = "O2/Plasma Ratio" - OXY_TO_PLASMA_DESC = "Multiplier for the ratio of oxygen to plasma required in fires." - - CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. + CLOTH_CONTAMINATION = 0 //If this is on, plasma does damage by getting into cloth. CLOTH_CONTAMINATION_NAME = "Plasma - Cloth Contamination" CLOTH_CONTAMINATION_RANDOM = 60 CLOTH_CONTAMINATION_METHOD = "Toggle" CLOTH_CONTAMINATION_DESC = "If set to nonzero, plasma will contaminate cloth items (uniforms, backpacks, etc.)\ - and cause a small amount of damage over time to anyone carrying or wearing them. Contamination can be detected\ - with a Health Analyzer, and washed off in the washer." + and cause a small amount of damage over time to anyone carrying or wearing them. Contamination can be washed off in the washer." ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or //decontaminated. @@ -48,7 +43,7 @@ pl_control/var //PLASMA_INJECTS_TOXINS_RANDOM = 30 //PLASMA_INJECTS_TOXINS_METHOD = "Toggle" - EYE_BURNS = 0 //Plasma burns the eyes of anyone not wearing eye protection. + EYE_BURNS = 1 //Plasma burns the eyes of anyone not wearing eye protection. EYE_BURNS_NAME = "Plasma - Eye Burns" EYE_BURNS_RANDOM = 30 EYE_BURNS_METHOD = "Toggle" @@ -66,8 +61,8 @@ pl_control/var //PLASMA_DMG_QUOTIENT = 10 //PLASMA_DMG_QUOTIENT_RANDOM = "1d10+4" - CONTAMINATION_LOSS = 0.1 - _NAME = "Plasma - Contamination Damage" + CONTAMINATION_LOSS = 0.01 + CONTAMINATION_LOSS_NAME = "Plasma - Contamination Damage" CONTAMINATION_LOSS_DESC = "A number representing the damage done per life cycle by contaminated items." PLASMA_HALLUCINATION = 1 @@ -93,160 +88,102 @@ obj/item/proc else if(istype(src,/obj/item/clothing)) return 1 else if(istype(src,/obj/item/weapon/storage/backpack)) return 1 -/mob/living/carbon/human/proc/contaminate() + contaminate() + if(!contaminated) + contaminated = 1 + overlays += 'icons/effects/contamination.dmi' + + decontaminate() + contaminated = 0 + overlays -= 'icons/effects/contamination.dmi' + +/mob/proc/contaminate() + +/mob/living/carbon/human/contaminate() if(!pl_suit_protected()) suit_contamination() - else if(vsc.plc.PLASMAGUARD_ONLY) - if(!wear_suit.flags & PLASMAGUARD) wear_suit.contaminated = 1 - - if(!pl_head_protected()) - if(wear_mask) wear_mask.contaminated = 1 if(prob(1)) suit_contamination() //Plasma can sometimes get through such an open suit. - else if(vsc.plc.PLASMAGUARD_ONLY) - if(!head.flags & PLASMAGUARD) head.contaminated = 1 - if(istype(back,/obj/item/weapon/storage/backpack) || vsc.plc.ALL_ITEM_CONTAMINATION) - back.contaminated = 1 + if(istype(back,/obj/item/weapon/storage/backpack)) + back.contaminate() - if(l_hand) - if(l_hand.can_contaminate()) l_hand.contaminated = 1 + /*if(l_hand) + if(l_hand.can_contaminate()) l_hand.contaminate() if(r_hand) - if(r_hand.can_contaminate()) r_hand.contaminated = 1 + if(r_hand.can_contaminate()) r_hand.contaminate() if(belt) - if(belt.can_contaminate()) belt.contaminated = 1 - if(wear_id && !pl_suit_protected()) - if(wear_id.can_contaminate()) wear_id.contaminated = 1 - if(l_ear && !pl_head_protected()) - if(l_ear.can_contaminate()) l_ear.contaminated = 1 - if(r_ear && !pl_head_protected()) - if(r_ear.can_contaminate()) r_ear.contaminated = 1 + if(belt.can_contaminate()) belt.contaminate()*/ -/mob/living/carbon/human/proc/pl_effects() +/mob/proc/pl_effects() + +/mob/living/carbon/human/pl_effects() + if(vsc.plc.CLOTH_CONTAMINATION) contaminate() if(stat >= 2) return if(vsc.plc.SKIN_BURNS) if(!pl_head_protected() || !pl_suit_protected()) burn_skin(0.75) - if (coughedtime != 1) - coughedtime = 1 - emote("gasp") - spawn (20) - coughedtime = 0 + if(prob(20)) src << "\red Your skin burns!" updatehealth() - if(vsc.plc.EYE_BURNS && !pl_head_protected()) - if(!wear_mask) - if(prob(20)) usr << "\red Your eyes burn!" - eye_stat += 2.5 - eye_blurry += 1.5 - if (eye_stat >= 20 && !(disabilities & 1)) - src << "\red Your eyes start to burn badly!" - disabilities |= 1 - if (prob(max(0,eye_stat - 20) + 1)) - src << "\red You are blinded!" - eye_blind += 20 - eye_stat = max(eye_stat-25,0) + + if(vsc.plc.EYE_BURNS) + if(!head) + if(!wear_mask) + burn_eyes() + else + if(!(wear_mask.flags & MASKCOVERSEYES)) + burn_eyes() else - if(!(wear_mask.flags & MASKCOVERSEYES)) - if(prob(20)) usr << "\red Your eyes burn!" - eye_stat += 2.5 - eye_blurry = min(eye_blurry+1.5,50) - if (eye_stat >= 20 && !(disabilities & 1)) - src << "\red Your eyes start to burn badly!" - disabilities |= 1 - if (prob(max(0,eye_stat - 20) + 1) &&!eye_blind) - src << "\red You are blinded!" - eye_blind += 20 - eye_stat = 0 + if(!(head.flags & MASKCOVERSEYES)) + if(!wear_mask) + burn_eyes() + else + if(!(wear_mask.flags & MASKCOVERSEYES)) + burn_eyes() + if(vsc.plc.GENETIC_CORRUPTION) - if(rand(1,1000) < vsc.plc.GENETIC_CORRUPTION) + if(rand(1,10000) < vsc.plc.GENETIC_CORRUPTION) randmutb(src) src << "\red High levels of toxins cause you to spontaneously mutate." domutcheck(src,null) -/mob/living/carbon/human/proc/FireBurn(mx as num) - //NO! NOT INTO THE PIT! IT BURRRRRNS! - mx *= vsc.BURN_DMG - - var - head_exposure = 1 - chest_exposure = 1 - groin_exposure = 1 - legs_exposure = 1 - feet_exposure = 1 - arms_exposure = 1 - hands_exposure = 1 - for(var/obj/item/clothing/C in src) - if(l_hand == C || r_hand == C) continue - if(C.body_parts_covered & HEAD) - head_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & UPPER_TORSO) - chest_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & LOWER_TORSO) - groin_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & LEGS) - legs_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & FEET) - feet_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & ARMS) - arms_exposure *= C.heat_transfer_coefficient - if(C.body_parts_covered & HANDS) - arms_exposure *= C.heat_transfer_coefficient - - mx *= 10 - - apply_damage("head", 0, 2.5*mx*head_exposure) - apply_damage("chest", 0, 2.5*mx*chest_exposure) - apply_damage("groin", 0, 2.0*mx*groin_exposure) - apply_damage("l_leg", 0, 0.6*mx*legs_exposure) - apply_damage("r_leg", 0, 0.6*mx*legs_exposure) - apply_damage("l_arm", 0, 0.4*mx*arms_exposure) - apply_damage("r_arm", 0, 0.4*mx*arms_exposure) - apply_damage("l_foot", 0, 0.25*mx*feet_exposure) - apply_damage("r_foot", 0, 0.25*mx*feet_exposure) - apply_damage("l_hand", 0, 0.25*mx*hands_exposure) - apply_damage("r_hand", 0, 0.25*mx*hands_exposure) - -/mob/living/carbon/human/proc/suit_interior() - . = list() - if(!pl_suit_protected()) - for(var/obj/item/I in src) - . += I - return . - . += wear_mask - . += w_uniform - . += shoes - . += gloves - if(!pl_head_protected()) - . += head +/mob/living/carbon/human/proc/burn_eyes() + if(prob(20)) src << "\red Your eyes burn!" + eye_stat += 2.5 + eye_blurry = min(eye_blurry+1.5,50) + if (prob(max(0,eye_stat - 20) + 1) &&!eye_blind) + src << "\red You are blinded!" + eye_blind += 20 + eye_stat = 0 /mob/living/carbon/human/proc/pl_head_protected() if(head) - if(head.flags & PLASMAGUARD || head.flags & HEADSPACE) return 1 + if(vsc.plc.PLASMAGUARD_ONLY) + if(head.flags & PLASMAGUARD || head.flags & HEADSPACE) return 1 + else + if(head.flags & HEADCOVERSEYES) return 1 return 0 /mob/living/carbon/human/proc/pl_suit_protected() if(wear_suit) - if(wear_suit.flags & PLASMAGUARD || wear_suit.flags & SUITSPACE) return 1 + if(vsc.plc.PLASMAGUARD_ONLY) + if(wear_suit.flags & PLASMAGUARD || wear_suit.flags & SUITSPACE) return 1 + else + if(wear_suit.flags_inv & HIDEJUMPSUIT) return 1 return 0 /mob/living/carbon/human/proc/suit_contamination() - if(vsc.plc.ALL_ITEM_CONTAMINATION) - for(var/obj/item/I in src) - I.contaminated = 1 - else - if(wear_suit) wear_suit.contaminated = 1 - if(w_uniform) w_uniform.contaminated = 1 - if(shoes) shoes.contaminated = 1 - if(gloves) gloves.contaminated = 1 - if(wear_mask) wear_mask.contaminated = 1 + if(w_uniform) w_uniform.contaminate() + if(shoes) shoes.contaminate() + if(gloves) gloves.contaminate() turf/Entered(obj/item/I) . = ..() - if(istype(I)) + if(istype(I) && vsc.plc.CLOTH_CONTAMINATION) var/datum/gas_mixture/env = return_air(1) - if(env.toxins > 0.35) + if(env.toxins > MOLES_PLASMA_VISIBLE + 1) if(I.can_contaminate()) - I.contaminated = 1 \ No newline at end of file + I.contaminate() \ No newline at end of file diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm index 4de6c939860..8423ae46af8 100644 --- a/code/ZAS/Processing.dm +++ b/code/ZAS/Processing.dm @@ -26,55 +26,39 @@ zone Z.air.copy_from(air) rebuild = 0 - var/total_space = 0 - var/turf/space/space + if(!air) + air = new() + air.adjustGases(MOLES_O2STANDARD, 0, MOLES_N2STANDARD, 0, list()) + world.log << "Air object lost in zone. Regenerating." - if(length(connected_zones)) - for(var/zone/Z in connected_zones) - total_space += length(Z.space_tiles) - if(length(Z.space_tiles)) - space = Z.space_tiles[1] + var/total_space = 0 if(space_tiles) for(var/T in space_tiles) if(!istype(T,/turf/space)) space_tiles -= T - total_space += length(space_tiles) - if(length(space_tiles)) - space = space_tiles[1] + total_space = length(space_tiles) - if(total_space && space) - var/old_pressure = air.return_pressure() - air.temperature_mimic(space,OPEN_HEAT_TRANSFER_COEFFICIENT,total_space) - air.remove(MOLES_CELLSTANDARD * (air.group_multiplier/40) * total_space) - if(dbg_output) world << "Space removed [MOLES_CELLSTANDARD*(air.group_multiplier/40)*total_space] moles of air." - var/p_diff = old_pressure - air.return_pressure() - if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) AirflowSpace(src,p_diff) + if(total_space) // SPAAAAAAAAAACE + //var/old_pressure = air.pressure + ShareSpace(air,total_space*(vsc.zone_share_percent/100)) + //var/p_diff = old_pressure - air.pressure + //if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) AirflowSpace(src,p_diff) air.react(null,0) var/check = air.check_tile_graphic() - for(var/turf/T in contents) - if(T.zone && T.zone != src) - RemoveTurf(T) - if(dbg_output) world << "Removed invalid turf." - if(air.group_multiplier <= 0) // No more turfs belong to this zone, so we can get rid of it - del(src) - else // Turf was valid, so we can handle it - if(!T.zone) - T.zone = src - if(istype(T,/turf/simulated)) - var/turf/simulated/S = T - if(S.fire_protection) S.fire_protection-- - if(check) - if(S.HasDoor(1)) - S.update_visuals() - else - S.update_visuals(air) + if(check || air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + for(var/turf/simulated/S in contents) + if(check) + if(S.HasDoor(1)) + S.update_visuals() + else + S.update_visuals(air) - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - for(var/atom/movable/item in S) - item.temperature_expose(air, air.temperature, CELL_VOLUME) - S.temperature_expose(air, air.temperature, CELL_VOLUME) + if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + for(var/atom/movable/item in S) + item.temperature_expose(air, air.temperature, CELL_VOLUME) + S.temperature_expose(air, air.temperature, CELL_VOLUME) air.graphic_archived = air.graphic @@ -83,13 +67,114 @@ zone if(length(connections)) for(var/connection/C in connections) C.Cleanup() - if(C && !C.indirect) - if(C.A.zone.air.compare(C.B.zone.air)) + if(C && !C.indirect && C.A.zone && C.B.zone) + if(C.A.zone.air.compare(C.B.zone.air) || total_space) ZMerge(C.A.zone,C.B.zone) for(var/zone/Z in connected_zones) - var/p_diff = (air.return_pressure()-Z.air.return_pressure())*connected_zones[Z]*(vsc.zone_share_percent/100) - if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) Airflow(src,Z,p_diff) - air.share_ratio(Z.air,connected_zones[Z]*(vsc.zone_share_percent/100)) + //var/p_diff = (air.return_pressure()-Z.air.return_pressure())*connected_zones[Z]*(vsc.zone_share_percent/100) + //if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) Airflow(src,Z,p_diff) + ShareRatio(air,Z.air,connected_zones[Z]*(vsc.zone_share_percent/100)) + +proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, ratio) + var + size = max(1,A.group_multiplier) + share_size = max(1,B.group_multiplier) + + full_oxy = A.oxygen * size + full_nitro = A.nitrogen * size + full_co2 = A.carbon_dioxide * size + full_plasma = A.toxins * size + + full_thermal = A.temperature * A.heat_capacity() * size + + s_full_oxy = B.oxygen * share_size + s_full_nitro = B.nitrogen * share_size + s_full_co2 = B.carbon_dioxide * share_size + s_full_plasma = B.toxins * share_size + + s_full_thermal = B.temperature * B.heat_capacity() * share_size + + oxy_avg = (full_oxy + s_full_oxy) / (size + share_size) + nit_avg = (full_nitro + s_full_nitro) / (size + share_size) + co2_avg = (full_co2 + s_full_co2) / (size + share_size) + plasma_avg = (full_plasma + s_full_plasma) / (size + share_size) + + thermal_avg = (full_thermal + s_full_thermal) / (size+share_size) + + A.oxygen = (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg + A.nitrogen = (A.nitrogen - nit_avg) * (1-ratio) + nit_avg + A.carbon_dioxide = (A.carbon_dioxide - co2_avg) * (1-ratio) + co2_avg + A.toxins = (A.toxins - plasma_avg) * (1-ratio) + plasma_avg + + B.oxygen = (B.oxygen - oxy_avg) * (1-ratio) + oxy_avg + B.nitrogen = (B.nitrogen - nit_avg) * (1-ratio) + nit_avg + B.carbon_dioxide = (B.carbon_dioxide - co2_avg) * (1-ratio) + co2_avg + B.toxins = (B.toxins - plasma_avg) * (1-ratio) + plasma_avg + + var + thermal = (full_thermal/size - thermal_avg) * (1-ratio) + thermal_avg + sharer_thermal = (s_full_thermal/share_size - thermal_avg) * (1-ratio) + thermal_avg + + A.temperature = thermal / (A.heat_capacity() == 0 ? MINIMUM_HEAT_CAPACITY : A.heat_capacity()) + + B.temperature = sharer_thermal / (B.heat_capacity() == 0 ? MINIMUM_HEAT_CAPACITY : B.heat_capacity()) + + for(var/datum/gas/G in A.trace_gases) + var/datum/gas/H = locate(G.type) in B.trace_gases + if(H) + var/G_avg = (G.moles*size + H.moles*share_size) / (size+share_size) + G.moles = (G.moles - G_avg) * (1-ratio) + G_avg + H.moles = (H.moles - G_avg) * (1-ratio) + G_avg + else + H = new G.type + B.trace_gases += H + var/G_avg = (G.moles*size) / (size+share_size) + G.moles = (G.moles - G_avg) * (1-ratio) + G_avg + H.moles = (H.moles - G_avg) * (1-ratio) + G_avg + + A.update_values() + B.update_values() + + if(A.compare(B)) return 1 + else return 0 + + /* See? Now that's how it's done. */ + +proc/ShareSpace(datum/gas_mixture/A, ratio) + var + size = max(1,A.group_multiplier) + share_size = 2000 //A huge value because space is huge. + + full_oxy = A.oxygen * size + full_nitro = A.nitrogen * size + full_co2 = A.carbon_dioxide * size + full_plasma = A.toxins * size + + full_thermal = A.temperature * A.heat_capacity() * size + + oxy_avg = (full_oxy + 0) / (size + share_size) + nit_avg = (full_nitro + 0.2) / (size + share_size) + co2_avg = (full_co2 + 0) / (size + share_size) + plasma_avg = (full_plasma + 0) / (size + share_size) + + thermal_avg = (full_thermal + MINIMUM_HEAT_CAPACITY) / (size+share_size) + + A.oxygen = (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg + A.nitrogen = (A.nitrogen - nit_avg) * (1-ratio) + nit_avg + A.carbon_dioxide = (A.carbon_dioxide - co2_avg) * (1-ratio) + co2_avg + A.toxins = (A.toxins - plasma_avg) * (1-ratio) + plasma_avg + + var/thermal = (full_thermal/size - thermal_avg) * (1-ratio) + thermal_avg + + A.temperature = thermal / (A.heat_capacity() == 0 ? MINIMUM_HEAT_CAPACITY : A.heat_capacity()) + + for(var/datum/gas/G in A.trace_gases) + var/G_avg = (G.moles*size + 0) / (size+share_size) + G.moles = (G.moles - G_avg) * (1-ratio) + G_avg + + A.update_values() + + return 1 zone/proc diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index 188f885ae9b..226e38c1223 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -133,6 +133,8 @@ vs_control plc.EYE_BURNS = 0 //Plasma burns the eyes of anyone not wearing eye protection. + plc.PLASMA_HALLUCINATION = 0 + //plc.N2O_REACTION = 0 //Plasma can react with N2O, making sparks and starting a fire if levels are high. //plc.PLASMA_COLOR = "onturf" //Plasma can change colors yaaaay! @@ -141,8 +143,8 @@ vs_control //plc.PLASMA_DMG_QUOTIENT = 10 plc.CONTAMINATION_LOSS = 0 - if("Hazard-Low") - plc.CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. + if("Hazard - Low") + plc.CLOTH_CONTAMINATION = 0 //If this is on, plasma does damage by getting into cloth. plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or @@ -152,7 +154,7 @@ vs_control plc.GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 1000. - plc.SKIN_BURNS = 0 //Plasma has an effect similar to mustard gas on the un-suited. + plc.SKIN_BURNS = 1 //Plasma has an effect similar to mustard gas on the un-suited. // plc.PLASMA_INJECTS_TOXINS = 0 //Plasma damage injects the toxins chemical to do damage over time. @@ -168,12 +170,9 @@ vs_control //plc.PLASMA_DMG_OFFSET = 1.5 //plc.PLASMA_DMG_QUOTIENT = 8 - plc.CONTAMINATION_LOSS = 0.01 + plc.CONTAMINATION_LOSS = 0 - var/s = pick(plc.settings) - plc.Randomize(s) - - if("Hazard-High") + if("Hazard - High") plc.CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or @@ -184,11 +183,11 @@ vs_control plc.GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 1000. - plc.SKIN_BURNS = 0 //Plasma has an effect similar to mustard gas on the un-suited. + plc.SKIN_BURNS = 1 //Plasma has an effect similar to mustard gas on the un-suited. // plc.PLASMA_INJECTS_TOXINS = 0 //Plasma damage injects the toxins chemical to do damage over time. - plc.EYE_BURNS = 0 //Plasma burns the eyes of anyone not wearing eye protection. + plc.EYE_BURNS = 1 //Plasma burns the eyes of anyone not wearing eye protection. // plc.N2O_REACTION = 0 //Plasma can react with N2O, making sparks and starting a fire if levels are high. @@ -197,16 +196,10 @@ vs_control //plc.PLASMA_DMG_OFFSET = 3 //plc.PLASMA_DMG_QUOTIENT = 5 - plc.CONTAMINATION_LOSS = 0.05 - - for(var/i = rand(3,5),i>0,i--) - var/s = pick(plc.settings) - plc.Randomize(s) - - if("Everything") + if("Oh Shit!") plc.CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. - plc.ALL_ITEM_CONTAMINATION = 1 //If this is on, any item can be contaminated, so suits and tools must be discarded or ELSE + plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or ELSE plc.PLASMAGUARD_ONLY = 1 @@ -227,7 +220,6 @@ vs_control //plc.PLASMA_DMG_OFFSET = 3 //plc.PLASMA_DMG_QUOTIENT = 5 - plc.CONTAMINATION_LOSS = 0.02 /////world << "Plasma color updated." pl_control diff --git a/code/defines/atom.dm b/code/defines/atom.dm index d725f656503..1a1a79b94f8 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -17,7 +17,7 @@ // replaced by OPENCONTAINER flags and atom/proc/is_open_container() ///Chemistry. - proc/assume_air(datum/air_group/giver) + proc/assume_air(datum/gas_mixture/giver) del(giver) return null @@ -48,7 +48,7 @@ */ obj - assume_air(datum/air_group/giver) + assume_air(datum/gas_mixture/giver) if(loc) return loc.assume_air(giver) else diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index e128be4cf8c..c04bb4ca00e 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -1561,19 +1561,13 @@ proc/listclearnulls(list/list) for(var/turf/simulated/T1 in toupdate) for(var/obj/machinery/door/D2 in T1) doors += D2 - if(T1.parent) - air_master.groups_to_rebuild += T1.parent - else - air_master.tiles_to_update += T1 + air_master.tiles_to_update += T1 if(fromupdate.len) for(var/turf/simulated/T2 in fromupdate) for(var/obj/machinery/door/D2 in T2) doors += D2 - if(T2.parent) - air_master.groups_to_rebuild += T2.parent - else - air_master.tiles_to_update += T2 + air_master.tiles_to_update += T2 for(var/obj/O in doors) O:update_nearby_tiles(1) @@ -1728,10 +1722,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) for(var/turf/simulated/T1 in toupdate) for(var/obj/machinery/door/D2 in T1) doors += D2 - if(T1.parent) - air_master.groups_to_rebuild += T1.parent - else - air_master.tiles_to_update += T1 + air_master.tiles_to_update += T1 for(var/obj/O in doors) O:update_nearby_tiles(1) diff --git a/code/defines/turf.dm b/code/defines/turf.dm index 4fc3dfa963c..3eb764e5c6a 100644 --- a/code/defines/turf.dm +++ b/code/defines/turf.dm @@ -341,8 +341,6 @@ proc/TemperatureAct(temperature) for(var/turf/simulated/floor/target_tile in range(2,loc)) - if(target_tile.parent && target_tile.parent.group_processing) - target_tile.parent.suspend_group_processing() var/datum/gas_mixture/napalm = new diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index fb7b3c6a1b3..aa51784a615 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -267,12 +267,12 @@ if (src.operating) return src.operating = 1 - + var/X = src:x var/Y = src:y var/Z = src:z var/held = 1 - + if(src.holdopen && !forcecrush) while(held == 1 && holdopen && !forcecrush) //If it is no longer hold open, it should close. sleep(held? 10:40) @@ -288,25 +288,25 @@ spawn(4) if(!istype(src, /obj/machinery/door/window)) for(var/mob/living/L in src.loc) // Crush mobs and move them out of the way - + if(src.forcecrush) // Save an AI, crush a limb var/limbname = pick("l_arm", "r_arm", "l_hand","r_hand", "l_foot", "r_foot") var/limbdisplay - + for(var/organ in L:organs) var/datum/organ/external/temp = L:organs["[organ]"] if (istype(temp, /datum/organ/external) && temp.name == limbname) limbdisplay = temp.display_name // Take the name for down below temp.take_damage(rand(50,80), 0) //OH GOD IT HURTS break - + L << "\red The airlock crushes your [limbdisplay]!" for(var/mob/O in viewers(L, null)) if(O == L) continue O.show_message("\red The airlock crushes [L.name]'s [limbdisplay]!", 1) sleep(rand(2,8)) - + L << "\red The airlock forces you out of the way!" //Lucky you for(var/mob/O in viewers(L, null)) O.show_message("\red The airlock pushes [L.name] out of the way!", 1) @@ -314,7 +314,7 @@ var/turf/T = get_random_turf(L, lst) if(T) L.loc = T - + if(!src.forcecrush) for(var/obj/item/I in src.loc) // Move items out of the way if(!I.anchored) @@ -322,10 +322,10 @@ var/turf/T = get_random_turf(I, lst) if(T) I.loc = T - + sleep(6) update_icon() - + if(src.visible && (!src.glass)) src.sd_SetOpacity(1) if(operating == 1) @@ -343,38 +343,11 @@ var/turf/simulated/east = get_step(source,EAST) var/turf/simulated/west = get_step(source,WEST) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(north)) - if(north.parent) - air_master.groups_to_rebuild += north.parent - else - air_master.tiles_to_update += north - if(istype(south)) - if(south.parent) - air_master.groups_to_rebuild += south.parent - else - air_master.tiles_to_update += south - if(istype(east)) - if(east.parent) - air_master.groups_to_rebuild += east.parent - else - air_master.tiles_to_update += east - if(istype(west)) - if(west.parent) - air_master.groups_to_rebuild += west.parent - else - air_master.tiles_to_update += west - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(north)) air_master.tiles_to_update += north - if(istype(south)) air_master.tiles_to_update += south - if(istype(east)) air_master.tiles_to_update += east - if(istype(west)) air_master.tiles_to_update += west + if(istype(source)) air_master.tiles_to_update += source + if(istype(north)) air_master.tiles_to_update += north + if(istype(south)) air_master.tiles_to_update += south + if(istype(east)) air_master.tiles_to_update += east + if(istype(west)) air_master.tiles_to_update += west return 1 diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 41462f0b0ce..efb86ae369e 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -110,18 +110,6 @@ var/turf/simulated/source = loc var/turf/simulated/destination = get_step(source,dir) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(destination)) - if(destination.parent) - air_master.groups_to_rebuild += destination.parent - else - air_master.tiles_to_update += destination - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(destination)) air_master.tiles_to_update += destination + if(istype(source)) air_master.tiles_to_update += source + if(istype(destination)) air_master.tiles_to_update += destination return 1 \ No newline at end of file diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 50baa203d0d..27967591d0d 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -15,20 +15,8 @@ var/turf/simulated/source = loc var/turf/simulated/target = get_step(source,dir) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(target)) - if(target.parent) - air_master.groups_to_rebuild += target.parent - else - air_master.tiles_to_update += target - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(target)) air_master.tiles_to_update += target + if(istype(source)) air_master.tiles_to_update += source + if(istype(target)) air_master.tiles_to_update += target return 1 diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 9bb05f46583..6050615cdcc 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -408,38 +408,11 @@ var/turf/simulated/east = get_step(source,EAST) var/turf/simulated/west = get_step(source,WEST) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(north)) - if(north.parent) - air_master.groups_to_rebuild += north.parent - else - air_master.tiles_to_update += north - if(istype(south)) - if(south.parent) - air_master.groups_to_rebuild += south.parent - else - air_master.tiles_to_update += south - if(istype(east)) - if(east.parent) - air_master.groups_to_rebuild += east.parent - else - air_master.tiles_to_update += east - if(istype(west)) - if(west.parent) - air_master.groups_to_rebuild += west.parent - else - air_master.tiles_to_update += west - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(north)) air_master.tiles_to_update += north - if(istype(south)) air_master.tiles_to_update += south - if(istype(east)) air_master.tiles_to_update += east - if(istype(west)) air_master.tiles_to_update += west + if(istype(source)) air_master.tiles_to_update += source + if(istype(north)) air_master.tiles_to_update += north + if(istype(south)) air_master.tiles_to_update += south + if(istype(east)) air_master.tiles_to_update += east + if(istype(west)) air_master.tiles_to_update += west return 1 diff --git a/code/game/objects/closets/firecloset.dm b/code/game/objects/closets/firecloset.dm index be3571a83f1..c3a6ad2fbc5 100644 --- a/code/game/objects/closets/firecloset.dm +++ b/code/game/objects/closets/firecloset.dm @@ -8,7 +8,7 @@ new /obj/item/device/flashlight(src) new /obj/item/weapon/tank/oxygen/red(src) new /obj/item/weapon/extinguisher(src) - new /obj/item/clothing/head/helmet/hardhat/red(src) + new /obj/item/clothing/head/helmet/space/fire_helmet(src) /obj/structure/closet/firecloset/New() ..() @@ -17,7 +17,7 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/weapon/tank/oxygen/red(src) new /obj/item/weapon/extinguisher(src) - new /obj/item/clothing/head/helmet/hardhat/red(src) + new /obj/item/clothing/head/helmet/space/fire_helmet(src) /*switch (pickweight(list("nothing" = 5, "bare-bones" = 35, "basic" = 40, "pickpocketed" = 10, "untouched" = 10))) if ("nothing") diff --git a/code/game/objects/effect_system.dm b/code/game/objects/effect_system.dm index c661ae8a725..1b449b6fc94 100644 --- a/code/game/objects/effect_system.dm +++ b/code/game/objects/effect_system.dm @@ -1050,38 +1050,11 @@ steam.start() -- spawns the effect var/turf/simulated/east = get_step(source,EAST) var/turf/simulated/west = get_step(source,WEST) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(north)) - if(north.parent) - air_master.groups_to_rebuild += north.parent - else - air_master.tiles_to_update += north - if(istype(south)) - if(south.parent) - air_master.groups_to_rebuild += south.parent - else - air_master.tiles_to_update += south - if(istype(east)) - if(east.parent) - air_master.groups_to_rebuild += east.parent - else - air_master.tiles_to_update += east - if(istype(west)) - if(west.parent) - air_master.groups_to_rebuild += west.parent - else - air_master.tiles_to_update += west - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(north)) air_master.tiles_to_update += north - if(istype(south)) air_master.tiles_to_update += south - if(istype(east)) air_master.tiles_to_update += east - if(istype(west)) air_master.tiles_to_update += west + if(istype(source)) air_master.tiles_to_update += source + if(istype(north)) air_master.tiles_to_update += north + if(istype(south)) air_master.tiles_to_update += south + if(istype(east)) air_master.tiles_to_update += east + if(istype(west)) air_master.tiles_to_update += west return 1 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 7ed926c801d..f976d3ee999 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -236,8 +236,10 @@ /obj/item/weapon/flamethrower/proc/ignite_turf(turf/target) //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... //Transfer 5% of current tank air contents to turf - var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.05*throw_amount/100) - air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE + var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.02*(throw_amount/100)) + //air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE + new/obj/liquid_fuel/flamethrower_fuel(target,air_transfer.toxins,get_dir(loc,target)) + air_transfer.toxins = 0 target.assume_air(air_transfer) //Burn it based on transfered gas //target.hotspot_expose(part4.air_contents.temperature*2,300) diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm index 310cdfd8805..f99a8d395fe 100644 --- a/code/game/objects/mineral_doors.dm +++ b/code/game/objects/mineral_doors.dm @@ -145,38 +145,11 @@ var/turf/simulated/east = get_step(source,EAST) var/turf/simulated/west = get_step(source,WEST) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(north)) - if(north.parent) - air_master.groups_to_rebuild += north.parent - else - air_master.tiles_to_update += north - if(istype(south)) - if(south.parent) - air_master.groups_to_rebuild += south.parent - else - air_master.tiles_to_update += south - if(istype(east)) - if(east.parent) - air_master.groups_to_rebuild += east.parent - else - air_master.tiles_to_update += east - if(istype(west)) - if(west.parent) - air_master.groups_to_rebuild += west.parent - else - air_master.tiles_to_update += west - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(north)) air_master.tiles_to_update += north - if(istype(south)) air_master.tiles_to_update += south - if(istype(east)) air_master.tiles_to_update += east - if(istype(west)) air_master.tiles_to_update += west + if(istype(source)) air_master.tiles_to_update += source + if(istype(north)) air_master.tiles_to_update += north + if(istype(south)) air_master.tiles_to_update += south + if(istype(east)) air_master.tiles_to_update += east + if(istype(west)) air_master.tiles_to_update += west return 1 @@ -225,8 +198,6 @@ proc/TemperatureAct(temperature) for(var/turf/simulated/floor/target_tile in range(2,loc)) - if(target_tile.parent && target_tile.parent.group_processing) - target_tile.parent.suspend_group_processing() var/datum/gas_mixture/napalm = new @@ -305,4 +276,4 @@ isSwitchingStates = 0 Dismantle(devastated = 0) - del(src) + del(src) diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index 6d04a7d4ea0..24be9eed502 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -30,8 +30,6 @@ for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) - if(target.parent) - target.parent.suspend_group_processing() var/datum/gas_mixture/payload = new var/datum/gas/sleeping_agent/trace_gas = new @@ -48,8 +46,6 @@ /obj/effect/mine/proc/triggerplasma(obj) for (var/turf/simulated/floor/target in range(1,src)) if(!target.blocks_air) - if(target.parent) - target.parent.suspend_group_processing() var/datum/gas_mixture/payload = new diff --git a/code/game/objects/window.dm b/code/game/objects/window.dm index ee9871be0fc..f3e69130cf6 100644 --- a/code/game/objects/window.dm +++ b/code/game/objects/window.dm @@ -346,20 +346,8 @@ var/turf/simulated/source = loc var/turf/simulated/target = get_step(source,dir) - if(need_rebuild) - if(istype(source)) //Rebuild/update nearby group geometry - if(source.parent) - air_master.groups_to_rebuild += source.parent - else - air_master.tiles_to_update += source - if(istype(target)) - if(target.parent) - air_master.groups_to_rebuild += target.parent - else - air_master.tiles_to_update += target - else - if(istype(source)) air_master.tiles_to_update += source - if(istype(target)) air_master.tiles_to_update += target + if(istype(source)) air_master.tiles_to_update += source + if(istype(target)) air_master.tiles_to_update += target return 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 186fadd0ee8..8e8aceab534 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -144,7 +144,7 @@ verbs += /client/proc/voting verbs += /client/proc/hide_verbs verbs += /client/proc/general_report - verbs += /client/proc/air_report + //verbs += /client/proc/air_report verbs += /client/proc/deadmin_self //verbs += /client/proc/cmd_admin_prison --Merged with player panel //verbs += /obj/admins/proc/unprison --Merged with player panel @@ -248,7 +248,7 @@ // verbs += /client/proc/mapload verbs += /client/proc/check_words verbs += /client/proc/drop_bomb - verbs += /client/proc/kill_airgroup + //verbs += /client/proc/kill_airgroup //verbs += /client/proc/cmd_admin_drop_everything --Merged with view variables verbs += /client/proc/make_sound verbs += /client/proc/play_local_sound @@ -278,7 +278,7 @@ verbs += /client/proc/Force_Event_admin verbs += /client/proc/radioalert verbs += /client/proc/CarbonCopy - verbs += /client/proc/jump_to_dead_group + //verbs += /client/proc/jump_to_dead_group else return //Game Master @@ -403,7 +403,7 @@ verbs -= /client/proc/voting verbs -= /client/proc/hide_verbs verbs -= /client/proc/general_report - verbs -= /client/proc/air_report + //verbs -= /client/proc/air_report verbs -= /client/proc/cmd_admin_say verbs -= /client/proc/cmd_admin_gib_self verbs -= /client/proc/restartcontroller @@ -452,13 +452,13 @@ //verbs -= /obj/admins/proc/unprison --Merged with player panel //verbs -= /client/proc/cmd_switch_radio --removed because tcommsat is staying verbs -= /client/proc/togglebuildmodeself - verbs -= /client/proc/kill_airgroup + //verbs -= /client/proc/kill_airgroup verbs -= /client/proc/debug_master_controller verbs -= /client/proc/make_tajaran verbs -= /client/proc/admin_deny_shuttle verbs -= /client/proc/cmd_admin_christmas verbs -= /client/proc/editappear - verbs -= /client/proc/jump_to_dead_group + //verbs -= /client/proc/jump_to_dead_group verbs -= /client/proc/playernotes verbs -= /obj/admins/proc/show_skills verbs -= /client/proc/enable_debug_verbs diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index fa68b836d90..dc8c6371f53 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -22,7 +22,7 @@ usr << browse(output,"window=generalreport") //feedback_add_details("admin_verb","SGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - air_report() +/* air_report() set category = "Debug" set name = "Show Air Report" @@ -83,7 +83,7 @@ for(var/datum/gas/trace_gas in GM.trace_gases) usr << "[trace_gas.type]: [trace_gas.moles]" //feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - +*/ fix_next_move() set category = "Debug" set name = "Unfreeze Everyone" @@ -183,7 +183,7 @@ //feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - jump_to_dead_group() + /*jump_to_dead_group() set name = "Jump to dead group" set category = "Debug" if(!holder) @@ -221,7 +221,7 @@ else usr << "Local airgroup is unsimulated!" //feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - +*/ tension_report() set category = "Debug" diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index a899f823ddf..f319ebe5019 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -130,14 +130,14 @@ var/intercom_range_display_status = 0 src.verbs += /client/proc/camera_view //-errorage src.verbs += /client/proc/sec_camera_report //-errorage src.verbs += /client/proc/intercom_view //-errorage - src.verbs += /client/proc/air_status //Air things + //src.verbs += /client/proc/air_status //Air things src.verbs += /client/proc/Cell //More air things src.verbs += /client/proc/atmosscan //check plumbing src.verbs += /client/proc/powerdebug //check power src.verbs += /client/proc/count_objects_on_z_level src.verbs += /client/proc/count_objects_all src.verbs += /client/proc/cmd_assume_direct_control //-errorage - src.verbs += /client/proc/jump_to_dead_group + //src.verbs += /client/proc/jump_to_dead_group src.verbs += /client/proc/startSinglo src.verbs += /client/proc/ticklag //allows you to set the ticklag. src.verbs += /client/proc/cmd_admin_grantfullaccess diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index ad825ca068d..af599eced07 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -350,8 +350,6 @@ datum on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/location = get_turf(holder.my_atom.loc) for(var/turf/simulated/floor/target_tile in range(0,location)) - if(target_tile.parent && target_tile.parent.group_processing) - target_tile.parent.suspend_group_processing() var/datum/gas_mixture/napalm = new diff --git a/code/modules/clothing/suits/fire.dm b/code/modules/clothing/suits/fire.dm index 42dc200379a..7f03617caa5 100644 --- a/code/modules/clothing/suits/fire.dm +++ b/code/modules/clothing/suits/fire.dm @@ -28,6 +28,18 @@ protective_temperature = 10000 slowdown = 1.5 +/obj/item/clothing/head/helmet/space/fire_helmet + name = "Fire Helmet" + desc = "A helmet designed to protect against fires in sealed areas, which often create extreme pressures." + flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR + see_face = 0.0 + permeability_coefficient = 0.01 + heat_transfer_coefficient = 0.01 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES + icon_state = "hazmat_firered" + item_state = "hazhat_firered" + /obj/item/clothing/head/radiation diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index edef1ab43a4..7a386ef417f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -183,7 +183,7 @@ if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath + var/datum/gas_mixture/breath // HACK NEED CHANGING LATER if(src.health < 0) src.losebreath++ diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 23e9a6ca067..b35b9735434 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -158,7 +158,7 @@ if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath + var/datum/gas_mixture/breath // HACK NEED CHANGING LATER if(health < 0) losebreath++ diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index b30bc302ceb..f091d8bf000 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -359,7 +359,7 @@ if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath + var/datum/gas_mixture/breath // HACK NEED CHANGING LATER if(isbreathing && health < config.health_threshold_crit) @@ -420,6 +420,14 @@ smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? break // If they breathe in the nasty stuff once, no need to continue checking + if(istype(wear_mask, /obj/item/clothing/mask/gas)) + var/datum/gas_mixture/filtered = new() + filtered.toxins = breath.toxins + filtered.trace_gases = breath.trace_gases.Copy() + breath.toxins = 0 + breath.trace_gases = list() + loc.assume_air(filtered) + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc @@ -469,7 +477,7 @@ var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.005 + var/safe_toxins_max = 0.0025 var/SA_para_min = 1 var/SA_sleep_min = 5 var/oxygen_used = 0 @@ -649,7 +657,7 @@ //Account for massive pressure differences. Done by Polymorph var/pressure = environment.return_pressure() - if(!istype(wear_suit, /obj/item/clothing/suit/space)) + if(!istype(wear_suit, /obj/item/clothing/suit/space) && !istype(wear_suit, /obj/item/clothing/suit/fire)) /*if(pressure < 20) if(prob(25)) src << "You feel the splittle on your lips and the fluid on your eyes boiling away, the capillteries in your skin breaking." @@ -658,6 +666,9 @@ if(pressure > HAZARD_HIGH_PRESSURE) adjustBruteLoss(min((10+(round(pressure/(HIGH_STEP_PRESSURE)-2)*5)),MAX_PRESSURE_DAMAGE)) + if(environment.toxins > MOLES_PLASMA_VISIBLE) + pl_effects() + return //TODO: DEFERRED adjust_body_temperature(current, loc_temp, boost) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 70489c1117a..e4baace6694 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -187,7 +187,7 @@ if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath + var/datum/gas_mixture/breath if(losebreath>0) //Suffocating so do not take a breath src.losebreath-- diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index aa829b0930e..c1067a0523a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -40,14 +40,8 @@ return 0 var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part var/divided_damage = (burn_amount)/(H.organs.len) - var/extradam = 0 //added to when organ is at max dam for(var/name in H.organs) - var/datum/organ/external/affecting = H.organs[name] - if(!affecting) continue - if(affecting.take_damage(0, divided_damage+extradam, 0, used_weapon)) - extradam = 0 - else - extradam += divided_damage + apply_damage(divided_damage, BURN, name, 0, 0, "Skin Burns") H.UpdateDamageIcon() H.updatehealth() return 1 diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm index 4070542e6c7..01155cbdbb8 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -104,7 +104,7 @@ burn *= 0.66 //~2/3 damage for ROBOLIMBS if(owner && !robot) - owner.pain(display_name, (brute+burn)*3, 1) + owner.pain(display_name, (brute+burn)*3, 1, burn > brute) if(sharp) var/nux = brute * rand(10,15) if(brute_dam >= max_damage) diff --git a/code/modules/mob/organ/pain.dm b/code/modules/mob/organ/pain.dm index 21825ce8eaa..3213b26ffae 100644 --- a/code/modules/mob/organ/pain.dm +++ b/code/modules/mob/organ/pain.dm @@ -7,7 +7,7 @@ mob/var/next_pain_time = 0 // partname is the name of a body part // amount is a num from 1 to 100 -mob/proc/pain(var/partname, var/amount, var/force) +mob/proc/pain(var/partname, var/amount, var/force, var/burning = 0) if(stat >= 2) return if(world.time < next_pain_time && !force) return @@ -17,15 +17,26 @@ mob/proc/pain(var/partname, var/amount, var/force) if(amount > 50 && prob(amount / 5)) src:drop_item() var/msg - switch(amount) - if(1 to 10) - msg = "Your [partname] hurts a bit." - if(11 to 90) - flash_weak_pain() - msg = "Ouch! Your [partname] hurts." - if(91 to 10000) - flash_pain() - msg = "OH GOD! Your [partname] is hurting terribly!" + if(burning) + switch(amount) + if(1 to 10) + msg = "\red Your [partname] burns." + if(11 to 90) + flash_weak_pain() + msg = "\red Your [partname] burns badly!" + if(91 to 10000) + flash_pain() + msg = "\red OH GOD! Your [partname] is on fire!" + else + switch(amount) + if(1 to 10) + msg = "Your [partname] hurts." + if(11 to 90) + flash_weak_pain() + msg = "Your [partname] hurts badly." + if(91 to 10000) + flash_pain() + msg = "OH GOD! Your [partname] is hurting terribly!" if(msg && (msg != last_pain_message || prob(10))) last_pain_message = msg src << msg diff --git a/code/setup.dm b/code/setup.dm index 05e8e837728..b701acb6118 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -14,6 +14,16 @@ #define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible +#define SPECIFIC_HEAT_TOXIN 200 +#define SPECIFIC_HEAT_AIR 20 +#define SPECIFIC_HEAT_CDO 30 +#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \ + (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN) + +#define MINIMUM_HEAT_CAPACITY 0.0003 +#define QUANTIZE(variable) (round(variable,0.0001)) +#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer + #define BREATH_VOLUME 0.5 //liters in a normal breath #define BREATH_PERCENTAGE BREATH_VOLUME/CELL_VOLUME //Amount of air to take a from a tile diff --git a/icons/effects/contamination.dmi b/icons/effects/contamination.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e0f34e26469b6984f5bef6322eccdc843d4df04a GIT binary patch literal 380 zcmV-?0fYXDP)+yN9gwFr~00DGTPE!Ct=GbNc003lqR9JLGWpiV4X>fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3KAHiHkEOv#1!zH00t;D@x2wg|L+sT>V_YCISGOw-^h3tARrR005{-L_t(2k-d=J z5yBu0fSV1Hhyx_h0c=Up8SbCYlxoCMjW*?ysN@jI-TLMhh3nIIXH^8%^Flzi9npBh a-^L3-FBZ4AUm1Y_0000)QegMH^0RNvm?V10lUAD3_%+!D7($doZ|No!hHK+gp00DGTPE!Ct=GbNc z004@SQ!RhuEYD0S$pCVUjkq{7QZv&tN+6u#lEji!AX6znucWjnO^J&$C9|j)C}7CN znO2mTn+jqZ14UDF5-WjBBOM?_*QHxfT2zpeN~-4KocQ#_Vj^`ZE4cc(fPDr4x!yi* zO@EZL0008_Nkl;441_6}l6-Pr1)P6W;1X1VFUgswoLz!Sa0$Mq%O{9G zECo5%Wad50nC24T?(!!h5r_Hb-iVq2jpO#x&Iw0`yRl3l&Qbs^m6Ax%>c~K$kwpzT zM3Ch;vyuU9sw|B}e~6iyz`~}_p&-yB65&QL)j%>MFm*ABhWEu}T0oY@m7m% zxS@Zf9_)y816hgE5p%+Uh>LzTRL7XP#kprRQgt7;Xk=F2i=_{Ds6wgG$c#xYmL8&1 zWy)^2)NSJrkVB~~(ulT3t99ZDD(C5P75CgZbjBhtkUN*>Gb&j4d@p_v`(kLi9YsKB){0_|9X5^$g@Kbf1fBu80 z3($IQZ~dI`WVsv51mY|O&{HXi1ig+d6k1u-kw*ksjw>r!z_!ZLMD$6_)CCqceGPvF zfgX_vKY^(Zk{N-in@u#lFE-NxnuOG`7Tt)CT5Q7&CG}uOq&vt;l#ZAa9z=ZftD!ok z%q`A6qlv2futg)Y@?I=`xI-06g;r*4a4W^e}FtnWsy#_HCn9`Pf$5e zpR2g%uc0#)d4c@3JfBGs!^6f3QQAiVMt z>jDu|7&?M|L_R9n6>qwNVG^Qcq;M_w_E^NfNLpcJ(}!Z> z#fjJ3MUqZI*;y~{{^oaJ-Zm>I)e#)rY7iqz0<>rqL4iHxKKl3*mo-bGroT=*>zHb+FcE7+zlCz7iDtn zd1sGJ0Mr{Ee)XbvU3-pybeW#}8btfj)K`{yul`?&#lmC91Wl0Rv|7&a7Z=u9XoDtc QNB{r;07*qoM6N<$g4O%Zy8r+H delta 680 zcmV;Z0$2Tj2*?FfiBL{Q4GJ0x0000DNk~Le0002M0000W1Oos70JgSjwg3PC6;Mo6 zMZmzo?V10lUAD3_%+!D7($doZ|NrXizu*7>00DGTPE!Ct=GbNc003=~UoC$sE=ep& z1+ta$^GZsK(v-M3Q!!Z}Oz0-Los;rlVQs+-k{z@G4ID6)WYED7 zW_7l(xvw<3U;!2CuFPpT*`}UbLnKCw-(j!VXBZyf2ZE=Tte%*XUXvy==L7ULiGb=nyc)k^+ zjn|3TAFM$gXly#RqB=p9lyOvScg^PPWA3_+J5La7lxt23#a14g4&+T?>;PX0-`qF_ zbJbPYc+H0%uGH~uA!2{JI$kj7x2vrsBIZbi=gVN;alQ4Ayck z{werxJ+0Ve&y*d?o99QAHT%Ta*hq)PRTz<&S*x3B*=w?v446!*1jo;6$K3{!ZSo%p zACkjLk4;8xIhQYP8e>NweH^RhvdqOTIR>@Y?5R8u3fjL)JdmYH$NUHIHXS42 diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi index 4c78f8f2e06e3bd3b9572bd8e2ce3a043822486d..5ed60b7adcd44165592ff49f779c07e24275d3fd 100644 GIT binary patch delta 937 zcmV;a16KUw1&9b=iBL{Q4GJ0x0000DNk~Le0001B0001B1Oos701&on3jhEBAy7)QegMH^0RNvm?V10lUAD3_%+!D7($doZ|No!hHK+gp00DGTPE!Ct=GbNc z005GaQ*M9PrCU&1RFIQOs^;RH)YO8^y!80Q^whi(B6TY(xca$(eFy;De?fYC8zsU3 z00Q?(L_t(og~e3MaqBP)gejSld~#j|oK)ZvRDv(bnWvmxf=X}+zNX73h(9a^Io4$6 zJays=jn14_uM&j#v(6}JD2A(Dq?s!1-ghzlG%|ewD!x%GfYCX zj1;cr-X4nhJ4q{yO!`oayg2cCn@G|qC_8^^#ogch4$RwTu!q!wn_%U`M1o$V!xsm=hjEeDtfKI;PAm&OLvl ziK_dsMI*EFUMzjMLlsJeR%UE+vGfq7DqD8Lr*0pAfILcNkxsNVTCEdLP&rSZtGMT{ zp)(bEf&8^RpGgtJ%PG)Jv?BEV^?Br$Xy&1>QV7T%LrEX?qUaPWt%4xD@)GL;5mOjC zf_+3jD%llpzkDQaDvI-Mag@wXRH1*hUrt_O5~5|Ka4q-tSj4|bT47|mKb!NokjPb3ibq$4KG^Ev0C8cmv)|t=?l-J zwV9{!E&A%3Pqe+$!-}GiJodOyLt)r=D*rRSe=gZ|QiIxE4Q$*E8IKoba_m8QXOB$) z)Egdt^`duOdyao}nV$O^MElazSC)CN{$Gj3!ehq-O_1ZXTF&qn7uH#5gC=Q600000 LNkvXXu0mjf%_+KB delta 642 zcmV-|0)7362;&7)iBL{Q4GJ0x0000DNk~Le0002M0000W1Oos70JgSjwg3PC6;Mo6 zMZmzo?V10lUAD3_%+!D7($doZ|NrXizu*7>00DGTPE!Ct=GbNc004-QUv7WsD$Yqw zEy&DEk55cb%_|{Nx3Yq(p9|QL0QPV&3VT*E0RR92=t)FDR7i=PR@;??APkLwemh%1 z&Q@Rvlwb+|O#dyc5Re3d;@)!xdF19nAPfM*bpG%IU})dtD&Q~}nLf}DQ+CK?0@Kxpj4&i^a#?J6rNZ#vr zxY$9P(9<(3JWP1L6{L;ViP#^kK^z}A9Poe3BoF8fgzI@lu+2m&U5Y0K<&&gx4+bK+VdJ|e=DCbZZJws$ zyEAmdwA@NIrbrCdaxVTU_-{R}*ksR?9m<>MN0c@D#MszKhs9MGk(gPln`+r>vX%^( zsRYN*YRBCMl5O%I2_KTfN{>xOZ8?`OZW?1pAblLG<+9AhEjcCzwb$&aJP-=nze+ri crAf#92kBjDu35&!@I07*qoM6N<$f;(+2Q2+n{ From 56a2c1d77a9f340efb4e2524ac21ebd3732b102f Mon Sep 17 00:00:00 2001 From: Aryn Date: Sat, 26 May 2012 22:00:38 -0600 Subject: [PATCH 02/23] Added comments and updated the changelog. --- code/ZAS/Connection.dm | 5 + code/ZAS/Creation.dm | 17 ++++ code/ZAS/Definition.dm | 2 +- code/ZAS/Fire.dm | 207 ++++++++++++++--------------------------- code/ZAS/Functions.dm | 94 ++++++++++++------- code/ZAS/Plasma.dm | 98 +++++-------------- code/ZAS/Processing.dm | 43 +++++++-- html/changelog.html | 11 +++ 8 files changed, 222 insertions(+), 255 deletions(-) diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm index 022a714222e..af113cc514f 100644 --- a/code/ZAS/Connection.dm +++ b/code/ZAS/Connection.dm @@ -1,3 +1,8 @@ +/* +This object is contained within zone/var/connections. It's generated whenever two turfs from different zones are linked. +Indirect connections will not merge the two zones after they reach equilibrium. +*/ + connection var turf //The turfs involved in the connection. diff --git a/code/ZAS/Creation.dm b/code/ZAS/Creation.dm index 1dba1d296ba..10508e0aa2f 100644 --- a/code/ZAS/Creation.dm +++ b/code/ZAS/Creation.dm @@ -1,13 +1,19 @@ zone New(turf/start) + //Get the turfs that are part of the zone using a floodfill method if(istype(start,/list)) contents = start else contents = FloodFill(start) + + //Change all the zone vars of the turfs, check for space to be added to space_tiles. for(var/turf/T in contents) T.zone = src if(istype(T,/turf/space)) AddSpace(T) + + //Generate the gas_mixture for use in this zone by using the average of the gases + //defined at startup. air = new var/members = contents.len for(var/turf/simulated/T in contents) @@ -18,8 +24,12 @@ zone air.temperature += T.temperature / members air.group_multiplier = contents.len air.update_values() + + //Add this zone to the global list. zones += src + Del() + //Ensuring the zone list doesn't get clogged with null values. zones -= src . = ..() @@ -31,17 +41,23 @@ proc/FloodFill(turf/start) while(open.len) for(var/turf/T in open) + //Stop if there's a door, even if it's open. These are handled by indirect connection. if(!T.HasDoor()) + for(var/d in cardinal) var/turf/O = get_step(T,d) + //Simple pass check. if(O.ZCanPass(T) && !(O in open) && !(O in closed)) open += O + open -= T closed += T return closed turf/proc/ZCanPass(turf/T) + //Fairly standard pass checks for turfs, objects and directional windows. Also stops at the edge of space. + if(istype(T,/turf/space)) return 0 else if(T.blocks_air||blocks_air) @@ -52,6 +68,7 @@ turf/proc/ZCanPass(turf/T) continue if(!obstacle.CanPass(0, T, 0, 1)) return 0 + for(var/obj/obstacle in T) if(istype(obstacle,/obj/machinery/door) && !istype(obstacle,/obj/machinery/door/window)) continue diff --git a/code/ZAS/Definition.dm b/code/ZAS/Definition.dm index b092dc304b7..90e88a6c613 100644 --- a/code/ZAS/Definition.dm +++ b/code/ZAS/Definition.dm @@ -5,7 +5,7 @@ var/list/zones = list() zone var dbg_output = 0 //Enables debug output. - rebuild = 0 //If 1, zone will be rebuilt on next process. + rebuild = 0 //If 1, zone will be rebuilt on next process. Not sure if used. datum/gas_mixture/air //The air contents of the zone. list/contents //All the tiles that are contained in this zone. list/connections // /connection objects which refer to connections with other zones, e.g. through a door. diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 24f98ccb02f..0159bfa0566 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -1,11 +1,14 @@ vs_control/var/IgnitionLevel = 10 //Moles of oxygen+plasma - co2 needed to burn. -#define OXYGEN +//Some legacy definitions so fires can be started. atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return null + turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) + + turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) if(fire_protection > world.time-300) return var/datum/gas_mixture/air_contents = return_air(1) @@ -40,109 +43,6 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) return igniting -obj/effect/hotspot - //Icon for fire on turfs, also helps for nurturing small fires until they are full tile - - anchored = 1 - - mouse_opacity = 0 - - //luminosity = 3 - - icon = 'fire.dmi' - icon_state = "1" - - layer = TURF_LAYER - - var - volume = 125 - temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - - just_spawned = 1 - - bypassing = 0 - -obj/effect/hotspot/proc/perform_exposure() - var/turf/simulated/floor/location = loc - if(!istype(location)) - return 0 - - if(volume > CELL_VOLUME*0.95) - bypassing = 1 - else bypassing = 0 - - if(bypassing) - if(!just_spawned) - volume = location.air.fuel_burnt*FIRE_GROWTH_RATE - temperature = location.air.temperature - else - var/datum/gas_mixture/affected = location.air.remove_ratio(volume/location.air.volume) - - affected.temperature = temperature - - affected.react() - - temperature = affected.temperature - volume = affected.fuel_burnt*FIRE_GROWTH_RATE - - location.assume_air(affected) - - for(var/atom/item in loc) - item.temperature_expose(null, temperature, volume) - -obj/effect/hotspot/process(turf/simulated/list/possible_spread) - if(just_spawned) - just_spawned = 0 - return 0 - - var/turf/simulated/floor/location = loc - if(!istype(location)) - del(src) - - if((temperature < FIRE_MINIMUM_TEMPERATURE_TO_EXIST) || (volume <= 1)) - del(src) - - if(location.air.toxins < 0.5 || location.air.oxygen < 0.5) - del(src) - - - perform_exposure() - - if(location.wet) location.wet = 0 - - if(bypassing) - icon_state = "3" - location.burn_tile() - - //Possible spread due to radiated heat - if(location.air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_SPREAD) - var/radiated_temperature = location.air.temperature*FIRE_SPREAD_RADIOSITY_SCALE - - for(var/turf/simulated/possible_target in possible_spread) - if(!locate(/obj/effect/hotspot) in possible_target) - possible_target.hotspot_expose(radiated_temperature, CELL_VOLUME/4) - - else - if(volume > CELL_VOLUME*0.4) - icon_state = "2" - else - icon_state = "1" - - return 1 - -obj/effect/hotspot/New() - ..() - dir = pick(cardinal) - sd_SetLuminosity(3) - -obj/effect/hotspot/Del() - src.sd_SetLuminosity(0) - loc = null - ..() - -var - fire_ratio_1 = 0.05 - obj fire //Icon for fire on turfs, also helps for nurturing small fires until they are full tile @@ -160,73 +60,82 @@ obj var volume = CELL_VOLUME temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - firelevel = 10000 + firelevel = 10000 //Calculated by gas_mixture.calculate_firelevel() archived_firelevel = 0 process() + if(firelevel > vsc.IgnitionLevel) + var/turf/simulated/floor/S = loc - if(!S.zone) del src - //src.temperature += (src.firelevel/FireTempDivider+FireOffset - src.temperature) / FireRate + if(!S.zone) del src //Cannot exist where zones are broken. + if(istype(S,/turf/simulated/floor)) var datum/gas_mixture/air_contents = S.return_air() + //Get whatever trace fuels are in the area datum/gas/volatile_fuel/fuel = locate(/datum/gas/volatile_fuel/) in air_contents.trace_gases + //Also get liquid fuels on the ground. obj/liquid_fuel/liquid = locate() in S firelevel = air_contents.calculate_firelevel(liquid) + //Ensure that there is an appropriate amount of fuel and O2 here. if(firelevel > 25 && (air_contents.toxins || fuel || liquid)) + for(var/direction in cardinal) if(S.air_check_directions&direction) //Grab all valid bordering tiles + var/turf/simulated/enemy_tile = get_step(S, direction) + if(istype(enemy_tile)) + //If extinguisher mist passed over the turf it's trying to spread to, don't spread and + //reduce firelevel. if(enemy_tile.fire_protection > world.time-30) firelevel -= 150 continue + + //Spread the fire. if(!(locate(/obj/fire) in enemy_tile)) if( prob( firelevel/2.5 ) ) new/obj/fire(enemy_tile,firelevel) - // else - // world << "Spread Probability: [firelevel/(vsc.IgnitionLevel*0.1)]%." - // else - // world << "There's a fire there bitch." - // else - // world << "[enemy_tile] cannot be spread to." - //else - // world << "Not enough firelevel to spread: [firelevel]/[vsc.IgnitionLevel*1.5]" - var/datum/gas_mixture/flow = air_contents.remove_ratio(0.5) - //n = PV/RT, taking the volume of a single tile from the gas. + var/datum/gas_mixture/flow = air_contents.remove_ratio(0.5) //Take half the air from the room I guess. if(flow) + //Ensure adequate oxygen and fuel. if(flow.oxygen > 0.3 && (flow.toxins || fuel || liquid)) + //Change icon depending on the fuel, and thus temperature. icon_state = "1" if(firelevel > 25) icon_state = "2" if(firelevel > 100) icon_state = "3" + + //Ensure flow temperature is higher than minimum fire temperatures. flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature) + + //Burn the gas mixture. flow.zburn(liquid) else + del src - S.assume_air(flow) + S.assume_air(flow) //Then put it back where you found it. + else - //world << "No air at all." del src else del src else - //world << "Insufficient fire level for ignition: [firelevel]/[IgnitionLevel]" del src for(var/mob/living/carbon/human/M in loc) - M.FireBurn(min(max(0.1,firelevel / 20),10)) + M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans! New(newLoc,fl) @@ -235,7 +144,7 @@ obj sd_SetLuminosity(3) firelevel = fl for(var/mob/living/carbon/human/M in loc) - M.FireBurn(min(max(0.1,firelevel / 20),10)) + M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans! Del() if (istype(loc, /turf/simulated)) @@ -246,23 +155,29 @@ obj ..() obj/liquid_fuel + //Liquid fuel is used for things that used to rely on volatile fuels or plasma being contained to a couple tiles. icon = 'icons/effects/effects.dmi' icon_state = "fuel" layer = TURF_LAYER+0.2 anchored = 1 - var/amount = 1 + var/amount = 1 //Basically moles. New(newLoc,amt=1) src.amount = amt + + //Be absorbed by any other liquid fuel in the tile. for(var/obj/liquid_fuel/other in newLoc) if(other != src) other.amount += src.amount spawn other.Spread() del src return + Spread() . = ..() + proc/Spread() + //Allows liquid fuels to sometimes flow into other tiles. if(amount < 0.5) return var/turf/simulated/S = loc if(!istype(S)) return @@ -277,22 +192,23 @@ obj/liquid_fuel icon_state = "mustard" anchored = 0 New(newLoc, amt = 1, d = 0) - dir = d + dir = d //Setting this direction means you won't get torched by your own flamethrower. . = ..() Spread() + //The spread for flamethrower fuel is much more precise, to create a wide fire pattern. if(amount < 0.1) return var/turf/simulated/S = loc if(!istype(S)) return + for(var/d in list(turn(dir,90),turn(dir,-90))) if(S.air_check_directions & d) var/turf/simulated/O = get_step(S,d) new/obj/liquid_fuel/flamethrower_fuel(O,amount*0.25,d) - O.hotspot_expose((T20C*2) + 380,500) + O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately. + amount *= 0.5 -vs_control/var/switch_fire = 1 - -turf/simulated/var/fire_protection = 0 +turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. turf/proc/apply_fire_protection() turf/simulated/apply_fire_protection() @@ -300,50 +216,72 @@ turf/simulated/apply_fire_protection() datum/gas_mixture/proc zburn(obj/liquid_fuel/liquid) + //This proc is similar to fire(), but uses a simple logarithm to calculate temp, and is thus more stable with ZAS. if(temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) var total_fuel = toxins - fuel_sources = 0 + fuel_sources = 0 //We'll divide by this later so that fuel is consumed evenly. datum/gas/volatile_fuel/fuel = locate() in trace_gases + if(fuel) + //Volatile Fuel total_fuel += fuel.moles fuel_sources++ + if(liquid) + //Liquid Fuel if(liquid.amount <= 0) del liquid else total_fuel += liquid.amount fuel_sources++ + + //Toxins if(toxins > 0.3) fuel_sources++ - if(!fuel_sources) return 0 - if(oxygen > 0.3 && total_fuel) + if(!fuel_sources) return 0 //If there's no fuel, there's no burn. Can't divide by zero anyway. + + if(oxygen > 0.3) + + //Calculate the firelevel. var/firelevel = calculate_firelevel(liquid) - //f(x) = 1000ln(0.01x + 1.45) + + //Reaches a maximum practical temperature of around 2750. + temperature = 1000*log(0.016*firelevel + 1.45) + + //Consume some gas. var/consumed_gas = min(oxygen,0.002*firelevel,total_fuel) / fuel_sources + oxygen -= consumed_gas + toxins = max(0,toxins-consumed_gas) + if(fuel) fuel.moles -= consumed_gas if(fuel.moles <= 0) del fuel + if(liquid) liquid.amount -= consumed_gas if(liquid.amount <= 0) del liquid + update_values() return consumed_gas*fuel_sources return 0 + calculate_firelevel(obj/liquid_fuel/liquid) + //Calculates the firelevel based on one equation instead of having to do this multiple times in different areas. var datum/gas/volatile_fuel/fuel = locate() in trace_gases fuel_level = 0 liquid_level = 0 + if(fuel) fuel_level = fuel.moles if(liquid) liquid_level = liquid.amount return oxygen + toxins + liquid_level*15 + fuel_level*5 /mob/living/carbon/human/proc/FireBurn(mx as num) - //NO! NOT INTO THE PIT! IT BURRRRRNS! + //Burns mobs due to fire. Respects heat transfer coefficients on various body parts. var head_exposure = 1 @@ -352,6 +290,7 @@ datum/gas_mixture/proc legs_exposure = 1 arms_exposure = 1 + //Get heat transfer coefficients for clothing. for(var/obj/item/clothing/C in src) if(l_hand == C || r_hand == C) continue if(C.body_parts_covered & HEAD) @@ -365,8 +304,6 @@ datum/gas_mixture/proc if(C.body_parts_covered & ARMS) arms_exposure *= C.heat_transfer_coefficient - mx *= 1 - //Always check these damage procs first if fire damage isn't working. They're probably what's wrong. apply_damage(2.5*mx*head_exposure, BURN, "head", 0, 0, "Fire") diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm index 548289ade07..b9d88a84f22 100644 --- a/code/ZAS/Functions.dm +++ b/code/ZAS/Functions.dm @@ -1,43 +1,34 @@ zone proc AddTurf(turf/T) + //Adds the turf to contents, increases the size of the zone, and sets the zone var. if(T in contents) return contents += T air.group_multiplier++ T.zone = src RemoveTurf(turf/T) + //Same, but in reverse. if(!(T in contents)) return contents -= T air.group_multiplier-- T.zone = null - DivideAir(ratio) - ratio = min(1,max(0,ratio)) - air.oxygen *= ratio - air.oxygen = QUANTIZE(air.oxygen) - air.nitrogen *= ratio - air.nitrogen = QUANTIZE(air.nitrogen) - air.toxins *= ratio - air.toxins = QUANTIZE(air.toxins) - air.carbon_dioxide *= ratio - air.carbon_dioxide = QUANTIZE(air.carbon_dioxide) - if(air.trace_gases.len) - for(var/datum/gas/trace_gas in air.trace_gases) - trace_gas.moles *= ratio - trace_gas.moles = QUANTIZE(trace_gas.moles) - air.temperature = air.temperature*ratio + TCMB*(1-ratio) - air.temperature = QUANTIZE(air.temperature) - AddSpace(turf/space/S) + //Adds a space tile to the list, and creates the list if null. if(istype(S,/turf/space)) if(!space_tiles) space_tiles = list() space_tiles += S + RemoveSpace(turf/space/S) + //Removes a space tile from the list, and deletes the list if length is 0. if(space_tiles) space_tiles -= S if(!space_tiles.len) space_tiles = null turf/proc/HasDoor(turf/O) + //Checks for the presence of doors, used for zone spreading and connection. + //A positive numerical argument checks only for closed doors. + //Another turf as an argument checks for windoors between here and there. for(var/obj/machinery/door/D in src) if(isnum(O) && O) if(!D.density) continue @@ -48,6 +39,7 @@ turf/proc/HasDoor(turf/O) return 1 turf/proc/find_zone() + //Allows newly generated turfs to join up with a nearby zone. if(world.time < 10) return for(var/d in cardinal) var/turf/T = get_step(src,d) @@ -59,6 +51,7 @@ turf/proc/find_zone() ZConnect(src,T) turf/proc/check_connections() + //Checks for new connections that can be made. for(var/d in cardinal) var/turf/T = get_step(src,d) if(!T || !T.zone || !T.CanPass(0,src,0,0)) continue @@ -66,6 +59,7 @@ turf/proc/check_connections() ZConnect(src,T) turf/proc/check_for_space() + //Checks for space around the turf. for(var/d in cardinal) var/turf/T = get_step(src,d) if(istype(T,/turf/space) && T.CanPass(0,src,0,0)) @@ -73,97 +67,125 @@ turf/proc/check_for_space() proc ZMerge(zone/A,zone/B) - //world << "Merge occured." + //Merges two zones so that they are one. var a_size = A.air.group_multiplier b_size = B.air.group_multiplier c_size = a_size + b_size new_contents = A.contents + B.contents + //Set air multipliers to one so air represents gas per tile. A.air.group_multiplier = 1 B.air.group_multiplier = 1 + //Remove some air proportional to the size of this zone. A.air.remove_ratio(a_size/c_size) B.air.remove_ratio(b_size/c_size) + + //Merge the gases and set the multiplier to the sum of the old ones. A.air.merge(B.air) A.air.group_multiplier = c_size + //Check for connections to merge into the new zone. for(var/connection/C in B.connections) if((C.A in new_contents) && (C.B in new_contents)) del C continue if(!A.connections) A.connections = list() A.connections += C + + //Add space tiles. A.space_tiles += B.space_tiles + + //Add contents. A.contents = new_contents + + //Set all the zone vars. for(var/turf/T in B.contents) T.zone = A + del B ZConnect(turf/A,turf/B) + //Connects two zones by forming a connection object representing turfs A and B. + + //Make sure that if it's space, it gets added to space_tiles instead. if(istype(B,/turf/space)) if(A.zone) A.zone.AddSpace(B) - //world << "Space added." return if(istype(A,/turf/space)) if(B.zone) B.zone.AddSpace(A) - //world << "Space added." return + + //Make some preliminary checks to see if the connection is valid. if(!A.zone || !B.zone) return if(A.zone == B.zone) return if(!A.CanPass(0,B,0,0)) return + + //Ensure the connection isn't already made. for(var/connection/C in A.zone.connections) if((C.A == A && C.B == B) || (C.A == B && C.B == A)) return - var/connection/C = new(A,B) - if(A.HasDoor(B) || B.HasDoor(A)) C.indirect = 1 - //world << "Connection Formed: [A] --> [B] [(C.indirect?"Indirect":"Direct")]" - //A.overlays += 'zone_connection_A.dmi' - //B.overlays += 'zone_connection_B.dmi' - //spawn(10) - // A.overlays -= 'zone_connection_A.dmi' - // B.overlays -= 'zone_connection_B.dmi' + var/connection/C = new(A,B) + + //Ensure zones separated by doors do not merge. + if(A.HasDoor(B) || B.HasDoor(A)) C.indirect = 1 ZDisconnect(turf/A,turf/B) + //Removes a zone connection. Can split zones in the case of a permanent barrier. + + //If one of them doesn't have a zone, it might be space, so check for that. if(A.zone && B.zone) + //If the two zones are different, just remove a connection. if(A.zone != B.zone) for(var/connection/C in A.zone.connections) if((C.A == A && C.B == B) || (C.A == B && C.B == A)) - //world << "Connection Dissolved: [A] -/-> [B] [(C.indirect?"Indirect":"Direct")]" - /*A.overlays += 'zone_connection_A.dmi' - B.overlays += 'zone_connection_B.dmi' - spawn(10) - A.overlays -= 'zone_connection_A.dmi' - B.overlays -= 'zone_connection_B.dmi'*/ del C + //If they're the same, split the zone at this line. else + //Preliminary checks to prevent stupidity. if(A == B) return if(A.CanPass(0,B,0,0)) return if(A.HasDoor(B) || B.HasDoor(A)) return + + //Do a test fill. If turf B is still in the floodfill, then the zone isn't really split. var/zone/oldzone = A.zone var/list/test = FloodFill(A) if(B in test) return + else - var/zone/Z = new(test,oldzone.air) + var/zone/Z = new(test,oldzone.air) //Create a new zone based on the old air and the test fill. + + //Add connections from the old zone. for(var/connection/C in oldzone.connections) if((A in Z.contents) || (B in Z.contents)) if(!Z.connections) Z.connections = list() Z.connections += C + + //Check for space. for(var/turf/T in test) T.check_for_space() + + //Make a new, identical air mixture for the other zone. var/datum/gas_mixture/Y_Air = new Y_Air.copy_from(oldzone.air) - var/zone/Y = new(B,Y_Air) + + var/zone/Y = new(B,Y_Air) //Make a new zone starting at B and using Y_Air. + + //Add relevant connections from old zone. for(var/connection/C in oldzone.connections) if((A in Y.contents) || (B in Y.contents)) if(!Y.connections) Y.connections = list() Y.connections += C + + //Add the remaining space tiles to this zone. for(var/turf/space/T in oldzone.space_tiles) if(!(T in Z.space_tiles)) Y.AddSpace(T) + oldzone.air = null del oldzone else diff --git a/code/ZAS/Plasma.dm b/code/ZAS/Plasma.dm index ab7f452fa9e..858799a2729 100644 --- a/code/ZAS/Plasma.dm +++ b/code/ZAS/Plasma.dm @@ -1,94 +1,35 @@ pl_control/var PLASMA_DMG = 3 - PLASMA_DMG_NAME = "Plasma Damage Multiplier" - PLASMA_DMG_DESC = "Multiplier on how much damage inhaling plasma can do." CLOTH_CONTAMINATION = 0 //If this is on, plasma does damage by getting into cloth. - CLOTH_CONTAMINATION_NAME = "Plasma - Cloth Contamination" - CLOTH_CONTAMINATION_RANDOM = 60 - CLOTH_CONTAMINATION_METHOD = "Toggle" - CLOTH_CONTAMINATION_DESC = "If set to nonzero, plasma will contaminate cloth items (uniforms, backpacks, etc.)\ - and cause a small amount of damage over time to anyone carrying or wearing them. Contamination can be washed off in the washer." - ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or - //decontaminated. - ALL_ITEM_CONTAMINATION_NAME = "Plasma - Full Contamination" - ALL_ITEM_CONTAMINATION_RANDOM = 10 - ALL_ITEM_CONTAMINATION_METHOD = "Toggle" - ALL_ITEM_CONTAMINATION_DESC = "Like Cloth Contamination, but all item types are susceptible." - - PLASMAGUARD_ONLY = 0 - PLASMAGUARD_ONLY_NAME = "Plasma - Biosuits/Spacesuits Only" - PLASMAGUARD_ONLY_RANDOM = 20 - PLASMAGUARD_ONLY_METHOD = "Toggle" - PLASMAGUARD_ONLY_DESC = "If on, any suits that are not biosuits or space suits will not protect against contamination." - - //CANISTER_CORROSION = 0 //If this is on, plasma must be stored in orange tanks and canisters, - //CANISTER_CORROSION_RANDOM = 20 //or it will corrode the tank. - //CANISTER_CORROSION_METHOD = "Toggle" + PLASMAGUARD_ONLY = 0 //If this is on, only biosuits and spacesuits protect against contamination and ill effects. GENETIC_CORRUPTION = 0 //Chance of genetic corruption as well as toxic damage, X in 10,000. - GENETIC_CORRUPTION_NAME = "Plasma - Genetic Corruption" - GENETIC_CORRUPTION_RANDOM = "PROB10/3d6" - GENETIC_CORRUPTION_METHOD = "Numeric" - GENETIC_CORRUPTION_DESC = "When set to a probability in 1000, any humans in plasma will have this chance to develop a random mutation." SKIN_BURNS = 1 //Plasma has an effect similar to mustard gas on the un-suited. - SKIN_BURNS_NAME = "Plasma - Skin Burns" - SKIN_BURNS_RANDOM = 10 - SKIN_BURNS_METHOD = "Toggle" - SKIN_BURNS_DESC = "When toggled, humans with exposed skin will suffer burns (similar to mustard gas) in plasma." - - //PLASMA_INJECTS_TOXINS = 0 //Plasma damage injects the toxins chemical to do damage over time. - //PLASMA_INJECTS_TOXINS_RANDOM = 30 - //PLASMA_INJECTS_TOXINS_METHOD = "Toggle" EYE_BURNS = 1 //Plasma burns the eyes of anyone not wearing eye protection. - EYE_BURNS_NAME = "Plasma - Eye Burns" - EYE_BURNS_RANDOM = 30 - EYE_BURNS_METHOD = "Toggle" - EYE_BURNS_DESC = "When toggled, humans without masks that cover the eyes will suffer temporary blurriness and sight loss,\ - and may need glasses to see again if exposed for long durations." - - //N2O_REACTION = 0 //Plasma can react with N2O, making sparks and starting a fire if levels are high. - //N2O_REACTION_RANDOM = 5 - - //PLASMA_COLOR = "onturf" //Plasma can change colors yaaaay! - //PLASMA_COLOR_RANDOM = "PICKonturf,onturf" - - //PLASMA_DMG_OFFSET = 1 - //PLASMA_DMG_OFFSET_RANDOM = "1d5" - //PLASMA_DMG_QUOTIENT = 10 - //PLASMA_DMG_QUOTIENT_RANDOM = "1d10+4" CONTAMINATION_LOSS = 0.01 - CONTAMINATION_LOSS_NAME = "Plasma - Contamination Damage" - CONTAMINATION_LOSS_DESC = "A number representing the damage done per life cycle by contaminated items." - PLASMA_HALLUCINATION = 1 - PLASMA_HALLUCINATION_NAME = "Plasma - Hallucination" - PLASMA_HALLUCINATION_METHOD = "Toggle" - PLASMA_HALLUCINATION_DESC = "If toggled, uses the remnants of the hallucination code to induce visions in those\ - who breathe plasma." + PLASMA_HALLUCINATION = 0 + N2O_HALLUCINATION = 1 - N2O_HALLUCINATION_NAME = "Nitrous Oxide - Hallucination" - N2O_HALLUCINATION_METHOD = "Toggle" - N2O_HALLUCINATION_DESC = "If toggled, uses the remnants of the hallucination code to induce visions in those\ - who breathe N2O." - //CONTAMINATION_LOSS_RANDOM = "5d5" -//Plasma has a chance to be a different color. + obj/var/contaminated = 0 obj/item/proc can_contaminate() + //Clothing and backpacks can be contaminated. if(flags & PLASMAGUARD) return 0 - if((flags & SUITSPACE) && !vsc.plc.PLASMAGUARD_ONLY) return 1 - if(vsc.plc.ALL_ITEM_CONTAMINATION) return 1 + if(flags & SUITSPACE) return 0 else if(istype(src,/obj/item/clothing)) return 1 else if(istype(src,/obj/item/weapon/storage/backpack)) return 1 contaminate() + //Do a contamination overlay? Temporary measure to keep contamination less deadly than it was. if(!contaminated) contaminated = 1 overlays += 'icons/effects/contamination.dmi' @@ -100,6 +41,8 @@ obj/item/proc /mob/proc/contaminate() /mob/living/carbon/human/contaminate() + //See if anything can be contaminated. + if(!pl_suit_protected()) suit_contamination() @@ -109,25 +52,26 @@ obj/item/proc if(istype(back,/obj/item/weapon/storage/backpack)) back.contaminate() - /*if(l_hand) - if(l_hand.can_contaminate()) l_hand.contaminate() - if(r_hand) - if(r_hand.can_contaminate()) r_hand.contaminate() - if(belt) - if(belt.can_contaminate()) belt.contaminate()*/ - /mob/proc/pl_effects() /mob/living/carbon/human/pl_effects() + //Handles all the bad things plasma can do. + + //Contamination if(vsc.plc.CLOTH_CONTAMINATION) contaminate() + + //Anything else requires them to not be dead. if(stat >= 2) return + + //Burn skin if exposed. if(vsc.plc.SKIN_BURNS) if(!pl_head_protected() || !pl_suit_protected()) burn_skin(0.75) if(prob(20)) src << "\red Your skin burns!" updatehealth() + //Burn eyes if exposed. if(vsc.plc.EYE_BURNS) if(!head) if(!wear_mask) @@ -136,13 +80,14 @@ obj/item/proc if(!(wear_mask.flags & MASKCOVERSEYES)) burn_eyes() else - if(!(head.flags & MASKCOVERSEYES)) + if(!(head.flags & HEADCOVERSEYES)) if(!wear_mask) burn_eyes() else if(!(wear_mask.flags & MASKCOVERSEYES)) burn_eyes() + //Genetic Corruption if(vsc.plc.GENETIC_CORRUPTION) if(rand(1,10000) < vsc.plc.GENETIC_CORRUPTION) randmutb(src) @@ -150,6 +95,7 @@ obj/item/proc domutcheck(src,null) /mob/living/carbon/human/proc/burn_eyes() + //The proc that handles eye burning. if(prob(20)) src << "\red Your eyes burn!" eye_stat += 2.5 eye_blurry = min(eye_blurry+1.5,50) @@ -159,6 +105,7 @@ obj/item/proc eye_stat = 0 /mob/living/carbon/human/proc/pl_head_protected() + //Checks if the head is adequately sealed. if(head) if(vsc.plc.PLASMAGUARD_ONLY) if(head.flags & PLASMAGUARD || head.flags & HEADSPACE) return 1 @@ -167,6 +114,7 @@ obj/item/proc return 0 /mob/living/carbon/human/proc/pl_suit_protected() + //Checks if the suit is adequately sealed. if(wear_suit) if(vsc.plc.PLASMAGUARD_ONLY) if(wear_suit.flags & PLASMAGUARD || wear_suit.flags & SUITSPACE) return 1 @@ -175,6 +123,7 @@ obj/item/proc return 0 /mob/living/carbon/human/proc/suit_contamination() + //Runs over the things that can be contaminated and does so. if(w_uniform) w_uniform.contaminate() if(shoes) shoes.contaminate() if(gloves) gloves.contaminate() @@ -182,6 +131,7 @@ obj/item/proc turf/Entered(obj/item/I) . = ..() + //Items that are in plasma, but not on a mob, can still be contaminated. if(istype(I) && vsc.plc.CLOTH_CONTAMINATION) var/datum/gas_mixture/env = return_air(1) if(env.toxins > MOLES_PLASMA_VISIBLE + 1) diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm index 8423ae46af8..d80048cbb13 100644 --- a/code/ZAS/Processing.dm +++ b/code/ZAS/Processing.dm @@ -2,19 +2,26 @@ var/explosion_halt = 0 zone proc/process() + //Does rebuilding stuff. Not sure if used. if(rebuild) + //Deletes zone if empty. if(!contents.len) del src return 0 + + //Choose a random turf and regenerate the zone from it. var turf/sample = pick(contents) list/new_contents = FloodFill(sample) problem = 0 + + //If something isn't carried over, there was a complication. for(var/turf/T in contents) if(!(T in new_contents)) problem = 1 if(problem) + //Build some new zones for stuff that wasn't included. var/list/rebuild_turfs = list() for(var/turf/T in contents - new_contents) contents -= T @@ -26,11 +33,13 @@ zone Z.air.copy_from(air) rebuild = 0 + //Sometimes explosions will cause the air to be deleted for some reason. if(!air) air = new() air.adjustGases(MOLES_O2STANDARD, 0, MOLES_N2STANDARD, 0, list()) world.log << "Air object lost in zone. Regenerating." + //Counting up space. var/total_space = 0 if(space_tiles) @@ -38,44 +47,60 @@ zone if(!istype(T,/turf/space)) space_tiles -= T total_space = length(space_tiles) - if(total_space) // SPAAAAAAAAAACE - //var/old_pressure = air.pressure + //Add checks to ensure that we're not sucking air out of an empty room. + if(total_space && air.total_moles > 0.1 && air.temperature > TCMB+0.5) + //If there is space, air should flow out of the zone. ShareSpace(air,total_space*(vsc.zone_share_percent/100)) - //var/p_diff = old_pressure - air.pressure - //if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) AirflowSpace(src,p_diff) + //React the air here. air.react(null,0) + + //Check the graphic. var/check = air.check_tile_graphic() + //Only run through the individual turfs if there's reason to. if(check || air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + for(var/turf/simulated/S in contents) + //Update overlays. if(check) if(S.HasDoor(1)) S.update_visuals() else S.update_visuals(air) + //Expose stuff to extreme heat. if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) for(var/atom/movable/item in S) item.temperature_expose(air, air.temperature, CELL_VOLUME) S.temperature_expose(air, air.temperature, CELL_VOLUME) + //Archive graphic so we can know if it's different. air.graphic_archived = air.graphic + //Ensure temperature does not reach absolute zero. air.temperature = max(TCMB,air.temperature) + //Handle connections to other zones. if(length(connections)) for(var/connection/C in connections) + //Check if the connection is valid first. C.Cleanup() + //Do merging if conditions are met. Specifically, if there's a non-door connection + //to somewhere with space, the zones are merged regardless of equilibrium, to speed + //up spacing in areas with double-plated windows. if(C && !C.indirect && C.A.zone && C.B.zone) if(C.A.zone.air.compare(C.B.zone.air) || total_space) ZMerge(C.A.zone,C.B.zone) + + //Share some for(var/zone/Z in connected_zones) - //var/p_diff = (air.return_pressure()-Z.air.return_pressure())*connected_zones[Z]*(vsc.zone_share_percent/100) - //if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) Airflow(src,Z,p_diff) - ShareRatio(air,Z.air,connected_zones[Z]*(vsc.zone_share_percent/100)) + //Ensure we're not doing pointless calculations on equilibrium zones. + if(abs(air.total_moles - Z.air.total_moles) > 0.1 || abs(air.temperature - Z.air.temperature) > 0.1) + ShareRatio(air,Z.air,connected_zones[Z]*(vsc.zone_share_percent/100)) proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, ratio) + //Shares a specific ratio of gas between mixtures using simple weighted averages. var size = max(1,A.group_multiplier) share_size = max(1,B.group_multiplier) @@ -138,9 +163,8 @@ proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, ratio) if(A.compare(B)) return 1 else return 0 - /* See? Now that's how it's done. */ - proc/ShareSpace(datum/gas_mixture/A, ratio) + //A modified version of ShareRatio for spacing gas at the same rate as if it were going into a huge airless room. var size = max(1,A.group_multiplier) share_size = 2000 //A huge value because space is huge. @@ -179,6 +203,7 @@ proc/ShareSpace(datum/gas_mixture/A, ratio) zone/proc connected_zones() + //A legacy proc for getting connected zones. . = list() for(var/connection/C in connections) var/zone/Z diff --git a/html/changelog.html b/html/changelog.html index ec5d41f73d2..c099a42b9ee 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,17 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> + +
+

5/26/2012

+

Aryn updated:

+
    +
  • Airflow works on a room-by-room basis rather than on individual tiles. Rooms will depressurize much faster than they did, though not too fast for balance reasons.
  • +
  • Fire now works on a logarithmic scale based on oxygen and fuel content. This is a far more complex tweak under the hood than it is in game.
  • +
  • Plasma now has increased toxicity and can burn exposed skin and eyes. In addition, because of the new air, it fills the room instantaneously. Try not to spill any.
  • +
+
+

26 May 2012

Erthilo updated:

From d51294fa9607c211c6e496c516ea47626cefb3c5 Mon Sep 17 00:00:00 2001 From: Aryn Date: Sat, 26 May 2012 22:02:18 -0600 Subject: [PATCH 03/23] Tweaked HUD icons so that they mesh better with the style of Midnight and Orange. --- icons/mob/screen1_Midnight.dmi | Bin 138830 -> 141675 bytes icons/mob/screen1_Orange.dmi | Bin 152533 -> 154354 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi index 42d15482c2270a9d317073f74a9a96fb99cfac14..4554286123567337bcc828226a9e9e86923b311c 100644 GIT binary patch delta 22316 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 diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi index e3762ef4b2b21a86f2531bf7c3242d4734a9250e..cf8a6d3d4b3a910c6ea5c63c780b18814763774a 100644 GIT binary patch delta 14805 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 Jlr|0ee*hPjOP~M% delta 12969 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 From d096a85b9c1d6dc86acadce19b2d913f3cda05b6 Mon Sep 17 00:00:00 2001 From: cib Date: Sun, 27 May 2012 16:47:53 +0200 Subject: [PATCH 04/23] First part of a fix for Issue #1177 - General cleanup of the update_clothing() mechanism - Separated update_clothing() into different procs that handle the different things that need to be done(body appearance needs to be updated, clothing appearance needs to be updated, etc.) - Made a new public interface with which one can do these things individually, so if you just want to add a wound to a mob, you don't have to rebuild the entire clothing. --- code/defines/mob/living/living.dm | 12 +- code/modules/mob/living/carbon/human/human.dm | 518 +++++++++++------- code/modules/mob/living/living.dm | 16 + 3 files changed, 334 insertions(+), 212 deletions(-) diff --git a/code/defines/mob/living/living.dm b/code/defines/mob/living/living.dm index 03d77d4670b..dc767fce085 100644 --- a/code/defines/mob/living/living.dm +++ b/code/defines/mob/living/living.dm @@ -5,4 +5,14 @@ var/t_n2 = null var/now_pushing = null var/cameraFollow = null - var/age = null \ No newline at end of file + var/age = null + + +// lists used to cache overlays +/mob/living/var/list/body_overlays_standing = list() +/mob/living/var/list/body_overlays_lying = list() +/mob/living/var/list/clothing_overlays = list() + +// This var describes whether the mob visually appears to be lying. +// This will be used to only update lying status when necessary. +/mob/living/var/visual_lying = 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 59fbac4e145..06ca0bdd5e5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -840,30 +840,38 @@ M.UpdateFeed(src) return -/mob/living/carbon/human/update_clothing() - ..() - - if (monkeyizing) - return - - overlays = null +/mob/living/carbon/human/proc/rebuild_body_overlays() + // This proc REBUILDS the body overlays. These are the overlays displayed under the clothing. + // Builds the body overlays both for lying and standing states. + // + // This is necessary whenever something about the mob's body appearance changes, for example: + // - When the mutantrace changes + // - When a visible wound is added to the mob's skin + // - When the mob loses a limb + body_overlays_standing.Cut() + body_overlays_lying.Cut() if (mutations & HULK) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "hulk_[gender][!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "hulk_[gender]_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "hulk_[gender]_l") if (mutations & COLD_RESISTANCE) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "fire[!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "fire_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "fire_l") if (mutations & TK) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead[!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead_l") if (mutations & LASER) - overlays += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes[!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes_l") if (mutantrace) switch(mutantrace) if("golem","metroid") - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace][!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_l") if(face_standing) del(face_standing) if(face_lying) @@ -873,7 +881,8 @@ if(lying_icon) del(lying_icon) if("lizard") - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender][!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_l") if(face_standing) del(face_standing) if(face_lying) @@ -884,9 +893,11 @@ del(lying_icon) if("plant") if(stat != 2) //if not dead, that is - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender][!lying ? "_s" : "_l"]") + body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_s") + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_[gender]_l") else - overlays += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_d") + // not sure why this doesn't need separate lying/standing states + body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "[mutantrace]_d") if(face_standing) del(face_standing) if(face_lying) @@ -896,64 +907,50 @@ if(lying_icon) del(lying_icon) else + // TODO: rewrite update_face() and update_body() if necessary if(!face_standing || !face_lying) update_face() if(!stand_icon || !lying_icon) update_body() - if(buckled) - if(istype(buckled, /obj/structure/stool/bed/chair)) - lying = 0 - else - lying = 1 + // Other procs(probably update_face() and update_body() ) also rebuild their own + // kinds of overlay lists. Think about merging those procs into this proc. + body_overlays_lying += body_lying + body_overlays_standing += body_standing - //if (zone_sel) - // zone_sel.overlays = null - // zone_sel.overlays += body_standing - // zone_sel.overlays += image("icon" = 'zone_sel.dmi', "icon_state" = text("[]", zone_sel.selecting)) - if (lying) - icon = lying_icon - overlays += body_lying +/mob/living/carbon/human/proc/rebuild_clothing_overlays() + // This proc REBUILDS the clothing overlays entirely. + // This is necessary whenever clothing changes, or when the mob switches from laying + // into standing state or vice verca. - if (face_lying) - overlays += face_lying - else - icon = stand_icon + // This should possibly be split into two categories: + // - "under", which is stuff that is worn at the lowest clothing layer and doesn't change often, + // such as jumpsuits, gloves, headset, etc. + // - "over", which is stuff that is worn at the highest clothing layer and changes very often, + // such as stuff in the user's hand, space suits, helmets, etc. - overlays += body_standing - - if (face_standing) - overlays += face_standing + // Delete all items from the overlay lists + clothing_overlays.Cut() // Uniform if(w_uniform) + // What is screen_loc stuff doing here?! w_uniform.screen_loc = ui_iclothing - + if(istype(w_uniform, /obj/item/clothing/under)) var/t1 = w_uniform.color if (!t1) t1 = icon_state - overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER) if (w_uniform.blood_DNA) var/icon/stain_icon = icon('blood.dmi', "uniformblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - - else // Automatically drop anything in store / id / belt if you're not wearing a uniform. - for (var/obj/item/thing in list(r_store, l_store, wear_id, belt)) - if (thing) - u_equip(thing) - if (client) - client.screen -= thing - if (thing) - thing.loc = loc - thing.dropped(src) - thing.layer = initial(thing.layer) + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) if (wear_id) if(wear_id.over_jumpsuit) - overlays += image("icon" = 'mob.dmi', "icon_state" = "id[!lying ? null : "2"]", "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "id[!lying ? null : "2"]", "layer" = MOB_LAYER) if (client) client.screen -= hud_used.intents @@ -976,34 +973,34 @@ gloves_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) if(ro.destroyed) gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image(gloves_icon, "layer" = MOB_LAYER) + clothing_overlays += image(gloves_icon, "layer" = MOB_LAYER) if (gloves.blood_DNA) var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]") if(lo.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) else if(ro.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) else if (blood_DNA) var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]") if(lo.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) else if(ro.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Glasses if (glasses) var/t1 = glasses.icon_state - overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) // Ears if (l_ear) var/t1 = l_ear.icon_state - overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) if (r_ear) var/t1 = r_ear.icon_state - overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) // Shoes lo = organs["l_foot"] @@ -1015,26 +1012,208 @@ shoes_icon.Blend(new /icon('limb_mask.dmi', "right[lying?"_l":""]"), ICON_MULTIPLY) else if(ro.destroyed && !lying) shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY) - overlays += image(shoes_icon, "layer" = MOB_LAYER) + clothing_overlays += image(shoes_icon, "layer" = MOB_LAYER) if (shoes.blood_DNA) var/icon/stain_icon = icon('blood.dmi', "shoeblood[!lying ? "" : "2"]") if(lo.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) else if(ro.destroyed) stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Radio - -/* if (w_radio) - overlays += image("icon" = 'ears.dmi', "icon_state" = "headset[!lying ? "" : "2"]", "layer" = MOB_LAYER) */ + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Radio if (s_store) var/t1 = s_store.item_state if (!t1) t1 = s_store.icon_state if(!istype(wear_suit, /obj/item/clothing/suit/storage/armoredundersuit)) - overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + clothing_overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) s_store.screen_loc = ui_sstore1 + + if (wear_suit) + if (istype(wear_suit, /obj/item/clothing/suit)) + var/t1 = wear_suit.icon_state + clothing_overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + + if (wear_suit) + if (wear_suit.blood_DNA) + var/icon/stain_icon = null + if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat)) + stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]") + else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat)) + stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]") + else + stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]") + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) + wear_suit.screen_loc = ui_oclothing + + if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + if (handcuffed) + handcuffed.loc = loc + handcuffed.layer = initial(handcuffed.layer) + handcuffed = null + if ((l_hand || r_hand)) + // I don't know what this does, but it looks horrible + var/h = hand + hand = 1 + drop_item() + hand = 0 + drop_item() + hand = h + + if (wear_mask) + if (istype(wear_mask, /obj/item/clothing/mask)) + var/t1 = wear_mask.icon_state + clothing_overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + if (!istype(wear_mask, /obj/item/clothing/mask/cigarette)) + if (wear_mask.blood_DNA) + var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]") + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) + wear_mask.screen_loc = ui_mask + + // Head + if (head) + var/t1 = head.icon_state + var/icon/head_icon = icon('head.dmi', text("[][]", t1, (!( lying ) ? null : "2"))) + if(istype(head,/obj/item/clothing/head/kitty)) + head_icon = (( lying ) ? head:mob2 : head:mob) + clothing_overlays += image("icon" = head_icon, "layer" = MOB_LAYER) + if(gimmick_hat) + clothing_overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER) + if (head.blood_DNA) + var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]") + clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) + head.screen_loc = ui_head + + // Belt + if (belt) + var/t1 = belt.item_state + if (!t1) + t1 = belt.icon_state + clothing_overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + belt.screen_loc = ui_belt + + if (wear_id) + wear_id.screen_loc = ui_id + + if (l_store) + l_store.screen_loc = ui_storage1 + + if (r_store) + r_store.screen_loc = ui_storage2 + + if (back) + var/t1 = back.icon_state + clothing_overlays += image("icon" = 'back.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) + back.screen_loc = ui_back + + if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar + //to hide / show them. + // WHAT IS THIS DOING IN UPDATE_CLOTHING(), AHHHHHHHHHHHHH + if (handcuffed) + pulling = null + var/h1 = handcuffed.icon_state + if (!lying) + clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]1", "layer" = MOB_LAYER) + else + clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]2", "layer" = MOB_LAYER) + + + if (r_hand) + clothing_overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = MOB_LAYER+1) + + r_hand.screen_loc = ui_rhand + + if (l_hand) + clothing_overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = MOB_LAYER+1) + + l_hand.screen_loc = ui_lhand + + var/shielded = 0 + for (var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 2 + break + + if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) + shielded = 3 + + if(shielded == 1) + clothing_overlays += image("icon" = 'effects.dmi', "icon_state" = "shield", "layer" = MOB_LAYER+1) + + + if(client && client.admin_invis) + invisibility = 100 + else if (shielded == 2) + invisibility = 2 + else + invisibility = 0 + if(targeted_by && target_locked) + clothing_overlays += target_locked + else if(targeted_by) + target_locked = new /obj/effect/target_locked(src) + clothing_overlays += target_locked + else if(!targeted_by && target_locked) + del(target_locked) + + last_b_state = stat + + +/mob/living/carbon/human/proc/handle_clothing() + // Non-visual stuff that was in update_clothing() + + if(buckled) + if(istype(buckled, /obj/structure/stool/bed/chair)) + lying = 0 + else + lying = 1 + + if(!w_uniform) + // Automatically drop anything in store / id / belt if you're not wearing a uniform. + for (var/obj/item/thing in list(r_store, l_store, wear_id, belt)) + if (thing) + u_equip(thing) + if (client) + client.screen -= thing + if (thing) + thing.loc = loc + thing.dropped(src) + thing.layer = initial(thing.layer) + + // Why this stuff was in handle_clothing() is beyond me + var/shielded = 0 + for (var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 2 + break + + if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) + shielded = 3 + switch(shielded) + if(1) + if(2) + invisibility = 2 + //New stealth. Hopefully doesn't lag too much. /N + if(istype(loc, /turf))//If they are standing on a turf. + AddCamoOverlay(loc)//Overlay camo. + if(3) + if(istype(loc, /turf)) + //Ninjas may flick into view once in a while if they are stealthed. + if(prob(90)) + NinjaStealthActive(loc) + else + NinjaStealthMalf() + else + invisibility = 0 + + // WHY IS THIS IN UPDATE_CLOTHING?!?! + name = get_visible_name() + + +/mob/living/carbon/human/proc/misc_clothing_updates() + // Temporary proc to shove stuff in that was put into update_clothing() + // for questionable reasons + if (client) if (i_select) if (intent) @@ -1055,167 +1234,84 @@ else m_select.screen_loc = null - - if (wear_suit) - if (istype(wear_suit, /obj/item/clothing/suit)) - var/t1 = wear_suit.icon_state - overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - - if (wear_suit) - if (wear_suit.blood_DNA) - var/icon/stain_icon = null - if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat)) - stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]") - else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat)) - stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]") - else - stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - wear_suit.screen_loc = ui_oclothing - - if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) - if (handcuffed) - handcuffed.loc = loc - handcuffed.layer = initial(handcuffed.layer) - handcuffed = null - if ((l_hand || r_hand)) - var/h = hand - hand = 1 - drop_item() - hand = 0 - drop_item() - hand = h - - - if (lying) - if (face_lying) - overlays += face_lying - else - if (face_standing) - overlays += face_standing - - if (wear_mask) - if (istype(wear_mask, /obj/item/clothing/mask)) - var/t1 = wear_mask.icon_state - overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - if (!istype(wear_mask, /obj/item/clothing/mask/cigarette)) - if (wear_mask.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - wear_mask.screen_loc = ui_mask - - // Head - if (head) - var/t1 = head.icon_state - var/icon/head_icon = icon('head.dmi', text("[][]", t1, (!( lying ) ? null : "2"))) - if(istype(head,/obj/item/clothing/head/kitty)) - head_icon = (( lying ) ? head:mob2 : head:mob) - overlays += image("icon" = head_icon, "layer" = MOB_LAYER) - if(gimmick_hat) - overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER) - if (head.blood_DNA) - var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]") - overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) - head.screen_loc = ui_head - - // Belt - if (belt) - var/t1 = belt.item_state - if (!t1) - t1 = belt.icon_state - overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - belt.screen_loc = ui_belt - - - name = get_visible_name() - - if (wear_id) - wear_id.screen_loc = ui_id - - if (l_store) - l_store.screen_loc = ui_storage1 - - if (r_store) - r_store.screen_loc = ui_storage2 - - if (back) - var/t1 = back.icon_state - overlays += image("icon" = 'back.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER) - back.screen_loc = ui_back - - if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar - //to hide / show them. - if (handcuffed) - pulling = null - var/h1 = handcuffed.icon_state - if (!lying) - overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]1", "layer" = MOB_LAYER) - else - overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]2", "layer" = MOB_LAYER) - + // Probably a lazy way to make sure all items are on the screen exactly once if (client) client.screen -= contents client.screen += contents - if (r_hand) - overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = MOB_LAYER+1) +/mob/living/carbon/human/rebuild_appearance() + // Lazy method: Just rebuild everything. + // This can be called when the mob is created, but on other occasions, rebuild_body_overlays(), + // rebuild_clothing_overlays() etc. should be called individually. - r_hand.screen_loc = ui_rhand + handle_clothing() // nonvisual stuff + misc_clothing_updates() // silly stuff - if (l_hand) - overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = MOB_LAYER+1) + rebuild_body_overlays() // rebuild the body itself, that is mutant race traits, hair, limbs, etc. + rebuild_clothing_overlays() // rebuild the entire clothing - l_hand.screen_loc = ui_lhand + update_overlays_from_lists() - var/shielded = 0 - for (var/obj/item/weapon/cloaking_device/S in src) - if (S.active) - shielded = 2 - break +/mob/living/carbon/human/proc/update_overlays_from_lists() + // This will simply update the overlays without actually + // rebuilding anything. Can be called often without much + // effect on performance. - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) - shielded = 3 - switch(shielded) - if(1) - overlays += image("icon" = 'effects.dmi', "icon_state" = "shield", "layer" = MOB_LAYER+1) - if(2) - invisibility = 2 - //New stealth. Hopefully doesn't lag too much. /N - if(istype(loc, /turf))//If they are standing on a turf. - AddCamoOverlay(loc)//Overlay camo. - if(3) - if(istype(loc, /turf)) - //Ninjas may flick into view once in a while if they are stealthed. - if(prob(90)) - NinjaStealthActive(loc) - else - NinjaStealthMalf() - else - invisibility = 0 + // Update the actual overlays from our prebuilt lists + overlays = null - if(client && client.admin_invis) - invisibility = 100 - else if (shielded == 2) - invisibility = 2 - else - invisibility = 0 - if(targeted_by && target_locked) - overlays += target_locked - else if(targeted_by) - target_locked = new /obj/effect/target_locked(src) - overlays += target_locked - else if(!targeted_by && target_locked) - del(target_locked) + if (monkeyizing) // while monkeyizing we do not wish to display any overlays + return -/* - for (var/mob/M in viewers(1, src))//For the love of god DO NOT REFRESH EVERY SECOND - Mport - if ((M.client && M.machine == src)) - spawn (0) - show_inv(M) - return -*/ - last_b_state = stat + if(lying) + icon = lying_icon + overlays += body_overlays_standing + + // What is this for? + if (face_lying) + overlays += face_lying + + + if(!lying) + icon = stand_icon + + overlays += body_overlays_lying + + // What is this for? + if (face_standing) + overlays += face_standing + + + overlays += clothing_overlays + +/mob/living/carbon/human/update_body_appearance() + // Should be called whenever something about the body appearance itself changes. + + rebuild_body_overlays() + update_overlays_from_lists() + +/mob/living/carbon/human/update_lying() + // Should be called whenever something about the lying status of the mob might have changed. + + if(visual_lying != lying) + visual_lying = lying + rebuild_clothing_overlays() + update_overlays_from_lists() + +/mob/living/carbon/human/update_clothing() + // Should be called only when something about the clothing itself changed + // which is not handled by the equip code. + rebuild_appearance() + + return + + // TODO: once I have replaced the udpate_clothing() calls with update_lying() or + // update_body_appearance() calls where suitable, the following code should + // be used. furthermore, handle_clothes() should be moved to Life() + + rebuild_clothing_overlays() + update_overlays_from_lists() /mob/living/carbon/human/hand_p(mob/M as mob) var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index aa829b0930e..94cdf647bdf 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -29,6 +29,22 @@ src.health = 100 src.stat = 0 +/mob/living/proc/rebuild_appearance() + // Rebuild the entire mob appearance completely, this should ONLY be called in rare cases, + // e.g. when the mob spawns. + +/mob/living/proc/update_body_appearance() + // Call this proc whenever something about the appearance of the body itself changes. + // For example, this must be called when you add a wound to a mob. + +/mob/living/proc/update_lying() + // Call this whenever the lying status of a mob changes. + +/mob/living/update_clothing() + // Call this proc whenever something about the clothing of a mob changes. Normally, you + // don't need to call this by hand, as the equip procs will do it for you. + ..() + //sort of a legacy burn method for /electrocute, /shock, and the e_chair /mob/living/proc/burn_skin(burn_amount, used_weapon = null) From 479563cb285fa218d43302c346a7dcca9ef88cd6 Mon Sep 17 00:00:00 2001 From: cib Date: Sun, 27 May 2012 17:59:44 +0200 Subject: [PATCH 05/23] Removed some stupidly copypasted code. The transform projectile will now only work on humans. --- code/modules/projectiles/projectile/change.dm | 154 +----------------- 1 file changed, 9 insertions(+), 145 deletions(-) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 676aaac977b..d6ebe8d9591 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -29,162 +29,26 @@ if("monkey") if (M.monkeyizing) return - M.update_clothing() - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( M.loc ) - O.name = "monkey" - if (M.client) - M.client.mob = O - if(M.mind) - M.mind.transfer_to(O) - O.a_intent = "hurt" - O.universal_speak = 1 - O << "You are now a monkey." - del(M) - return O + if(istype(M,/mob/carbon/living/human)) + M:monkeyize() if("robot") if (M.monkeyizing) return - M.update_clothing() - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - if(M.client) - M.client.screen -= M.hud_used.contents - M.client.screen -= M.hud_used.adding - M.client.screen -= M.hud_used.mon_blo - M.client.screen -= list( M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) - M.client.screen -= list( M.zone_sel, M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) - - var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( M.loc ) - O.cell = new(O) - O.cell.maxcharge = 7500 - O.cell.charge = 7500 - O.gender = M.gender - O.invisibility = 0 - O.name = "Cyborg" - O.real_name = "Cyborg" - if (M.mind) - M.mind.transfer_to(O) - if (M.mind.assigned_role == "Cyborg") - M.mind.original = O - else if (M.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") - else - M.mind = new /datum/mind( ) - M.mind.key = M.key - M.mind.current = O - M.mind.original = O - M.mind.transfer_to(O) - - if(!(O.mind in ticker.minds)) - ticker.minds += O.mind//Adds them to regular mind list. - - O.loc = loc - O << "You are playing a Robot. A Robot can interact with most electronic objects in its view point." - O << "You must follow the laws that the AI has. You are the AI's assistant to the station basically." - O << "To use something, simply double-click it." - O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."} - - O.job = "Cyborg" - - O.mmi = new /obj/item/device/mmi(O) - O.mmi.transfer_identity(M)//Does not transfer key/client. - del(M) - return O + if(istype(M,/mob/carbon/living/human)) + M:Robotize() if("metroid") if (M.monkeyizing) return - M.update_clothing() - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - if(prob(50)) - var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult (M.loc) - if (M.client) - M.client.mob = new_metroid - if(M.mind) - M.mind.transfer_to(new_metroid) - - new_metroid.a_intent = "hurt" - new_metroid << "You are now an adult Metroid." - new_metroid.universal_speak = 1 - del(M) - return new_metroid - else - var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (M.loc) - if (M.client) - M.client.mob = new_metroid - if(M.mind) - M.mind.transfer_to(new_metroid) - new_metroid.a_intent = "hurt" - new_metroid.universal_speak = 1 - new_metroid << "You are now a baby Metroid." - del(M) - return new_metroid + if(istype(M,/mob/carbon/living/human)) + M:Metroidize() if("alien") if (M.monkeyizing) return - M.update_clothing() - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/alien_caste = pick("Hunter","Sentinel","Drone") - var/mob/living/carbon/alien/humanoid/new_xeno - switch(alien_caste) - if("Hunter") - new_xeno = new /mob/living/carbon/alien/humanoid/hunter (M.loc) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (M.loc) - if("Drone") - new_xeno = new /mob/living/carbon/alien/humanoid/drone (M.loc) - if (M.client) - M.client.mob = new_xeno - if(M.mind) - M.mind.transfer_to(new_xeno) - new_xeno.a_intent = "hurt" - new_xeno.universal_speak = 1 - new_xeno << "You are now an alien." - del(M) - return new_xeno + Alienize + if(istype(M,/mob/carbon/living/human)) + M:Alienize() if("human") if (M.monkeyizing) return - M.update_clothing() - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/mob/living/carbon/human/O = new /mob/living/carbon/human( M.loc ) - - var/first = pick(first_names_male) - var/last = pick(last_names) - O.name = "[first] [last]" - O.real_name = "[first] [last]" - var/race = pick("lizard","golem","metroid","plant","normal") - switch(race) - if("lizard") - O.mutantrace = "lizard" - if("golem") - O.mutantrace = "golem" - if("metroid") - O.mutantrace = "metroid" - if("plant") - O.mutantrace = "plant" - if("normal") - O.mutantrace = "" - if (M.client) - M.client.mob = O - if(M.mind) - M.mind.transfer_to(O) - O.a_intent = "hurt" - O << "You are now a human." - del(M) - return O return From 0799cddb4b2f691e95bcaa54f34515112eb7ac9e Mon Sep 17 00:00:00 2001 From: cib Date: Sun, 27 May 2012 18:41:27 +0200 Subject: [PATCH 06/23] Cleanup of all the update_clothing() calls. Mostly I replaced them with rebuild_appearance() or update_body_appearance() where suitable. I also reorganized the new update_clothing() code a bit. --- .../Tajara/tajara_transformation.dm | 2 +- .../Cael_Aislinn/Tajara/tajaran.dm | 2 +- code/game/atom_procs.dm | 2 +- code/game/dna.dm | 18 ++--- .../gamemodes/changeling/changeling_powers.dm | 6 +- code/game/machinery/OpTable.dm | 4 +- .../machinery/computer/HolodeckControl.dm | 2 - code/game/magic/cultist/runes.dm | 2 +- code/game/objects/alien/facehugger.dm | 2 +- code/game/objects/items.dm | 1 - code/game/objects/stool.dm | 2 +- code/game/objects/tables_racks.dm | 11 --- code/game/response_team.dm | 4 +- code/modules/admin/admin_verbs.dm | 7 +- code/modules/chemical/Chemistry-Tools.dm | 1 + .../carbon/alien/humanoid/caste/drone.dm | 2 +- .../carbon/alien/humanoid/caste/hunter.dm | 2 +- .../carbon/alien/humanoid/caste/sentinel.dm | 2 +- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- .../mob/living/carbon/alien/humanoid/login.dm | 2 +- .../mob/living/carbon/alien/humanoid/queen.dm | 2 +- .../mob/living/carbon/alien/larva/larva.dm | 2 +- .../mob/living/carbon/alien/larva/login.dm | 2 +- .../mob/living/carbon/alien/special/_main.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 77 ++----------------- .../living/carbon/human/human_attackalien.dm | 1 - .../living/carbon/human/human_attackhand.dm | 1 - .../living/carbon/human/human_attackpaw.dm | 1 - .../mob/living/carbon/human/human_damage.dm | 1 - .../mob/living/carbon/human/human_defense.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 64 +++++++++++++-- code/modules/mob/living/carbon/human/login.dm | 2 +- .../mob/living/carbon/metroid/login.dm | 2 +- .../mob/living/carbon/metroid/metroid.dm | 2 +- .../modules/mob/living/carbon/monkey/login.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 3 +- code/modules/mob/living/living.dm | 16 ---- code/modules/mob/living/parasite/meme.dm | 1 - code/modules/mob/living/silicon/ai/login.dm | 2 +- .../modules/mob/living/silicon/robot/login.dm | 2 +- code/modules/mob/mob.dm | 27 ++++++- code/modules/mob/organ/organ.dm | 7 +- code/modules/mob/simple_animal/corgi.dm | 3 +- code/modules/mob/transform_procs.dm | 14 ++-- code/modules/projectiles/gun.dm | 2 +- code/modules/projectiles/projectile/change.dm | 9 +-- 46 files changed, 144 insertions(+), 182 deletions(-) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm index c8906cf31df..bc1c6750dab 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajara_transformation.dm @@ -55,7 +55,7 @@ O.update_body() O.update_face() spawn(1) - O.update_clothing() + O.rebuild_appearance() O << "You are now a Tajara." spawn(0)//To prevent the proc from returning null. del(src) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index 1f80c190dd1..20162ef639d 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -22,7 +22,7 @@ if(!lying_icon) lying_icon = new /icon('tajaran.dmi', "body_[g]_l") icon = stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" ..() diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index d06540f18e2..be85dacac69 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -338,7 +338,7 @@ del(fingerprints) if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/M = src - M.update_clothing() + M.rebuild_appearance() // both clothes and hands need to be cleaned, so just rebuild all return /atom/MouseDrop(atom/over_object as mob|obj|turf|area) diff --git a/code/game/dna.dm b/code/game/dna.dm index f10a2f50ced..b5b1b96f979 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -547,7 +547,7 @@ if (W==H.w_uniform) // will be teared continue H.drop_from_slot(W) - M.update_clothing() + M.rebuild_appearance() M.monkeyizing = 1 M.canmove = 0 M.icon = null @@ -604,7 +604,7 @@ O.a_intent = "hurt" O.flavor_text = M.flavor_text O.warn_flavor_changed() - O.update_clothing() + O.rebuild_appearance() del(M) return @@ -615,7 +615,7 @@ if(!connected) for(var/obj/item/W in (Mo.contents)) Mo.drop_from_slot(W) - M.update_clothing() + M.rebuild_appearance() M.monkeyizing = 1 M.canmove = 0 M.icon = null @@ -681,12 +681,12 @@ O.stat = M.stat O.flavor_text = M.flavor_text O.warn_flavor_changed() - O.update_clothing() + O.rebuild_appearance() del(M) return //////////////////////////////////////////////////////////// Monkey Block if (M) - M.update_clothing() + M.rebuild_appearance() return null /////////////////////////// DNA MISC-PROCS @@ -790,13 +790,7 @@ /obj/machinery/dna_scannernew/proc/go_out() if ((!( src.occupant ) || src.locked)) return -/* -// it's like this was -just- here to break constructed dna scanners -Pete -// if that's not the case, slap my shit and uncomment this. -// for(var/obj/O in src) -// O.loc = src.loc -*/ - //Foreach goto(30) + if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 0d0bea60a79..a843cb12441 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -260,7 +260,7 @@ if (istype(W, /obj/item/weapon/implant)) implants += W - usr.update_clothing() + usr.rebuild_appearance() usr.monkeyizing = 1 usr.canmove = 0 usr.icon = null @@ -346,7 +346,7 @@ for (var/obj/item/weapon/implant/I in usr) //Still preserving implants implants += I - usr.update_clothing() + usr.rebuild_appearance() usr.monkeyizing = 1 usr.canmove = 0 usr.icon = null @@ -414,7 +414,7 @@ return for(var/obj/item/W in src) usr.drop_from_slot(W) - usr.update_clothing() + usr.rebuild_appearance() usr.monkeyizing = 1 usr.canmove = 0 usr.icon = null diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 429fe4be8d2..f519b02625d 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -105,7 +105,7 @@ icon_state = "table2-active" return 1 if(victim) - victim.update_clothing() + victim.update_lying() victim = null if(updatesicon) icon_state = "table2-idle" @@ -134,7 +134,7 @@ if(updatesicon) icon_state = "table2-active" src.victim = M - M.update_clothing() + M.update_lying() processing_objects.Add(src) del(W) return diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index ff74b59b712..f0cb70659c3 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -371,7 +371,6 @@ "\red You hear a whine as \the [src]'s is hit by something dense.") H.UpdateDamageIcon() H.updatehealth() - H.update_clothing() playsound(src.loc, 'tablehit1.ogg', 50, 1, -3) else //Lets do REAL DAMAGE, YEAH! G.affecting.attack_log += text("\[[time_stamp()]\] Has been smashed on a table by [G.assailant.name] ([G.assailant.ckey])") @@ -410,7 +409,6 @@ "\red You hear the nauseating crunch of bone and gristle on solid metal.") H.UpdateDamageIcon() H.updatehealth() - H.update_clothing() playsound(src.loc, 'tablehit1.ogg', 50, 1, -3) return G.affecting.loc = src.loc diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm index fda0744c647..715c8db6489 100644 --- a/code/game/magic/cultist/runes.dm +++ b/code/game/magic/cultist/runes.dm @@ -795,7 +795,7 @@ var/list/sacrificed = list() return fizzle() cultist.loc = src.loc cultist.lying = 1 - cultist.update_clothing() + cultist.update_lying() for(var/mob/living/carbon/human/C in orange(1,src)) if(iscultist(C)) C.say("N'ath reth sh'yro eth d'rekkathnor!") diff --git a/code/game/objects/alien/facehugger.dm b/code/game/objects/alien/facehugger.dm index 3c35491fa39..1d8dac0c224 100644 --- a/code/game/objects/alien/facehugger.dm +++ b/code/game/objects/alien/facehugger.dm @@ -150,7 +150,7 @@ var/const layer = 20 target.wear_mask = src - target.update_clothing() + target.rebuild_appearance() GoIdle() //so it doesn't jump the people that tear it off diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2065a50acd7..51a56b40af1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -8,7 +8,6 @@ /obj/item/weapon/bedsheet/attack_self(mob/user as mob) user.drop_item() src.layer = 5 - user.update_clothing() add_fingerprint(user) return diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 00849d24d2c..6a4a9b1caeb 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -184,7 +184,7 @@ if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat || M.buckled || istype(usr, /mob/living/silicon/pai))) return M.pixel_y = 6 - M.update_clothing() + M.update_lying() density = 1 icon_state = "up" ..() diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm index fef13487454..451208b164f 100644 --- a/code/game/objects/tables_racks.dm +++ b/code/game/objects/tables_racks.dm @@ -111,16 +111,6 @@ TABLE AND RACK OBJECT INTERATIONS new /obj/item/weapon/table_parts( src.loc ) src.density = 0 del(src) -/* if (user.mutations2 & mSmallsize) - step(user, get_dir(user, src)) - if (user.loc == src.loc) - user.layer = TURF_LAYER - user.update_clothing() - for(var/mob/M in viewers(user, null)) - M.show_message("[user] hides under the table!", 1) - //Foreach goto(69) - */ -//Googol never tested this shit. return @@ -189,7 +179,6 @@ TABLE AND RACK OBJECT INTERATIONS "\red You hear the nauseating crunch of bone and gristle on solid metal.") H.UpdateDamageIcon() H.updatehealth() - H.update_clothing() playsound(src.loc, 'tablehit1.ogg', 50, 1, -3) return G.affecting.loc = src.loc diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 2ab9c5416c9..848cc1a6c3a 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -170,9 +170,7 @@ proc/trigger_armed_response_team(var/force = 0) M.gender = MALE else M.gender = FEMALE - M.update_body() - M.update_face() - M.update_clothing() + M.rebuild_appearance() M.real_name = commando_name M.name = commando_name diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 186fadd0ee8..2052684c922 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -863,8 +863,7 @@ return src.admin_invis =! src.admin_invis if(src.mob) - var/mob/m = src.mob//probably don't need this cast, but I'm too lazy to check if /client.mob is of type /mob or not - m.update_clothing() + mob.rebuild_appearance() log_admin("[key_name(usr)] has turned their invisibility [src.admin_invis ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] has turned their invisibility [src.admin_invis ? "ON" : "OFF"]", 1) @@ -971,9 +970,7 @@ M.gender = MALE else M.gender = FEMALE - M.update_body() - M.update_face() - M.update_clothing() + M.rebuild_appearance() M.check_dna(M) diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 5135238bab6..176486c01f7 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1583,6 +1583,7 @@ del(src) spawn(5) user.update_clothing() + playsound(M.loc,'eatfood.ogg', rand(10,50), 1) return 1 else if(istype(M, /mob/living/simple_animal/livestock)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 64274d21912..ceb8536feab 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -13,7 +13,7 @@ src.resting_icon = new /icon('alien.dmi', "aliend_sleep") src.running_icon = new /icon('alien.dmi', "aliend_running") src.icon = src.stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" //Drones use the same base as generic humanoids. diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 0c156b04320..953dd4a9814 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -12,7 +12,7 @@ src.resting_icon = new /icon('alien.dmi', "alienh_sleep") src.running_icon = new /icon('alien.dmi', "alienh_running") src.icon = src.stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 3c4e0a5a17d..b0222d60c9e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -12,7 +12,7 @@ src.resting_icon = new /icon('alien.dmi', "aliens_sleep") src.running_icon = new /icon('alien.dmi', "aliens_running") src.icon = src.stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index bd1da4e2990..ebd92e8a867 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -13,7 +13,7 @@ resting_icon = new /icon('alien.dmi', "alienh_sleep") running_icon = new /icon('alien.dmi', "alienh_running") icon = stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" ..() diff --git a/code/modules/mob/living/carbon/alien/humanoid/login.dm b/code/modules/mob/living/carbon/alien/humanoid/login.dm index 52359b7e59b..188785a9bbe 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/login.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/alien/humanoid/Login() ..() - update_clothing() + rebuild_appearance() if (!isturf(src.loc)) src.client.eye = src.loc diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 2924f5b9b89..a4a620eb91b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -15,7 +15,7 @@ src.resting_icon = new /icon('alien.dmi', "queen_sleep") src.running_icon = new /icon('alien.dmi', "queen_running") src.icon = src.stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 5e0a8156a7b..f2825bde7a6 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -7,7 +7,7 @@ name = text("alien larva ([rand(1, 1000)])") real_name = name spawn (1) - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" // spawn(1200) grow() Grow after 120 seconds -- TLE Commented out because life.dm has better version -- Urist ..() diff --git a/code/modules/mob/living/carbon/alien/larva/login.dm b/code/modules/mob/living/carbon/alien/larva/login.dm index e23cb0c122e..132915a70fa 100644 --- a/code/modules/mob/living/carbon/alien/larva/login.dm +++ b/code/modules/mob/living/carbon/alien/larva/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/alien/larva/Login() ..() - update_clothing() + rebuild_appearance() if (!isturf(src.loc)) src.client.eye = src.loc diff --git a/code/modules/mob/living/carbon/alien/special/_main.dm b/code/modules/mob/living/carbon/alien/special/_main.dm index 3d06fe82ac3..eb5594f3c9e 100644 --- a/code/modules/mob/living/carbon/alien/special/_main.dm +++ b/code/modules/mob/living/carbon/alien/special/_main.dm @@ -25,7 +25,7 @@ remove_special_verbs() - update_clothing() + rebuild_appearance() death(gibbed) ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 06ca0bdd5e5..7d66c71ddbe 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -133,14 +133,13 @@ stand_icon = new /icon('human.dmi', "body_[g]_s") lying_icon = new /icon('human.dmi', "body_[g]_l") icon = stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" spawn(10) // Failsafe for.. weirdness. - update_clothing() - update_body() + rebuild_appearance() vessel = new/datum/reagents(600) vessel.my_atom = src @@ -151,8 +150,7 @@ ..() spawn(5) // Failsafe for.. weirdness. - update_clothing() - update_body() + rebuild_appearance() /*var/known_languages = list() known_languages.Add("english")*/ @@ -918,6 +916,10 @@ body_overlays_lying += body_lying body_overlays_standing += body_standing + // face_lying and face_standing are the face icons, not a flag + body_overlays_lying += face_standing // yes, the vars are named wrong, I didn't do it -- CIB + body_overlays_standing += face_lying + /mob/living/carbon/human/proc/rebuild_clothing_overlays() @@ -1158,58 +1160,6 @@ last_b_state = stat - -/mob/living/carbon/human/proc/handle_clothing() - // Non-visual stuff that was in update_clothing() - - if(buckled) - if(istype(buckled, /obj/structure/stool/bed/chair)) - lying = 0 - else - lying = 1 - - if(!w_uniform) - // Automatically drop anything in store / id / belt if you're not wearing a uniform. - for (var/obj/item/thing in list(r_store, l_store, wear_id, belt)) - if (thing) - u_equip(thing) - if (client) - client.screen -= thing - if (thing) - thing.loc = loc - thing.dropped(src) - thing.layer = initial(thing.layer) - - // Why this stuff was in handle_clothing() is beyond me - var/shielded = 0 - for (var/obj/item/weapon/cloaking_device/S in src) - if (S.active) - shielded = 2 - break - - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) - shielded = 3 - switch(shielded) - if(1) - if(2) - invisibility = 2 - //New stealth. Hopefully doesn't lag too much. /N - if(istype(loc, /turf))//If they are standing on a turf. - AddCamoOverlay(loc)//Overlay camo. - if(3) - if(istype(loc, /turf)) - //Ninjas may flick into view once in a while if they are stealthed. - if(prob(90)) - NinjaStealthActive(loc) - else - NinjaStealthMalf() - else - invisibility = 0 - - // WHY IS THIS IN UPDATE_CLOTHING?!?! - name = get_visible_name() - - /mob/living/carbon/human/proc/misc_clothing_updates() // Temporary proc to shove stuff in that was put into update_clothing() // for questionable reasons @@ -1268,20 +1218,11 @@ icon = lying_icon overlays += body_overlays_standing - // What is this for? - if (face_lying) - overlays += face_lying - - if(!lying) icon = stand_icon overlays += body_overlays_lying - // What is this for? - if (face_standing) - overlays += face_standing - overlays += clothing_overlays @@ -2739,9 +2680,7 @@ It can still be worn/put on as normal. gender = MALE else gender = FEMALE - update_body() - update_face() - update_clothing() + rebuild_appearance() check_dna() for(var/mob/M in view()) diff --git a/code/modules/mob/living/carbon/human/human_attackalien.dm b/code/modules/mob/living/carbon/human/human_attackalien.dm index 1f82eb28591..09cb279b540 100644 --- a/code/modules/mob/living/carbon/human/human_attackalien.dm +++ b/code/modules/mob/living/carbon/human/human_attackalien.dm @@ -70,5 +70,4 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has tried to disarm []!", M, src), 1) - update_clothing() return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 0e4eef42825..51ed7966208 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -211,7 +211,6 @@ playsound(loc, 'punchmiss.ogg', 25, 1, -1) visible_message("\red [M] attempted to disarm [src]!") - update_clothing() return /mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params) diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm index 568ca9969d5..8d01ca3e8f2 100644 --- a/code/modules/mob/living/carbon/human/human_attackpaw.dm +++ b/code/modules/mob/living/carbon/human/human_attackpaw.dm @@ -20,5 +20,4 @@ src = null src = H.monkeyize() contract_disease(D,1,0) - update_clothing() return diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index bfa163f82e6..528dc9028f3 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -68,5 +68,4 @@ UpdateDamageIcon() updatehealth() - update_clothing() return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index df20678c13d..83aa059fb88 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -197,5 +197,4 @@ emp_act if(src.wear_suit) src.wear_suit.add_blood(src) if(src.w_uniform) src.w_uniform.add_blood(src) - UpdateDamageIcon() - update_clothing() \ No newline at end of file + UpdateDamageIcon() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4e705911348..209837df96a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -29,18 +29,18 @@ //Being buckled to a chair or bed check_if_buckled() + handle_clothing() - // Update clothing -// update_clothing() + // TODO: this check and the lyingcheck variable should probably be removed in favor of the visual_lying check if((lyingcheck != lying) || (buckle_check != (buckled ? 1 : 0))) //This is a fix for falling down / standing up not updating icons. Instead of going through and changing every spawn(5) - update_clothing() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared + update_lying() //instance in the code where lying is modified, I've just added a new variable "lyingcheck" which will be compared lyingcheck = lying //to lying, so if lying ever changes, update_clothing() will run like normal. if(stat == 2) - if((!lying || !lyingcheck) && !buckled) + if(!lying && !buckled) lying = 1 - update_clothing() + update_lying() return life_tick++ @@ -137,7 +137,7 @@ if (stat != 0) if(!lying) lying = 1 //Seriously, stay down :x - update_clothing() + update_lying() @@ -1489,4 +1489,54 @@ else if(shock_stage == 40) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") else if(shock_stage == 80) - src << ""+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.") \ No newline at end of file + src << ""+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.") + + +/mob/living/carbon/human/proc/handle_clothing() + // Non-visual stuff that was in update_clothing() + + if(buckled) + if(istype(buckled, /obj/structure/stool/bed/chair)) + lying = 0 + else + lying = 1 + + if(!w_uniform) + // Automatically drop anything in store / id / belt if you're not wearing a uniform. + for (var/obj/item/thing in list(r_store, l_store, wear_id, belt)) + if (thing) + u_equip(thing) + if (client) + client.screen -= thing + if (thing) + thing.loc = loc + thing.dropped(src) + thing.layer = initial(thing.layer) + + // Why this stuff was in handle_clothing() is beyond me + var/shielded = 0 + for (var/obj/item/weapon/cloaking_device/S in src) + if (S.active) + shielded = 2 + break + + if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active) + shielded = 3 + switch(shielded) + if(1) + if(2) + invisibility = 2 + //New stealth. Hopefully doesn't lag too much. /N + if(istype(loc, /turf))//If they are standing on a turf. + AddCamoOverlay(loc)//Overlay camo. + if(3) + if(istype(loc, /turf)) + //Ninjas may flick into view once in a while if they are stealthed. + if(prob(90)) + NinjaStealthActive(loc) + else + NinjaStealthMalf() + else + invisibility = 0 + + name = get_visible_name() diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm index 6bbbc532d27..78cf259a7cd 100644 --- a/code/modules/mob/living/carbon/human/login.dm +++ b/code/modules/mob/living/carbon/human/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/human/Login() ..() - update_clothing() + rebuild_appearance() if (!isturf(src.loc)) src.client.eye = src.loc diff --git a/code/modules/mob/living/carbon/metroid/login.dm b/code/modules/mob/living/carbon/metroid/login.dm index 6b696c8a516..e954e353e76 100644 --- a/code/modules/mob/living/carbon/metroid/login.dm +++ b/code/modules/mob/living/carbon/metroid/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/metroid/Login() ..() - update_clothing() + rebuild_appearance() if (!isturf(src.loc)) src.client.eye = src.loc diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 912b88aa8c4..3e4a0c3b0b4 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -9,7 +9,7 @@ real_name = name spawn (1) - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" ..() diff --git a/code/modules/mob/living/carbon/monkey/login.dm b/code/modules/mob/living/carbon/monkey/login.dm index 9f24a42fec6..1fb31db3874 100644 --- a/code/modules/mob/living/carbon/monkey/login.dm +++ b/code/modules/mob/living/carbon/monkey/login.dm @@ -1,7 +1,7 @@ /mob/living/carbon/monkey/Login() ..() - update_clothing() + rebuild_appearance() /* if (!( src.primary )) var/t1 = rand(1000, 1500) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 688ad10eafc..6ac4b83c0b4 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -69,7 +69,7 @@ if(!lying_icon) lying_icon = new /icon('monkey.dmi', "monkey0") icon = stand_icon - update_clothing() + rebuild_appearance() src << "\blue Your icons have been generated!" ..() @@ -928,7 +928,6 @@ UpdateDamageIcon() updatehealth() - update_clothing() return 1 /*/mob/living/carbon/monkey/UpdateDamageIcon() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 94cdf647bdf..aa829b0930e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -29,22 +29,6 @@ src.health = 100 src.stat = 0 -/mob/living/proc/rebuild_appearance() - // Rebuild the entire mob appearance completely, this should ONLY be called in rare cases, - // e.g. when the mob spawns. - -/mob/living/proc/update_body_appearance() - // Call this proc whenever something about the appearance of the body itself changes. - // For example, this must be called when you add a wound to a mob. - -/mob/living/proc/update_lying() - // Call this whenever the lying status of a mob changes. - -/mob/living/update_clothing() - // Call this proc whenever something about the clothing of a mob changes. Normally, you - // don't need to call this by hand, as the equip procs will do it for you. - ..() - //sort of a legacy burn method for /electrocute, /shock, and the e_chair /mob/living/proc/burn_skin(burn_amount, used_weapon = null) diff --git a/code/modules/mob/living/parasite/meme.dm b/code/modules/mob/living/parasite/meme.dm index e3d7b53d467..c3c65b9911f 100644 --- a/code/modules/mob/living/parasite/meme.dm +++ b/code/modules/mob/living/parasite/meme.dm @@ -498,7 +498,6 @@ mob/living/parasite/meme/verb/Analgesic() mob/proc/clearHUD() - update_clothing() if(client) client.screen.Cut() // Take control of the mob diff --git a/code/modules/mob/living/silicon/ai/login.dm b/code/modules/mob/living/silicon/ai/login.dm index 959a83abcf3..7a294615bf3 100644 --- a/code/modules/mob/living/silicon/ai/login.dm +++ b/code/modules/mob/living/silicon/ai/login.dm @@ -1,6 +1,6 @@ /mob/living/silicon/ai/Login() ..() - update_clothing() + rebuild_appearance() for(var/S in src.client.screen) del(S) src.flash = new /obj/screen( null ) diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 1127d6bebb7..728112e394e 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -1,7 +1,7 @@ /mob/living/silicon/robot/Login() ..() - update_clothing() + rebuild_appearance() if (!isturf(src.loc)) src.client.eye = src.loc diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 13e461c7569..3ff2d4bb1da 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -177,9 +177,6 @@ item.loc = null item.layer = initial(item.layer) u_equip(item) - //if (client) - // client.screen -= item - //update_clothing() return /mob/proc/get_active_hand() @@ -1151,4 +1148,26 @@ note dizziness decrements automatically in the mob's Life() proc. for(var/file in args) src << browse_rsc(file) return 1 - return 0 \ No newline at end of file + return 0 + + +/** The stuff below here really should be in /mob/living, but due to tons of procs that should only + take /mob/living only taking /mob(or, indeed, some silly procs relying on usr.. yes, *procs*, not verbs..), + I'm putting this stuff into /mob for now +**/ +/mob/proc/rebuild_appearance() + // Rebuild the entire mob appearance completely, this should ONLY be called in rare cases, + // e.g. when the mob spawns. + return update_clothing() // most mobs still implement update_clothing() by simply rebuilding the entire appearance + +/mob/proc/update_body_appearance() + // Call this proc whenever something about the appearance of the body itself changes. + // For example, this must be called when you add a wound to a mob. + +/mob/proc/update_lying() + // Call this whenever the lying status of a mob changes. + +/mob/update_clothing() + // Call this proc whenever something about the clothing of a mob changes. Normally, you + // don't need to call this by hand, as the equip procs will do it for you. + ..() \ No newline at end of file diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm index 4070542e6c7..bd2d15bfc9d 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -235,7 +235,8 @@ var/datum/autopsy_data/W = autopsy_data[V] del W autopsy_data = list() - return update_icon() + var/result = update_icon() + return result proc/add_wound(var/used_weapon, var/damage) var/datum/autopsy_data/W = autopsy_data[used_weapon] @@ -248,6 +249,7 @@ W.damage += damage W.time_inflicted = world.time + owner.update_body_appearance() proc/get_damage() //returns total damage @@ -314,6 +316,7 @@ var/n_is = damage_state_text() if (n_is != damage_state) damage_state = n_is + owner.update_body_appearance() // I'm not sure about this, Sky probably knows better where to put it return 1 return 0 @@ -412,7 +415,7 @@ for(var/datum/organ/wound/W in wounds) W.update_health() del(W) - owner.update_body() + owner.update_body_appearance() owner.update_clothing() proc/createwound(var/size = 1, var/type = 0, var/damage) diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm index 2461e55f6e6..504c81d8faa 100644 --- a/code/modules/mob/simple_animal/corgi.dm +++ b/code/modules/mob/simple_animal/corgi.dm @@ -47,7 +47,7 @@ /mob/living/simple_animal/corgi/Life() ..() - update_clothing() + rebuild_appearance() /mob/living/simple_animal/corgi/show_inv(mob/user as mob) /* @@ -182,7 +182,6 @@ usr.drop_item() item_to_add.loc = src src.inventory_head = item_to_add - update_clothing() //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed. diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index d5575e28ae5..a1e940182ab 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -5,7 +5,7 @@ if (W==w_uniform) // will be teared continue drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 stunned = 1 @@ -69,7 +69,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null @@ -156,7 +156,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null @@ -222,7 +222,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null @@ -262,7 +262,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null @@ -313,7 +313,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null @@ -347,7 +347,7 @@ return for(var/obj/item/W in src) drop_from_slot(W) - update_clothing() + rebuild_appearance() monkeyizing = 1 canmove = 0 icon = null diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index e1c1f79d9f8..e6e80ae43de 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -385,7 +385,7 @@ mob/proc spawn(0) //Make it show the 2 states properly if(target_locked) target_locked.icon_state = "locking" - update_clothing() + update_clothing() // update_clothing clears overlays, so this might break stuff sleep(20) if(target_locked) target_locked.icon_state = "locked" diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index d6ebe8d9591..ed458e7bbd6 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -29,23 +29,22 @@ if("monkey") if (M.monkeyizing) return - if(istype(M,/mob/carbon/living/human)) + if(istype(M,/mob/living/carbon/human)) M:monkeyize() if("robot") if (M.monkeyizing) return - if(istype(M,/mob/carbon/living/human)) + if(istype(M,/mob/living/carbon/human)) M:Robotize() if("metroid") if (M.monkeyizing) return - if(istype(M,/mob/carbon/living/human)) + if(istype(M,/mob/living/carbon/human)) M:Metroidize() if("alien") if (M.monkeyizing) return - Alienize - if(istype(M,/mob/carbon/living/human)) + if(istype(M,/mob/living/carbon/human)) M:Alienize() if("human") if (M.monkeyizing) From f0f6f14355d307ad9de9bf21ff2f1c472ff87aab Mon Sep 17 00:00:00 2001 From: Aryn Date: Sun, 27 May 2012 12:49:26 -0600 Subject: [PATCH 07/23] Fixed up the errors related to ALL_ITEM_CONTAMINATION and hotspots, made extinguishers work again. --- code/ZAS/FEA_turf_tile.dm | 2 +- code/ZAS/Fire.dm | 2 +- code/ZAS/Variable Settings.dm | 8 -------- code/modules/chemical/Chemistry-Reagents.dm | 9 ++++++--- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/code/ZAS/FEA_turf_tile.dm b/code/ZAS/FEA_turf_tile.dm index d65d1d96650..c8dda862530 100644 --- a/code/ZAS/FEA_turf_tile.dm +++ b/code/ZAS/FEA_turf_tile.dm @@ -51,7 +51,7 @@ turf archived_cycle = 0 current_cycle = 0 - obj/effect/hotspot/active_hotspot + obj/fire/active_hotspot temperature_archived //USED ONLY FOR SOLIDS being_superconductive = 0 diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 0159bfa0566..e74198e8f4c 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -45,7 +45,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) obj fire - //Icon for fire on turfs, also helps for nurturing small fires until they are full tile + //Icon for fire on turfs. anchored = 1 mouse_opacity = 0 diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index 226e38c1223..70f186613b2 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -119,8 +119,6 @@ vs_control if("Original") plc.CLOTH_CONTAMINATION = 0 //If this is on, plasma does damage by getting into cloth. - plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or - plc.PLASMAGUARD_ONLY = 0 //plc.CANISTER_CORROSION = 0 //If this is on, plasma must be stored in orange tanks and canisters, @@ -146,8 +144,6 @@ vs_control if("Hazard - Low") plc.CLOTH_CONTAMINATION = 0 //If this is on, plasma does damage by getting into cloth. - plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or - plc.PLASMAGUARD_ONLY = 0 // plc.CANISTER_CORROSION = 0 //If this is on, plasma must be stored in orange tanks and canisters, @@ -175,8 +171,6 @@ vs_control if("Hazard - High") plc.CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. - plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or - plc.PLASMAGUARD_ONLY = 0 // plc.CANISTER_CORROSION = 1 //If this is on, plasma must be stored in orange tanks and canisters, @@ -199,8 +193,6 @@ vs_control if("Oh Shit!") plc.CLOTH_CONTAMINATION = 1 //If this is on, plasma does damage by getting into cloth. - plc.ALL_ITEM_CONTAMINATION = 0 //If this is on, any item can be contaminated, so suits and tools must be discarded or ELSE - plc.PLASMAGUARD_ONLY = 1 // plc.CANISTER_CORROSION = 1 //If this is on, plasma must be stored in orange tanks and canisters, diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index 86d28577e4c..c94cd145e75 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -261,23 +261,25 @@ datum for(var/mob/living/carbon/metroid/M in T) M.adjustToxLoss(rand(15,20)) - var/hotspot = (locate(/obj/effect/hotspot) in T) + var/hotspot = (locate(/obj/fire) in T) if(hotspot && !istype(T, /turf/space)) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles ) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.react() T.assume_air(lowertemp) + T.apply_fire_protection() del(hotspot) return reaction_obj(var/obj/O, var/volume) src = null var/turf/T = get_turf(O) - var/hotspot = (locate(/obj/effect/hotspot) in T) + var/hotspot = (locate(/obj/fire) in T) if(hotspot && !istype(T, /turf/space)) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles ) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.react() T.assume_air(lowertemp) + T.apply_fire_protection() del(hotspot) if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O @@ -2142,12 +2144,13 @@ datum if(T.wet_overlay) T.overlays -= T.wet_overlay T.wet_overlay = null - var/hotspot = (locate(/obj/effect/hotspot) in T) + var/hotspot = (locate(/obj/fire) in T) if(hotspot) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles ) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.react() T.assume_air(lowertemp) + T.apply_fire_protection() del(hotspot) enzyme From 88846eb099d7392aca7487bdb10ebd6cf707e876 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 19:49:10 +0100 Subject: [PATCH 08/23] Fixes to Tajaran lying down sprites. Removed "lipstick" from Soghun/Tajaran. Removed "bumps" from Soghun. --- .../Cael_Aislinn/Tajara/tajaran.dmi | Bin 21756 -> 21697 bytes .../Cael_Aislinn/Tajara/tajaran_face.dmi | Bin 16070 -> 16069 bytes icons/effects/genetics.dmi | Bin 41344 -> 41337 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi index 6e69669647f9b67bc5348486f8ba8254faac3755..1428450685609faa22149eabe5f19f89a7bff137 100644 GIT binary patch literal 21697 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
K{TwU*?sdqn-d0m%a3+ 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 Jl&QfZ{trKs0#N_} delta 15015 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 F{{Sjd7CZm| diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi index ab2916710acd46aa373c8b9bdef9a62363f993c2..d9a8e5f9ed560f7266779c69dc0f0d91a2d077c7 100644 GIT binary patch delta 18050 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 From 27ac573d048d43048e7444087ae805d5a435cc23 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 19:50:09 +0100 Subject: [PATCH 09/23] Flashkirby's new cow sprites (properly this time). --- icons/mob/livestock.dmi | Bin 50349 -> 57709 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/livestock.dmi b/icons/mob/livestock.dmi index 43e485a297c440f201f736236abb970cd43d6b0e..538e14b1ea1016b64781f03ec9bcf5fd7576544b 100644 GIT binary patch literal 57709 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 z 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 From e106fe4c51ddaba1ee79bb74cf5a0bd2dadadc52 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 20:14:19 +0100 Subject: [PATCH 10/23] Adds water bottles to vending machines. --- code/defines/obj/vending.dm | 6 +++--- code/modules/chemical/Chemistry-Tools.dm | 9 +++++++++ icons/obj/drinks.dmi | Bin 57915 -> 58202 bytes 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm index 28f05cb1303..0f3c1fb7473 100755 --- a/code/defines/obj/vending.dm +++ b/code/defines/obj/vending.dm @@ -126,9 +126,9 @@ name = "Robust Softdrinks" desc = "A softdrink vendor provided by Robust Industries, LLC." icon_state = "Cola_Machine" - product_paths = "/obj/item/weapon/reagent_containers/food/drinks/cola;/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind;/obj/item/weapon/reagent_containers/food/drinks/dr_gibb;/obj/item/weapon/reagent_containers/food/drinks/starkist;/obj/item/weapon/reagent_containers/food/drinks/space_up" - product_amounts = "10;10;10;10;10" - product_prices = "1;1;1;1;1" + product_paths = "/obj/item/weapon/reagent_containers/food/drinks/cola;/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind;/obj/item/weapon/reagent_containers/food/drinks/dr_gibb;/obj/item/weapon/reagent_containers/food/drinks/starkist;/obj/item/weapon/reagent_containers/food/drinks/space_up;/obj/item/weapon/reagent_containers/food/drinks/waterbottle" +// product_amounts = "10;10;10;10;10" + product_prices = "1;1;1;1;1;1" product_slogans = "Robust Softdrinks: More robust then a toolbox to the head!" product_hidden = "/obj/item/weapon/reagent_containers/food/drinks/thirteenloko" product_hideamt = "5" diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 5135238bab6..c930c1d6e0b 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -2911,6 +2911,15 @@ src.pixel_x = rand(-10.0, 10) src.pixel_y = rand(-10.0, 10) +/obj/item/weapon/reagent_containers/food/drinks/waterbottle + name = "water bottle" + desc = "Straight from the ice lakes of Mars!" + icon_state = "waterbottle" + New() + ..() + reagents.add_reagent("water", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/sillycup name = "Paper Cup" diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 11a133c079fd0d54bd38238a19534585c3a83606..e4652f8b6206e06fb803b73de9ffb55aba1d77dd 100644 GIT binary patch delta 1834 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 From dc1c930bdba51120510f87cebd19822ae6059a99 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 20:15:02 +0100 Subject: [PATCH 11/23] Updates theMij's custom item icon. (Used the wrong one in the first place!) --- icons/obj/custom_items.dmi | Bin 19587 -> 19693 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index cf18853c68db0e74e672b5561c2ebec4b2b4cca4..700fc99bf163ec54cf6ab0ba7328c76a55b9ba77 100644 GIT binary patch delta 19243 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%0APdr!u-@8Ip#{x}z;aV<&k%ml&rpUV>o- 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 pFsQ~D3c$di8e=E`1A}VJ{{z`?#! delta 19130 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

p#{eu zdz5X%?_+JhzF0bUW`E%&J+n11a4D7g7NA9|c5oq!Uxtqckgb4qD^)9?LvT;f(E|8% zvk?6YJFxT53B1AAe>A@I#3e0Q!vsxFP*3v3AE1b|1fk z3t5NpNsR^Ie}aDq0L|O_(y?PZD}|thrzd7GM`tU*5N?C(4W|@9BX3`FGc!un{tAi} zP*n?{SHKPdu;d4Mgx>}K5Sq931_0@$&0hq`Z13BLKnpc>hhRM!A zSUB`Yn%>w6$?tWw8_~ePK*p)nfk)o+cL5Of?i*#MiFoc6f_ije&bxD}wWjSAutQ}3 zd7M}NXq-TLVunWW`*ZQPrPplDZ>$VtP?J<@d2mG$*kjH5|JInGDZT@R>_3lRvx2W+ zC;)?+q*4mNKtBuxU{I47D+3uA)L{$-U|>*(F%*D-K^^A*0V|x#0B-<>DgXcg07*qo IM6N<$f;j7&=Kufz From 2b2c8120f762844332e947e12c0e9dfb9c08f1dc Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 20:41:05 +0100 Subject: [PATCH 12/23] More HUD changes: https://dl.dropbox.com/u/4911517/ShareX/2012-05/2012-05-28_20-40-50.png --- code/game/hud.dm | 29 ++++++++++-------- .../mob/living/carbon/alien/humanoid/hud.dm | 2 +- .../mob/living/carbon/alien/larva/hud.dm | 2 +- code/modules/mob/living/silicon/robot/hud.dm | 2 +- icons/mob/screen1_Midnight.dmi | Bin 138830 -> 142081 bytes icons/mob/screen1_Orange.dmi | Bin 152533 -> 154296 bytes icons/mob/screen1_old.dmi | Bin 124625 -> 124010 bytes icons/mob/zone_sel.dmi | Bin 9148 -> 7592 bytes 8 files changed, 19 insertions(+), 16 deletions(-) diff --git a/code/game/hud.dm b/code/game/hud.dm index 5539c8c3c40..c276b260c9f 100644 --- a/code/game/hud.dm +++ b/code/game/hud.dm @@ -35,19 +35,19 @@ #define ui_monkey_back "6:14,1:5" //monkey //Lower right, persistant menu -#define ui_dropbutton "13:26,1:5" -#define ui_throw "13:26,1:5" -#define ui_pull "13:26,2:7" -#define ui_acti "12:24,1:5" +#define ui_dropbutton "11:22,1:5" +#define ui_throw "11:22,1:5" +#define ui_pull "12:24,1:5" +#define ui_movi "12:24,1:5" -#define ui_movi "13:26,2:7" +#define ui_acti "13:26,1:5" #define ui_zonesel "14:28,1:5" //Gun buttons -#define ui_gun1 "11:22,2:7" -#define ui_gun2 "10:20,2:7" -#define ui_gun3 "9:18,2:7" -#define ui_gun_select "11:22,1:5" +#define ui_gun1 "13:26,2:5" +#define ui_gun2 "12:24,2:5" +#define ui_gun3 "11:22,2:5" +#define ui_gun_select "14:28,2:5" //Middle right (damage indicators) #define ui_pressure "14:28,6:13" @@ -67,12 +67,15 @@ #define ui_health "14:28,7:15" #define ui_internal "14:28,8:17" +//For non-human compatibility //borgs #define ui_borg_health "14:28,6:13" //borgs have the health display where humans have the pressure damage indicator. #define ui_alien_health "14:28,6:13" //aliens have the health display where humans have the pressure damage indicator. #define ui_throw_old "13:26,2:7" #define ui_movi_old "12:24,2:7" #define ui_pull_old "14:28,2:7" +#define ui_dropbutton_old "12:24,1:5" +#define ui_pull_borg "12:24,1:5" //Pop-up inventory #define ui_shoes "2:8,1:5" @@ -92,10 +95,10 @@ //Intent small buttons -#define ui_help_small "12:16,1:-3" -#define ui_disarm_small "12:16,1:12" -#define ui_grab_small "12:32,1:12" -#define ui_harm_small "12:32,1:-3" +#define ui_help_small "13:18,1:-3" +#define ui_disarm_small "13:18,1:12" +#define ui_grab_small "13:34,1:12" +#define ui_harm_small "13:34,1:-3" diff --git a/code/modules/mob/living/carbon/alien/humanoid/hud.dm b/code/modules/mob/living/carbon/alien/humanoid/hud.dm index 67223c85fb2..7b2accc6227 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/hud.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/hud.dm @@ -146,7 +146,7 @@ using.name = "drop" using.icon = 'screen1_alien.dmi' using.icon_state = "act_drop" - using.screen_loc = ui_dropbutton + using.screen_loc = ui_dropbutton_old using.layer = 19 src.adding += using diff --git a/code/modules/mob/living/carbon/alien/larva/hud.dm b/code/modules/mob/living/carbon/alien/larva/hud.dm index 9da16a0b3bf..2614a992bf2 100644 --- a/code/modules/mob/living/carbon/alien/larva/hud.dm +++ b/code/modules/mob/living/carbon/alien/larva/hud.dm @@ -56,7 +56,7 @@ using.dir = SOUTHWEST using.icon = 'screen1_alien.dmi' using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") - using.screen_loc = ui_movi_old + using.screen_loc = ui_acti using.layer = 20 src.adding += using move_intent = using diff --git a/code/modules/mob/living/silicon/robot/hud.dm b/code/modules/mob/living/silicon/robot/hud.dm index d272c96f3a4..41100e1066c 100644 --- a/code/modules/mob/living/silicon/robot/hud.dm +++ b/code/modules/mob/living/silicon/robot/hud.dm @@ -202,7 +202,7 @@ mymob.pullin.icon = 'screen1_robot.dmi' mymob.pullin.icon_state = "pull0" mymob.pullin.name = "pull" - mymob.pullin.screen_loc = ui_pull_old + mymob.pullin.screen_loc = ui_pull_borg mymob.blind = new /obj/screen( null ) mymob.blind.icon = 'screen1_robot.dmi' diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi index 42d15482c2270a9d317073f74a9a96fb99cfac14..e37b1cce29a4b2b00a41deca8a3edb44420708d8 100644 GIT binary patch delta 22725 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 Aj{pDw delta 19448 zcmYIv1ymN_7cCtE(nxnncbBAe2+|-WDJdO;h|=94ARt{*(x7xB-QC^N@Gigqdhf9o z3!QIfzPb0Fv(Mi9-1#(#GSq|;O$*B$L&pV$Aa@V-seGzklF~!@LYbRx@NP4XT7Q&X zxOVkqXZXyx!pHOZB20RvEKA4!6fNNgtxd%WtT6$?gzurFwa~XD@(#)Qd4wFLEL=2f z#2iu!#DgRF@8QTi8miOg9rSDc=A_|Vf1TM0Ov#6$-q%ZhZ|}i}BMVqKu-0~~JvteO zUS!t_&z9B-3;o9V@sIAHWTWoE%k3^ajjNt0E)8?8YjXRLS@v=u7-vk=HrCKK#oi;H zrzn=3t-Z=@;KT<<)&$QD4X!9volkAzV}__EZ@LAhmh#rLl-8wrU0k5GfG97~SvKie z8|m39DMY1agfSj5iK{JNs%zCDWvtx~HH@I^`XcX$-X9mx5r|rN{9#Q?EL8OgaZ8&P z*&;T#vW@)$MeM3!iYmK}hE!$r#>VszS2JYI=8=4_&`4!bm(4S3hK*_&id5J${Lriu zyiFCZs!5Hw25apZM{gDmZ_U;4=*II(I40Q5J0+DOjoU_sGyF4l+uM|VB~uJmsG~ly zY(I;hLGt)|N7Kx?Q_*LkKR3S$yHFMDn{$Ri@CDs64JJ*Y_jYC~{HaebYN;AufDF8Ye$5 zeF7iWm=m>_(lHo6xivOpZ&f>uC!@;QeYq7Xwk??A??l+WfNE9Z?2EkL%Wv#M_an#O z7V-RHU16_`=`!82TA4rm(8rLqR>L7ai{!zzrlX7SxeaktAG591iO~0ta}b4E!|rp& z1p?%Fwrk=)^+7#q|Tc3UV`pSkYdj`e$AET3vY9vQcPhF(pV&J=fv3>~M%2hYE{w z|4v#B1s%tngtnwFFCd$;03N+Kpq-M@hYKggNornp29FRC{aI*FcD5uTQas&vSt|cN zY6P507bX>!W6239qsoHm%XC-$>NgsjeiZ}!%dRaLhZy^kg;1H8|-|0uFIORsfB z2tp4cL6{Vqch_fjOD*a2%BjZ-?n~DA=P;$jCTm?#MDOtM)~`8x8V-)=<>hx?7rQb+ z&&i@`Em{JEkDB62N?1PBX-P=HNCiE&*qbc9J0DX;Cl!eP{++T^EI=$vC6*S9AWs?R zm(!Z;b26ch@xnLqDk_s*w$R;4_xa&M8n`J7L6{rO(PDGjpU=oHn*&5G*PA5v%@=P| zd90zft_TuAuXD!2!a^Rq>F6|vmX!7&%qnoVGNWdNv(3T!oxC)U>y0ELVYiaW$42mh zsi`Rn1_m89b%6Ne_3-)rOkAelO-N7A>w~1$8N1E1Vezf4Oz8c;{h5#Z)7Wvn9T}qD z)oOX*qxIf6X<6CP5?yW_TwLqLCP4?N`GO!NB}J$7ZRxv6A>7CL4SEasI51Q`$_#~LV`E<{D^Ki_7qqIx z#l}|eG)zcZfid`;LnCr}g|565Yaj%2e*TP}GV+dSY7!Y88w2+@H#d(?OqA8rBL*>- z>#)>PZ8H&iu{ZTJ4{&gB)zl_2F)@K(zQkl^s`~hdK(}*C)rTm>6MeCCirdo_Id3DI zR5Qiyc2uF&gW4rok;jfRRgp)gt!vB0Umxbo#P82>Ard~jWp?Nq4Fp}b%hr$&h?@QR z`Zy3uKOI*jh1~Xg!0@)`YS~@)Ch1sMl+gYlARruHOc}e}T{-Pem8*gatNjW)I;00T zin4@xaUn3^d9S_F{e?#DJ$CLCCA)n3zAG;E}7v-bgUZ&o_CxNJ>f7WEnup zX?(fXV|laXVFz=ywr{YCC(tIswiK<749(T; z?O5R(hS<0`d3pIPv+hW}?5x&Saaafz_G!4_`>6Z5=6-#kVP;k&siGhxEJ#?lpReN_ z7Q1EnjEtEF7U1c;x21a4CI-At3bFBpbuP}%)ge(&tFNSl4(9PYnC#gakmb#Zc>h3> zkAOHg*WKKmC^l&ENdcF}eEX)Psfj1-ez<ujZab-T z3#sOdO;0?Ai$C6Rd;i-v+5Vf=blisaO&l^R7MQNIP~>x1R9b5B^*pGV67V>t^z`%$ zC*qd1MNj4Xpirt;RN%0ljkO7`|_CnqN$`_<8qi*uMt-ZF#e z$^H3Lt??lwBxH6Qx2AG?r9J56>6 z$1!Dq7|s{FS~vd=iZ|p7BC6A^i&Q2JP`Cer3K-(6~+#=EYH`wh@AG&lo&Oq zf&h(8Na%zfZ;eMsM~~0Wa@2EV5s;CqKFsmiOqD5v0I8Wr;&sv_JBUt8E5-=YauIK9 zYpeb$@0<8>XB6?|4tH4m2ux08f(8KR{bsj%7U)Dc!O#DQ+^Xomy6y? zDO`vkPj4=uy&5V*+sP6tM#f-dau0vs+kYduiZ3F`MT;zE9j1SNs;=hgiX>B1Q^RV# zJ4KU=BsJ*>#_s6ucInR!%FM^Pwp*?eW`1KFB~*wb;o;#Ca@5qULRnyazBi>>v~Pxm zV#7qB)@Cm#C92EIgR$7%!evnT`_n|~D<*}C z31mX`RB3yAd+)B+qR`2N;*Ftud@ylEA5l?Jl`_TBJHuYs`li&_OsuYUhKZaFaN`jW zIIs6$i{0*XZw{sFds-TP!QPajEYK~8fYu5&JDKTpZ%y(`nVu!3jsFy!_I0Q({bj^v zB$nnJy3$S&t%duppgezDhgM#4Axs%!+tDU%zxGlVjRa2{wsE@AKkvTe`%Td0D=IGi zyBa-t1%+(mR=;zQg#eo|B>FY&$MP^r^=rG{S8;;r0adbZBu7rr_lBpUq9R#|KEvl! z{($~&`7@@+dW;-QZsJ3E>q8$1vV&M-rno-)W3t9q(g@O&1)e;SHY(6NH5iy!)B$>2 zf;90jc|LZP;qtM^N$?yg7A*8Xkra~4`V8XGU^wt^On6_8{VJXdFvWYObd5J_*YnG? zwCZL4w_RcCl;6X4^waCACRjRU{dhX~@PRC!XwA4j>BdG|)X_70@##+Tkkyc0AoAkI z*>H?ALGPCFV~}c)v6Txm4VunU%mXw)5aMPvaJL zS!(&neui96%xMU*$X8jZu4sM71jWJ`bAg%6{A7NIjFJ|SUvEBvF%U5qv%6oKgoK6B zFfas_8A6RVT6?mQq#+YF6J7ZEKYqNcnh^l08bQKOPfZP%HrNHo3!#Vy$D4eWje!*I z@iN1-@Njg$+XH?82!nyBxYa4}0I!ObDagplhaT^j9#3xe%EzYSv^y}ykyH|r+8ffwjdtQ}zJTE?m|_ZT3xH#JfQ2Zf?r$*uAPM#gqcoRdf&w7T#)3e?V}_j8j<{)$bymN=%4SRskW@(vP#Vo*3_cpE;CZ< zBA&NrF3%_Ox}|!3+er%YJlpKuWvSUc4M0R=68~W&rBliEwk0R%{xseRb))5hKmua+ zEG8HQc!~kgpNf++2ARSq`u4Cf3JmhFVUG=vIH^oA-)Pzpz(mC!?_2=y=ouQ?e4-4X z0F#ROB+u5^K9S0s%cEhyGE@K)GBGg$_10y{_cA6ask_>GOyKlnETfUhUTs1)0OgDd zYg`EsoETcvDpbh19nKoXpm!+u;&%n#qRanO0xLBb=Hcd z)vL9~kSI55eyVHO*w`YEcV_^vzX0ZF>%s`5l*%LDe{luascxk?DhP{Q?Q)}P`-N2K ze$Uw4(sHcc#nSI;1vxuA8|C@)uHoURC&uP+{7%&%%H~V3KMDdbE-#!3pJHHgyiYh3 zEQC!dwGiAu`A69#>s>&?e{v_6V2ud*O z&sUo(ALjAM-}?ASq|YiWM9i+#NCe1IVH=zda}U55zDDRsxmHX1f_lO>G!WEaV1#Qr z(+Y{t)jC)XeG}XVLLiY<-{y^%aibd)QSY)fT4kwPsxh}Ym`229j`F^W2ypg?``h}p zNMRIAOv}}d5PvRCEd_;Vk5}E|I$+cwJ2r=ekH&ZR6l10J^imff@=pOA6mYL5=y}{W zKjvHrqJ}LN_4rMo1ok2%p?$8aTTvDgyP}m7hm!Pzlqh$qI(sUWI>@49A?L*7$i7Be zc^;TuR}!S(!)b}55&`3ATLoqT)zx8ysf!9QFqAOz(yufP5*EVz{Y`^Ux!|qw(7Jz> zXFr9^Ow+dpocVDl7#M5o7X>u0Y<4}Vl>l=^60CH3p(H~?8L<0#BU1SAyHT^(6A1)E zg&|-!8UVQrlotcU%pA7Z?EO^WkuZpVxK@Db@}vSk?%=#FPQW1H!+P7mX>|-FYk`qF{S0?Y~ya5K(bUjEM)*1&?j=q6!NsdTDTJ)v_jV{Z$>T;iLrU% zs8S^0Sl)Bz^OsR2Q>ys>N~Lt6gvsYGrP4Wtw)XQTq_1QsVYg~ayAX6f;MAaOoNpDQ zCVm#U-m#I~{fb>cg7_u_CD==ZATDGqZ4!%7SD@J%gGvJnT#?7o5x_EsQhV*>c4i~F zPO0KxAf>jTcQq%8F89ZS8ri(v`;n!hY$21P;MfnbjPt!+uPg3qUn@obUU};fU~*8k zUqh0yUrK%^+fctwqZ=!ITnIykM?ilPJNG;PRgYF66>l!~y4${>5djp0M}EEzN?ABD z?=y)sVUvfuYmv)&m)VXtPujy{zoPs2@{)aoUx!H3&CEeFOOp~ylU35pQbjvL&Xxg* zrlQCHV`#eI0vT?0l!O&8KkXXiMG{ME@)G6uFbkC;*OxCiZ~I+y6%A@j^`fMVYjc{g zu^5X)sb`W@IOK62_@E6!^Pbv1Je~Ng-<5-PZ(m#AlsTSs*t2E$=O0!XQ!F5nds}~= zyTz~TikeGETDgGAtW3V`-B$5f{q-Lo*L+)M&^x9oKFB>R(hg`j;KC5{31CC!T%4}E znt-NK_#DGxik@THPL){zIs|0t`@z)CleO-h(Ok4)@kbF>z3O)Z$(*x1LqI{UmDVnr z-kk4%1E0a&SJ&3A_lzI=fVR34k1`~_EU=L;poXIcb6~(pvFqL)`pdODP#{b~z?7-4 zzrf--b+HPB5KF7hutu$I=c$8+mH=mg6oZ^_Dl0)cB4;J3{K+6x?V-%1ONQ-*k+zM0 zU6wIHoLpC*EQYa0<*7z%nh4ihqlU6O8ZLy~wTL~3o#_f10LlXyqG>?Njr@?uJ#2mS z16;B%^WmH!PbsAhP$Ts?aEVx2An|gH%$~e$<4Sh3OWDI7;Mk!SZ#*_Zl z8Fh4dpJZ?7Wx}NoO0i;@55^2quB*K_HJnC_S%KB_;Mu>Q?%5p^%$BsRE(5rZ*Dq?r z$wgCvcnpVyM^Y<(%ep&R+7Hy%4iI@TPbgZTT~5xwa}KJgm&-u~?61Cpkh9QLGxGoBx=l8x$ZWIB2plmyq% zRq8sm`c-vl`$G#%MO;4}6(gd95u^x|DsY12VxM$DJ42>VK(9G9D{I8gSpM1F+3*`3 zogVOr*0a?w8B{ZVSo9~d==}5tgrfpLX(WaCQ1j(te<(h4GN&1muC6YNQByJqH%j>@ zSOpY6VSU}))XeM}0=M$q&I;-o9K4v8aZUpKxYK|G?oUJr!ys}z*(bFv^FlLJ>S8~< z`x~Z_bq9AldJ%D4#q@^2A_~}X7nXi>3b7^y^!8Gl zV3c49wVIQ!*Z#4t66X6$gY>w6_z~Y=5rzjMaP80BvcmqUIkxpcySQVEHcSqxVZ2+e z!_?mM7uYQxL9ZbXX6{zgIhWfQVUO5c+WO0_WPJ>|VG8umX1WBYqvyE1U2~96&VvFPF0y?YuGn${Uc3$ZrwhLM_8Rjp!nw9PBdT1y`bFn z2J5lFV#7lo;BA#4zZ%?+$|5vFqN4JFWjH@?0H9jN&rhsayBtV-p(p255cKg;6v@AIAdB{jaSZ_=s3}cD%OL;i2GKE=c3{qu&U5#+eew!=r?FEgv)(~IB|?I>_APZ>$>evT(iHbhN~ zO{AOT6*F`uqA*sj%^m<8aCPy@eY4;qpy4gpeG&s`?mxbe0j?a6X*c|U2jsMa|H;VC*U&z?uVoRF8nom zkAQiNfQaaMg_Drk7by^|PykTsPsMb~SbwNjojyDQC5+l{%~dL z$xaDPa6OoH3TkohVMqne$p~5{{_Wo;k{jMo)0|BtL3_OeuNj7!aJP}KvHy@huEN_B z9W%ZIAbZX?l8g_5$0Ck`hGuqkyrL8O zUPDO*Qh74v(Fr;Hfu-RLN@FzeC_$g$8erbeR5`^X@CQ7BCtQKU2XHfaJ z3;@RzXhXoLZQC7R6*7$e`k+rMzj{ozxh48BVt%#i)9_)5lCNkIyYZy6M0j{e?G!2k zZ-n3dP5t@zkGaG}He!7w_k?259c;amrb~bn97=3}mD>>^qqJv_VxM~WxIQbcU`J4s&3*5<}>=UJKeUiDi{*wui|ig@#|VeJm}jTCkm*CkkC*#O2DAb&p&#dZ+`+lGpK-1(y-3S3}kTEQ)vX8 zvi@RH9};zxFM9DGNfdR)A!yE3;Y-@4?HiG=Efpr-k--jT&Sa&(Su7-7dVodrocd{D zl>1$Rno)xKr}`UOc_Po)Om}?SS7M;3&NJ)wbgMch?j=8i>(M(w+6<<=gA0g9>97o| zPt@~5pcWM+6W6Dl0RrnVqxbG+kodIRI2YnrV-n<}bE^JL`dTfHzN_0&5bgTPNdxVJ zf!MW>hBV5Vg*WDP;vbB2>G##azsuuf(v4cFdrzvZsh(s%oRIr`NH{Hi)An)h|B(fYE5Z4NSX@T8SdF?HR`G zT5=|Hc?Cm-0oUW=hMuysK3?>>)tLOfE#(8%-yg$-8kc^O$#?lI;=SP9V`V^Rm&$@LChQa6pJ;s+V6+Hq5cL63^e47>kfX+JtZ`un2!LUkaQ>M z&PwUp@K{fTV^(wAN?^@YPY9?hu1_!DP+RQmO^3cu!ia%;X*HVBc)K8#rTl(t2pU{} zvHr%2_4oUl*x1w|-j|qZ$|C1dv8(1hmH_h-mDqW2*{b+H2y5ck7^HlOU|7!yguo=A0>=W^3YW?#fK@AZOHol}i z%ak(>^%*Ah(h{a_;+2VEubnqTXxI z_DW5V{9_sjl2GGzDv6=W3MWLT#j1|sYKxfHSW0{U)G1vDT4?nz}PFl$?ZrY>-Yx=brL zOxh3tL4Hy!f5O;Xf?4|Y4x-{1RJj}$MPPo}FBHkBfJlcv558a99?5y)*Ew=gpe@`E z5R#FR@w+EohL4uCv;-g_AtMGXdD$ULWiOOhb)z%oL|quQ+oU*BmKCz_t2#0D`w65C z8`@l7V(OdhAa&>>&}Q2k-l2VdJyR1|AS@T_^o|?UZO0vA47j~$i>d@K^e?P>qsycC z=9CuD7_pKo+{qalW%ikxhFdAkeqIAYYB_M(B-(MXv0q6`Bfx-xTAr+SK6!vNa*>XQ z^MZQ6?0{k1X<8ATo~{gZc?lcsSW))A1LL@%_> zb?G^1u)Z-#OpqPU5M{ntFQ(QiReVi}<&ggGpfpJIU-95X$ zms0o9%W44uk{m%-CT!)R?TBoaH z6R?Xz64VlyjZJ12mM6!%viCt8XbjYY!TNlzPpEHpHUhANOzjszPL zF?09Gna(MQ1)6Dh^{uhA6h3PlZ5UO{#Pp%YjDmc$cis~8pVwH{6ece5&bCOPP59v4-QB4(iS!>~GhMe$$r#oLRF(02M}>0^ z(EZ)&2KHIltPx2Eo^UFFdN&#LYhGaL(L0>u??n9RJ8gR<-RR2t^mUU@Q>Lzcr`dU`9rvV_GR zS`o#~_Sf$>>h|!aR$`2L1oYBUkH@UJOwJL1%frnI6mC{;w3VRVju89%i};Ox(NogY zh7QsD&Nm`C;!cY=wdYCf$*b7+5M6nL=Y3|;)wQr&Vco!f$Z_9kY$l@CvzWkLI&>OJ zUUd1(tHSWJa=ZJ!yvpGv+#5xDmG~E>IxCY)L!{zHWd*1y4d&T*ht!wn3+T(#r z-)g0ePKKy!AKdQNxHm#mqv^`QCCw|F7msruGr089QDR%|KW#1kNxx@@jJjUDq1#4- z7Y;EWE()JRGFNi$b>$Y)T30K2QE6}oQ??%jS&&Lu8&dMh7)RATWK3lW`iUH-;<^() zp3}m-ZE6~@Ow~%LSd)YQY166KIGiEv!12x3?U((#{Op2myD0M5-|g{p{`;zLj8qpa zTg4hMME=E|&hSsL6j5G;Le3(q@qUi?@ceAgH*2#7)H(2}XlVnvExWK^)K+%1i?Nk? z(1!EN{VBM{m!-O@6F6e{^fu40Sx+HS&cHzazD^*SSnnTW^0S?sb?uIoySwHTXa(&) zWsL#mr&VWT>a|)#&%nuASj$=D%M-Lh842l)ucKY!Vz~bJM=aTvw@}yq!ww4!+TvsC zo7>io1uJ<^&-a_6v_39sw|Ar2!_5qQjf|n{i}vv|+KfrCDZqK=<06;u z?NhwBf3k0P8i-Sov$?6fc+OTV&cPIy%l`I1lU>wqcLci=93;;RHrw}Z@X}!9#!Y@2 zowkaNwC1`AbXP(9TM8P3-Ro3R(-oGgi2sa)5bI~~JRk(`LY~$&dwXkLgP*2g8Fj&e zsvJDVZo1DORIRCX+1sI80$X|BUdU5&bNS7`?gh zZ(3x6w|C-In$vd>3A&kMq_b}V=-=^zg-nM_O_gtp~ zsABZhc{)p3iWm2EU6{L9Fiy&9Ol{F;-W#LUMlABtPgcLycflDc{9BJ)V-)ARbx8Wd zOd7rUjDA%$TaxAb#hg;rtIhA1N{FZ^8lL8qyi+klVa zL+B7MXVxYKLC8e#rkk`%mSfa9&VHBo|UVaFpnUh3)kDSY(`;tN+VU@n9B)6dLZ!9{U83 zFZ_<7V1c6u6?VgADCHa1!)R3jk{O75YrpOVqoV-bf0HaNkDOo1$g(}GN491gLy56Z z7;g@fss)mQ#^`fjlKF2OHW0zlZYP>epuCpPaeBD({61|ZaJuM?MksPsZecs=sAS;) zM`M-{Bzv03XV>EYPw1cT38dKiuuvPQqQSK1!e6u}9m$S2cp0+bkU~k^7YEH&M zjFf1~q~aene@KG3ifgKYURIAB3By(<;hVcYWeug**7Go%?byxNj%!=Fy;x%#XU zr?_z7Hj;)Z=O-UNVzf>_@@wpmhC}P_J2A~jOT*1+xlEgW%+})oXyG#KZ3(5Y_!6#$ z8{Rt8<8NjoqdXZ=pAh1Eftp7}u~}aw!9;fg&ZCNlRH_lV*CM@_;(1R%Q%e(bN3#4B{TW^gVLk@>r7 zrX|anX7A7@^xh#yfmAGC>5efLk4Ib9>+|skb_jOgS^T_U$(wk>Dx6GQZ_n%cp&PH< z3bu}PEH4k9*^=qDfDrSWtY^ayOB zAu6{@Qvp+kc3`OYEM+H0?f(R=n&q%X5&NSxE3t2`Hr}XmXDclE?Y16$KJ(uNQZXS* zL9)fR5udB8f5jT4AQ)An$XOODG1MAN&J8&Lrmg(`1n-vD9w+4_mG)I5I<1r_l40p3 z@iTpMNm3Unk-@@yV`s(wywn{l5UF&|A`iD~y257_%lGA?exya$YI45|J|1An^uIM( z|&rI$y%3zfjjs6)ZEK{ zctosRxlG1QXXG@|9P~V%KYqJP=8u};kGBvDk5&KEqE*oIbB=2uNS%vmIxY4YMk8y# z4>0F2`Zj|9jP)K zCbys+n6Ee5@$x)7kKHx;vg+KzCNbK zJSnNJf+7J%=2MsDf!8)=%<}zFVr?G9UCl)hCRXi~*+6+eJkqCZeu0B6YxnXCJ%%vM zarZTa_2|#f??sUI_{7(*A({e$cw4-IDoz*wh`Y0QTrAr5bs!3V5JqnFjvGFR4Kj## zRVf~=W%?jtdap(MzP1j@jl4gtGF3>8z1|=sGnFU|$$fqUpo`5!q04p2km_E8h9dGQ zJxAl?Ek7#Z{}}Jk2s%?G!GF^h|Kq;Kbj#SrwD9u-dk80;QZK~Le|0gn)~n8Xn9WbM zYv~JTBOzU|pk|oV-p_WdHawZ@SI$qGOOz0*_BJv|5C5VaqxYOb$4Rs?hDByT(O@Wm ziLdAf*cnZ#a+4T2q7b|mb>`Uk#|=Y0n=+{A+M)Jzxe`{lf$f!s?Wd+o^3HVrI0`8= zS!KWQH;PAQQlFvW*B*7mlQ1J|$++36n7-}bBO_1XA_b{ZumA28=a@AG-j zv*v;YcG{OL0x^ZrID3DfhkmP&9H&C=_MKrNbh4uCt8L?>X_?1j%r;0WzSz98%q)P*_IveZ ze=aKb!dUsXQXNeH3#Ayq8pl}gLx%#H?2m1!5gVa8G& z2qYo9{-)pVnAOt+HdZyA^`Q6!%vG&O^74>*ZAP(1ntD_)cM`2N9KGK#+E)sOROQL_ zNjnQZ(bEFXQN#F^zft4ciQ=gaYp8m9gU0+HT-j`DkG9vE2&#l3q06W=D{OQFL1CRe zMQ}EF9ZqD6FDIO(R(nMXcf0Q@`q)pN*oz-8w z`vp?w#dhmh;sOU1IC6iGZ@hISiZo~4&%b=}0!1@0q~HMsel=MAmvJ*!i~GNHp)?&q z4h6o6a%PB?Xrd?Hqejn$w}Wv;v$d?+T$ARF#-dGOg3m1~f>xY%qW7=V!tV-{4ev-# z)^X<|d_6}wP|no-M0AZ7(tWi~543k~0*J#?zg_p8uCBkK8B_m?&3UJ9VpK#+4QCq2 zkonDiC}8j9d`9rln|XiS5zo=UI$^Z3d`C;_y1q&1#kk1$tDsa=PsynZjaebN49494 zO{I#rsEZjoH%nfzwO@!dV*ckt6roozn=KGK7!z-JUOoH&-ox;ccP@6?JIJ_e=Z#6s%+QR&~{ z^`k}M$u%Yk-vGl63BP?w>MUS0kJg49;IS-_u3s-ua=Pq)%iq{Gst}7&olQ_{3%s**E)glMRb9Wn9EznkpZ;mW zl~>jx2s3v{rvy}Vc{mi2;OlXlzyX_33LFnBOvrfAA5Z+V*4fDw&rZzJBrpr;vf9LI7 zvd@Ae8EpA{xz~xpCUeO^m&e`8o*=n_3%oosqf47zc_He0djMq^-_=`=Y-P_yB~(;Y za^tFjUE9Pxls^0`8sm&Wq&t67f- zXYRr*m*WSm@lJjjTok2cVrI2I)K_#L9%oW?RUU`lY_5HPZZ{ZC!!DuO`X)J&$1PCq zuhlqVscP_XAvKu`(V45gi#0VR3Ej?mCVgW{M{Sp&L_{8qW z7?H_C61Cu9R0z)n@js8i#LDNUGRm8nuvFOY?i9^Q!E!kJ1@)dqg)#F{E#{f8m6Hz# zb;bnSlpIZ86$4YF;P58ECfJ6Ll>BbCiDCDYlP=XB;twl9CPtgEyF2|<(PAU!cP--y z9dDSrtX}cMeG2Wy2(}TUMP1KklR2ouR097AKle3})I2jOIr7EL=6mq+z32QL)O3CH zY2vN%hr9HhZrBf--pVbb7l;#B0E7;v^5f*EV)YcsA3JCNjjZ0+_-bR3-s5 zLR{WhE8=LJ(C<%*F0Ny0IAF2%velyg3UwQq`rsh%|T8Ar_YI%)t)MsQ|MLS&FG5O1*ro_5BOwqif*H?dH zryiZd&-RSf@5OG?2w(I3J;KAy`7kC2CC-pBcq+BBtjdNj*I(?3HjZi3U3SL6*riqt zJsCUlQBg4OW`y?+#Jov^4)GkFQoS(m6m&X*PQSC6h$W-cbDuoaauIM zuXl3N_;PVk(AECBRcpk(2zy7+xVOqNZ^@;_Hb?DzlcoaC_X4g!cD9@Ma=LG0Pw-18m=fbtQW~MxC6DU$e`((4w=L$D z7_TPZACe`qhHn;M(H@-r(3Llu8ply&Ht7g6YGrXbdE8`tba=SPwyR^QgLO0&JC}|! zertlOkq0YC=obxM_HaC1mxlqpp3k)MV5<`71@(YeaIC?GBxHRuh{Z(mT(iTcE?YcD zwH1e6T2*Esi1`LY0x%{EgRdQB9`{rqjoJbQR(DbGfOr{geSFm!=pkvWdi83m3@ZMN zteA`?XF&F8)k@6Z=2F~4jgyM}FM9+VUL|JLg3yGI$W%SIF}Z-66Sk#+5N49UcQb=J z{Q?8-LS@S@0aHlfo2k%0wl9ZqzHWrZoeU>CRCTr@i`*19>toe*t72C(xW1;6=OdWS zesgjRLcCOu4w2@TBICo4Uh2Q}3FZlDOOp|#azf9d7>AG*^f(LK=znO!XY*5l4VW@) zH@f+YlDq9!UtSog{c`7_k~Qeqc)5GADOFy+T5x0~8Qud84RDnN+5|3w8F)G%kZxgs zI)MVzv`p&{R8C6%{+~F7K#s12KK%JiDW4v_Q8RA6X`a9F7r3(8=VZ#k*fO=5iV3fA z`wNHveEt~w1ILj6a90?I-;{RP^$;ET`LTt1HT?2nc5rtR^7EgVb&XBJZlAo3Nl|O% zXSe#G?XN_fbdlSf!}yR9OI&r{^sY>8iLu@5rk)?&avXR6R)^K_5IubYw;D_ot`T=b zj591u#xJs`UeM^<@Y(RNSa;GA8%{rq;$w2Xb)opiZD71<{t@g5GzUA)L1S2xx>x0z zPQY@A^x%bQVSKv};Z8B8YYi1+xu53%h;nHCyQ<(tznPf92>a!Qd)A5jz^$X4aqPG7 z)R#fm1;H)c2G)0EgP-*QemhAm5rtmYrPsj+!Au9~dKZpFH43}GMek!Sk9WV!%}$Am zN9x<-lkZ2acOPRs^mU@Wv?tzBSC-Q}i#hjZl5fq2i>{W{y}TojKMGBpuqSpno`6EJ zS@a19^MmllvRYa~RY#SAr>4Kb)g{BPTKHOSN=1AOwvxM$^V%>xaH+Ll_|~G(ZjB%v z;kWH{hqztmv)X~$$QVqv!9!tlo`cX}Cr0Dzizlt>IT%EI|JN+v@)+$B0D_x3mgojA zIHkR?<%{rR zfHt%2@eUQCU*qUTc1v*qHg@gI*Lwrfs>Ha!vY2xC>JeY#80qW}blT0(nM1EVTXMOv z-gB?}w-QmSo$+{EjoOzv_Gec-De>{E?&@EgpH*V~c+~(U=^mYOA5jl#5I~czOp3eB z9@sy0k7D6`+8Bl|?_plQaJ`*efGjrs2hxS7IPOa1?kxx@C>)wTk;Gt1`Cd#Fwnqn4 zo-c&>5bnM}V>)UuZp+<)8gZ}x?hU61*Lr;U(<+rRwG`1Kr8VmA^|+(7Jg;%iJbI=5 zs|EX(!{zeKp-nsk;rrRmh25BIuSl(5v*C+~?z)fUYO;T<)MIE`ZWD@S#ikqMxAeuj z#l7%Iu*p3mv5UiUXfig(q&jm9#6*7>%&pY68?J=`KV80XgU-YN3czc8va*pDB_CNH z=9b(Q9GWKe|K)OG;f`pLF`YdykNFdddeHqWPRX;cvQK~2>WDZHl;x++IInddnheGj zI%Hhi!UO&tg>xgbso41NJchD;&-hbUYv0Zbvd;_m`TdGqqvcj>#xplC#*u_sVfKuu z1y1ryC#0&0uOSI77YUIJwAfJ?`^N7?&xLW}^rSmT>Zt(u+Vtkz49ShA3T&H1?^U=L zc3)&o`zU$&1Ws;b(`R|Xxo1XYWLILmvQS25KaWWA{i6S+hpEw0^=n_T{pLGApHL|r z$A~d@p|7cVt(YEVE|#p1IcQ(>Rts&!p5vup;#)A<=RtrV@}Wjtyqa^eqDMF?IJ#UEL3^%e(6ho zZX{0Ptvpq()Tbng8144@wQy*Z)(yc2-PT3@riL|90{ z1iq_~$Gz=}^xDQ3+%V%ZyS+N&oUeH5aa;x{NtkY#!8iXtuEATlCsvZFF~Vxiy^`vYT(w`Q?4d7nu`n9&{MB zTjrpxr)@ads_lM1Q`NuN)xVuXLWiRkb}Ch;T&b#df%Ukp-i0L8zEWyZXR+Z?u)sqN z;jF?l6%wW?;#*CmgfVAVxI~_6T&VaS+-Xg6zNIyp>94bs_(2w%zH@AWfDr#WXz^pg z`;HgbSZdT{USli$C@6TC*9hL+%W){u_5wvrNGn3TJ0UO_5Ghx z&itRPyo=*XpN{D8SgJbeWoxUJX(E|_ZLrC-tQRig6B&aBdB7b(}x4l zqVM3gw%IS-nw62BO(H7j=@Xt?EX(@jx6-GM@I>a-wgnfHpL|*Jc7=z6fu=hRjUZbP zaUvVIN&q-A!bqlj<3GOKgP-4OCcTd;naFMf5WB!3E#rxu?bXnkwbv82yT2>sJ+`|4 z;;BHa0m}@)gebNDQ2j+rk83PQJnxC_?+||c>*rRIGO1#+v9@u=?in|~W)k??MUUKz za98D~BHFUY6Z1o~z+W>{a^TV0{!rx_9Z{7%3U(CXt z=t;q#!lhE!+@F`X<>vhSJt9Ro#%b8Cj2^Z4&!rrhPA)=_sMp*XfYKlSP zfsxcJ#W#g`o$7nuh);7Sx?ll+D_q)M>g;ImbRJcjcg@^A(?`ani8ZD?A2__8HjaU` z15A#3)GR0kYOEAlM^hHVN6~3nR;PM@MTd8NwfNYh@}s{vChImuugRz^ni}9#-G9@J z+;-Hp$mcU%EimEv40Cr3KiWkmKf?8eM0L%#3N!FSli_q+Lq)hI(drOd6Qa)Rg>r}? zaT}gQ4f|eW;?yjQAfu(>y@AudsMCBHQ=Wk-QT+=sgwx=lK)Dt zwxm_U#bRnEt|*thw6+O=057MckMZYeY5?YjQfY(^S@2u2Hi_FNLweIOX8#H?-?`s9 z(dRoEmj5!nx#&i@Ez`Hah;pj-^7Vcn!BR){JFhq)Bb22@TAWCB-^DzUnEd{Sz$5Nd z5?awnWSr47k9abE?uavNfM}7WVcsnm_gi>yafd$Xa4FRx|$!?q*Gs?uCVCL35ek{j%SmBI}_*4xl8b-21gNFUXfm_#8_cB zs2gNDVod)o9#c}tU7;g>)Wez~-^`z5TzAO}4T)nCXppdCF!z$)m-pOxUP2K@{pAo_ zw10p!W4&9E;f4tnu`bNnZkr!v!l(-ZqW9XBQl^*tI{*&M%tbg~ymI?PmZS}2GWAh%@W>Ox&9385^Nn; zGSJaEpkL!G%u%ibdpKIe_4NN1`|N5ii*Btnj?sJD-Jh7`Kf%r7VdanO-Qe>#WiY5) zdomE>hvP;`b89ikJp;I(4fCODaz~on%mbJv?C)h0!r+YM;+bKqOG*Ar80FJW7iZ^fM@%G%p507NeO%=|Lg^Tc{np*t19bT8%Rkah@Qwuh@bGZA z&A~mQMfRW#9Am0&Zhr9Oo>G+hV*Tpl-|#`d0GLW=x@3~4DO*>YqYY{)je6s=(4GoQ zN+a*&$B!%H*^5aJo`igslen%%Hxp!ZdrLk2cT;Fvdi%mts#LcZ$lTye&%?Jm68Db} zO(hzveJ}tjhRdNVC;04YoMs+I5=UBuM`3`mSfHlgeprvs*7vq?5sk4y`_2mpbOjec zoW|-o=G?J_+okI$NrL<2^7POv@TS=rg|j5Z^C^X8AlFT8Cjgj}thPD5UqkV2y_ysj zjx=3%%0*y-;LpO;aPFCsQ%c(-n@iK>Fb&tTqJW4TIXG9KZi81G_5F=e-5s-G}Cm!`L+iD=K1W7ouHLBhY4$^x{8K{dC(;>B>(d45{nZiiicz$iTYhoI?(0z4;_?42G z#oJ$bOL%~BrzCfF+DocjfIi$eJ{?Fu@OKVk{^97_ek%Wwn;qK^>YS}3(EqGS0h_Cn Lhhx1%P}=_i&RxK* diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi index e3762ef4b2b21a86f2531bf7c3242d4734a9250e..fb1136a5347988a1dd4dd004bf4650465b788872 100644 GIT binary patch delta 13789 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 delta 12012 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 diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi index 98ea94f656d847294586681daf878644ac2aa69b..37d678209927e3c111265f1ad3da899ca9a2e88d 100644 GIT binary patch delta 16825 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 delta 17445 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 Date: Mon, 28 May 2012 20:42:15 +0100 Subject: [PATCH 13/23] Surgeons spawn with scrubs, Emergency Physicians spawn with first responder jackets. --- code/game/jobs/job/medical.dm | 6 ++++++ code/game/objects/items/clothing.dm | 10 ++++++++-- code/modules/clothing/suits/labcoat.dm | 8 +++++++- icons/mob/suit.dmi | Bin 272668 -> 274415 bytes icons/obj/clothing/suits.dmi | Bin 64758 -> 65111 bytes 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index c279ad903e7..6c5aea84a7b 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -52,6 +52,12 @@ if(H.mind.role_alt_title && H.mind.role_alt_title == "Virologist") H.equip_if_possible(new /obj/item/clothing/under/rank/virologist(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/virologist(H), H.slot_wear_suit) + else if(H.mind.role_alt_title && H.mind.role_alt_title == "Emergency Physician") + H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), H.slot_w_uniform) + H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/fr_jacket(H), H.slot_wear_suit) + else if(H.mind.role_alt_title && H.mind.role_alt_title == "Surgeon") + H.equip_if_possible(new /obj/item/clothing/under/rank/medical/blue(H), H.slot_w_uniform) + H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit) else H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), H.slot_w_uniform) H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat(H), H.slot_wear_suit) diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm index 6aafd6c53a8..e52417e67da 100644 --- a/code/game/objects/items/clothing.dm +++ b/code/game/objects/items/clothing.dm @@ -398,10 +398,16 @@ THERMAL GLASSES usr << "You unbutton the labcoat." else if(src.icon_state == "fr_jacket_open") src.icon_state = "fr_jacket" - usr << "You button up the labcoat." + usr << "You button up the jacket." else if(src.icon_state == "fr_jacket") src.icon_state = "fr_jacket_open" - usr << "You unbutton the labcoat." + usr << "You unbutton the jacket." + else if(src.icon_state == "fr_sleeve_open") + src.icon_state = "fr_sleeve" + usr << "You button up the jacket." + else if(src.icon_state == "fr_sleeve") + src.icon_state = "fr_sleeve_open" + usr << "You unbutton the jacket." else usr << "Sorry! The suit you're wearing doesn't have buttons!" usr.update_clothing() diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 5a2a9e2a5d5..0c7f70d202b 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -48,5 +48,11 @@ /obj/item/clothing/suit/storage/labcoat/fr_jacket name = "first responder jacket" - desc = "\"The first moments are the most crucial.\"" + desc = "A high-visibility jacket worn by medical first responsers." icon_state = "fr_jacket_open" + item_state = "fr_jacket" + +/obj/item/clothing/suit/storage/labcoat/fr_jacket/sleeve + name = "first responder jacket" + desc = "A high-visibility jacket worn by medical first responsers. Has rolled up sleeves." + icon_state = "fr_sleeve_open" diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index cf186fb040577c28bbca039bc647f797cdd6d51d..d47291ca99c35f78c43e10af0d48a37ccec5d6f2 100644 GIT binary patch delta 18204 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 diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 510f9879d2c3d47ca59e9185f27cdec6d82f547f..6521cf5f2402ce7b26d5c80d538da58a0824605a 100755 GIT binary patch delta 10067 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 Date: Mon, 28 May 2012 20:42:47 +0100 Subject: [PATCH 14/23] Fixes for response team notes. Soghun removed from staff of change. --- code/game/response_team.dm | 4 ++-- code/modules/projectiles/projectile/change.dm | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 2ab9c5416c9..83d5180bdec 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -27,7 +27,7 @@ client/verb/JoinResponseTeam() new_commando.mind.key = usr.key new_commando.key = usr.key - new_commando << "\blue You are [!leader_selected?"a member":"the LEADER"] of an armed response team in CentComm's service. Something went down on [station_name()] and they're now on code red. Go in there and fix the problem." + new_commando << "\blue You are [!leader_selected?"a member":"the LEADER"] of an Emergency Response Team under CentComm's service. There is a code red alert on [station_name()], you are tasked to go and fix the problem." new_commando << "You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready." del(L) @@ -81,7 +81,7 @@ proc/trigger_armed_response_team(var/force = 0) if(!nuke) nuke = locate() in world var/obj/item/weapon/paper/P = new - P.info = "Your orders, Commander, are to use all necessary tools given to return the station to a survivable condition.
To this end, you have been provided with the best tools we can give in the three areas of Medical Engineering and Security. The nuclear authorization code is: [ nuke ? nuke.r_code : "AHH, THE NUKE IS GONE!"]. Be warned, if you detonate this without good reason, we will hold you to account for damages. Memorise this code, and then burn this message." + P.info = "Your orders, Commander, are to use all means necessary to return the station to a survivable condition.
To this end, you have been provided with the best tools we can give in the three areas of Medicine, Engineering, and Security. The nuclear authorization code is: [ nuke ? nuke.r_code : "AHH, THE NUKE IS GONE!"]. Be warned, if you detonate this without good reason, we will hold you to account for damages. Memorise this code, and then burn this message." P.name = "Emergency Nuclear Code, and ERT Orders" for (var/obj/effect/landmark/A in world) if (A.name == "nukecode") diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 676aaac977b..a9e9039f65f 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -166,10 +166,10 @@ var/last = pick(last_names) O.name = "[first] [last]" O.real_name = "[first] [last]" - var/race = pick("lizard","golem","metroid","plant","normal") + var/race = pick("golem","metroid","plant","normal") switch(race) - if("lizard") - O.mutantrace = "lizard" +// if("lizard") +// O.mutantrace = "lizard" if("golem") O.mutantrace = "golem" if("metroid") From cdb1cb3a4fa8c03201653a03cec3fec2e8471df5 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Mon, 28 May 2012 20:50:45 +0100 Subject: [PATCH 15/23] Fixes a typo, and changelog. --- code/modules/clothing/suits/labcoat.dm | 4 ++-- html/changelog.html | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 0c7f70d202b..f1ebd585db9 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -48,11 +48,11 @@ /obj/item/clothing/suit/storage/labcoat/fr_jacket name = "first responder jacket" - desc = "A high-visibility jacket worn by medical first responsers." + desc = "A high-visibility jacket worn by medical first responders." icon_state = "fr_jacket_open" item_state = "fr_jacket" /obj/item/clothing/suit/storage/labcoat/fr_jacket/sleeve name = "first responder jacket" - desc = "A high-visibility jacket worn by medical first responsers. Has rolled up sleeves." + desc = "A high-visibility jacket worn by medical first responders. Has rolled up sleeves." icon_state = "fr_sleeve_open" diff --git a/html/changelog.html b/html/changelog.html index 668176c0552..5b29924bdaf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,16 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> +

+

27 May 2012

Abi79 updated:

From e2ae20dc074968bf7bbb35f881b04ad42700ef54 Mon Sep 17 00:00:00 2001 From: Aryn Date: Mon, 28 May 2012 15:30:17 -0600 Subject: [PATCH 16/23] Made SkyMarshal's recommended changes. --- code/ZAS/Fire.dm | 5 ++--- code/modules/mob/living/carbon/human/life.dm | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index e74198e8f4c..e96d1070681 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -208,10 +208,9 @@ obj/liquid_fuel amount *= 0.5 -turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. -turf/proc/apply_fire_protection() -turf/simulated/apply_fire_protection() +turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. +turf/simulated/proc/apply_fire_protection() fire_protection = world.time datum/gas_mixture/proc diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 44fa38e6c61..3dfd49d6b0f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -424,8 +424,10 @@ var/datum/gas_mixture/filtered = new() filtered.toxins = breath.toxins filtered.trace_gases = breath.trace_gases.Copy() + filtered.update_values() breath.toxins = 0 breath.trace_gases = list() + breath.update_values() loc.assume_air(filtered) else //Still give containing object the chance to interact From c9478c6a46958e1fe71b3e038f2dbcc5624d8ba7 Mon Sep 17 00:00:00 2001 From: Aryn Date: Mon, 28 May 2012 15:30:17 -0600 Subject: [PATCH 17/23] Made SkyMarshal's recommended changes. --- baystation12.dme | 1 - code/ZAS/Fire.dm | 94 ++++++++++---------- code/modules/mob/living/carbon/human/life.dm | 2 + 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 28d20df74c3..024afe994d0 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -985,7 +985,6 @@ #include "code\WorkInProgress\virus2\monkeydispensor.dm" #include "code\WorkInProgress\virus2\Prob.dm" #include "code\WorkInProgress\Wrongnumber\weldbackpack.dm" -#include "code\ZAS\Airflow.dm" #include "code\ZAS\Connection.dm" #include "code\ZAS\Creation.dm" #include "code\ZAS\Definition.dm" diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index e74198e8f4c..a45b7fa3b3b 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -208,77 +208,75 @@ obj/liquid_fuel amount *= 0.5 -turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. -turf/proc/apply_fire_protection() -turf/simulated/apply_fire_protection() +turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again. +turf/simulated/proc/apply_fire_protection() fire_protection = world.time -datum/gas_mixture/proc - zburn(obj/liquid_fuel/liquid) - //This proc is similar to fire(), but uses a simple logarithm to calculate temp, and is thus more stable with ZAS. - if(temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) - var - total_fuel = toxins - fuel_sources = 0 //We'll divide by this later so that fuel is consumed evenly. - datum/gas/volatile_fuel/fuel = locate() in trace_gases +datum/gas_mixture/proc/zburn(obj/liquid_fuel/liquid) + //This proc is similar to fire(), but uses a simple logarithm to calculate temp, and is thus more stable with ZAS. + if(temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) + var + total_fuel = toxins + fuel_sources = 0 //We'll divide by this later so that fuel is consumed evenly. + datum/gas/volatile_fuel/fuel = locate() in trace_gases - if(fuel) - //Volatile Fuel - total_fuel += fuel.moles + if(fuel) + //Volatile Fuel + total_fuel += fuel.moles + fuel_sources++ + + if(liquid) + //Liquid Fuel + if(liquid.amount <= 0) + del liquid + else + total_fuel += liquid.amount fuel_sources++ - if(liquid) - //Liquid Fuel - if(liquid.amount <= 0) - del liquid - else - total_fuel += liquid.amount - fuel_sources++ - //Toxins - if(toxins > 0.3) fuel_sources++ + if(toxins > 0.3) fuel_sources++ - if(!fuel_sources) return 0 //If there's no fuel, there's no burn. Can't divide by zero anyway. + 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.3) //Calculate the firelevel. - var/firelevel = calculate_firelevel(liquid) + var/firelevel = calculate_firelevel(liquid) //Reaches a maximum practical temperature of around 2750. - temperature = 1000*log(0.016*firelevel + 1.45) + temperature = 1000*log(0.016*firelevel + 1.45) - //Consume some gas. - var/consumed_gas = min(oxygen,0.002*firelevel,total_fuel) / fuel_sources + //Consume some gas. + var/consumed_gas = min(oxygen,0.002*firelevel,total_fuel) / fuel_sources - oxygen -= consumed_gas + oxygen -= consumed_gas - toxins = max(0,toxins-consumed_gas) + toxins = max(0,toxins-consumed_gas) - if(fuel) - fuel.moles -= consumed_gas - if(fuel.moles <= 0) del fuel + if(fuel) + fuel.moles -= consumed_gas + if(fuel.moles <= 0) del fuel - if(liquid) - liquid.amount -= consumed_gas - if(liquid.amount <= 0) del liquid + if(liquid) + liquid.amount -= consumed_gas + if(liquid.amount <= 0) del liquid - update_values() - return consumed_gas*fuel_sources - return 0 + update_values() + return consumed_gas*fuel_sources + return 0 - calculate_firelevel(obj/liquid_fuel/liquid) +datum/gas_mixture/proc/calculate_firelevel(obj/liquid_fuel/liquid) //Calculates the firelevel based on one equation instead of having to do this multiple times in different areas. - var - datum/gas/volatile_fuel/fuel = locate() in trace_gases - fuel_level = 0 - liquid_level = 0 + var + datum/gas/volatile_fuel/fuel = locate() in trace_gases + fuel_level = 0 + liquid_level = 0 - if(fuel) fuel_level = fuel.moles - if(liquid) liquid_level = liquid.amount - return oxygen + toxins + liquid_level*15 + fuel_level*5 + if(fuel) fuel_level = fuel.moles + if(liquid) liquid_level = liquid.amount + return oxygen + toxins + liquid_level*15 + fuel_level*5 /mob/living/carbon/human/proc/FireBurn(mx as num) //Burns mobs due to fire. Respects heat transfer coefficients on various body parts. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 44fa38e6c61..3dfd49d6b0f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -424,8 +424,10 @@ var/datum/gas_mixture/filtered = new() filtered.toxins = breath.toxins filtered.trace_gases = breath.trace_gases.Copy() + filtered.update_values() breath.toxins = 0 breath.trace_gases = list() + breath.update_values() loc.assume_air(filtered) else //Still give containing object the chance to interact From a8215ce62f53e0494296e23c98e98ebfedbdb891 Mon Sep 17 00:00:00 2001 From: Aryn Date: Mon, 28 May 2012 16:42:40 -0600 Subject: [PATCH 18/23] Made some airflow changes. They won't be included in the processing code until they're more thoroughly tested, but the code is here anyway. --- code/ZAS/Airflow.dm | 395 ++++++++++------------------------------- code/ZAS/Definition.dm | 4 +- code/ZAS/Processing.dm | 4 + 3 files changed, 105 insertions(+), 298 deletions(-) diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index 50d8888c853..0e022e3c489 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -12,31 +12,16 @@ atom/movable/airflow_speed The speed (1-15) at which a flying object is traveling to airflow_dest. Decays over time. -CALLABLE PROCS: - -AirflowRepel(turf/T, n, per) - Causes objects to fly away from a point within a single zone. - Called manually by air releasers. T is the location of the expanding gas. - n is the pressure released. per indicates that n is a percent value if nonzero. - RETURNS: Null - -AirflowAttract(turf/T, n, per) - Causes objects to fly to a point within a single zone. - Called manually by air consumers. T is the location of the attractor. - n is the pressure consumed. per indicates that n is a percent value if nonzero. - RETURNS: Null - - OVERLOADABLE PROCS: mob/airflow_stun() Contains checks for and results of being stunned by airflow. - Called when airflow quantities exceed AF_HUMAN_STUN_THRESHOLD. + Called when airflow quantities exceed airflow_medium_pressure. RETURNS: Null atom/movable/check_airflow_movable(n) Contains checks for moving any object due to airflow. - n is the percent of 1 Atmosphere that is flowing. + n is the pressure that is flowing. RETURNS: 1 if the object moves under the air conditions, 0 if it stays put. atom/movable/airflow_hit(atom/A) @@ -47,10 +32,9 @@ atom/movable/airflow_hit(atom/A) AUTOMATIC PROCS: -Airflow(zone/A, zone/B, n) +Airflow(zone/A, zone/B) Causes objects to fly along a pressure gradient. Called by zone updates. A and B are two connected zones. - n is the pressure difference between them. AirflowSpace(zone/A) Causes objects to fly into space. @@ -66,112 +50,17 @@ atom/movable/RepelAirflowDest(n) vs_control/var - zone_update_delay = 10 - zone_update_delay_NAME = "Zone Update Delay" - zone_update_delay_DESC = "The delay in ticks between updates of zones. Increase if lag is bad seemingly because of air." - zone_share_percent = 5 - zone_share_percent_NAME = "Zone Connection Transfer %" - zone_share_percent_DESC = "Percent of gas per connected tile that is shared between zones." - //Used in /mob/carbon/human/life - OXYGEN_LOSS = 2 - OXYGEN_LOSS_NAME = "Damage - Oxygen Loss" - OXYGEN_LOSS_DESC = "A multiplier for damage due to lack of air, CO2 poisoning, and vacuum. Does not affect oxyloss\ - from being incapacitated or dying." - TEMP_DMG = 2 - TEMP_DMG_NAME = "Damage - Temperature" - TEMP_DMG_DESC = "A multiplier for damage due to body temperature irregularities." - BURN_DMG = 6 - BURN_DMG_NAME = "Damage - Fire" - BURN_DMG_DESC = "A multiplier for damage due to direct fire exposure." + airflow_lightest_pressure = 35 + airflow_light_pressure = 50 + airflow_medium_pressure = 80 + airflow_heavy_pressure = 100 + airflow_heaviest_pressure = 150 - AF_TINY_MOVEMENT_THRESHOLD = 50 //% difference to move tiny items. - AF_TINY_MOVEMENT_THRESHOLD_NAME = "Airflow - Tiny Movement Threshold %" - AF_TINY_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which items with the tiny weight class will move." - AF_SMALL_MOVEMENT_THRESHOLD = 70 //% difference to move small items. - AF_SMALL_MOVEMENT_THRESHOLD_NAME = "Airflow - Small Movement Threshold %" - AF_SMALL_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which items with the small weight class will move." - AF_NORMAL_MOVEMENT_THRESHOLD = 90 //% difference to move normal items. - AF_NORMAL_MOVEMENT_THRESHOLD_NAME = "Airflow - Normal Movement Threshold %" - AF_NORMAL_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which items with the normal weight class will move." - AF_LARGE_MOVEMENT_THRESHOLD = 100 //% difference to move large and huge items. - AF_LARGE_MOVEMENT_THRESHOLD_NAME = "Airflow - Large Movement Threshold %" - AF_LARGE_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which items with the large or huge weight class will move." - AF_DENSE_MOVEMENT_THRESHOLD = 120 //% difference to move dense crap and mobs. - AF_DENSE_MOVEMENT_THRESHOLD_NAME = "Airflow - Dense Movement Threshold %" - AF_DENSE_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which dense objects (canisters, etc.) will be shifted by airflow." - AF_MOB_MOVEMENT_THRESHOLD = 175 - AF_MOB_MOVEMENT_THRESHOLD_NAME = "Airflow - Human Movement Threshold %" - AF_MOB_MOVEMENT_THRESHOLD_DESC = "Percent of 1 Atm. at which mobs will be shifted by airflow." - - AF_HUMAN_STUN_THRESHOLD = 130 - AF_HUMAN_STUN_THRESHOLD_NAME = "Airflow - Human Stun Threshold %" - AF_HUMAN_STUN_THRESHOLD_DESC = "Percent of 1 Atm. at which living things are stunned or knocked over." - - AF_PERCENT_OF = ONE_ATMOSPHERE - AF_PERCENT_OF_NAME = "Airflow - 100% Pressure" - AF_PERCENT_OF_DESC = "Normally set to 1 Atm. in kPa, this indicates what pressure is considered 100% by the system." - - AF_SPEED_MULTIPLIER = 4 //airspeed per movement threshold value crossed. - AF_SPEED_MULTIPLIER_NAME = "Airflow - Speed Increase per 10%" - AF_SPEED_MULTIPLIER_DESC = "Velocity increase of shifted items per 10% of airflow." - AF_DAMAGE_MULTIPLIER = 5 //Amount of damage applied per airflow_speed. - AF_DAMAGE_MULTIPLIER_NAME = "Airflow - Damage Per Velocity" - AF_DAMAGE_MULTIPLIER_DESC = "Amount of damage applied per unit of speed (1-15 units) at which mobs are thrown." - AF_STUN_MULTIPLIER = 1.5 //Seconds of stun applied per airflow_speed. - AF_STUN_MULTIPLIER_NAME = "Airflow - Stun Per Velocity" - AF_STUN_MULTIPLIER_DESC = "Amount of stun effect applied per unit of speed (1-15 units) at which mobs are thrown." - AF_SPEED_DECAY = 0.5 //Amount that flow speed will decay with time. - AF_SPEED_DECAY_NAME = "Airflow - Velocity Lost per Tick" - AF_SPEED_DECAY_DESC = "Amount of airflow speed lost per tick on a moving object." - AF_SPACE_MULTIPLIER = 2 //Increasing this will make space connections more DRAMATIC! - AF_SPACE_MULTIPLIER_NAME = "Airflow - Space Airflow Multiplier" - AF_SPACE_MULTIPLIER_DESC = "Increasing this multiplier will cause more powerful airflow to space." - AF_CANISTER_MULTIPLIER = 0.25 - AF_CANISTER_MULTIPLIER_NAME = "Airflow - Canister Airflow Multiplier" - AF_CANISTER_MULTIPLIER_DESC = "Increasing this multiplier will cause more powerful airflow from single-tile sources like canisters." - -mob/proc - Change_Airflow_Constants() - set category = "Debug" - - var/choice = input("Which constant will you modify?","Change Airflow Constants")\ - as null|anything in list("Movement Threshold","Speed Multiplier","Damage Multiplier","Stun Multiplier","Speed Decay") - - var/n - - switch(choice) - if("Movement Threshold") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_DENSE_MOVEMENT_THRESHOLD) as num - n = max(1,n) - vsc.AF_DENSE_MOVEMENT_THRESHOLD = n - world.log << "vsc.AF_DENSE_MOVEMENT_THRESHOLD set to [n]." - if("Speed Multiplier") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_SPEED_MULTIPLIER) as num - n = max(1,n) - vsc.AF_SPEED_MULTIPLIER = n - world.log << "vsc.AF_SPEED_MULTIPLIER set to [n]." - if("Damage Multiplier") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_DAMAGE_MULTIPLIER) as num - vsc.AF_DAMAGE_MULTIPLIER = n - world.log << "AF_DAMAGE_MULTIPLIER set to [n]." - if("Stun Multiplier") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_STUN_MULTIPLIER) as num - vsc.AF_STUN_MULTIPLIER = n - world.log << "AF_STUN_MULTIPLIER set to [n]." - if("Speed Decay") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_SPEED_DECAY) as num - vsc.AF_SPEED_DECAY = n - world.log << "AF_SPEED_DECAY set to [n]." - if("Space Flow Multiplier") - n = input("What will you change it to","Change Airflow Constants",vsc.AF_SPEED_DECAY) as num - vsc.AF_SPEED_DECAY = n - world.log << "AF_SPEED_DECAY set to [n]." - - -//The main airflow code. Called by zone updates. -//Zones A and B are air zones. n represents the amount of air moved. + airflow_damage = 0.3 + airflow_stun = 0.15 + airflow_speed_decay = 1 mob/proc/airflow_stun() if(weakened <= 0) src << "\red The sudden rush of air knocks you over!" @@ -196,8 +85,7 @@ atom/movable/proc/check_airflow_movable(n) if(anchored && !ismob(src)) return 0 - if(!istype(src,/obj/item) && n < vsc.AF_DENSE_MOVEMENT_THRESHOLD) return 0 - if(ismob(src) && n < vsc.AF_MOB_MOVEMENT_THRESHOLD) return 0 + if(!istype(src,/obj/item) && n < vsc.airflow_heavy_pressure) return 0 return 1 @@ -212,177 +100,125 @@ obj/item/check_airflow_movable(n) . = ..() switch(w_class) if(2) - if(n < vsc.AF_SMALL_MOVEMENT_THRESHOLD) return 0 + if(n < vsc.airflow_lightest_pressure) return 0 if(3) - if(n < vsc.AF_NORMAL_MOVEMENT_THRESHOLD) return 0 + if(n < vsc.airflow_light_pressure) return 0 if(4,5) - if(n < vsc.AF_LARGE_MOVEMENT_THRESHOLD) return 0 + if(n < vsc.airflow_medium_pressure) return 0 -proc/Airflow(zone/A,zone/B,n) +//The main airflow code. Called by zone updates. +//Zones A and B are air zones. n represents the amount of air moved. - //Now n is a percent of one atm. - n = round((n/vsc.AF_PERCENT_OF)*100,0.1) +proc/Airflow(zone/A,zone/B) + + var/n = B.air.pressure - A.air.pressure //Don't go any further if n is lower than the lowest value needed for airflow. - if(abs(n) < vsc.AF_TINY_MOVEMENT_THRESHOLD) return + if(abs(n) < vsc.airflow_lightest_pressure) return //These turfs are the midway point between A and B, and will be the destination point for thrown objects. var/list/connected_turfs = A.connections[B] //Get lists of things that can be thrown across the room for each zone. - var/list/pplz = A.movables() - var/list/otherpplz = B.movables() + var/list/pplz = A.movable_objects + var/list/otherpplz = B.movable_objects for(var/atom/movable/M in pplz) + if(M.last_airflow > world.time - 150) continue + //Check for knocking people over - if(ismob(M) && n > vsc.AF_HUMAN_STUN_THRESHOLD) + if(ismob(M) && n > vsc.airflow_medium_pressure) if(M:nodamage) continue M:airflow_stun() if(M.check_airflow_movable(n)) //Check for things that are in range of the midpoint turfs. - var/fail = 1 + var/list/close_turfs = list() for(var/turf/U in connected_turfs) - if(M in range(U)) fail = 0 - if(fail) continue + if(M in range(U)) close_turfs += U + if(!close_turfs.len) continue //If they're already being tossed, don't do it again. if(!M.airflow_speed) - M.airflow_dest = pick(connected_turfs) //Pick a random midpoint to fly towards. + M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards. - spawn M.GotoAirflowDest(abs(n) * (vsc.AF_SPEED_MULTIPLIER/10)) - //Send the object flying at a speed determined by n and AF_SPEED_MULTIPLIER. + spawn M.GotoAirflowDest(abs(n)/20) //Do it again for the stuff in the other zone, making it fly away. for(var/atom/movable/M in otherpplz) - if(ismob(M) && abs(n) > vsc.AF_HUMAN_STUN_THRESHOLD) + if(M.last_airflow > world.time - 150) continue + + if(ismob(M) && abs(n) > vsc.airflow_medium_pressure) if(M:nodamage) continue M:airflow_stun() if(M.check_airflow_movable(abs(n))) - var/fail = 1 + var/list/close_turfs = list() for(var/turf/U in connected_turfs) - if(M in range(U)) fail = 0 - if(fail) continue + if(M in range(U)) close_turfs += U + if(!close_turfs.len) continue - if(M && !M.airflow_speed) + //If they're already being tossed, don't do it again. + if(!M.airflow_speed) - M.airflow_dest = pick(connected_turfs) + M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards. - spawn M.RepelAirflowDest(abs(n) * (vsc.AF_SPEED_MULTIPLIER/10)) + spawn M.RepelAirflowDest(abs(n)/20) proc/AirflowSpace(zone/A) //The space version of the Airflow(A,B,n) proc. - var/n = (A.air.oxygen + A.air.nitrogen + A.air.carbon_dioxide)*vsc.AF_SPACE_MULTIPLIER - //Here, n is determined by the space multiplier constant and the zone's air. + var/n = A.air.pressure + //Here, n is determined by only the pressure in the room. - n = round((n/vsc.AF_PERCENT_OF)*100,0.1) - - if(n < vsc.AF_TINY_MOVEMENT_THRESHOLD) return + if(n < vsc.airflow_lightest_pressure) return var/list/connected_turfs = A.space_tiles //The midpoints are now all the space connections. - var/list/pplz = A.movables() //We only need to worry about things in the zone, not things in space. + var/list/pplz = A.movable_objects //We only need to worry about things in the zone, not things in space. for(var/atom/movable/M in pplz) - if(ismob(M) && n > vsc.AF_HUMAN_STUN_THRESHOLD) + if(M.last_airflow > world.time - 150) continue + + if(ismob(M) && n > vsc.airflow_medium_pressure) if(M:nodamage) continue M:airflow_stun() if(M.check_airflow_movable(n)) - var/fail = 1 + var/list/close_turfs = list() for(var/turf/U in connected_turfs) - if(M in range(U)) fail = 0 - if(fail) continue + if(M in range(U)) close_turfs += U + if(!close_turfs.len) continue + //If they're already being tossed, don't do it again. if(!M.airflow_speed) - M.airflow_dest = pick(connected_turfs) + + M.airflow_dest = pick(close_turfs) //Pick a random midpoint to fly towards. spawn - if(M) M.GotoAirflowDest(n * (vsc.AF_SPEED_MULTIPLIER/10)) + if(M) M.GotoAirflowDest(n/20) //Sometimes shit breaks, and M isn't there after the spawn. -proc/AirflowRepel(turf/T,n,per = 0) - - //This one is used for air escaping from canisters. - var/zone/A = T.zone - if(!A) return - - n *= vsc.AF_CANISTER_MULTIPLIER - - if(!per) - n = round((n/vsc.AF_PERCENT_OF) * 100,0.1) - - if(n < 0) return - if(abs(n) > vsc.AF_TINY_MOVEMENT_THRESHOLD) - - var/list/pplz = A.movables() - - for(var/atom/movable/M in pplz) - var/relative_n = n / max(1,get_dist(T,M)/2) - if(ismob(M) && relative_n > vsc.AF_HUMAN_STUN_THRESHOLD) - if(M:nodamage) continue - M:airflow_stun() - - if(M.check_airflow_movable(relative_n)) - - if(!(M in range(T))) continue //Recall that T is the center of the repelling force. - - if(!M.airflow_speed) - M.airflow_dest = T - spawn M.RepelAirflowDest(relative_n * (vsc.AF_SPEED_MULTIPLIER/10)) - -proc/AirflowAttract(turf/T,n,per=0) - - //Same as above, but attracts objects to the target. - - var/zone/A = T.zone - if(!A) return - - n *= vsc.AF_CANISTER_MULTIPLIER - - if(!per) - n = round((n/vsc.AF_PERCENT_OF) * 100,0.1) - - if(n < 0) return - if(abs(n) > vsc.AF_TINY_MOVEMENT_THRESHOLD) - //world << "Airflow!" - var/list/pplz = A.movables() - for(var/atom/movable/M in pplz) - //world << "[M] / \..." - - var/relative_n = n / max(1,get_dist(T,M)/2) - - if(ismob(M) && relative_n > vsc.AF_HUMAN_STUN_THRESHOLD) - if(M:nodamage) continue - M:airflow_stun() - - if(M.check_airflow_movable(relative_n)) - - if(!(M in range(T))) continue - - if(!M.airflow_speed) - M.airflow_dest = T - spawn M.GotoAirflowDest(relative_n * (vsc.AF_SPEED_MULTIPLIER/10)) - atom/movable var/turf/airflow_dest var/airflow_speed = 0 var/airflow_time = 0 + var/last_airflow = 0 proc/GotoAirflowDest(n) if(!airflow_dest) return if(airflow_speed < 0) return + if(last_airflow > world.time - 150) return if(airflow_speed) airflow_speed = n return + last_airflow = world.time if(airflow_dest == loc) step_away(src,loc) if(ismob(src)) @@ -407,7 +243,7 @@ atom/movable while(airflow_speed > 0) if(airflow_speed <= 0) return airflow_speed = min(airflow_speed,15) - airflow_speed -= vsc.AF_SPEED_DECAY + airflow_speed -= vsc.airflow_speed_decay if(airflow_speed > 7) if(airflow_time++ >= airflow_speed - 7) sleep(1 * tick_multiplier) @@ -420,17 +256,18 @@ atom/movable step_towards(src, src.airflow_dest) if(ismob(src) && src:client) src:client:move_delay = world.time + 10 airflow_dest = null - airflow_speed = -1 - spawn(150 * tick_multiplier) airflow_speed = 0 + airflow_speed = 0 if(od) density = 0 proc/RepelAirflowDest(n) if(!airflow_dest) return if(airflow_speed < 0) return + if(last_airflow > world.time - 150) return if(airflow_speed) airflow_speed = n return + last_airflow = world.time if(airflow_dest == loc) step_away(src,loc) if(ismob(src)) @@ -455,7 +292,7 @@ atom/movable while(airflow_speed > 0) if(airflow_speed <= 0) return airflow_speed = min(airflow_speed,15) - airflow_speed -= vsc.AF_SPEED_DECAY + airflow_speed -= vsc.airflow_speed_decay if(airflow_speed > 7) if(airflow_time++ >= airflow_speed - 7) sleep(1 * tick_multiplier) @@ -468,8 +305,7 @@ atom/movable step_towards(src, src.airflow_dest) if(ismob(src) && src:client) src:client:move_delay = world.time + 10 airflow_dest = null - airflow_speed = -1 - spawn(150 * tick_multiplier) airflow_speed = 0 + airflow_speed = 0 if(od) density = 0 @@ -481,8 +317,7 @@ atom/movable . = ..() atom/movable/proc/airflow_hit(atom/A) - airflow_speed = -1 - spawn(50 * tick_multiplier) airflow_speed = 0 + airflow_speed = 0 airflow_dest = null mob/airflow_hit(atom/A) @@ -498,8 +333,7 @@ obj/airflow_hit(atom/A) . = ..() obj/item/airflow_hit(atom/A) - airflow_speed = -1 - spawn(50 * tick_multiplier) airflow_speed = 0 + airflow_speed = 0 airflow_dest = null mob/living/carbon/human/airflow_hit(atom/A) @@ -511,76 +345,43 @@ mob/living/carbon/human/airflow_hit(atom/A) src.wear_suit.add_blood(src) if (src.w_uniform) src.w_uniform.add_blood(src) - var/b_loss = airflow_speed * vsc.AF_DAMAGE_MULTIPLIER - for(var/organ in src:organs) - var/datum/organ/external/temp = src:organs["[organ]"] - if (istype(temp, /datum/organ/external)) - switch(temp.name) - if("head") - temp.take_damage(b_loss * 0.2, 0) - if("chest") - temp.take_damage(b_loss * 0.4, 0) - if("diaper") - temp.take_damage(b_loss * 0.1, 0) - spawn UpdateDamageIcon() + var/b_loss = airflow_speed * vsc.airflow_damage + + var/blocked = run_armor_check("head","melee") + apply_damage(b_loss/3, BRUTE, "head", blocked, 0, "Airflow") + + blocked = run_armor_check("chest","melee") + apply_damage(b_loss/3, BRUTE, "chest", blocked, 0, "Airflow") + + blocked = run_armor_check("groin","melee") + apply_damage(b_loss/3, BRUTE, "groin", blocked, 0, "Airflow") + if(airflow_speed > 10) - paralysis += round(airflow_speed * vsc.AF_STUN_MULTIPLIER) + paralysis += round(airflow_speed * vsc.airflow_stun) stunned = max(stunned,paralysis + 3) else - stunned += round(airflow_speed * vsc.AF_STUN_MULTIPLIER/2) + stunned += round(airflow_speed * vsc.airflow_stun/2) . = ..() -zone/proc/movables() - . = list() - for(var/turf/T in contents) - for(var/atom/A in T) - . += A +turf/simulated/Entered(atom/A) + . = ..() + if(istype(A,/atom/movable) && zone) + zone.movable_objects += A -proc/Get_Dir(atom/S,atom/T) //Shamelessly stolen from AJX.AdvancedGetDir - var/GDist=get_dist(S,T) - var/GDir=get_dir(S,T) - if(GDist<=3) - if(GDist==0) return 0 - if(GDist==1) - return GDir +turf/simulated/Exited(atom/A) + . = ..() + if(istype(A,/atom/movable) && zone) + zone.movable_objects -= A +atom/movable/New(turf/simulated/T) + . = ..() + if(istype(T)) + if(T.zone) + T.zone.movable_objects += src - var/X1=S.x*10 - var/X2=T.x*10 - var/Y1=S.y*10 - var/Y2=T.y*10 - var/Ref - if(GDir==NORTHEAST) - Ref=(X2/X1)*Y1 - if(Ref-1>Y2) .=EAST - else if(Ref+1Y2) .=WEST - else if(Ref+1Y2) .=SOUTH - else if(Ref+1Y2) .=SOUTH - else if(Ref+1> vsc - del F - world.log << "TWEAKS: Airflow, Plasma and Damage settings loaded." \ No newline at end of file +atom/movable/Del() + var/turf/simulated/T = loc + if(istype(T)) + if(T.zone) + T.zone.movable_objects -= src + . = ..() \ No newline at end of file diff --git a/code/ZAS/Definition.dm b/code/ZAS/Definition.dm index 90e88a6c613..cdf411fe68c 100644 --- a/code/ZAS/Definition.dm +++ b/code/ZAS/Definition.dm @@ -12,4 +12,6 @@ zone list/connected_zones //Parallels connections, but lists zones to which this one is connected and the number //of points they're connected at. list/space_tiles // Any space tiles in this list will cause air to flow out. - last_update = 0 \ No newline at end of file + last_update = 0 + + list/movable_objects = list() //All the things that can be tossed by airflow. \ No newline at end of file diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm index d80048cbb13..7bd3c61ecf8 100644 --- a/code/ZAS/Processing.dm +++ b/code/ZAS/Processing.dm @@ -50,6 +50,8 @@ zone //Add checks to ensure that we're not sucking air out of an empty room. if(total_space && air.total_moles > 0.1 && air.temperature > TCMB+0.5) //If there is space, air should flow out of the zone. + //if(abs(air.pressure) > vsc.airflow_lightest_pressure) + // AirflowSpace(src) ShareSpace(air,total_space*(vsc.zone_share_percent/100)) //React the air here. @@ -97,6 +99,8 @@ zone for(var/zone/Z in connected_zones) //Ensure we're not doing pointless calculations on equilibrium zones. if(abs(air.total_moles - Z.air.total_moles) > 0.1 || abs(air.temperature - Z.air.temperature) > 0.1) + //if(abs(Z.air.pressure - air.pressure) > vsc.airflow_lightest_pressure) + // Airflow(src,Z) ShareRatio(air,Z.air,connected_zones[Z]*(vsc.zone_share_percent/100)) proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, ratio) From fb9acbaa083cf50bc707f5fe86382e5b5d6ff0ea Mon Sep 17 00:00:00 2001 From: sick-trigger Date: Tue, 29 May 2012 13:56:36 +1000 Subject: [PATCH 19/23] Actually fixes digging sand messages --- code/modules/mining/mine_turfs.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index bd80e25149c..c9fcec5e234 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -316,6 +316,8 @@ icon_plating = "asteroid_dug" icon_state = "asteroid_dug" return + else + return else ..(W,user) if ((istype(W,/obj/item/weapon/pickaxe/drill))) @@ -337,6 +339,9 @@ dug = 1 icon_plating = "asteroid_dug" icon_state = "asteroid_dug" + return + else + return else ..(W,user) @@ -359,6 +364,9 @@ dug = 1 icon_plating = "asteroid_dug" icon_state = "asteroid_dug" + return + else + return else ..(W,user) From 24eb7a5b4684d9463bd7d1142bbbd4f19d5028fa Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Tue, 29 May 2012 08:41:17 +0300 Subject: [PATCH 20/23] Updated the changelog. --- html/changelog.html | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 5b29924bdaf..223bb93d994 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,16 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> +
+

29 May 2012

+

Aryn updated:

+
    +
  • Airflow works on a room-by-room basis rather than on individual tiles. Rooms will depressurize much faster than they did, though not too fast for balance reasons.
  • +
  • Fire now works on a logarithmic scale based on oxygen and fuel content. This is a far more complex tweak under the hood than it is in game.
  • +
  • Plasma now has increased toxicity and can burn exposed skin and eyes. In addition, because of the new air, it fills the room instantaneously. Try not to spill any.
  • +
+
+

28 May 2012

Erthilo updated:

@@ -133,11 +143,11 @@ should be listed in the changelog upon commit though. Thanks. -->
-

22 May 2012

+

22 May 2012

cib updated:

  • Worked out a few problems with meme. They now can see, even if their mob is sleeping. Their actions are properly tracked in admin logs. Their points recharge slightly faster, and can now be seen in the Status tab.
  • -
+

Erthilo updated:

  • Some sleeping and resting fixes. Please report any more bugs with it!
  • @@ -179,17 +189,17 @@ should be listed in the changelog upon commit though. Thanks. -->

    Erthilo updated:

    • You can now right-click pick up items and open/close closets items. This means cyborgs can now open/close closets with a bit of fiddling!
    • -
    • Added confirmation pop-up for character slot deletion.
    • +
    • Added confirmation pop-up for character slot deletion.
-

19 May 2012

+

19 May 2012

cib updated:

  • Implemented Memetic Anomaly game mode. A meme is a kind of parasite that can live in a human host and jump from player to player. They have traitor-like objectives, but must achieve them by controlling hosts, rather than doing it themselves.
  • Credits for the idea goes to: SCP-1312-1 . Playtesters: Erthilo, Cael_Aislin, AfterShave and critica.
  • -
+

TG updated:

  • You can now swap hands by clicking with your middle mouse button (you have to click on a visible object though, that's the catch).
  • @@ -272,7 +282,7 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Fixes mech weapons not firing.
  • Added cable restraints, made from 15 lengths of cable coil by right-click a cable coil in-hand and choosing 'Make Cable Restraints'. These works just like handcuffs, but only take 30 seconds to break!
  • The Head of Personnel can now change alert levels.
  • -
  • Fixes lockdown computers being blank.
  • +
  • Fixes lockdown computers being blank.
From 2b43fd81b82f0f4320db88069e120e4ce989480d Mon Sep 17 00:00:00 2001 From: sick-trigger Date: Tue, 29 May 2012 20:29:54 +1000 Subject: [PATCH 21/23] Allows you to teleport while disguised as a banana. --- code/game/machinery/teleporter.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 82b19052d4a..1fec2e76069 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -130,10 +130,6 @@ O.show_message("\red Failure: Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return if (istype(M, /atom/movable)) - if (istype(M, /obj/effect/dummy/chameleon)) - for(var/mob/C in M) - C << "\red The projection field prevents you from entering!" - return if(prob(5) && !accurate) //oh dear a problem, put em in deep space do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy - 5), 3), 2) else From 83e37be05701f293f8ecb308e9f3493b1792001a Mon Sep 17 00:00:00 2001 From: sick-trigger Date: Tue, 29 May 2012 20:31:36 +1000 Subject: [PATCH 22/23] Allows you to teleport while disguised as a banana. --- code/datums/helper_datums/teleport.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 6f0bbe3aebc..8b93f01736d 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -52,7 +52,7 @@ //must succeed in most cases proc/setTeleatom(atom/movable/ateleatom) - if(istype(ateleatom, /obj/effect)) + if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) del(ateleatom) return 0 if(istype(ateleatom)) From f3dd3dfe9f593089cddd62bbaf838962b26679f2 Mon Sep 17 00:00:00 2001 From: cib Date: Tue, 29 May 2012 15:45:00 +0200 Subject: [PATCH 23/23] The change projectile code is a lovely copypaste again. --- code/modules/projectiles/projectile/change.dm | 155 +++++++++++++++++- 1 file changed, 146 insertions(+), 9 deletions(-) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 26a5ca1f42d..676aaac977b 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -29,25 +29,162 @@ if("monkey") if (M.monkeyizing) return - if(istype(M,/mob/living/carbon/human)) - M:monkeyize() + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( M.loc ) + O.name = "monkey" + if (M.client) + M.client.mob = O + if(M.mind) + M.mind.transfer_to(O) + O.a_intent = "hurt" + O.universal_speak = 1 + O << "You are now a monkey." + del(M) + return O if("robot") if (M.monkeyizing) return - if(istype(M,/mob/living/carbon/human)) - M:Robotize() + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + if(M.client) + M.client.screen -= M.hud_used.contents + M.client.screen -= M.hud_used.adding + M.client.screen -= M.hud_used.mon_blo + M.client.screen -= list( M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) + M.client.screen -= list( M.zone_sel, M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) + + var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( M.loc ) + O.cell = new(O) + O.cell.maxcharge = 7500 + O.cell.charge = 7500 + O.gender = M.gender + O.invisibility = 0 + O.name = "Cyborg" + O.real_name = "Cyborg" + if (M.mind) + M.mind.transfer_to(O) + if (M.mind.assigned_role == "Cyborg") + M.mind.original = O + else if (M.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") + else + M.mind = new /datum/mind( ) + M.mind.key = M.key + M.mind.current = O + M.mind.original = O + M.mind.transfer_to(O) + + if(!(O.mind in ticker.minds)) + ticker.minds += O.mind//Adds them to regular mind list. + + O.loc = loc + O << "You are playing a Robot. A Robot can interact with most electronic objects in its view point." + O << "You must follow the laws that the AI has. You are the AI's assistant to the station basically." + O << "To use something, simply double-click it." + O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."} + + O.job = "Cyborg" + + O.mmi = new /obj/item/device/mmi(O) + O.mmi.transfer_identity(M)//Does not transfer key/client. + del(M) + return O if("metroid") if (M.monkeyizing) return - if(istype(M,/mob/living/carbon/human)) - M:Metroidize() + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + if(prob(50)) + var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult (M.loc) + if (M.client) + M.client.mob = new_metroid + if(M.mind) + M.mind.transfer_to(new_metroid) + + new_metroid.a_intent = "hurt" + new_metroid << "You are now an adult Metroid." + new_metroid.universal_speak = 1 + del(M) + return new_metroid + else + var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (M.loc) + if (M.client) + M.client.mob = new_metroid + if(M.mind) + M.mind.transfer_to(new_metroid) + new_metroid.a_intent = "hurt" + new_metroid.universal_speak = 1 + new_metroid << "You are now a baby Metroid." + del(M) + return new_metroid if("alien") if (M.monkeyizing) return - if(istype(M,/mob/living/carbon/human)) - M:Alienize() + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/alien_caste = pick("Hunter","Sentinel","Drone") + var/mob/living/carbon/alien/humanoid/new_xeno + switch(alien_caste) + if("Hunter") + new_xeno = new /mob/living/carbon/alien/humanoid/hunter (M.loc) + if("Sentinel") + new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (M.loc) + if("Drone") + new_xeno = new /mob/living/carbon/alien/humanoid/drone (M.loc) + if (M.client) + M.client.mob = new_xeno + if(M.mind) + M.mind.transfer_to(new_xeno) + new_xeno.a_intent = "hurt" + new_xeno.universal_speak = 1 + new_xeno << "You are now an alien." + del(M) + return new_xeno if("human") if (M.monkeyizing) - return + return + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/mob/living/carbon/human/O = new /mob/living/carbon/human( M.loc ) + + var/first = pick(first_names_male) + var/last = pick(last_names) + O.name = "[first] [last]" + O.real_name = "[first] [last]" + var/race = pick("lizard","golem","metroid","plant","normal") + switch(race) + if("lizard") + O.mutantrace = "lizard" + if("golem") + O.mutantrace = "golem" + if("metroid") + O.mutantrace = "metroid" + if("plant") + O.mutantrace = "plant" + if("normal") + O.mutantrace = "" + if (M.client) + M.client.mob = O + if(M.mind) + M.mind.transfer_to(O) + O.a_intent = "hurt" + O << "You are now a human." + del(M) + return O return