From 92e6646a4c53f0414a1fc5766c72de893194cea7 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 14:44:21 +0300 Subject: [PATCH 01/98] time to make blood even more pain --- code/datums/diseases/advance/symptoms/oxygen.dm | 2 +- .../antagonists/abductor/equipment/glands/heal.dm | 4 ++-- code/modules/antagonists/cult/blood_magic.dm | 4 ++-- code/modules/antagonists/cult/cult_structures.dm | 2 +- .../antagonists/eldritch_cult/eldritch_magic.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 1 + code/modules/mob/living/carbon/human/species.dm | 2 +- .../living/carbon/human/species_types/jellypeople.dm | 10 +++++----- .../mob/living/carbon/human/species_types/vampire.dm | 2 +- code/modules/mob/living/living_defines.dm | 1 + .../reagents/chemistry/reagents/alcohol_reagents.dm | 2 +- .../reagents/chemistry/reagents/medicine_reagents.dm | 6 +++--- .../reagents/chemistry/reagents/other_reagents.dm | 12 ++++++------ .../research/nanites/nanite_programs/healing.dm | 2 +- .../research/xenobiology/crossbreeding/consuming.dm | 2 +- code/modules/research/xenobiology/xenobiology.dm | 2 +- code/modules/surgery/organs/lungs.dm | 2 +- .../code/modules/reagents/chemistry/reagents/SDGF.dm | 8 ++++---- 18 files changed, 34 insertions(+), 32 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index 24e01dbbaf..a035697a20 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -47,7 +47,7 @@ Bonus M.adjustOxyLoss(-7, 0) M.losebreath = max(0, M.losebreath - 4) if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio)) - M.blood_volume += 1 + M.integrating_blood += 1 else if(prob(base_message_chance)) to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]") diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 5ea8f77d6c..e596901a58 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -53,7 +53,7 @@ replace_blood() return if(owner.blood_volume < BLOOD_VOLUME_OKAY) - owner.blood_volume = BLOOD_VOLUME_NORMAL + owner.integrating_blood = BLOOD_VOLUME_NORMAL to_chat(owner, "You feel your blood pulsing within you.") return @@ -144,7 +144,7 @@ owner.Stun(15) owner.adjustToxLoss(-15, TRUE, TRUE) - owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) + owner.integrating_blood = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) keep_going = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 901c83b1b7..b4ff8753f5 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -691,12 +691,12 @@ if(H.blood_volume < (BLOOD_VOLUME_SAFE*H.blood_ratio)) var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume if(uses*2 < restore_blood) - H.blood_volume += uses*2 + H.integrating_blood += uses*2 to_chat(user,"You use the last of your blood rites to restore what blood you could!") uses = 0 return ..() else - H.blood_volume = (BLOOD_VOLUME_SAFE*H.blood_ratio) + H.integrating_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) uses -= round(restore_blood/2) to_chat(user,"Your blood rites have restored [H == user ? "your" : "[H.p_their()]"] blood to safe levels!") var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss() diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 25fd446b06..15b4ee13f6 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -222,7 +222,7 @@ if(M.health < M.maxHealth) M.adjustHealth(-3) if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio)) - L.blood_volume += 1.0 + L.integrating_blood += 1.0 CHECK_TICK if(last_corrupt <= world.time) var/list/validturfs = list() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index bb95a8bdf3..0dfedfceb4 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -147,7 +147,7 @@ carbon_target.blood_volume -= 20 if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all - carbon_user.blood_volume += 20 + carbon_user.integrating_blood += 20 return /obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8660e115a6..78782e1ab6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -823,6 +823,7 @@ dna.remove_mutation(HM.name) if(blood_volume < (BLOOD_VOLUME_NORMAL*blood_ratio)) blood_volume = (BLOOD_VOLUME_NORMAL*blood_ratio) + integrating_blood = 0 ..() /mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 986fc38cd3..024130b3d3 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood)) - H.blood_volume = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM) + H.integrating_blood = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM) H.reagents.del_reagent(chem.type) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 7a15fd2e5c..345bc5a19d 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -56,16 +56,16 @@ exotic_blood_color = "#" + H.dna.features["mcolor"] /datum/species/jelly/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers + if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers return if(!H.blood_volume) - H.blood_volume += 5 + H.integrating_blood += 5 H.adjustBruteLoss(5) to_chat(H, "You feel empty!") if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio)) if(H.nutrition >= NUTRITION_LEVEL_STARVING) - H.blood_volume += 3 + H.integrating_blood += 3 H.nutrition -= 2.5 if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio)) if(prob(5)) @@ -85,7 +85,7 @@ consumed_limb.drop_limb() to_chat(H, "Your [consumed_limb] is drawn back into your body, unable to maintain its shape!") qdel(consumed_limb) - H.blood_volume += 20 + H.integrating_blood += 20 ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// @@ -154,7 +154,7 @@ if(prob(5)) to_chat(H, "You feel very bloated!") else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) - H.blood_volume += 3 + H.integrating_blood += 3 H.nutrition -= 2.5 ..() diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 89b3d603ea..fb418a1da4 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -113,7 +113,7 @@ to_chat(victim, "[H] is draining your blood!") to_chat(H, "You drain some blood!") playsound(H, 'sound/items/drink.ogg', 30, 1, -2) - victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + victim.integrating_blood = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) H.blood_volume = clamp(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM) if(!victim.blood_volume) to_chat(H, "You finish off [victim]'s blood supply!") diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 386f1174e1..d743d2baea 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -109,6 +109,7 @@ var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added var/blood_volume = 0 //how much blood the mob has + var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood. var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index aae21464b1..25c93fdaba 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -574,7 +574,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(AmBloodsucker(C)) disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons. if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.blood_volume = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss. + C.integrating_blood = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss. ..() /datum/reagent/consumable/ethanol/brave_bull diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 65443b65c7..436ca1d98f 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -411,7 +411,7 @@ var/amount_to_add = min(M.blood_volume, volume*5) var/new_blood_level = min(M.blood_volume + amount_to_add, maximum_reachable) last_added = new_blood_level - M.blood_volume - M.blood_volume = new_blood_level + extra_regen + M.integrating_blood = new_blood_level + extra_regen if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) @@ -1274,7 +1274,7 @@ M.adjustCloneLoss(-3*REM, FALSE) M.adjustStaminaLoss(-25*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.blood_volume += 40 // blood fall out man bad + M.integrating_blood += 40 // blood fall out man bad ..() . = 1 @@ -1295,7 +1295,7 @@ M.adjustCloneLoss(-1.25*REM, FALSE) M.adjustStaminaLoss(-4*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.blood_volume += 3 + M.integrating_blood += 3 ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index fe8f923e1a..d0c08b2326 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) - C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio) + C.integrating_blood = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio) // we don't care about bloodtype here, we're just refilling the mob if(reac_volume >= 10 && istype(L) && method != INJECT) @@ -253,7 +253,7 @@ /datum/reagent/water/on_mob_life(mob/living/carbon/M) . = ..() if(M.blood_volume) - M.blood_volume += 0.1 // water is good for you! + M.integrating_blood += 0.1 // water is good for you! /* * Water reaction to turf @@ -368,7 +368,7 @@ /datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) if(M.blood_volume) - M.blood_volume += 0.1 // water is good for you! + M.integrating_blood += 0.1 // water is good for you! if(!data) data = list("misc" = 1) data["misc"]++ @@ -454,7 +454,7 @@ M.adjustBruteLoss(-2, FALSE) M.adjustFireLoss(-2, FALSE) if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.blood_volume += 3 + M.integrating_blood += 3 else // Will deal about 90 damage when 50 units are thrown M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) @@ -1144,7 +1144,7 @@ if((HAS_TRAIT(C, TRAIT_NOMARROW))) return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.blood_volume += 0.25 + C.integrating_blood += 0.25 ..() /datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -2550,7 +2550,7 @@ M.adjustBruteLoss(-3, FALSE) M.adjustFireLoss(-3, FALSE) if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL) - M.blood_volume += 3 + M.integrating_blood += 3 else M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 920faae928..46d7cb3501 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -107,7 +107,7 @@ /datum/nanite_program/blood_restoring/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - C.blood_volume += 2 + C.integrating_blood += 2 /datum/nanite_program/repairing name = "Mechanical Repair" diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index af37a70232..c999a5de8e 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -322,7 +322,7 @@ Consuming extracts: playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1) if(iscarbon(M)) var/mob/living/carbon/C = M - C.blood_volume += 25 //Half a vampire drain. + C.integrating_blood += 25 //Half a vampire drain. /obj/item/slimecross/consuming/green colour = "green" diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a8cefd9bed..1195f7e766 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -187,7 +187,7 @@ switch(activation_type) if(SLIME_ACTIVATE_MINOR) user.adjust_nutrition(50) - user.blood_volume += 50 + user.integrating_blood += 50 to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!") return 150 diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 953c8b2c1b..7768b2c490 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -605,7 +605,7 @@ . = ..() if (breath) var/plasma_pp = breath.get_breath_partial_pressure(breath.get_moles(/datum/gas/plasma)) - owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. + owner.integrating_blood += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. /obj/item/organ/lungs/yamerol name = "Yamerol lungs" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 60c009bc29..6b6c43b36f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -127,7 +127,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING else to_chat(SM, "While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original.") log_reagent("FERMICHEM: [SM] ckey: [SM.key]'s is not bound by [M] ckey [M.key]'s will, and is free to determine their own goals, while respecting and acting as their origin.") - + to_chat(SM, "You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with your original, a perfect clone of your origin.") SM.client?.change_view(CONFIG_GET(string/default_view)) to_chat(M, "You feel a strange sensation building in your mind as you realise there's two of you. Before you get a chance to think about it, a mass splits from you, and find yourself face to face with yourself.") @@ -226,7 +226,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.adjustCloneLoss(-10, 0) //I don't want to make Rezadone obsolete. M.adjustBruteLoss(-25, 0)// Note that this takes a long time to apply and makes you fat and useless when it's in you, I don't think this small burst of healing will be useful considering how long it takes to get there. M.adjustFireLoss(-25, 0) - M.blood_volume += 250 + M.integrating_blood += 250 M.heal_bodypart_damage(1,1) M.action_cooldown_mod = 1 if (M.nutrition < 1500) @@ -236,7 +236,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING to_chat(M, "the cells fail to hold enough mass to generate a clone, instead diffusing into your system.") M.adjustBruteLoss(-10, 0) M.adjustFireLoss(-10, 0) - M.blood_volume += 100 + M.integrating_blood += 100 M.action_cooldown_mod = 1 if (M.nutrition < 1500) M.adjust_nutrition(500) @@ -309,7 +309,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING /datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.blood_volume += 10 + M.integrating_blood += 10 M.adjustCloneLoss(-2, 0) M.setOrganLoss(ORGAN_SLOT_BRAIN, -1) M.adjust_nutrition(10) From d9f6e51bc8b7b955677965929690dd2d1f2aef93 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 15:26:20 +0300 Subject: [PATCH 02/98] making it actually work properly --- code/game/objects/items/devices/scanners.dm | 2 + .../abductor/equipment/glands/heal.dm | 4 +- code/modules/antagonists/cult/blood_magic.dm | 4 +- code/modules/mob/living/blood.dm | 43 +++++++++++-------- .../mob/living/carbon/human/species.dm | 2 +- .../carbon/human/species_types/vampire.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- .../chemistry/reagents/medicine_reagents.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 2 +- 9 files changed, 35 insertions(+), 28 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 8b5e1edd91..b9ec48a1b4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -432,6 +432,8 @@ GENETICS SCANNER var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath] if(R) blood_type = R.name + if(C.integrating_blood) + msg += "[C.integrating_blood] cl of blood is being integrated into their bloodstream\n" if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio)) msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio)) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index e596901a58..5ea8f77d6c 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -53,7 +53,7 @@ replace_blood() return if(owner.blood_volume < BLOOD_VOLUME_OKAY) - owner.integrating_blood = BLOOD_VOLUME_NORMAL + owner.blood_volume = BLOOD_VOLUME_NORMAL to_chat(owner, "You feel your blood pulsing within you.") return @@ -144,7 +144,7 @@ owner.Stun(15) owner.adjustToxLoss(-15, TRUE, TRUE) - owner.integrating_blood = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) + owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) keep_going = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index b4ff8753f5..901c83b1b7 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -691,12 +691,12 @@ if(H.blood_volume < (BLOOD_VOLUME_SAFE*H.blood_ratio)) var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume if(uses*2 < restore_blood) - H.integrating_blood += uses*2 + H.blood_volume += uses*2 to_chat(user,"You use the last of your blood rites to restore what blood you could!") uses = 0 return ..() else - H.integrating_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) + H.blood_volume = (BLOOD_VOLUME_SAFE*H.blood_ratio) uses -= round(restore_blood/2) to_chat(user,"Your blood rites have restored [H == user ? "your" : "[H.p_their()]"] blood to safe levels!") var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index cf1a158fc5..41265c384a 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -39,26 +39,31 @@ return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. - //Blood regeneration if there is some space - if(blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER)) + if(blood_volume < BLOOD_VOLUME_NORMAL) var/nutrition_ratio = 0 - switch(nutrition) - if(0 to NUTRITION_LEVEL_STARVING) - nutrition_ratio = 0.2 - if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - nutrition_ratio = 0.4 - if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - nutrition_ratio = 0.6 - if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - nutrition_ratio = 0.8 - else - nutrition_ratio = 1 - if(satiety > 80) - nutrition_ratio *= 1.25 - adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) - blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) - + if(integrating_blood) //Do we have blood to normalize in our system? + integrating_blood -- + blood_volume ++ + if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) + switch(nutrition) + if(0 to NUTRITION_LEVEL_STARVING) + nutrition_ratio = 0.2 + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) + nutrition_ratio = 0.4 + if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) + nutrition_ratio = 0.6 + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + nutrition_ratio = 0.8 + else + nutrition_ratio = 1 + if(satiety > 80) + nutrition_ratio *= 1.25 + adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) + blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) + else + if(integrating_blood) + integrating_blood -- //Effects of bloodloss var/word = pick("dizzy","woozy","faint") switch(blood_volume) @@ -368,7 +373,7 @@ return blood_ratio = 1 -/mob/living/proc/AdjustBloodVol(var/value) +/mob/living/proc/AdjustBloodVol(value) if(blood_ratio == value) return blood_ratio = value diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 024130b3d3..a65f84c7f4 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood)) - H.integrating_blood = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM) + H.integrating_blood += round(chem.volume, 0.1)) H.reagents.del_reagent(chem.type) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index fb418a1da4..89b3d603ea 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -113,7 +113,7 @@ to_chat(victim, "[H] is draining your blood!") to_chat(H, "You drain some blood!") playsound(H, 'sound/items/drink.ogg', 30, 1, -2) - victim.integrating_blood = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) H.blood_volume = clamp(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM) if(!victim.blood_volume) to_chat(H, "You finish off [victim]'s blood supply!") diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 25c93fdaba..3725445023 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -574,7 +574,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(AmBloodsucker(C)) disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons. if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.integrating_blood = min((BLOOD_VOLUME_NORMAL*C.blood_ratio), C.blood_volume + 3) //Bloody Mary quickly restores blood loss. + C.integrating_blood += 3 //Bloody Mary quickly restores blood loss. ..() /datum/reagent/consumable/ethanol/brave_bull diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 436ca1d98f..d5d4e733c4 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -411,7 +411,7 @@ var/amount_to_add = min(M.blood_volume, volume*5) var/new_blood_level = min(M.blood_volume + amount_to_add, maximum_reachable) last_added = new_blood_level - M.blood_volume - M.integrating_blood = new_blood_level + extra_regen + M.integrating_blood += extra_regen if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index d0c08b2326..4bd66d8982 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) - C.integrating_blood = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio) + C.integrating_blood += round(reac_volume, 0.1) // we don't care about bloodtype here, we're just refilling the mob if(reac_volume >= 10 && istype(L) && method != INJECT) From 28205f9dce7337fc58caa7bbf89fe054ab02ffc7 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 17:41:37 +0300 Subject: [PATCH 03/98] More fixes to make it work --- .../antagonists/bloodsucker/bloodsucker_life.dm | 1 + code/modules/mob/living/blood.dm | 10 ++++++++-- code/modules/mob/living/carbon/human/species.dm | 2 +- .../reagents/chemistry/reagents/medicine_reagents.dm | 7 ++----- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 3e358cd795..29e64a4913 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -89,6 +89,7 @@ owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0) owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (actual_regen * 4) * mult) + owner.current.integrating_blood = 0 // No Bleeding /*if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete. var/mob/living/carbon/human/H = owner.current diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 41265c384a..5e25888851 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -39,12 +39,13 @@ return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. + integrating_blood -- //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL) var/nutrition_ratio = 0 if(integrating_blood) //Do we have blood to normalize in our system? - integrating_blood -- blood_volume ++ + //vomit(blood = TRUE) //Too much, just too much if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) switch(nutrition) if(0 to NUTRITION_LEVEL_STARVING) @@ -64,9 +65,14 @@ else if(integrating_blood) integrating_blood -- + if(integrating_blood > BLOOD_VOLUME_NORMAL) //Let's not allow too much + integrating_blood = BLOOD_VOLUME_NORMAL + if(integrating_blood > blood_volume) + integrating_blood = BLOOD_VOLUME_NORMAL - //Effects of bloodloss var/word = pick("dizzy","woozy","faint") - switch(blood_volume) + var/blood_effect_volume = blood_volume + integrating_blood + switch(blood_effect_volume) if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) if(prob(10)) to_chat(src, "You feel terribly bloated.") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a65f84c7f4..7e47efdcad 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood)) - H.integrating_blood += round(chem.volume, 0.1)) + H.integrating_blood += round(chem.volume, 0.1) H.reagents.del_reagent(chem.type) return TRUE return FALSE diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index d5d4e733c4..084c81f7d3 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -405,13 +405,10 @@ if((HAS_TRAIT(M, TRAIT_NOMARROW))) return if(last_added) - M.blood_volume -= last_added + M.integrating_blood -= min(M.integrating_blood, last_added) last_added = 0 if(M.blood_volume < maximum_reachable) //Can only up to double your effective blood level. - var/amount_to_add = min(M.blood_volume, volume*5) - var/new_blood_level = min(M.blood_volume + amount_to_add, maximum_reachable) - last_added = new_blood_level - M.blood_volume - M.integrating_blood += extra_regen + last_added = volume * 5 if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) From 35bfba1f6aa45b79a96588a102c127f9662e5ddf Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 18:15:13 +0300 Subject: [PATCH 04/98] Redoes the variable changes into procs --- code/datums/diseases/advance/symptoms/oxygen.dm | 2 +- code/modules/antagonists/cult/cult_structures.dm | 2 +- .../antagonists/eldritch_cult/eldritch_magic.dm | 2 +- code/modules/mob/living/blood.dm | 16 +++++++--------- code/modules/mob/living/carbon/human/species.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 8 ++++---- code/modules/mob/living/living_defines.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- .../chemistry/reagents/medicine_reagents.dm | 5 +++-- .../chemistry/reagents/other_reagents.dm | 12 ++++++------ .../research/nanites/nanite_programs/healing.dm | 2 +- .../xenobiology/crossbreeding/consuming.dm | 2 +- code/modules/research/xenobiology/xenobiology.dm | 2 +- code/modules/surgery/organs/lungs.dm | 2 +- .../modules/reagents/chemistry/reagents/SDGF.dm | 6 +++--- 15 files changed, 33 insertions(+), 34 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index a035697a20..d00761dbf9 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -47,7 +47,7 @@ Bonus M.adjustOxyLoss(-7, 0) M.losebreath = max(0, M.losebreath - 4) if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio)) - M.integrating_blood += 1 + M.AddIntegrationBlood(1) else if(prob(base_message_chance)) to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]") diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 15b4ee13f6..21e19ef739 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -222,7 +222,7 @@ if(M.health < M.maxHealth) M.adjustHealth(-3) if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio)) - L.integrating_blood += 1.0 + L.AddIntegrationBlood(1) CHECK_TICK if(last_corrupt <= world.time) var/list/validturfs = list() diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index 0dfedfceb4..bb37135155 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -147,7 +147,7 @@ carbon_target.blood_volume -= 20 if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all - carbon_user.integrating_blood += 20 + carbon_user.AddIntegrationBlood(20) return /obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 5e25888851..e655e0c213 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -39,13 +39,13 @@ return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. - integrating_blood -- + if(integrating_blood) + integrating_blood -- //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL) var/nutrition_ratio = 0 if(integrating_blood) //Do we have blood to normalize in our system? blood_volume ++ - //vomit(blood = TRUE) //Too much, just too much if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) switch(nutrition) if(0 to NUTRITION_LEVEL_STARVING) @@ -62,13 +62,7 @@ nutrition_ratio *= 1.25 adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) - else - if(integrating_blood) - integrating_blood -- - if(integrating_blood > BLOOD_VOLUME_NORMAL) //Let's not allow too much - integrating_blood = BLOOD_VOLUME_NORMAL - if(integrating_blood > blood_volume) - integrating_blood = BLOOD_VOLUME_NORMAL - + //Effects of bloodloss var/word = pick("dizzy","woozy","faint") var/blood_effect_volume = blood_volume + integrating_blood @@ -386,3 +380,7 @@ if(ishuman(src)) var/mob/living/carbon/human/H = src H.handle_blood() + +/mob/living/proc/AddIntegrationBlood(value) + if(blood_volume + integrating_blood < BLOOD_VOLUME_NORMAL) + integrating_blood += value diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 7e47efdcad..41b04ca0bc 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood)) - H.integrating_blood += round(chem.volume, 0.1) + H.AddIntegrationBlood(round(chem.volume, 0.1)) H.reagents.del_reagent(chem.type) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 345bc5a19d..772e128d67 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -59,13 +59,13 @@ if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers return if(!H.blood_volume) - H.integrating_blood += 5 + H.AddIntegrationBlood(5) H.adjustBruteLoss(5) to_chat(H, "You feel empty!") if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio)) if(H.nutrition >= NUTRITION_LEVEL_STARVING) - H.integrating_blood += 3 + H.AddIntegrationBlood(3) H.nutrition -= 2.5 if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio)) if(prob(5)) @@ -85,7 +85,7 @@ consumed_limb.drop_limb() to_chat(H, "Your [consumed_limb] is drawn back into your body, unable to maintain its shape!") qdel(consumed_limb) - H.integrating_blood += 20 + H.AddIntegrationBlood(20) ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// @@ -154,7 +154,7 @@ if(prob(5)) to_chat(H, "You feel very bloated!") else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) - H.integrating_blood += 3 + H.AddIntegrationBlood(3) H.nutrition -= 2.5 ..() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index d743d2baea..d45d662de3 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -109,7 +109,7 @@ var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added var/blood_volume = 0 //how much blood the mob has - var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness + var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use AddIntegrationBlood() instead of modifying directly var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood. var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 3725445023..a6bf499bc6 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -574,7 +574,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(AmBloodsucker(C)) disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons. if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.integrating_blood += 3 //Bloody Mary quickly restores blood loss. + C.AddIntegrationBlood(3) //Bloody Mary quickly restores blood loss. ..() /datum/reagent/consumable/ethanol/brave_bull diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 084c81f7d3..e7b42c694f 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -409,6 +409,7 @@ last_added = 0 if(M.blood_volume < maximum_reachable) //Can only up to double your effective blood level. last_added = volume * 5 + M.AddIntegrationBlood(last_added) if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) @@ -1271,7 +1272,7 @@ M.adjustCloneLoss(-3*REM, FALSE) M.adjustStaminaLoss(-25*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.integrating_blood += 40 // blood fall out man bad + M.AddIntegrationBlood(40) // blood fall out man bad ..() . = 1 @@ -1292,7 +1293,7 @@ M.adjustCloneLoss(-1.25*REM, FALSE) M.adjustStaminaLoss(-4*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.integrating_blood += 3 + M.AddIntegrationBlood(3) ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 4bd66d8982..4f6550dc86 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) - C.integrating_blood += round(reac_volume, 0.1) + C.AddIntegrationBlood(round(reac_volume, 0.1)) // we don't care about bloodtype here, we're just refilling the mob if(reac_volume >= 10 && istype(L) && method != INJECT) @@ -253,7 +253,7 @@ /datum/reagent/water/on_mob_life(mob/living/carbon/M) . = ..() if(M.blood_volume) - M.integrating_blood += 0.1 // water is good for you! + M.AddIntegrationBlood(0.1) // water is good for you! /* * Water reaction to turf @@ -368,7 +368,7 @@ /datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) if(M.blood_volume) - M.integrating_blood += 0.1 // water is good for you! + M.AddIntegrationBlood(0.1) // water is good for you! if(!data) data = list("misc" = 1) data["misc"]++ @@ -454,7 +454,7 @@ M.adjustBruteLoss(-2, FALSE) M.adjustFireLoss(-2, FALSE) if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.integrating_blood += 3 + M.AddIntegrationBlood(3) else // Will deal about 90 damage when 50 units are thrown M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) @@ -1144,7 +1144,7 @@ if((HAS_TRAIT(C, TRAIT_NOMARROW))) return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.integrating_blood += 0.25 + C.AddIntegrationBlood(0.25) ..() /datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -2550,7 +2550,7 @@ M.adjustBruteLoss(-3, FALSE) M.adjustFireLoss(-3, FALSE) if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL) - M.integrating_blood += 3 + M.AddIntegrationBlood(3) else M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 46d7cb3501..bb36474565 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -107,7 +107,7 @@ /datum/nanite_program/blood_restoring/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - C.integrating_blood += 2 + C.AddIntegrationBlood(2) /datum/nanite_program/repairing name = "Mechanical Repair" diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index c999a5de8e..26e2a63634 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -322,7 +322,7 @@ Consuming extracts: playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1) if(iscarbon(M)) var/mob/living/carbon/C = M - C.integrating_blood += 25 //Half a vampire drain. + C.AddIntegrationBlood(25) //Half a vampire drain. /obj/item/slimecross/consuming/green colour = "green" diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 1195f7e766..2340946c46 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -187,7 +187,7 @@ switch(activation_type) if(SLIME_ACTIVATE_MINOR) user.adjust_nutrition(50) - user.integrating_blood += 50 + user.AddIntegrationBlood(50) to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!") return 150 diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 7768b2c490..d40c7984f2 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -605,7 +605,7 @@ . = ..() if (breath) var/plasma_pp = breath.get_breath_partial_pressure(breath.get_moles(/datum/gas/plasma)) - owner.integrating_blood += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. + owner.AddIntegrationBlood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. /obj/item/organ/lungs/yamerol name = "Yamerol lungs" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 6b6c43b36f..be590ef4c3 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -226,7 +226,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.adjustCloneLoss(-10, 0) //I don't want to make Rezadone obsolete. M.adjustBruteLoss(-25, 0)// Note that this takes a long time to apply and makes you fat and useless when it's in you, I don't think this small burst of healing will be useful considering how long it takes to get there. M.adjustFireLoss(-25, 0) - M.integrating_blood += 250 + M.AddIntegrationBlood(250) M.heal_bodypart_damage(1,1) M.action_cooldown_mod = 1 if (M.nutrition < 1500) @@ -236,7 +236,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING to_chat(M, "the cells fail to hold enough mass to generate a clone, instead diffusing into your system.") M.adjustBruteLoss(-10, 0) M.adjustFireLoss(-10, 0) - M.integrating_blood += 100 + M.AddIntegrationBlood(100) M.action_cooldown_mod = 1 if (M.nutrition < 1500) M.adjust_nutrition(500) @@ -309,7 +309,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING /datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.integrating_blood += 10 + M.AddIntegrationBlood(10) M.adjustCloneLoss(-2, 0) M.setOrganLoss(ORGAN_SLOT_BRAIN, -1) M.adjust_nutrition(10) From cc59e2c225b34bf1679367c50b4ac676ee78ae27 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 20:40:52 +0300 Subject: [PATCH 05/98] feedback changes --- code/modules/mob/living/blood.dm | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index e655e0c213..1212bd695a 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -99,14 +99,22 @@ bleed(temp_bleed) //Makes a blood drop, leaking amt units of blood from the mob -/mob/living/carbon/proc/bleed(amt) - if(blood_volume) +/mob/living/carbon/proc/bleed(amt, force) + var/bled = FALSE //Have we bled amnt? + if(blood_volume > amnt) blood_volume = max(blood_volume - amt, 0) - if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean - if(amt >= 10) - add_splatter_floor(src.loc) - else - add_splatter_floor(src.loc, 1) + bled = TRUE + if(integrating_blood > amnt) + integrating_blood = max(integrating_blood - amt, 0) + bled = TRUE + if(!bled && !force) //If we are already cycling back through, don't do this again + bleed(amt, TRUE) //we cycle back through to try to bleed SOMETHING, not neccesarily the required amount + return + if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean + if(amt >= 10) + add_splatter_floor(src.loc) + else + add_splatter_floor(src.loc, TRUE) /mob/living/carbon/human/bleed(amt) amt *= physiology.bleed_mod @@ -119,6 +127,7 @@ /mob/living/proc/restore_blood() blood_volume = initial(blood_volume) + integrating_blood = 0 /mob/living/carbon/restore_blood() blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio) @@ -381,6 +390,9 @@ var/mob/living/carbon/human/H = src H.handle_blood() -/mob/living/proc/AddIntegrationBlood(value) - if(blood_volume + integrating_blood < BLOOD_VOLUME_NORMAL) +/mob/living/proc/AddIntegrationBlood(value, force) + var/species_maxblood = BLOOD_VOLUME_NORMAL + if(isslimeperson(src) || isvampire(src)) + species_maxblood = BLOOD_VOLUME_MAXIMUM + if(blood_volume + integrating_blood < species_maxblood || force) integrating_blood += value From 8a3dd8515ef6b654760d97630b975d8b4df9a9ac Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 5 May 2021 21:42:14 +0300 Subject: [PATCH 06/98] fixes bleeding properly --- code/modules/mob/living/blood.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 1212bd695a..e07f4df3ab 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -101,10 +101,10 @@ //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/bleed(amt, force) var/bled = FALSE //Have we bled amnt? - if(blood_volume > amnt) + if(blood_volume > amt || force && blood_volume) blood_volume = max(blood_volume - amt, 0) bled = TRUE - if(integrating_blood > amnt) + if(integrating_blood > amt || force && integrating_blood) integrating_blood = max(integrating_blood - amt, 0) bled = TRUE if(!bled && !force) //If we are already cycling back through, don't do this again From b671b422b3e5e3400ed22b9a4d1ccd3adf80b3b5 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 12 May 2021 22:50:45 +0300 Subject: [PATCH 07/98] let's actually make it possible to gain actual blood if you're at 1 integrating blud --- code/modules/mob/living/blood.dm | 39 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index e07f4df3ab..15871463e2 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -41,27 +41,26 @@ if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. if(integrating_blood) integrating_blood -- - //Blood regeneration if there is some space - if(blood_volume < BLOOD_VOLUME_NORMAL) - var/nutrition_ratio = 0 - if(integrating_blood) //Do we have blood to normalize in our system? + //Blood regeneration if there is some space + if(blood_volume < BLOOD_VOLUME_NORMAL) + var/nutrition_ratio = 0 blood_volume ++ - if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) - switch(nutrition) - if(0 to NUTRITION_LEVEL_STARVING) - nutrition_ratio = 0.2 - if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - nutrition_ratio = 0.4 - if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - nutrition_ratio = 0.6 - if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - nutrition_ratio = 0.8 - else - nutrition_ratio = 1 - if(satiety > 80) - nutrition_ratio *= 1.25 - adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) - blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) + if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) + switch(nutrition) + if(0 to NUTRITION_LEVEL_STARVING) + nutrition_ratio = 0.2 + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) + nutrition_ratio = 0.4 + if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) + nutrition_ratio = 0.6 + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + nutrition_ratio = 0.8 + else + nutrition_ratio = 1 + if(satiety > 80) + nutrition_ratio *= 1.25 + adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) + blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) //Effects of bloodloss var/word = pick("dizzy","woozy","faint") From 25371102f8deaf00c44bc521efb4ebee96272753 Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 14 May 2021 00:06:14 +0300 Subject: [PATCH 08/98] oh my god why are negatives truthy --- code/modules/mob/living/blood.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 15871463e2..812cf74424 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -39,8 +39,8 @@ return if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. - if(integrating_blood) - integrating_blood -- + if(integrating_blood > 0) + integrating_blood = max(integrating_blood - 1, 0) //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL) var/nutrition_ratio = 0 From 9f79c652c4bc98dacafb52e6c83fd2040d1fb558 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 17 Jul 2021 19:24:40 +0100 Subject: [PATCH 09/98] a --- icons/mob/human_parts.dmi | Bin 45373 -> 16619 bytes icons/mob/legfile1test.dmi | Bin 0 -> 42479 bytes icons/mob/legfile2test.dmi | Bin 0 -> 182 bytes tgstation.dme | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/mob/legfile1test.dmi create mode 100644 icons/mob/legfile2test.dmi diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index 34a1ada483bc870b1d4ac635e7669963b82db0b2..984891250563104ddf9f42c623e9ba20f919f733 100644 GIT binary patch literal 16619 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

e;Y_+~33a%Syri7?w!x9)ytZ|Cli=cT2e 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 literal 45373 zcmbq*by!qg)bD^IhytR3N-GG`B^?8zAc&xVbV&>y(mjNNfPjEVmk5ZI)X*i}B^`s( zEnPFr-N*O+?svaG?)Ti_apuf9XXn~$uk~B84SB9CPeM#h41>W)6rMa%g~2XJgAXIo zCGdne4*wRoA@@|*a(-myWa4P);B0Ac2ZOmM7sU4}&+}5e9otmX`p!T?hnjgW{f?ma z;ewEzO_a#X-vRt8@G#7HuIfR}+j~QzNAz26Cc;&k$TUL(^vLkk`swh4g1oxPZ|#N+ zV|hGrgn6j7eneeK8>P@bvP_0B6ScNwSJ$OK{H?%KuZT3fPze;cL%flT?Z_V#Rog1C zybvRlV8_nFRaMrRf5>Z7)a%+NX2nLZ_|)Tsh2xn_-i_6a4Ss9qRDA|Cvn1o{Y@$$O zN!_OrGwav)#VaX&o;~7HWGj=p#LYeRPKq?E=P(1yn{~O|JaYdFBJzOQ{3@&Hg#>l^ z3-ICLT-IDuTT_P^=eu@S_Zq4vMVlGPbb{Qk2{Z=A|4L!c%7$qmJDk_GATc=t~1|6yuz8^Wlj34^nvGrwe)41Gii=qEP zL{0R9G(&{;(yrDTYA80SA@y@IUbyEa!L{4tWm1XQD*rw>35yN$g_KJl@!lNiz4G?E zY4^%Iy}}lJ#k~Sw!oQx!&8URjLi@|!lDTkufR7@$S$a#w?Ec!2`c=e7f%F&s>2i`6 zl1AlA;lcwaIZbcEP1A?{`2DWAYZG$Zp+C6h@j!ZM5SEccck8_qVRjTE26a6^MSxhr zc>j#-_UVhr!N^PReIFR@7hhQ9b0czZu^G}Z-XFZr9O7p7U_oG?to!sEsnDKFM`)Y# zra@egFK69C?RmIUlL9=;pltSM?B-TL)aD;!`7)!MDb9mb0_aH{)O^@P=Nh+b{a}2} z4+6~xV!{*6o7iPDU*_H=^C25Ml}vcbAv&Q;YcA<>Jzq#M?CFQ3K&jX}rL5gK7-XDYXc_>6+> zk`xCq4kR(8mm`vH%Xe}XC>&}`zhOzaJZ(3=PPxx$YR1({_W|KHu(Ty7^Qa*2NlzWe zTZ6l=y?n@L(%0!ah_h_u@CU*ncVmzmHz)+8X_)$s?mv zEp7cFk$QIkRJfemw8kV$()ZdR6=7Ab-=JLyg^N5v(%tI=5U`=wM?i(RqNUv4A`t^Tdw zOP$vRcI)^UeI8pfgy$W(i}mUrXa4Sv$8;?4FjAR;Xx zc!FS136G=%CRJ=1lN6Tr*g;=ECFV+N7TP1i<($ng=y>G3$`Ly;IzGOVuU9p6>UE9x z1}_0AjHQW!p2_W(Zk1zJxjvD6#JSnl!xc?ZLSw%6wo42KfA%EabNVWOinAX4{P<32 znz(__!OQ+BWC?@s0@I$9(ViqxJllOgm{M2Bv!t!nqbhoI2dA%6j|$qoS#hIBiv`6N zfN@}?a$+}gOFHs;mC3YnWT9KQS3*SXffl%W6qANwUZL%8Co-EDjJn(YN8GJCq#VoUhlOYV_>g)cFi~`RG&}7kyTz}0SZ*|LE7v=l zuMMur2Ip@$tPl*}-Zx?YL@|x+b5wZxG>moAzOW&R!F|rIjGWg65I&oE@5UdnNCbx= z$6&5MO)Mv;EQ$phDqeiJh1d%mbleF<(>!$#QE3SjoU|q0q6|A@MeJb-{~^!Q=dJyq zR?wy|LV!@eyE0-IwXW`wCBtegD@FADxH z15^5tK#WL5BE-j&@r89r4S0IcHE#ARQ#->|5Q~a3(!=_8u1m z0syvXwzZSOZk1-8x=Gv)59XntU3VBWz zo+)0)2Wj*9QqE6U6ReWp829;`BHWhRiVXHgk=u0_+ar2&>VnCYf42PxCjOhg2;WJBZ|drf{F0HltI#40 zCSCX$28rSi!s8e5z*TxS{oi}AwZPv331A5D=Mjic1TO!_uMvbPQ1QaAxw)@Ld_BHJYuK&wV9d7xBRcefxfFQbAY^K}hzKbCrClB-uQ zUPsQ>dW6bl`Y$|JQ=5O3`Jy*TSY_z>8QImVTH*aCX}6ct*c?DdH=usb=Y@Uq{QdDN zE*zp8cBX2iq7DVlqwhUs?%ed_(JpDR@*X~+yLD@zvC+>Jxs$5+^l8E0WiciP$)(8s)E~c=qyB`Q!TjBoed`9;^y|0`W%xv__Zj-LExY> zIWW$y!o$t2qWrGK!U@AkDM>PNyAKZO&_tZENy$^~rWnPX;kAtob+MGue&SSh z6_v!p59 zOo(!3e|a@Lh-o=t;E(yYn~O@UmEXTVCzJT&M||ZYF7_=SXAQc#@{QoM!tSP?zP-JKNw=w(}=g zEOs>1@AUNaLjodp;xdX2;*#?xRo>?lmuUX-oe?oDxcb$~;9Ue)MtiVrz_o)0$Vc$E zd+A>w0bb9g{sgKoB_*ZLU#q90MjGf%_j}94={80rS1vz zmlqfFaipzV*er|gdUnLRCMp2kn*$_9uIgbw9FSIhQ4h})h?x5;6msQ2ANZWM(TD+M zXWp&{bQdVRJh6i*`&Q6vRol~7!Mr(BBb;Y<{S#RPoj8kv)hFy8fHAx;MYUl72wY70 z5f7ec1N`t9(*CUN)|QqpfYhJr>~Yoo{W_1}31XS1X&e%=KqmwBrwhk{393;7@FcU$ zYlcXChVq@mKU|`?e zTsmt~q0+r2KoP5+sFFp!ahof9$-SaS0;7*AFTobX07J$HK!f6Gz&H+AK8ZH)Ju#z$ z`%Zf*6^)9_=B4*PzGnLxbG*}71TVycRRP!pW9jUkp{t{KWFS-VcwmPdBT6JD}y|PQ81YnS~i;g$5OwjVIR7Ia4{k-F5I(}9e9nw>e&PZ-n>ZFcF)+zox_nW3T2pFU9)NI7@tkUJX> zv%KuGBNR#MZ_O*J|E6i^GqQ*J3N%$uaVg0d%unyHMq->w;pB<4L;l9B(%3&)T*NbX zZZ9@z4?-Fm6mm(mKN$X==u%_L*@bd~1plk$MzX)iNb=m-fdtlJmfyCox`Ayhw?pildW)B+OqV_clIk&$%tPq07F3%`DS68*q_ zR-(MT{AB2|;0_$SuLiW{)2ys4J8natgIK%S+FVhmrTbA&j%P3PfDtfXf5D#s$&Koo znsW1g`aHUAfNMn(ME8%5@^W(8E0+6C8e-&yl5w_EDA6laoX?TShNLj`GW=%f(}q1- zk8=PqQVwj5V+=RbIL6X!6Oe=$Z|sFeC4nq9hou`w9(zl^@=dt2y^Oxy<^su&8AQH$Vrk+4CxA>;z)|fD9%u_>nmM{M;9) zph~(yf-6*&bZCEn|5us#zAM|?WAGyp9b6zubdXqTblEu}&3?aR#P$wYmgGUPQyI+8 z?c2l2H{jyP6W?|R9(V)LbDgl!oTk{(+)HhAZ#%9RTrj?!8ax~?*KlYZkU3RSBRd!S~rGUTYy_( z$%IyfSF7sV7{bPo`|UT>gUcZCJv=;5b-UA4b!KKpktHU2;fz9p?W`Y%vYqmV!tbRh=hf8cf^`H6eT({5Ll|051Sb@FUG4q22ySWkXlu(3ZQ_v&$^b_Bvw7ii zgFLlUisq&vU{p@6?~KcZ4U7)Y@Ed=;kt3Ck-$OE!gIhN);mcdd-mHHb7lLU z*g;aKaK-a*{Nh7%8v|6s3C?Nt^a}A9Gfb)XBdVzoXte~D1EBF@m2+m0wwS1I=$*{x zy<3JN83Q)4%t;52#R}}FEi~4e-~(vkG!1M71Hq|$Nm-e*Tuc1BiQUO$s`C}6fgO{ZB*LrM;-J*Fbjd;)4 z*QB+K-ez;K!@&A+O@V~62%U%|m9~?LP8(#32kE6tmr4#vUbCdzMulV8j|nebGMx{k zf&)4?##yc=3ER7V;xX)_mcDpbGds&`=d^U^9NLnIGkqsCUMc<8uU|X5G#V4c@xwQc zk=S*^ijvFz3Fl_;vg<4NAd0fISHKV{x0T2d& zI~>H%QF1U(FRz)1ijxw3lE{3U8zFB-9)ATuB6G>;!ZN&}AMS@KHt$b;{+wn@X{^>` z&pS!T2~hJndu-RK${gRG_sL@17H6bQ>g4L;djIxO8rx0jrCFZrc}p>06qP^n{ABs` zbgW@3qMCw|a&_GhS1pCZIC1O@ua*Jm80_NND|SoQTH4dob9#_|_%=6~mFgRZ^Sv|7 zg$|yH=?Us^^a;I$J8w%H?f1>Oroarn%B5Og?8%8|swy5NX5DJmqnKb|gVx*kTDxYQ zV)puDl~`uT{rcg!>0vLG_hw~u5dj$Hjuuq8Zgkc1BVFAj(AxuE-t^Q|`g_+eb2xo| zc4k=R_}JFg)^3_Zvv7Rk4O2hBERDEu4cIXc0N6SEaMQl_?rF+C%!aSjA5vYTX$7n7*`Jtd z;61+Pmuqy92Tfl8;2@dP$ zO5UqKjhIW+@BMnGs;_V_CN96w-=iY8)M(Kp?ow~RxsHluQy@p#Toa{E&Hj;3_p8mx z^1g5$WL}{P;ZN-9ZDAC1xi^2<1Sc%}%`;#K#D7T_z5{65r~f!;^Vv0K%SDrlOS)1C zFaOw#d~S+%Xi*f8N2$2nv%hI9EBa*PBB7BLge~GfpX|jb+uOJ3{Nhtxz9&w@@czN5 z4wEjyljl3~Z3Tsev^EwN^g_D}=A=yX=2S?b-;osi2WecQjBYO=B>ujMf?=wnh~{IE zP}38adoQm?R3@p`o-Fa9E0r`P!d?wGzdaRzQ22lttG&XJln)*}xS9Xe z{UHfSFM)l%N4`;hFB|4v+L~fli}zly2|;e*LVS{myX69rx`N1OVYGyXQRqXOnrjFu zI8;2HnfA7@JWo$rTF>ck`RbUo&N1ukr@H(f2=d82WU$9VDcY>vYTwt z^>zcJLetrMmd1&{ncgW|e&b*pCY1q3KJC8O5nSM#v0QvfO6TyxW_h&3Bc>dmN!N9` zu;E$X<{0CT`g1VAOb*!xAE!E}>wQ)?1*LnpKJqps^fJuaie<+}&Nz-SO6uOrd)ra- zEQP>rR9bNAD%WbCbMxTnD-SjrF^t;Cz<}O!eSOjKsrAj*d3hX!fCax5jvC3zIvEY4 z6@QR>985c|wE%N|+*Hgffk_(BYeo=%K{IE7wgSwVYIwm|&d?YAYJ683O; zKf4)=*VNRBR|4F9kBrX_T>>GZ`o71nJ6S3Yh!QqN^>#b;5kVH_#U7%8(wAYEdY@_0 zfC@H|FiG85+6Odz@!mEq!aazq6TJ9kK4&)qm&|!cC}UHi9nHfIdL-&-*`l^6=n*q< zn!^Lxq2!FF;lLmiuW{XUw6d~t{7r%n^IPR@ZG&cAynWu7LX5Bue}ceJQmSZ0rdei3 z!fs~|^iujRS{Di$l1dR6r0(5*0UP=GQv_;4$bMFdRRR*C091S?!iV*kW{> z9|+!Msh>FEdMC)Fm}p8&#%kiq;CIyM5#vVFoa6ZT-GGutX8Nw}RnV|(dV_}!XmxNeTeaAX?Kcb?!s zpOQa|-`%W)+%u``bnlV0<9BPwJZ@5d&A@0xd^hS{bms=O zBM~5H_R-FfO8|5dSV_+xjE2ORiJK^LW7k8yhi3`iEH7}9V3$(nC$0r=;1$q;J z`25qBDhPLsjj>wZhffWymK}ui)C1>QKHK5HK9uMHOI-Tm*$E+RfrS`!czSjQrb6vZ z-3(ks-x?awRy|-^0Im`g*bzJ{513~rFpa3spFd0I;3pcV zfBky@-Je3nNjOa*-03_pnroQ>_95xMpC6mfcO#k6{G*lC)je}rY_$3?Y<Bs0X`^uokwLo`&dj0E@C0v@vv<=0=ekqVHB#FOSR~}vk z?RFsQ-`@h@rR3Dzw>neK=qo9qD;@W5HefO zHk|FQyDHE@Fg_ zt=U%~h^&BQ`fLIh8Xm2yBUcIgt}CpQyx85a1eB(8$*a8WPDoWobWTOW<+5*7d!LL| zZeP!5zbyZ8O%c&*v8Tn4=Bd@Xka*&G$ljjt1zcsaho1H56fOVhCTF(yxqzhn z9twaOt+>OY0A+JkfSUj`d(&5zx_c1$f?KJ(rN@{!&8Chakr^sN5yJVB-=i}|FdYI# zk6Ull&bG-+UF@%ADLrYv3~PS-d&hl1lrgLq3=y<3^f{~F+&0IWS>SQUIyqnSdkio8 z<>`XGA@RP@P*w>K>~C;_U1-_AfXxddQX5 z!){?=(HB~80@z5Vo3#|b_g>oA9KqnZfdNwcH93&8j9zBz+-?(zn)TmD&JEf#VE_2# z|9XCS3xPiI8a}Yufl%BNQ_BHMtvIg!DFnTNA@aYtK;>eqnl({er~N&w9dv^>ov3At zOf0tg{BJW3aW>q(UotFT018&Y312XdPX|oNCFkyz5_L(;0zInCLio^_~gt)A&)y#C046Lk66PrJA=_W^f zoY9zGnXz(B-Yl}Q*mgI;i-y(j#=@AdeG(a(d3ki_d0FC zxz@Lj`#H9@lO<+hvByv+B`Bdf*42~(r=Rz74G$+FPvwcLd@%Fs@u;Y$`8sVKtEIMX zl9jbJuu6bGn437AZ5&h{E>4$Cd&(YNc6iu8)~!r9-2$(7iC|uB85KP(|8m6a!nyKY z^&(Iab$gZ5v=L}-Y5GHPhag3Tydy(5q!cJS>*0N07&K`lk&l-cltfK^@Zk%Y9nKr` zIyZmHt9Qf!u-4yP0AIpsin~@-Qs>B(sI#pam9Ro?)f};`ShrBd&4$7*l#rpx81S6) zl$YnekZn!NTdbzi*Z*?1G`(!?4ccFjlJm=+YxKX6(c0N6c78nYwHs||K|Q|Ho&`N{ znDZ;Tvhxg66PogAUE}xDA;|4t^<540LVb9=Q{c2;)n9zHHACZ>SE~mo8pDTQwz78D zg?r;CDCyG&dVt)@7NHQ>(Q$T(im*?~EV6^6Kp{E__kk{MQx;#Aq@8Evqg4(qDek(3 z>(1H<;S^g#Ro{no@IV~NZ<^|_Rq01-;+oN&>{}sHHLgRB7=4()=8pPpKT*% z@KND(ND4V}G+(=(>Xi(%sKRD~ z-)e_R!S?OBO{*^mVpkaSyK3ImECVC!pK7Fl$42Yi^C@vJ9=n5h!_l8DVUGhGtF+b} zS!+5=$XQQ_7k?X?(=A$BTGYXzg~oP6VN;U~+A&_qdrGNigrR$E843_s9ke%_oUKZ8 zE~#5ttRE!LnaKZnst_K1Zr6Ez@D9UNthrihInvg)V9z3g0xhHEi~%lv7^6G{aCk*T zzTSvLpTGL3e+>9_{+tp|rakUUQT?f+wG{pNcu0Zlu!^z-x4!S668qxtZZZRUt6<=q zt9Te!wltqXTj%^aUnx9V*~3#ktsps5x5CcDvjeKFPd$0y=-}{trvTZjp7|o4v`TXm z4#3;I?()DOLvw~~@WV0^zf};ZWcf9aA-hGjkS9-pmk0kOPKX8f_0Ct3J7I>?6Zk$Y z`$av+4acoK-s|z%!I!+C2Oi)6p^02#Nezq&f4C z{sZAmI%Mzp`nTTrOG|E;V({4Q#Zq3ZQ@-+%F2*jT=xtUU#Mu0guWdNNzyA4vX0YiY z5<(+kJwyNlJ}{$#qvi`|kox^ks_$xdXMF$ur;yE|nhtqzzAiiEbhe?m&=tQ~|Ces6 zT3TNxv163PiyCMF3gTQ>oJ;?dahVet@U+Epzioy`fHmT*? z+gyM6?T4vw3ehM}_qp30Goc>qb#(1Bu2}j=f#DOu%}T)TxgZZmg+a5=rr6ew{LgN? zs+vbtP6Yw4T7V|tI)N~!Oi5m+mP7b*Z7r@kr$}B7@MRY#ud+=_=1<}F^E&iSB-rU~ z_G^8;7F;d;rgBC~c&ePh>)&xy37p03qkje~80CJ!dTgK&#N<6U^Hx10JMsbUZQ(b3 zpcSU}R~4_v%MpMIhLM1l%#;)q7QYhBbn0-`Q0yP=tNr=ym7Ap4T13M3mDs?D?Jg~c zT2Guyd3}k}*v6wz%=$4uPrFKft@~+RBx#i0YGbGnj_)KuWYQK1zj?hQ73S9yCxMhy z1w3zho?ZrOQQGVM%vM)KA5T06jo6HD+qU4^`nlJT&$7z4!oyB4C_p8EplFBt5z?>u zJQ*5rZMbri+nE8bud%f199Fymf`rc18-40EU})947n7!8a|U!G4vgxf`q?F0CCLd} z!1XI5Z0<&!B~MB#at)G*RCKr?`(aZ5VvGp=5$2$Sn$akFsXwjA%wBK6SOK}$#lH$V z-)J>Eou#>Xuud=(esb>GxZIbLM^n*&gPv!7iM7}J_&}Xv2H7#?)$qQ|9$h~Gslm6_ zpK>wbVOAsj6~|WsLiA@Ra+|oio%aTwVJmQl=;P+AjW-N#k_#Ot2)rc=SU4z`+$2wL zYik>TAP|6eKgY){u#aB@a84usmG*-n6e$8+*U=;8BS=rCAS+&+auOq|A!k%*P`Bob z!xdtY54nms)w(&lgCw_dE)bHwL0~aKKwR{mo{$`MBjlSFjOvxRtH!kfG&ls4HSunb-1QRz$VxO?xUa=O6`&}M1l#mUjW{js(|xZ_-<{+ z7PWSQ*_s0j+n#7@@Lw)#Ps2~@T|a5M2- z7!2P39maF|sX2_Nennz;MOFtp6aP)PP?JBw8R-Uwv>@^m-lz_FM*Uu=h~^*^wQk(QqbHU2BYnqp*eiX=)(awEVBYbEmD;R zSvh(ncprL4@3DX9apsGo;zxHgoXmN&!f-!_^FaDQR%j@(g6!LLW;$FF3))Epkh^rr z>t*zp-@lC&RIRP^e*F4g?gU8q9-7BxTgL6N6asT~-pxrgmJmLZrm$hoY(1Nyq)_k_7-x ztPW*8)v0#Q1vw;HM~SmXl2QnI$eRg!zxHP;ye}wxePnX-8$WQSYB| z4|`g+*Vl)Aj%IRx{CFt51O%7Md>aY4^j93Wt)liK5_~-{_KBw1fs?fU-N`|xO=qlT zp}!v8mBABvtmF@jm&QtVcJ`m3Z9qssBM_XZxK^A|S*ZmApdXpt=(IpG3KWBh#5M)z zB!dA!Q)_K))!D0KcX4rn))??$*QC%2f44D0eyPAE;jhDMxHkPreov*^hhPZ!oiyOnt&k zK^pw>#R~w@xFrE&*0&=8w@#CYfVI3H((<+HmE*tdTaOj8T@L}RRSP%P#aDhY< z%x|Or!EonZ)nkva(xRQ1q0+v!T=o7%X%0xVaqa z3Jj!*KzgYGxZ*(K$*wKk`w;ZVh~OI0hm#cax`PtUt*9rDC@CpJAKlg1l6BeIc>9Wv zWcWOu`k!^{w1IP5YV9!1RNah0?_9ZZ<(}m@(FbNqDk>c|X)tnKhj7~0C4vOp!+^i1 zKMyS3|EcshN5+p2nk0}FZUyD5fYU^159?qZ6269pX+x{~-}P)L7>82Ig~0ZE32jZ3 zAik;N6PB1Qp^bc8Lh6J8g9AXceX$*smW#Bpf^S^_^0y>Yumfm!_3K)+PNDT{$6|nJ zI;fCLHj`zYt9pA0qZxRSUz^H6?uJ4VoN9?z6 zTyg{4>{EkzWjLSYB8*sI-Mdug+a4E`-T1comD_~?upK*W`fbA!g4`GWyr{S@SoO+E zf&s7kde!Fz?zZM4ZpMP1~gVGMLF`c(hz7*c>Xw1aP#E%*LBC@RBl@>n&u z9RSkV{klOKEQmb!MmxnTNbvYkvEE#7nI8&iU)&n=RnaM|VUn(#`kWW`z;Ng!{YIxr zSWH;fr**OO%6TN=$^c_NKm|NYSxYS<1E-q(tfOY`N zCgDsALH;IprxqsW{>SKRevJ~qWJeFM&!U0mpQ8_3wa*lHUU|O4K*ci}Qo`>8GG8WZ z+;}!kwU-2O^X|!qgs>hFu#j{py7C8Q*UCJr5;N>fF zFvfNW_i^e~K97E|zASuv?V=xLb~6@8kAsd(GHn`cR1ooZ;7T>+UyX1buf6=0EkMp| z+KMzd@={{668S$dLPkQ<`NH=GTVkTx#YhIHGRFvJ?Jy5b(z7%t$gH^$*&VamHf&ak zEnPhA4%*|Hu_SY%Yr*kkqkkACq~M}j{lX!4GT$_$Mg`G%LtvxqgCY1x68?vJASNc> zKSCanrM4JfBx?LJ?S}TTGY4s;+A=vztIG5cv$Y0GOu9Ih=oGGlgfCYUM2l3hO9aI5 zNNxHaVozD8uC>IZ!}+DTSEpPJ7J(5iYjl4)eEH@hAS- zB?_$dKWDFcOjX>Rzq07ciIx1q&{Py%fPG(`p11-ME`jVBmGiqE^2WUV3k;u^>7pnd z8&O_q)~)XgnTy>cY-S@wra~PR>o93oUM6WFpfUU9fFl~F^f$rPRbC!=h}XMH*{}@7 z2UK;cBK`R=W<7RL_*PXH?lF?jz?5b*#oRgZ_LbWt|1fkXLcrHk_D zd+AFq=UExnMhES(qNYoG~y##)qd|-B{sUC8p z?5el{wSa@6Y)X~9Y{`VpbuqLn@rSH>MCBd zYtz-;JX^}x*WkQN-7yO0=F7{(S5Qy@i2_KWgrlAv*NM!y&T3aWWEl5LWT`RWV&Z}k zH$`AKKw27ic{v;B>PckQ9^RJ3r(EER0-M&2-eMPCQL@FKt8f~(__kWY3spZenjJw< zALI-~_P2aC?=cgZ*HaCh4c;Z2qJ$pjS%Xuu(PbkBq%cN>b{t}*7hUx18iatRimU#@ zO267B3K5`C{;yMT|0=Wp1f%~;0x!!i00xu?M3sWj9;tTX+unQ*%_qilK`|UqB9`q# z-N-FaVCw)7Uc&YwES>@cLGU4%h&*R7AQcN&IN8JfDZ#7}`TqIE22z)-%pO;ThJ}>_ zgyj3C)6%yL$*qq>K}ZF9TJl*Bqzy56yNBK-g7Mw~ZP7w)L3k8EO@frJFM3LPLs$CY z%ev%cC7-8l!yeuJCI2pY$>nT$^1wW)>JkqNx24%*kH!h$<|81u#v1{2!wP`75wud& z&g?OcKtK36E+s=$>)ug0KmEv@TVDPW&5aaUc>00X6};A0(%a3)_NUaPtMnyzC#?6Q z?Bn3HR<^dW&dZY*0fq;5<1NyLnH8JyN`p>Q{uTA?FGWQvG(v?(-ZLE|XqTGy_VMV> zFHmkieA3G}JG@7b7}n?xd@QfaP^h)QBNeN8vazKWi}p5#LK2@p=L&`<6gO|4d1CYs zlj!$~?swt}8`44c5-d9apXgRIQ>4_F(9qEI;dqohy-!Dl$(dlQT{g(7sa!rh+QalR z>xF?68^r&lZo?S!;=?(A{Br1f|AWrAW>EVeg|*Cm$JlUm6}t6UTYU+3Ffoa5!ojA0 z!h9f^il`=XtRN@VAgi#jFkdgw%76i+zD7H%h(gP)4uDfvEQi?1uiRvJ+~oi@hlUs> zmYf6nUMS9+2?jARUFCEDkZ^#qnJNU4eGVtgHAcA%Hcyke+F$j4ejHZftB%Rd(X`x} zt^#^8m2R)JU#k0bneL;P4;hqEZbSj_4m&sZC-nMSts~I%fcvdL;rcedv`T!Gv#Tot z>#Vt#_-E~4Y-}utklvkfJY1YslQ+usq?FUq(WF5NI`S+AFGyQ#94`rgX@ohXBB(Zn^Tk{NTL z5gWm!M?F=bvKW|jz5e<4kxCg#24K1feXP256V#7???sPC9KET66Oi{SvDE$X=q~v< z(erwJfW~1Rw!_?hJvm!4GwGczB)^Ao77r2yg|k6h4~>`@PrSkTFc_oovpiTAEtbfb zqyu1lWrQA0CLhB7$flgLS{^#cx^|nEm}yXG+l&A&(X) zrnkq}U}^ub)cxxrSG${4Ae9P9Puuaz*%=qkDY5AssdLuWR1ZZoW=Xh!k_k}z@#DAU zm5>ZjZo)?N{w2IXbD5CLhcA)7Gx^{nvB5`kZQ3HX3v!TczXoSD?2Umf@UjfS+9jlu3TKxqQe>LBbqQ{$%FKwcQaqX6)@ ze+!hms-mL8C%W+1($o6DCUi85=Cplkk}lxEu|d_)gr+kyb<N<{Oxc1CKjcA2vY=E1MMXvM7?>dt{EYqh(EHJ{U+c)=5dc;EJe$NNL9Y2!p(3U*0JcRMIdKr8XL2(D!>7PQk3gV)nY zVViNIdxf`MK>h_RA#&n_VpiF!=1X*Nq;3*ap|E}r;%V2%?+eggaOI@l12NfYnq zz>GbY63p`{{S&N|&J|63!#n2PvgBY|My8C^KVit%!8=FyFhe8p+ zIJyDCuyH1?$=$RE)K%x*MR!{$d`w!)1u2JZ_M^1@2wuP%j%K~K_Jlni2n(ON!oPw% z1QC$=+I{-l5n7AhJ%-5k()wpMyLnir#nTHP#DP=ZXh4MYX_jN?Y4CL;l5Z1)C$-x+Kar<`v-mCr(fU$P+@`&aRwCb5TypN# zGn#CQynCNIoKzgw+uLgp+~HwR0dMVZ5waPVCcmh30h}yTSl`~(WRI=3zCc9N+HO%Z zlb~m_`9>HJxA(A(rb=jXr$?Y)i)|E>Y!}~+Ipt;41fcZ!y9>jz;F#M(u$)(2oSnbs zN_gZnUOxpw#wNhXNqo0wFg}Xl>lhslSn8rnRiK)? zr%eOk>tlYpYxCXHcYfL=^6OVUIN-Nb5%-#SW2 zCC;>U(Z`;luNR&R=4`ADHGz&XO5qAsfx&L8o81F{NqjX*LazM`%^Yl6) zeuB772_8PI2m~79KMoD4#(w%lI(05yDqv9xyDd7xQYwkMC;!ybz8l^;Z*S-1=l9et_gSnz#L(kW zLwj?ZKnrn)ck;epIR5v{Oj$ECv&{3p^<1l})7-PZ6meN-6JRRyPZDU03X`BYfF$ar z)(pf0CwTYXZjfDrGC`DEPAHjez3pAP>vhnNb_1U|zm9jsW0){+s4a z{*gni4oZXpdaPpA(wBk36^zCdpqn6|hIo01dMpyA45ntut!vA9goyD}5+W7bM=?A8sI#GV{$xKNhwfU!x+dLpC zXib@<7)$tiLDKFx@G7iv;cw6!goFQjmcY@p|2>k01n~di>+lIE8x{6p(*TKeG0#WW z9Zp)`q1j1FOjLjQa#0H5iy}ua@a`6O$MHOkKHQvIwk8E(-3Vqb?UIE;^n~Ymyy!of zPN0#J(eP$;leu279y=Fl5%V;tY201y{^^c3WCl+!8q4UFE*kk-83N{gTK!FV5I+lq}_i51*jKMUXz+ig2)@$A@R zsWq;i6jW4bt~yW7xHo$n>grmX-H7P<-Cl<6NX`!Un|{(L0!|@7JTy^ip7-sWA~+wa z>E%_!&cRWzXhfXG_+{7xaya3-4*v6%)fo$$dqyYX8kLDZ&0@(LA7eI=NNg9lz zQKYA=0)-ONuk(BflE}Xm7HY`K2A0$Ie2qLQd3hD^{v-KFdKYA0Etwj45!=fMl5Fmm z76>?rc?WoKuim?jl8Xhlxd1 zwdben5o|4e$)Zf9Y_j0M)RnT_j$HjYkb0U7sg>B++^Q;VKrwB%y*zLbC#R%D6=+33 z&S4iC@leA7D1cb2mo!6+1> z!I^>!eWuPVMIg2Ul)ku<27oo!WG4)G%LE*(#0`3X|FWKqoVwKj-AI z&e_PB@A9Vwp@FeYz7oMu74Vx?D`CtV<;#l)Yper+ZmX>5+c)-gY$=F5?e01Pt(IF` ztM|)c+zMl}VgF1xCt2r08TgM3o`b|rCN}Gw2}stvZjAqO=cD`zMzNk|Kj3>dg|0>q z%QgMkO(cXd>e5MhYYh!d(g^I9c%L|0Lq{oqD4aefgJZszk3#|>VXzR;as|l1EiBSz z6aOaI?}vx3T!!`2y|1c=uQ^%$4el9D>Dt#VzMtL|r3w=T8`N_(D-NLKfCwHE+eg=c zJAQiFru?|`qqe&S*u)^XFg)RRC+8ntLJ2;2V1Ye7up^x2?5c2KNKc=CIs^nWINAg4 zD@eLT$1Z;7o=vAA=QV?z+Acp&x2n9PrHBtW6!s7 z^+m;PCVQfhtWNu^X@x$pSxD%yG)*txk5#NnX|yrs$mxkNe-6%xg86`hyy&_e7pacy zWt-468*fSc4m)6E@hSj|fSrx)a_zi1u*WN|v9Yt4Tpw2QzjCT}WFvYLHE-Tr){s7> zr#d&r;5RJ?j&t7NJ(}lFOiBt=G>bn!KYu0sls+LRjW4kJj)720SX43A3fD8At(q%s zFJiMUdciLZD1IZ_fALh!Yz6>lV5{JnyU2qHixYe;EBkpwnyc++9}2wGuG;G`^Qo#^ zTsMoR8nUz7*tob{uJotpculzX-QXKbwv0>{ehd5H1+|F}wzwTDN0OLsf@nfSIy&=0 zwt$`3Z!n?BVw2!%s=*dnJ2I}6m8b>f2I^_c`$GmEf+~cVpaF(#1 zx=RG)jCQ?u6@*nhY8HMR-252)ZBzt}9o<%l=COqi9mgnHUHtlwj$-HGITBCvQZ+Cr z1lzje+HRs{a95Wi7hNsnYtsOawK$ikLJV?2HwNy%2yCY-2fLg5ZapQm|5{Qq6o-QH zq%2t^@d4iWIXb#z&V2+%)O$qh<>du-j!$?LIKVsU%@z#~t;IfJ2Bjq6he}O?;B+#t z=#2*#?{T@KG0yL6Z-XN;Xt%sC> zrWZjksYnhXk;^xzq)A9fARVQqrZ!sCa9j#MEB(+}k&)4~HxCZ@L#pbfi%a?B)RZLL zw=k@IJ|jDuMP&-Ucj~oSK2~yidPNbaN+1qg_E%m2-NwA)3|6pY@(sa<)gFY`j!Db> z>k6V>9Uxu5efzdQYgqr)kZO8)N+(nAUuUE)CzX@0wnN(NS@%t#xUztTOIO1OZU?Iv zYP@d+1we@w48JHB%M-`Yz06CQoYcty0oiv_URO0{TpX{auV1jVgix5Zzmht^ z65XJ?bs?dr00xff724F@lSV`g)zzK%SQnI(L~FxLcuSwxTG%T^R$=A2u_-Or?A{O? zDHUreMLSyc>WZak01L%lwEch3_8w48ZPB`L6r?B$!chdlpi)#+6ciAIfQ_c0pdcV1 zBE2cSCMXIb0s_*j(xrsnA=0JyUPA8>S_q`Rwe{Tl?*GRBkN3vA<3ElQU}x`D=9=Z3 zbImpPtLw$DeH~T8FLyTvoE{&1EiQ__g|^Ge%6e@d!Tg$ZGnlmvOFu9<51~0D(F)vt zUTO!ciP)#!G&R!6^I^&vAaqbNLzl$tTL)A@^D^)CcG3r}Tk*1<0KqUNweDJ;gGXYR zr`|{|KD~AbXpINJcvn9L=iR}uG_u89&g8sP^iMFNbPRXaT@;MjD|=%9h7 zzB@Sg3-Gv>ib|`D+M$sWTZ2V#SlcehzoKF0Eg|~l^0RBxo24X)DS)A;d1l!_y2YtM z)V>I<;o{}XZGI922vvhDQX<4DS)C^$&B-p5xgHX$*Vx}W0uV{sv@yskz-7@VlDY`d zomPktu%NJOVy{O%xn?$9ey@_Hc(Z^n3aitZf~jlT!?0H^DLln0GM`)$>QOb&yi(df7sXPq?< zMqcQ^-p*7ff`{djZ*V8AE&(Mena>BvcIrqBs40^RJ<)6{n}J}WeJ2eeoGGEQ#BqfY z$2SqUxQ)b_nCXRvFq+NKOtIamwSASIP93VP=YkqWCWJ(=|y0bAQ z*>a#VaSt#nvQ%ErCS`KonUdoMAss0lWmua09;@%+8u*|x_oW^(_s8ppCIZ19L?Mad z=B4X0^9s)a3)F$kl~9KYBZG~8KQsgG%bgcp;3l0Yr13OrZ=017UP?P4qrUYCw7BFi zg2|PltmM(w^4_zes8fmi`$<^O}T?!bIqJhVLLvE8bfWJ+v{RKzP zfWFuE-e&85+q<}1rwsiHU24~tso)di8~}AByqaGEz@Q=eKaciNmg}{=Q<(~a>wfRS zspPtv;PVFJ{=aCO3$(iZP|RMa90#O#YT2vDG=#e|T>qKl0*Yp@ z$i~9oE%)&KVa+plVD}&Mge73^%_-zrX$83=Yt?LCl6(VM<$-EY}=utco) zWK+vpA%5_Zq|<66DzS+fhueGeSh9!i-rN6x*%<9Fr-z%Gm7>FCD%~F?*$$NII`URwK z{NwQkRsuE(#*xpZminT%`a?#-joq|;P7t!+@SArR_#ce18omHL!qewd*MufygEcty zDzj+Ub`XdzcsJ+ecXVDhIvUkF6+$@fuTtk7f358|D8~g$y#zhdwaJY=Aa4=v*5WHI ze+?{WkI1+VdV#-(Kfw`nU}Wg=Q0Jr9l)eXOFpW2Nt~XaO%$m+QYd78-%5}MWfgvH) zBel}cgdt|rF;HB;AN8D=kg!#-Rpj1o6VK>-=InukUN+@2nCBcSLU9)3eQwGYx(pI| z4m}y8+y2@065gGDDWR&5T4PSe1aBEV*3mb(s=+#cHS4IL=1S^-#ySUc)ywtD7_QVr zvAG*_s)gh%j|LG^J(ph&Ef8!T!;B#I&_ZtA6OntbdzST^0v5{pOs7U1C`1l?1qrKc}V zyl!*zl^bY0H<2Ejd*~1oDLX$w__)iiO*33YA+M1Rr0lXTF?4(cc(~krdX0k-VxvBY z2BowX#@FEnLpn*gK*SZ>X#AcH#gpOpg>3iE?NffU&s-lFY|lmz&i_l_J-qCvjUNRt zIo3$l;b+nb!Tc+hJCDfO{koohB1K1A-iy-B_QSgQT|x`c`F6E>=d8v`ufN*8!!LE~ zMgd#J;HvCgQ=&(Mr!Ws%wN&NXy#dq^5$n@%ng@LhyQpkF?w;rUB=X{2wGAFV*rHFs zX^97IJ@5jS-&H(jkTlq^IK%J80*>`^Wy|EUa;>^PF2m%HVhD-~%ip}F!;zU}dR&R+ zJ#1(EGf7jjWP!6OzQAdTAj0gyPVDA@OIx;Rt?ZItWnVOi+eqrw8Y`*2-dVjpO&D!t zVT0|+LH#p^M5BvKgK8#ps`^Wea@#G%JF&TCJN5jC`I`mznB;y$4bL?XYc-gVymJcI ztDbMo%$eRnxpoRbj4hh>GK$N04_6f~b-t)>uQ;NnEP^m}`(1}8x4we$0k3S=5g}^96IS@0W zfrH0K;LYjMr-QB6YBtX!73Qvy-dLe7M7IyDr#SN?U|#FXc$Tm3liDE8{9Dvf#nrWp zrzu#80caf4DwYtiVRRlestUp$VJ=WIP?cMeZF7)3>HP4X%&%SP>Zz+uS=t32uJC0w z=d%Z3yLh*y4_stoc2?Fyke;<&!~#BhK|!HE0jAyq%AlJ900yuI=zAov9m5yv76*fZ z9H4AMSy@?i+k<;a-HJ9gIbaXV1O5rESD^{I*L*b&&P{XQcF7HUuJ@e+Kmpr>DxHJQ z%>oe@goRZ=bmS+9Cpkowx7TB~T7*5X_+Ios3S1#&HMJ7k0Z0@EPK``3v(^gQ?FJ252Lr3!>%@)Gv1b3A$aboOE7HF>zl#=D}sY~%^XzhljE ztE2}tXnvRN&&LQ99Yq=dfCJ!+K;_E?b%3=84N!XP`K65W;&b!!${|Sd4BVX?OQx2W zONrDu_<%YXqz7QU3W zPJc|S)co6{3*O>y_V0%$=%5-XvgefxR5$qf^@bZB2qz52pFpl@&!Y=!QA^gwqE098 z1KcopPu#Y{Jw?sP!Y+=7YHFL zWEEI6_fD-nrugLg#|7k-n>U~P4<-bIY*$#KWg6pz^B5(-$sqgKZ?*W_q@er0$9OGt zolKHVmjf#>-%;)qnQWb+mI8jO{-4h}FjZ82-MBQp;T>M3byD?s|XC{Q2~!0kUi=6`P@jXf zG5BnnbnGFesp+P1{u4$Dv)JF}z%%guNpIF~@$osJ+2@at56MBYL`4uI3t1IJ2vVEi zs4SJMWy#~6pu&Ll2i&!j&1$&oP^cRg>wSyKa5(x=$Ot=o4D+X`k1fA{f91bY=IL{c zS88_u$&g7ozFHoh~=6n+jD==@cB@Wc4q^lh_~ddw84QFqa*y-qsl)@rx2zFg zVvmKzXJ|MURekOR`W>)VP6LjXR|+@#HCdBmt1d-#RRf8mM<6P}G(9GI77S|GOWCyF zVh;-;gbhM&xbIt?aXUm`4;d(>OK6e7AEumdtq;N`KXSD9xO$INA5)bkU~u$ea%V#T zFajVcY%qeP_f6Gvr@pBJJQW)hzc&Q6w=hOiSkN3RIk)RB>oz?jOUa?O^tFRKh%c~< zGWL4Wr~iS$cC@mK`ggsL$x_G(HRjd|1~Idy8~brIgdX34!^cDS==YCp|BUN2v)g@k zDcc?0>0JZR53ps~06IO>A?UwX9-=*#po$H?{%WfVB$Ww>M|Gpxy@L-9{&UVhUhf}f zyRGv|2x5ECxlAY7^BK6-9TSlR-sa90EnxXB@2|X%@?>(uF5+t6c4ne{UF?B}8 zkbqL&u$o+6Y_2vXC5YAFc>)EGd{>@vgEM*rSHJt zirX55rm@C(ORO{;T-9@*M$N~qO)5|rGiXZI*4HfuE@N#OVES94Wt+mt#0fysFOwZg*&%UClgLGG;}H9#0cAH87U3VOyzX z6<?hU(A>J*l*=vJV{?9pxK@VI>lBv&y}Tzh`E?Y# zCyePlJ0DCgZOl8nr<_2(tn4ewU~Kkie|d;Nxy5{V`PbmM2)o_`0!|kILoRPo_WczO z!C?}NO`OO3C~Wa5pwLjfKfq@<0k}(OxTS*BtS;8H4G6ObG#!=4Q5BwJ74XSvwiwReQrkZNwaJKv^WyF9hFFd=J9jCEyr z{FS_R(?3}~4sfK%cXY-1()?@I+F8__f>3F@Ba zm+JmCHNxJ}+)wQ{5>5Zujv+Ts&nd@SGozT~>Bo~R^@8YS#AQlnaqZhW-qVA?>@OnR zZqR)jRrfU65N@bWou4(|+n9pP34i5>w<7|G9MKCh8fE7dE|sK6P5m`Ts+H%uF#{ZB z9O#WKUMWjd?9_dVZw5`bapUs(x z9>=*KKezK2t&5kD5;^}20>xgyn4TdIbONw(E_aZ6T0X4soPm+$;uPDHAB}Sj3P_$A z`=w!$mnEcPgeb}TE@s38>p7vGbA7J~a9 z!>#Dsil5rX381kLG#im3@tbZ^M_xPi2no&4CL0XD~297;3a2Gi= z#`@}3bvxY|;!mJ`>$mTHt3t$W{h-$M(LC-ZfTbM&)@78-$a*IBx50ug3$)Y}4ItW1 zBzS`3!I+p7BePN7I-aK8w_`A(2!VYlw-POFO}-KDwWr_vzMq-mjg zh6FQwc8VD9{-tkFG@6jWk>HUGg`l?Z#CFP=DijUb&(e|%vX#6-T-m2OHES_w7`us|L|m( zo42&L<10?dgyhm+U}}0vCwC_f*_9tar_X+t-OsEmQ9hpapZ2U%FI65rYL8;fW$Xhy z#;(%{Iy=gJ10=+m+5FUX1SIa_Rqq#xqsD^dp3Mq=nVuPeH$6)gJnQ`RTN*>sIt&X` zIg_8KsvNtS$<5n6HC5agHDoMXuWe$8qUH`D==gQaQj~SCez*jG;~AujRCWE68fc9=vK9UsRlYWM;vZxO zV-f{A2mGhx{b$!$u7~em==TR?!T68<@4v3vl6#vM+O~NBCMS6xY|~(kVQiwT|8PoY z-1SMv@4b~NaC58=+MCBAn+QoPNN`@6uMM=m^GOLQDkj?3HDo5kY$s%Z2OhdGh`J=1iE>>rX{< zX6t()9)5_+B5LZo(}vZ7@uK&GJm-YtBc}4u9t~VF#>y2#AvZ3I1PQ!@nqX%0I&;0b z6LnJ}^E&sln!U||8HpR>${`?bp4B9gmmGpoM5w=+AKo}O<{ zo+d+ElAGgJO}I}PtY`|l@CNT`iH>cMExKb0S}kvvq1$RGGzX)|FF$~-SK}4E=bM>n zR3ImAiV%cL3u-W~&$)<~8I_ztv<(4+E<)UBXYvhy=H z{r5ic>)A`ZQcvgQ=wp;3NqjzlfYBbSk@~lhF9f>N(>75~qt>cRUEh^KH=KHI=Bo>J zJ}lj&(PHzhJR@R|y%jC^2fIji~vv+R? z*oKpode&oOotitRmY1EUwjJrS_+7f|wVc7tfWEVLUp3|8$|m0r zJ^XsbWZty%5U1I5{rI-;eEM%YD-XpDioFAi(zqPUwNX%X1`)qOWYwS*wDTMW!qPcH zGC)DVM=}lY4p`s3l>6$VlORL_i6=X4Hc@^JX%hlR&s5ArX)yVkm^PUhSzRwsy<1RV zRA3Or#l;-NF`uHKfAyo0`1Bb26Pn>Vs<>Oo9qv#ycSg7x4oU!7jrz5 zKz6yg$hs0|e46o9qCGgo$Gk6NxQ1f#eTq2(gE9H~G&T+u1StdY^9#y8u#g9h)Kn$S z6lv8I(YJoK63k9&pyx-ZH$z6>9jk(+TPZ2`@9H%Nak_iex($x6Xe&Bgd4j*^=^Uhm zpOxJaxLojNv-7vKR#X&(9aW4}{JFVL8;KnQr0nXB=C*XU2vV$W1SderiapKp-nS8- zeqAdtFkw#2Hhu#O334^a+nfkz65L-}{|tkWVo7pQaigl73J~6;w1<9I{8W7Q9(b_N zGKRom;veSzsgAFPLta+7fa7nrs0F)1pfg%N9}WPTu~^k|ORV~q-9Vdo6hEY-*TB}_ zurJ(A-zT3H(Kj(NGV~=>3Hi|TgJINRuSqdRoexW%4c}a8fxP3F#QxA4=)FPxmp(9d%_ zeT&1qTI(To(q!R>|J5F^Ri6G;Bvv_Ui%~)v;4S5)sF2rJY%2CR&}O8@h2l4Z9|!R- z^$8i}I-VfB_0FX|gt8kHc9zc*)|`|iz%c(b|Me$Y+j9SL!u(_+Q?H&5jOm~%IM^Ah zp+IL9<86bPA#sU)GKP6wTj5lhWMDb7s=GR%gA%VHo{(T7Tj5-g#dk#s2LKwKSmtE@ zY8%a62#`k{D59xZ7Y{y1Fepr4-^-g-4`6_dy9qBA9q!#37}BM(21y2m`8T9CH>wY?=UJO-&=G2rWFkkGh~h zQmI)7>KrCNkPS*2@s^!_>bvsIGXBsLjTskD{*BG^3OD#=G=Qhq(%u{jLM*XhSZ+AQ z`hrp|y+z3c&)ujoP~rObada*IdDe>xteP2R0f4So*6yXMQn<={lx6+xBudKUpIIiZ z>|P(bS%D?w^LVNQyo`?o5eAE`4Au7oC&ibc{DbXNGE=5tOe@fs43GOgNJ2&c`oLgW zlWc$d=>NnFi@Rs|z;(VTkbl{vn$q6Vvb8gr#MeluVDbC>=nwRdz3b^&CFV)o86rTX zS*-+N01bezzqFr)HUs52L8e#S>gs9%QeR8U)c7Pw4@5?s?aqTl1qLhs8W)%ScBb*7 zkdT6H^?s^N<>rI_fdSRNk-;R{L!0ldF9g69*3*MD+zR#u4DX<%Q zevlLH3?h^*9Ube>{%sSet;3)Q@W0Ck{-gT>C>YIDc%~gz#&{CwG(VA}T}Q!BQM#PO z>&-!~I(7z8E0@#J5=>*b`}~OADEfauh;VU}y%dZlBpGPQ51b5(IRi6Il&g1qfvK~c zYz}3nRmpo+$-kWNZ*%8Z{b73$R-4+y+y%fAZ%&Sh(y=Um5aa}pIF^=6<$B^Ebq;V2 zNB%#p(B3mn`3v3`eY1(I%CsYQ#u>k}Fd+g#R5S7P`_i_aAkhGBiL1MWs-mKS znF^!w*69dfC!YJC_#oq4h#=BIV7J`xxxPLhL!u2pqFKj&jkm~>yCO=FO-|ClssJbo z?oQ^AH%EQo0%{O8{!j9Obb!!pRP!Tjzb>w~9pEdef)|S|A!{<#bUOSrxs& zN|ylDE5PQxY3S-Y5Q+eo;m~CeU;Tr!%P*R_dyysS&nmVClCS!&5n1ohwktZu-#pwI3FS4yoIZ_z&Xx;ygXYswe*NMWK@Qa-Q@o5JwY3b2t$XNBE zzUreZSPBufm)QdzP_9DK4|`toN5cO*ZUSgUDM^7DRCKHg4GFOuNFWm3(h?JYflN>5 z%1h~fw$l!p$3$kJ?wCq!gycZbzGG*p7bF;`0m*Nmf}#fh%2q+DTEbOy2pb2sekqGb zJTw;+xq(`8+cIYVwU_Ur?UTzNQ9O!meQr2AhsQPGj!Nr7ZZ<_J$i(a6Rvsup1P-|r zk|sRx>I$3Fty3xAzWtMyG$?H|CMnz;(I&mP!AsbuZ+VcR55EhSQ+SOU1`A|8!M4i794*({CW5n?sYK zcU^zL@|>%-zSt>rdivK{Yl9=1_XaW2!OE{O>uS^3h;$*q?%^P~QnOmNWH#T#!cx_v zy=5d^ojk-l0Fr(SOx^=h=YZ`awHfDcndHttG*St^&4?k zw^UJa2M&*}22DLHn=$n&?VZTG2R4yO3D#`@v~-EdjL^Mi7~zehnwZ?H?CbvGPr4zA zo{5p++eD4c<)1~uLn>bQ#b&$}(lng8kGh7x4VDj_vJl*HCP?@#19uuF4*o3G4F_PZ zd?1PbHw#Q!*JmE@i&n~?4n1bi_HJ+!Bp{FQR;^KuRGgfO+rHED_IrX2o7z`#w_Qcm zH8oE%kB$>SGLfRTwl;sab8SI>{<&0D!AH^m{FKUT?n4=n9{oV7p(M)_kH}K+J*S=omPg%RL3(|1QJ+#NkP_ziyZO; zGct0>SnB+|s`xbFoUy6t%4~CJd}EM-lTZKqv#tK)t@}6$@s7lp#6@o2(OUfZ-0`2k6>CKJnch(V+NzJ^sEhtdzb zav6s}UdOA342j7|(VrC%XjobTi3{8P^DvJkEnB-5bvq+0XKYp;H;PJ@jyq%&JxXaa z;f*9Zlh&$lfLyU{5Yh0mF=Xa}IrNhEouxFk#2j9ZUep_mO`#iAHCIOZ%y(jXZxLv5 zk$c7$%UYVF*hm`TA(l6*`@-K;4mbob1X}d}dXinfG4$9v@)mYm)Czo-Z47li9~+F$ z>9!@L6bXYj&@9vf2YJ!w;}N*y=g;#NjgIJ*c3ymRoYYebnbgym@RXmv>Chn~DKbvK^Zh?3+Qaz6!qzmb*BF0ZE>*#nt~(xe*>~`CxvaU+ zo4>Q-Y@=ztCN($va4{D^;6)Z-A06(3n?sUAzFk_AxhV&F+R{i^=^Oa@{LW<2`}fy> zdaiMT*HFq7ldr0%cU-~dvtzQX5|YInj|b%RrhjXE?%B30NoCNAQ%G7F2|ENfqhEo& zN{7&4l<15lX9Kc$35zHyW^AmYHLS{uqDr_>lj)kCPolVmy)%N^%sX9le0;K5C3~Wz zf<%t^o&|aU3Uj&fAvvno-jximsK3d7Fn^6ch7ndeb2?Ra9+5ZDYgf5LaSiO#T=0QA z0#hUbFu~$?KHj_5(o~2hg8NY+3Eu%_pJ?{4XsW%-gugAYQ9?K#G(5GDr!Xw`V17zH;aV{=!rr7sQsOZ? zYnEC{^(MzteF7_cRtG*s%?@Jy@u!m3_f}8YY&)Z6cDGIk^UeiCZx;E_s{X1@f7lP2 zzX9l{{iv3|L7(;ot(Oeg)>I~TpjEVOZ{)sdf0dT;A8r<44a)23@N`^jyU{sP(?+$vjrs_^)wSn)fpXRv8yr+rq+=PwJ> z)rMq08`-iT`F7d37HJFUW>y}%qU4sn#0@Q$J4G;u^q37D^?coF?}z9!^i93cjpu^< z!#lVHH>tXB7e4kraEYdmI%S4~WX}q;5JRQ(eh`!w-2dKDF)&Jm_Nym(!f%i5W}Ow= zz=G$LrR;B%L_FLwmR)S0;M^{HGs3juJoiXFcXiYA(y)#IVfCxl!-M7EFHt&G^ziMu zJdrc*`vJf6n+Odij8!j9YHA+^^3rbea?&z<5ZUWS*}39ZvkovqUkF- zlsyYU+8i$>x)Zs;?B)K(ShZTrpq+30q}X=B?9_Fgt&PYbSw8gI1=~K(u#CLY^?d#j zz)Fp~jvv}Xe4FZ3Egyc%|MtRq%rUNLxG`50cf>QBw!e*YcnDV*R4&#upUGKyh4UT1 z4{bn6fM%XjKE*skOwSMHXM$zebV#&Xr>4U@#uuNHy(+bWl+dyuKP|E`xW?TLhW$v1ssuj-LS6l!7=aD9&ZkldN>(BrMV3 zqNH|G{zx%qZ~&PI)QPo$Ugz9qCCeeBe*$ts_a{X_#{|A#K41ZFTJ}hfl(t$7oeJG+ zkKR!ojgK&&sArz})!QoSn29BI6fIr%!^xSrSkuIrr; zTf`rEEu7OwEflclj#&fgNlW%V7dbjr4s_`;57QNb#L6K(PLLS{BWCU~z8{fgA42b$ zI5klC2Hqv<7zzCv{zW0 zb8=LHQPy1fQC&UJ+|d!}iBsT8E|xV6N4n|J)}I4Me|HYA3}x3aN#M?Kjj@7*E*GVx zbwRBGlV5Yr!F@G+UE7i1ws8KadKJi-Uvhm>0!0CKV~4ML10B4Man}YdA%B3J9=XV1 z7+#K?D9l866~oZ5elHgsxe670l+TSREW8o^Re3iA=tTwY+%PTnsO zBXx0Pm$+~AQ}}4RE-HW`S&Cle;LTPO!LJ=L3eFC1BqlbAH?sC3&p-IGA^O7i!Ix9V zN9m>)zI<}$8d$13a61FlOB>s)d|@+qVgwEWn5LJ`cgatB)!zh;J4Uo`5I?;pylr~` z!Vlmilnjb(9TE=!rNFjZq(M_iMUc_%@~7oJai_RDiz>9FKV-X3*Y{|>UdXI1uU?!W zA4%Ns$ATS*9lu17MY)2-?SWxdM*fMje7(W2rw4Eo43-Ne5JJI;mw#)x{K|Y$(svyN zze&i`ha>O(-Ola0GC%xo2Z4uWmy||NedZXPU)oKrMX$FdjuuiGDbXuPJh}k;k!8cs>7t z)n>HP|Nit~FeBY8XV6%QNuwh_-!s190#JHDFI~EDYDSwSQCPl8(Es!NC2qa6*jQ%f zea{z`dIg(E-wuIt44vH9_5@Vg`3!@x)msbfr6VJ(uWYvr*#dI5J+3`|eC>g;G3kzm z(4xV6k4MqBiQXL2wg-s6wmPyUO?mQD0jJ5+YA90ucAg z@2f*9wQhhxPf$*W!1p6?V#U2(Laq)3ZY@nywf$}iAnqETevKCz?09(O1x19i{HWs_nFZq?{1ljk zdQEug3c_m86zm2Q^#FQj6BXRQ_%9r2(nr=6@ORY{fsvPPIV}@#!oj4gEUEHINLF71 zgo7@-x_p5QUTbFiyL6NWE1g1-&XrKE*%)!AJ9_-;rmbVsgxktJ@2|H@<*t33XyN&J znmceQKa+8>gwzAhU34mpH9uxsN!NAv0*pZ3xo`Xvz~itM%2hv_iO1Tx_OAOQ0329A zqTCbWl*6QQaH2uz%tMJI^)Wz^$)+v6!V|H#PX5jf1^ml1V=pBzcpWAEFxE$^PcrmB)B4%w|4~aj58Tl0s zVeaWrc)?C~@h%+%pqmFSjdyj0!^XSbJOo(imDoKnQH#dGs}Oe5DcLIibtT}4z8aw3 z_qSNYnO>DMopQG!80RQ#YhPSBvT7Xp_?lz4IIKkMi~H)F#JTMS?9yeXAy;8*%J&u` zyKpFZrzuLJpt3#o*Rt$~#nWI8$KetsS1?&WyE&J*%4zVcJ(Q5-?+`IAWiC4!D}g1s z8*>Q}aHT)CqKl}q#12tV4h`M}t`D!jj-tk?)--b~QS7^hIjsE@3;Jc`ibu-Q+GIlk zaIu`T!yOPM=~>m|AzULRQnlmpda72zsNm-M-A~i3k}l8~H+>(M67EHz;C(A$Tznux zZZ!Y=g|3~=emD@gym!$>zYgq-dYY>%M;}%lc%IE_PjAPz3^`4_DYHL;ShZZ1xnv0W zPzQ?yUQp&XE!StV1svV7Pzuay9(H2bIy*sbNIfv!5R*KzEY@WOxk`%*HN&rWlZPJG zx2g*1QRdG6-fXrqZO&Fg0<6Cq+idIcW2c9(a7$kLdJv@Wc9c{*=&!ukOE0jSJI@TC zEQObUDwf_cnY0c$D*|2bkE)Kp##)Weru-Ud`_^908WPVhV%p9klPAtzID8h`ae!56 zY8HzW8;(?=_>Mzf0Kh+|Pg@E0dKH{E5mA+|i5!~5sz59hSzL4+o%S%{cXL$Yj~`{s zI8@wq&+2rutITeSf8x|`?JLRkJelq}GKZUMWmXK0Od6dk<2N$Z_}$^Ftp5=|ehHk% z|El(O+*lvam8axAG5}iCgz{Y4891wK$$Q8_40e-p!5a&<>S0~dRU>py%WN|2>nh9g za9Ev+j%8REFT&a^mEXMAHoid9r^Qhvjtlj+gg;~dxi^1><7A-7u;-ef>>ADhO3h6q zKKbw z(-u|!JZ}wDi3IhL$?csvTUp~P zf?$g5Nou})L#nXpn{dmnU~g$7;PGjJB3fhSH*@%l`m}Zz7xa|}c4>9!GwR!Zoki=- z=;yWo2*7q81+gbSv4{It7CFW77wNti7{=1&ElG4<1k+_O4(I`m^{X3X9MNTUKSQV; zsI$mG_kn9SFIYaUFn+Fo8koJ`zyyJNxKv!)uq9R6%dV7Os_6)7Jk%g>0$6(3Vnx@P z_t$1b)&q~;wibY`?`dHrwY~EnC|SfX=T$M&mQM>cRhR6KJn|U9V*cd%;_#OaZ0UlP z>PS|KxM;K!W-*4*sBq%lm^<|v)A}{*{bK_1+xOXwkD!LbbC;mDhp~OdwB-_E)J3IB z9%d<~#@9A!R(HZ5aJE0w7?)2m4eFyVN>PA-xt~D{cY`tUKe)ib$2a`#c2QRu4Ocxn zXID}9JxT{3irRh6wj79k>iqbYLHRi+rUz>Y6IyP&ifS{bO?KC6gS8r$f4rrs-qb^4 z`rkPdeKTXfbZaSFWD?FZI)n5fE-dv5KFs1)Pog}hNpXzd!_?h~k?=|4Fx3Q}9I(rJ z*N!XPZdXemWCVVurh_$u<<8{$7mV;$tj)`^lfkdI1F-4_!!{eE02+WH+yTwSH#*x3 zAk)y}>3XRny`Mw)mGuZ08V`}AAX8-oJ zKluMh5bvj%Iebt-6jD;WYAkP`>q9-*p1D)YB05fINZ@M&`Kr1Af_SSD&hnVR79BkZ z6B5qsk>WRcm8XqgIK3Uv-V|5@OY3g;Po?y}LkWh&c8q{hbI>cDNywyBJ$yeiimlv* zq{wMaYEr2!aCO8{&V=;`$>#&-nn9V((k)Y@cRhcN{tL!UiGyRUa@~U6cz7|@bX3=J z(A905dEy)x&X2j@QFChR8hfw2yU$M`6^nSxKQ-J;!$r+$0nxf0gwk|X#n^~3732BF z_UI%lO;io6ZrP<~2l0$$G*YCEntsIyyw&GXoDM|g?3TFleI_w^V9wmLZkbG(H#+*A zYZU|JBCJN#x5J^$|IhZnb>CRixftYjEVe;T1Y{hXy=Jj)6b$H^{+1SX04=@0N#tYT zz{*TIi;&DS&^vS24%d)>rdE+Z4z8yYHN9w(RBC;;vZ`)A`ld zd!lVc2ZuB=(VXE|vFbq; z+M6(=SB(*MD{hID(GtuprrLR>H}mw81*=_pCr3M9({&-jfHX!?<}wD7kb{ySGaDN_5GjXw z>{|`1{V><_l6G&>z#pLtLS2xC*e_t#=53^b&-f;15!@RQ?^||VqcV&(CVG|b%&`~! z2UYHy(PnK>V8b11_9$v7rvXb*O;-)qC6D9yJ$8jAfF%%2)>riM`dYd=oi(I4e?*~p z+*SN^w{D;djpfWX=@A!$-Vl-&)Si?+Gdz~QGMM^u1Y_R}T%{0|sk_4G@kbRXS04oR zN$}t=?_XCkoT0`k->U*yqi0_+RLwI@1O3y;P$&M{z%6Q7R;p{4ucH?Qeo0(a5h-9d zP+yfaBQ#4FuUA)?p5;pqNde+|KL%-0~>cbKGCXTE=?wF4W&ND^|Aqf)^uju}?0&BkdMC@VgLBv){AHo#&>*!gybfF@f4oD6K1aXl`d?-Vxym#nsz_%Cm+ zWEZWFuO0?iSN`A!8;F%8!&btj<>59 z`b~&Asu>)DO^%)GHtWNQ!kF?x(oRZ&vraI+%l{HE;7cvyu!fg<%e{B=A5E;^i>Q9xjzGxdEq(p`e+MxN;py3V7d02{8q`8vAKLc1H z@MHP+!CAi?6oSY%NQ;VmK{Jg=lE8PK;e*Ldt^tbx;e?Q59_l!I^AVoCWPOus`IdtR zEU#A(Cp5Wq0&nb{#OfVW(p<*wU@~oESKVo1o4VlY09DTucPNJ@_V-3&9bOH1=1jM@ z4GBF*Z0YBJ1whJ8-)-us5|xF%jgMb@IE%)&i$DyoyUS;xa!@FI5f#dO_}&HdaqHEN zt%_4?kP-rJ_gbTL&*aLI|NQX-@-GXh-UBqU4GkERe!JuvojCezsz443gHQSM_&d|} zT|F>=u=Lm1I;AhUT70+12ZUx%gvo9wRWayAE|I#oP59=8V({=ns;SuK;wLV8*79q; zEvpJ$%Lda#R?^>*AH^UXX7-=NC-%J?{L@>65|M?seM2E-ia0`!J5vCFA`B*6 zZN{9Y5N4vtnwXN$eA<7)DZc~`15_DS$i7#nu>+{AKPxlDh&58?aV-+6$)#P?m_qg*3-O-3QxUDNc!MCLKvet+yHfQX!RhEam z=@ApQ`12mpsaGp=Xcf3iPS6v~4{7d86wRX#dCiKjW#i7BdYYgs+V1r->gdiKF$m;P zv3~xOVN+B0e;3iKOdrW#9j=;gbK4#*=qv;c5ShOL3LfNL)+jQ~Nw=SS`VZqG=m?osA?NKv6y&Idw@MX{$}LRGUhm;nNv3&vYX>(avB zv$ndWtsrT^o|3?uumb(V%3{DL=I9_|5Cdm_Mw5v?FjBPQ1z~vb{J=Z4Wp@q{L-3l% z^GB<{3CN}fh(;1iPN1cMY>8}}fT-#Ji%=!3&{p^2{;MFBQYm%#PCRy)P~7qhk4w0x zM+19{4-+HwUG4&fvO`(-#26Mm!D< zu@L4hh43hd00S<{G627o7gW$zdv#6*-2Z7v{~vO-1n%imH!zo&0MuB=F1eE!-?bB2 zbwD-b*KaPK%&h@4l|q+ zl-P%vQgD5*&M3d=-8@1AzKQzQ0Hy|yL%&`_$)~$tbX~zt5(!%QyO?`@o@n+&NK9XG zU%qhkuSBYk>U{;5c1e+On-#3Y{}9(2s5j0W6zwfoWYWhKjICQN4Dxn>k=UUyJrJW* zI<)H}{J#Sk20?+*%?@J-nL-Gzrq(^H=>?_<+w}a3Ucn&2+-20U29G@hCIY77`GWTM zpJx@-{i!7+j~@Fmv>!lvmo&QWx&9TvbRd(v#xm2Mgt0jQI*K&m;6|&P`p)D3N_XDK zF~U{s528;}IWE4!!<+;OF+=LHJ{4RE@pv__2B$vg4dwoVW({c90L|v#g`qksfY9VY z|G$DfhvPX1$)p2#Ddz8sSJ&NA(@IN+K*gcuZY#EbqnaSYE*O-cxk`Hkim-rZgLVb; z=>MdMy#x{STR{kysGMl=bGrqEV$G$gG}ax-{oucGTeg=7@)Rq+!r6DJr!^;lvOiu? zw^IkF=4xU7gf(DtFS89W`u6i}-9%1<0R_flGm5`Ri6;i>iAKWzb}u(VCd+hynqg4I zD7~B3AFfud>OeoCA|aq?r1|zXVP{X$3fk&}!QSCpex5D_FHF^Q8!ie-RuQSt1eHm9 zg)?my`*AaW^8?=%?eDwCW~K&ox$9;YdZLn213SL%BZ+aCS#X0K?S@^$=YsHC4m)D# z6DLpH3Uhas{wU+I{y{7Hq=-}My7sG-%a8myr9Xn>#l6!F?_AbkA$2>_C@$CCk22*J zBTVDYO)k&?<2?=4&>`@Pvmn0=yx8)zO=-=oN~bHf^-8OKp=wfEvkSe9UdZ*yANP-k zZbTl~tGVy*hMyYL&>&oX3%Z#uw4r<~n2NUihTp*`=^}H2g*7GTF~b)WDpMQ$fSDgod7cIQC9jBott5hMBfzcsW{4Nk#4c_0@Qb7%_ z5WaU^edoS_qfOi*?~ZaiQSegWXZc#cRyKyqdDpPOlPrprJr&X}EM_VN%DiOyp!G6| z`muCatyI>od8fDwZe9C3gRCn*Y;Wh(bfrXT0+?lPkp=6P412j8)!Ztw51bBg_wA>Z+pd*49946b<-C0ImYXNzN$J%4k zurw;6`U{C)mO%3F>VO5fuUt{;nJU5V7V*$Eb*K~j++U$ycJ|4r#3qmlq1@F@+40i2 z+XmBVYE=s0hJ3q)6Q)`4u0;Rp&C&r@v)pQWi{*HMj%m|ki@N&GomHPB9+o7C@U^<| z&1~$63F4=IS>b^^WbsGm?L3%YHybYJ1qW z@t}AqVudj<&iKmJ4wv=H?He9zI+R&V!p>ZkGZ=-`!1`y?Zon*|8s!$ZjW_k2D%LUx zxGiCyy3J8kRM)q*JK=s*j1&_h(Qh*3WYwVQsZx+6CJ*m6_9 z?a2=k0!nI#{lH!FWLo)@f!OT?zZmd^{XRTqXNvYPqEDPj!eHTE&gNws&}{J0!52yM z%W)yejcXVS0=Aui4zn7F7(fqBTsOKw8h7T<@$vRQdEW$GsdZje2sK~Cs@f?NN>-HW zewx&&sm1T1x!NVXW?If&LQ{4{*@yLP<@BwF5tetQPZs(wIU1BsymeSX6|fxN#1C1H*Z~?! zXc^ zsVBjfDimk-v-?YezVY0#uh@xw62`f)3a=UAjI>(J3biF>5}v-TI~tE}66eHlecf{u zdPUkZ4u&+JorwJAZ!esu$QHC}YQ^Lih$p(!5=CzA6*32a1UlxsRV=`JQYq5P#cDVD z3rGJ)TUQ7bj&Z^$~r3f3iud-ejRgt_yEUY&lG2bQ=@@_4c<>39IXPE?j{H)kNJlZ7< z(MfsVX_v(#$FoQ-b$)%32%q0QJ&7lxyheM|@}Tw3YG>!}Uv=3P8cg0*?lcf_oAhIm zRG`o923n>VMh`so7I|V4faC18$25Qe#beX{tH65R?3xM>`{|uM!QIHk`rF6dk_W&# zvdj$MEcjtXd6>XI44%->w{O<}%Y3|gk55sq(A?4xn!ouMn}D?cWsZRJyl5soYz@)u zoFYy7F?if7ViO&0=b^6Nzp;e&Xa$)&UhN62^QJ1~IyaB`;;6Hun&~Ozkq3);KYG6z z-rjZ{V9buaks0NcSAwEg-z*2&x=D^9tiIvvA3oVJUu#8beBE|g2f%by$Qqq+Y6_$M z6cst^;e&{ApS$x#F-qidwB7xjr+2^^%G8`|KOaI7CaCQn71ObZ5BePchrA6(T^2mi zcEF8KUO#i?X>}s@7^U$V&lyDWudW|u9H|3Jb4)$*OTQGV;$8-JZuYnKtRe0C3xTag zdBo$Ai9dZkH~?P#`}BdwNYlAa)8d`uU;hW!0qvo*%)ok`T&n=yW}}w8wv~X3q5LGu z3~(VLn_itGH8!}~$)m0K3z9?mJ90M!)08AKs-Zckp%xLf=YIB$71pf?L*~+RBkPAW z+?@ff1Ulk@q%HZMKCVh=O~YX}-mJscgJ@LqYvn55pt5vFrN*r;>}XQi^E#}@CJ?Nd zm|_n&GsH`aL)bZP6=*f%U!J4VM@16#9z?6a6n21e>pB6O;XX7M#B2?n^c5(}x0}DG zSp!X}x1QIyE}h;We>~^r^9%1$6D6V}?w)HfsLokZQ!Qwod|9PbR^hv3Vb@{iqa~73 zxw-q&sRLX@thw->T_J@J&P5Rrln?}|YTizpiy!-b1|#p1ES)q1mylo)?2KLzG=na( zFu7rGyU6;=Bw7q1%|k9?HP0r$jjVZP@VEa{C8V=9?)nQcG$ZgVwfR%(jat>mx) zmkLr`!MdlevM9}$P>0%fBA?-Z6%m=(9TofV7vqZuzXCyKPrJV=+f0je+j8n`#JNp< z*H`@*d5yCh?<$D3tc$x&7nz0tzhMvZ4C9`>cKB7LdS~AV#|nT)Cx=goFxIK?8Jo1| zYXXa?1ybDzEMhp#*e>&zz{8=0dW(9u&VKsIxaEtP|!^B;pT)EqzG>@0~$bfF#Kf5nt0MzMW9x!R&(nF7PD=sB`ND5)3zED zJf(|{TC+1hBs3R)3C$`D8ar*nKfy&9d1Tk|Hfa<`P($HI#B}X}jpOssD(!^LTTAUb z(bS;b6Qc;1T;ZGrqEK7j(4VG|t5=<=S%pf-Q5iTjCT>}@3CXGHTo%hdO%8f*B5)kw zXO{fdMF#D4sJ6?xr#C_;z9h@`@q@ls7$`2N!Vj}4VcyWM6pjP~e8tJyUX%AZ9`z&=a0hrN%dKuxswofsaaUkDMOJ~; z&9$@geUs>b%@iju6BKqmFP1!hQKkrv^GwW8r&ojn=6|6>%?-aB7=twc%*g^ z5JZQ$cZdjwY{5nh<+!#g+i`=7bADC#sow@iC%Sd-^-SN09(%w*dE)d#B;S9n+rp+N zAI^HWQyPQI~v^$%$i zN-LK7*M7!3rpb8rzjA7-*$SJ#R*1Ww|KZ0rYf*0li$Q9NLm6^R@I>{%)~l*s07*iY za&j*0Ntvq);a}6J1G>zJB-x}Rxh#2@02rxU$IY&^P;Z0ZF6i$w>(p}kc#b)44F4&k z49hevp_DDL7EJO5(CY#`^pkFHdUJW5n#k9Gw)*})bu?)MPiuR(DNsf1)H~IKg5fy$ zCsnvwC1HLf)QVsw)}fso@GUp7b_5*88W(cOs~&YQiniPSVO&4+d)FM@+7PMoRc}@E z%U^#GyqQ?WeN+q8H8G9chlkn~TPVV@Hhcb6yCTxnes-MkeU49R-jqnuXp}n5%VWhs zC4>B>4%}6Ry|IxzpV!iYdZajQtbj3Z+uP%I-pL-X>hv&S>Y()gYiZY(YGTiAw+OVB zzsb2Ab$oANIi?9QSZ14SpJZjC9A_q5vK^;j=oAZ;t7%5=<>FFt7U=21kfm?YaAk*m z{$YJ*r#~B$)(e=8q+J<(LLC13sL$2tO1yY5V>Q-WKS0)bxcb@>QIW^^7{}7If10#O zC0S;Y4bI&0XlP!%#pBQS68EJV!gRwYBvsXJU6m);YPo&0TJg zr>ffU^+WsD`_oo>B=phPwI|i6Q=GQ@L={BzYGaQG5^DtL93P~h`r{7=C1G>61W$et`clnjg|D#?s7tAZ zYst}!If@Q*(4*6l$59g0XNSb}M2;8n#|QYt5r)5@qw~3lmRukdd?8hA_@~0Y8)BNfO*wzIWCu=A`(U4KY%O9Ef^{KyoS9ASJ_p zPjD$q?b;TTisfCa`yiOCv#C&|sGXx&Q@3Vg4dS2v_6Qf{6{BT{8yv!N4q89UUhsP# z^5MA%TwGRgwLI0^j4GavxcS;XGqRaTchIM;wknI4d=GG@?VOHqKLV?9!3GS>%gU%x zB*FM1{V1w1B|uN2VVIU$`SZdiKF9cb3B`Z&`B}0Ak|t$tRtVp>gT)HMZW5t>cc1NH z`Ya9+zdO40g!l5=JP6;y3I3trBn|`;Nm$alTR5EnjgGQBI&EiOU0dcjDaL;{aZ+NL z(|_j`^8I?e`LvTV*bhU>7GpWRp-p{oqZCPIe)PsW9glxbZ}*s8RXYJ?u;JV_#ewJU zV*{v34*0G%hE=7a^sD8A5*T{$HFo-wsLM;}1Bei#)PnVNO=WOSr=1=lkw4J3`t!@y z@o(zu$}P5Zi+F6y3yI|wINC#0bl-C1FNYaFp$*WSK7L$zP$Oq@1j}_WE1Os^?*C#T zT_O=VPWm-yaoz%lc+979#_dWS6lKZG?F_#5EZal-M{+wV!q<;${A^^Ptk=X$Bo$14 zwbCuyqWEAI^FqOo_((pQOR@tAryfb}44WdIYCbAYK0O2I0*MU%dGv0#&9(kSn|+*j zWsY7EzSjFv9zK5jxO3&RS48vO?hU;XiUi@~Y*x39jt(rv;(T^a*~_iEtFnq1m?M4bAkR6p) zW~TQ3Lc`D9v!KNL_I|a`L2&YQhtGn258OFf;!xQoMKhcW_@zCdzy}e$tj8DBM6Md3 z1v~5M>A4Q&uW|f8v~YmbDQmN9w+4mZyJY6sZAfo8Qt0OT1k=R|v_syxRQGw!^(+7O^ z;74v0l)Ghy{unLETe-N45qx&xWNMQ zA^DvX|A!$_+>yN3*3F3=ty>Zemoev%nMZ1LVS6fN(f|wNGr(q+9imk zr;4}^$rfkRh(W{$XCSXk)#iPdA8nz$)rHDsQ{sz4${ke;llm(H>U5O%eYN)tkvm$5 ztZ~{_wc9i7C^^j7?C5;f%pz*#au5+Yl=BTemwAtL)$E1;>X;OocM+_EjqwWnaL`m!)AY|;Ad!w-C znc=WGc;dK5fBg?(1q6-FhU*UR$-rSp_le+FnjQsIpybiL;fL)#RmM*@zV}AXPlj{% zqK%+hyfCEzR{Z+X3}v0%`Wx?D^^hJuI;XqdBX-#bX*6(S-k5=eYsz7C^z_=Fb=a%Qfy|}Y@Br`0pwDZ&-eX{H95P3H#@2*4apHEANKLRnn(tZyJrSo8=&gsw= zXLX)tFM7P|QyIJV5NRE$w=&O}|E)VeLa*C{X}cuxv1Io2aFAMcz+(&*O%FHhf<_&A zM#_s=I{?BRMuf#YV?__(peD~PGDJf9%SR!G7+ml43$umCiS_S;jB=%A&WaFf4>eS+ z3uJz6Jh6YBkP`UdTL14sbD77x=SMGv^@JUaUM)^6fbGq0_n0P}I(zen1alWH+q)8( z(Hol{WR-$W>s_a?LpA&oy<^n=D}dX3iw@_bk>?N1Zjt~gv#iaXs~m#iUo(}(%{*_* z6s|P>A}%F@?y0FMz1qYb^l+D>S;_X5-;O5*q$qHXQ(b1CZ825OvR0MPbq-L52nTEGpKBFNL<)gFHiI2?a;@Ww?d4i;(>AhW2CK_Wj)|m z8_bMK-q{BcGU%s|`QVRY>47o6&^QVVvXL6qB>Vz%er;;+Co=7h^ewy;8JhA?g;E`4 z5I;V*zsMa;fJxSMxOe}|VugllgWh|q zfTUK5jJucQ$0KPgI=qG~+m3w3Vjr{VvYFXZl#a=|si=78Hl)0}*%>ba_M(}B3^yc? z-l3uF2brqbK3+fAQT&rE2|1EgXLUd_jy?R6*RO=Gf)L4r)9O|K}4?9O(FH^8P8!?qkFw-gv6U4bD? zrt**Vou!wI>dpjkcKWf^>;eMw28t4yM-21w@@zau4~^2;?fbEZL_(M;|28!V!EO;~ zR{Vg94?+enF(hExbQ<5w1vZ|*c6&7^1Gr97PbWDJ!vjE?r`_kVRxfHInx{8m6 z0~3B(>Idc#lR+Ng_={TV79aZr-5%)Ao1U5q#+E zmRevywK}#Iuly*E+hlLFf`p&kEO=Ma@vo$G`tF9#!CR2~@W{Ofny>(Irqe8{99klQ zm5-FJ5ZyoJw11S|LB-z;_JMzd_5*5iH5!@N>4fqs;&jACSL<8(d*_?+Cmb4TaaUh=f}#ooaB8x$ z_)FBNcuc0!Zee9*wUq*IEp*k=8K5s!jyEubYK(ixiGW6=TXcsAq{?E-PiQ|}#8d9& z8+Bve^R4$z@%z3FQzg`NLRHcAg_L9ig=;XCR%6Ak3@P$64ls1c$Amn6bL!py0@XW$~84U6`9|C?*>nQzQY&-*_jIXaK2&Y z()qGYsU^>`Zym+WHIq=n?9Z{5WnTXAcN@_fM=vLM(-az<~w%lWV6HAKoWF{N*M? zFts#Vvnoag4sss6HI_TpB;MM{VD}P*OqBkv5#ixpe>Li0FoCn+bjd>l^VN2zRHF9B zKZ{V%a^J|>hxW4Q|y-X{)J8*JES0y|J>2b^97kq zVt#z7@_{Yt9`_Y99^3!U&PZI=#CaHGm;IphEY^-w``=boNDTe0Aau>`nN#YT!hVXm zxNB{#qtn7}$ilyXFQ6Y2tvf%cr2$B)Ctw&m_OTdbLJ<%VB4#Eh4p~k-dKUuOZz88r zGr8@bpOBIS0iUAYTq{e|l!i=nywHrNZ=$Yi%9V}<*)+Su|D2!8+%QNyFutV-y6}{K z5M-=he_Jh?zO?ybI^soD-=UUO?s0$vr5K z%KX+bYF47Z{5|*utJKw?(3Y%Ht)zynZ?0>e=}z^_gTVlHf1a#)5`M`kS0ZN|o8>QO zHBHpb>h=N;0)yr5O?xNJftVN{_zV-b5*5PHoO)FpO&#A}e;OMbd(mrhVCI4Y&dpQh zh$W_u4ikAjK=hVb1aF3srV0TQsX>ihaVO*6f=oA-8zC9(YvssZ*sSZS?SK-f9K#;J z>>YFW^ejxnMt1rg^q71x*!>NM+ZPQXRw2iF>fBP!k5Du-`;b1#{9~EwfZf{^lqW2} z(jbH2*S@n0W}B075qoJ~jfV>`?`GK=^5f}Q{(4?Fd4TGkTn13*XW}vGigg&x{r^Vr zT0rL1OBDL^cfFchi|aZL+EDV_kv=*dFo|&?$OjbAvHF*#U4zuP62V?#rfSRU|MYxx zeXqpVbj4eqS#`@#P52H4udgwZ(!r|YabKBrqV58}LrZLH(75ZXYZ%JKPZlL`8Z_zk#@XVoO+m-qdf$X&7DiL`X=8j=ui1 zCkG!42=wFrD65sD4eI`wh>F+$+(f-vV&`;EUThx!52>EhZ3`85I+jxk+%X*V-0P5o znTv9ofwU&=fE4p=oKtBSEh)6U7~FO0`Xmf_15NP8=Y~UL4)`XhkFlS$-4gfq(sT5R z4ePI5A~xR9O_~3J@vGhU+$SV+!O@}G=}-YNmy`yZ4Qe$bMil0R%R^RP^TkAC6Y@~E ST@r!GgIJl{n&Hmfi2EO`3{eRH diff --git a/icons/mob/legfile1test.dmi b/icons/mob/legfile1test.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5991e10ccb0e71d6c5be5aa8df7d12f6331b1d11 GIT binary patch literal 42479 zcmeFZcUY6}wk;Y&1sjN>DAGg(3jzYttDu4f>>`9-r9&V{4OTz|L_|QEpa@9sov3u_ z(xiqSAQS;P-}CE4Ewx7%7ys-_rY#|QRK5A1AFsE1Jr@02l-BCJoF z$M0FZw))g2RpdA+)i!^0ZP&{!FK%2?+Ucmh-nBBQ5p3j_y&f1di>;4J6&{&#lo|>ClqKBn?!@ ztw>gV${P82c}dH9;9`G-dgzqGwbFN;%Z-;Szw$D%6}|MIKVM|H;e9?pUdxX8gYDJ4 z<1(Sc+vvZPgb&BjO)#gdPsRM=3VCy4R+4|mjZgJw)%~(HzQ)M7cN){*f4TSS_Ol0$ zo;Lkf6_D1#s_w^o@D|_E7irg(x6F4RQ{&{fOZsRi`us8*|Ggwt!|bP*gIDPMU#+<* zp&ZWY2>nBJ}*Zp(Hboj;9~qIfyUy$XF|~?0vFTCKTohvQgF8QjCH2=QYY*gdnVKGO`C8(4#z8OtsfO7rMq6zUd5 zDOXP`w+;7AhU2zy4^H3OPwh5+dL>HC+(=ahCH(*)!3w;J9r z`6l;GCwOKY#Vjs)ql`?;z0#BvBiPp`c+ZO*uD$GQAi9xn80T%m_|)#J?a>=_B@Apk z)t>W2ZTme?dfVW&gr8&fQ}a`H$KFm!gcikW^_(eoky$EtUVdp4VZ<2vSVHaW)5|*o z<*yt!sd&F}rAaQCeQ@3&`Kk4x;ckO_a?V<66{+H5(e4ua+Dul8a)!*c2id3dsIKh; zMzZzcbkE+~g&f;XW@KO35A8^eKDQX-`%tX1bQkXc)xdT;!AQ>x73}TN@Flx4&CRVl zxqq>Im42%-UBK#=92OLc2c@p6eEVV4bicm!k*eQB_O6PMg6d&DfO&AqbKK6yJUZ~~ZiFc8GtP|JX>;1my-i8yg+iLO1W+&@OuSO$T zrCnz(r<^#H79m)#nvwgmU+tyj?&|#+cZ08WFP2;n6wi)Mz2H91F}3F9eg5qASIrYq zi*jPkQHK)_9z2Ku3<||z>(b4%`3_YXgn$kF+u8ExRf&%M&zloU^nc!Lv-tD+9<}Gs z8`k%9n{T|gi2wQEy7&L#lPL9IQIrz}4ktH;L-a$N?s8`(;t~ zC&JBkqfjjs;>IXc!Sn53Y^FBwv|P@|ZYy%DuV(goS3YQzPjx9YGBvHjGEVK;v!|Ph zPA#glufh$Fu|V}bM;=N+OWR~!V4us_O`dx~)Pfli19kUbzT7046EdJVt4o|&0xpPD*_`H~%^KvomdEjE#T8Pkd? z+!O0QnB+05P<%sefH-?(IE!H{oPPNR{qJIEh_UkZ*&NR8ti^NX>kp@urN_NJDSGt( zF+RL|#hprdpsC|#q=q|%Ykmql3!`ZIHQ)>HUyu+qXeg5c+!`M3&pcUb|w1vmuTf1<}56A3S`{qDuF^!@!VoT z-FUl}V=Pphn|+E|o-Dc0@&Wh3NH9By%FWUp>C;ltA#LDT8LfvK*Ys5QJwd2V2LOO|gnN0Y!2?$8+{q+FDwfoGOI1-2G)0WKpHCpsul> z!|!JvIvfidSK60V=v4aL|LoDjvDkPQE&c5i3-iSsIvly2!nUJ7IMjF#h6Q%npZ%ow z_qoUQXJ-9dOu~PF1AC=OCz+_IsNDhr0u{zJfzLuhLJVc1nQUr8pTeKgo>B0DMvY4% zy3l^;xwM5WKOgDavt2_yJw4^p_Cw#cr7ZHyZVdjA(}XcFK0aRV42M)|T2bKdre=pT z#>y0*lqJRVCG!Paj@W+xikq|tFcH3fRem7O4)ZcPoAb)P?FK zKy#MrZg1aWB%Wz%V!{`yk!WgcTtVhI#KEz7qkO}wqwY~!Bu$02(Q=$s;p!KzDg2Qn zTFY~?9l98K+J5%v7;D} zd%O}RB;D#<;RR>QS5a#i92}hG__#U(ZIhjqbyPqzhV@7p0M|pVzE><{-*9~rEt*)(AvvhVom)mhbvUfm2Lc(b7v7NPbZM`sFaPu&~4da(D zUrM={v$}9C#ggrgEOBpNBJ81P)4J*G{eQp-B_uxOuli3rk@*D#Yl+^pGstdhGweDneRXO$P?%VokX79eGP8~bx(A|bzQ&XQ+HFt-I z!y~QqVKjLOrW#J@ul-WGNwjtx+jSbt1xmpO0!eX?H$C+BoBaYBwFy_k+MV?p=QT7n zdzr>QT}Au2qTwOJp%>sv&~T~*ET@CHZlV2AIoAaf-ripdjakMuCPqfQ`Ag;sUC-E1 zhg(bbjsIlEP+J4Znv?=Ra!_O(wb$X$6wcDn@GEw=XN6$y#Scf}5iR%GJFS24mC74C z4(r8|o35(r^XJd8`rAj(Tf4mOw*6=`JCviVzoF=Q#nxz%SNm5(DQi&U*vZBC2sV9>R_Il? z`6{-AR*PCpvpn(kJTe5YX=r>O9UYCs?f(TI3h)lM&v7ryLzCT1ySrbQ%Ip4&x=x^# zN6ETql+!44HOsmI7gh4}^P^5td1dkR`@`;kkn#}kqG5ScPG=h*ioPHE;+g8~C( zSZ<+_dtsZx`_@iPS*8+nGrDfI(`5ZQ{{#gmzWgo3_`e@6`~y<`Hv$)iH!vjX>gwzr z9Yy7^(^^u}(uY5_O}1ds>QdP0@U|LhY3WHP50~#Svu(qlvIjH7-J6U~6kTtK*Yzyak0SJRpv;tr#49FV4OP>6-4q<2#-_c``g)mtM3t zoAc5>=m)rAU@_qadTr`VMDr_t*5p0(<|};dE*kMNw|7Pr&+M`tX1L5I=+O|+YiMrv z_m%C{{Ttlv-@hMXG;5y_M)vC>7cXAC3FzEeP8fX@5U|HjHW2=IT^kD<8w=CN^3x6p zO6+x0g5r~4)&qoQ&-tFJw9-D=?OE^CTK`4+bMK9Wb~D;t*1 z+Qz1e%9+pY;w#!%19u_qG8^^%-TUs<)xw#*sV5Hl=d1io)Dq-(WB74Eo5;OfD8lf% zfnf&Qo4hgdZH|U*`A2v(H8T2!JtWEa_zRZN&yAE;5LJBWF|rQrv)O(8fsxVq*&%pFoG#!>{7(s$z7|udMLf`%N3lx$VS-RIkykUKM19xvF{6Q8b#?`A=EAy!h#NynJ zfl_({K*1FRE58Q7>R{^SMQsTxa&23JFnQ*>!YxI7@H&se>L7jZ(J%39YilhD{e}F( zm3dUOUKgeGAgu23NQ8=~lJMVQ&h)tuJVhlWut~xa9~wrO$D8n1Tn1HD$B9HZv)78L ziH`%i0c*@MG|XL+j$fsXo>}v2@&_z#l^iBa0({#+JHRX*Y(KJcZNGuD^Bts7v?6)z z{avXTN5`9HW@bz?;qEbPotEcLvhEa>lr)!(ie%^J4nqqGm^Vc^kd210p6k5?rp79L zydv)9Ktn^rwBAOECM}lP@Hu4LBx?Hd>H22Yl zp+yrJf&mwgv9jEUdGtW0Rg5iaJY2VEweJs9Uo@7TbxrcH z;=BFBO@3z7$hiQLJCh}hsJy(q123k7SbW+TxIJ3BTs+;f%FBfs%`hv8SK{a8mfCL} zJf^NurdPnZMbPoV#s^nJPfy)XpFYj5x*%Wvuq}vo?W!?Mrb~YIY+LWyKd=}+&-e$s z|E-ci6hOd&oN!-X-|nu?PAtwXhOH;?v@PJDm6eqSH*tLY)8{M^%=L=1#)@JL@kO=E za=v10?@Eu zdhEm)9;DGODiR?`l>c#iHKQOq+er4Q=iR$^Z|gBKD8I)t8PWW_uc?pI6IP;Y6~|q; zAvn5j@Mz{!Gj(CZfltk+~tIuFGB3fatF5Bn^F$5lW=j@_p&t6 z`$4%FHJDI@r zfqBt7VrI~l-;aY-8H3BDTP^ca8~v~)oTUEii$y|x^CDNTwe;-m)aVUgQK57h85$}> zfW;S9@4)o_%@x^}tCXO~)1EK#7j5~`@ z$6xc-PW$v($fDD>pd*UmI<5b#nArZN=4PMqK&vu6qMTBkMZe3?S(MEZ9tP>uQnBy! z^ow_~vCQjPOt8YBFxdrwDIJz~I=i}TeBOjFEjd4sh%8amJt<>$wLwhn)~#FlDlaZL zH95>PS1gx`%x(7@_mR4K?b?jOlj)v~E;O6CC`PmG;VoLf!MJvrUYJ{%P+MD@#!LFw z&YrVbd0gkZXp@tZZ|?i>{s?pC>1Y-f`2#-%&;N=c{|9qW|0<|ts$DF#$6&~r>Ti#$zei$58y1!v1m`b@1ZSzeE1v$XU*6tKeq$*S3BY9{dN?I3d?`$oLuf2^ zqUZEM{~s9wbcN1l{eBa&4DYEWM`ak|nj0!88{DfR*eAY@LGW5|Sy51o^q1fgt3bA3f1y-_eJd69&AvUQaF6OJKt1842 zt|_25NS%{TCI$vd+1;smB`y87E|QX!C*enlZ4UgjH2IE3wf1R)07;(lu~N@WesN_qk_mbAO|SVnu*L$02 zRntMjiVLymG^x1{K}yRhMT4JB%I!4jMf$;m5xW}4#!N%mXrD&LrrxsU99YQ=@-G?` z>(}3Rv>{4MPcL6Wpl1e~+Wak|IY8p5jo7)kw#lT_9q%57B^w2g}E04!E zr+Dn%7TaWfMdMxfqmZqOg-=dz-@d)QYij`d-4pf8j%kEbX+b8IkW-jrMb)B|nP*EDz(Bc~AYZgRGcRAq}#{76>1QVJhUyo?eS6S4BldX92E4=+=r&6MfG9JH{05 zLx*0$FgVP`mCt#(85q&{iJW{Go;L*#j!k#xoO%(^J!Lt&QG(q9mvA za~FN3x+=xpV#063!qUnk`I?s48WolIN;wZ7vDp&NcGfa^*SmR)TC zA=R)%kaAzPmQqyY9(R;xVM*>HMKPRUO)v;aX7cX79#cNCHub&7HUu8NiMl4*t^rq33g%a8Bkb!S)ZM|L4>ugK4%GlMT zN{rdn{DHq}j7+dCFm-YgA2WKw%LL2;;PO>XP1&&d2{NEZn@6|IIt;%T7p0_*ENxY^byI?!)nhh!(6IYFY*} zezg$dT`p-yKD4$ruK>!2b%|SvbqSAeMNNGD@#DwrM?z1J(Xfsa{Nxv9g>Wy-J6^!} zUEmQ}@o^q8A^}J9B(d?d67bIn^2-)z_w;zG7)|^~_>&}>3)dd+-e0xHf@-V$*=&4* zlP+<&R$>_?9}YfZu=X){=5PFH6kYnTHA4E835QUc%RMie8W+%DLSs+(ilh#zF)a}k z;Ip#Jy-e@*&zw0^2d7Esu&leKDIc26sd*E!gVFgKh&QSgu3WjY@VgDzr(-vO5nJ$4 z+)##Wvk!=w{0il7T)2(-HZY9rs<7j!uM*ZcZ_}iIc&Y%0h>oCFml*V-trK(<^;E3(d;P(T-TT=qID+M*E&k+@Au9L(t zrM^>`mqO9rM_PC7J!3q-){GmdGu!=o=m&?d9%D@&k|^4jKF??OKH^DTj4j|i&r3G- zTDcNcP%-K?F+R-UTS6^KiX|z|p(a|PO;`FU_tEIx+|WuYYl4G6e%xGj!L7KI2+O%` z%-2L)ZFw0KG)G;5!4SvgFA(c-Q&n|gtrUo@CR-)7C@aht^ee@+(U65N^vt!S47}H+ zE&`kbuyD4$rvL0aOVo17!}<6=Xn@zv#0#q55Kb`F80SfGX$5+ua+L85MAcDT`ztFN z9%(uTiD7vB$hg@)X@LP(9!Hfu6ZK?GP%37yIxMz6G2UbX;T%t1W~PDcA6;#) z7}CD*@Bg0S_WyZ?58{Sg^?;pnb+fUV$zA)WpeQ<@v&Ou;ukZG`gJw*YQfAZU;~>U$ z$1pgIpAT^vS)JBXB`GOxj=iMYr-qK$mCoz1NPDjIyTqp7KIJLB%5W$7_P3OK8P7pu zW7d@(znrj7NLZMLwX(X>DCJuyeNas!;pPqyt7hAH9mxTb1FH~;U5DR*&f{}0LodLS z%WGk6?x);~N#%+s1i51nvB2!z2SihNh+c1&YQ!#{zlT(J8}Oclg2POL zkpCr{<=kKP)Q96bv>M1)c$vZ$G@WJ+_*Y$4l%PW>HhcR_r?rJK$Guxkd$ahG0U1=7 zR0jte(Bqg!iQ6dE;LG~@XpteOBAj8Kq68;r&F>k+C%|@4%2%Jnww$IOnH+m zIsM)2EBCpwdzN|cO370xH-*AF_=ZGwkM+9{@&E+w%GW-Dj?&F^%mKN98$w~XGRn!H zA&()k#X(Qm8U#ppVZ5#9u~v>R8L0}LN&j^6mf*qD9hP|+n$>m(N&*eS z{jclnQ4e9zPP;oD^x<|&NA`VE`Y87Y{Vu*e-dq7MU)I)e5J7>$n#*f@GW>^Kf{FD>2$7wffgj;~@2%?yI9E zfUL*rMxJ|?&($Nuph)WXF~`vJao5)fwAi}VRkiBX)rW)uXH~iCnwm5;58KXXmxaQv z@Ck(1aH1h!CKvO!peAlWn4FMs+;zFz{6dA!`^K}N(A4{Ids)avd2)IDQeGQ;!mO%# zXjc+4EzDy*@4kKemM^whCt$3CS@8{UaQ%hD8$y42#4vWo+{Q+Ul}SiRpm)Hu494=^)9efWqxY7CCL2D+^lT;x`wM%^yq zQl6S1?l6SB!m3F=TpjWmBk9wMJt!o7b3yy0JEuZ_tr26xK3oby&af0VEWbMV#BpQQ z!FA{v+h}|8Ef)_89Mr;*1D#dr*=K*riL^95ZC#`#co(?5+b;`p?Hw?-c!wVKxxy+L3g8uR_PhMky##V+&e5hatoH*cp4JMlfD@&f*@VKfpba zNF?Au>ft3{<#Gd=Tr3{hn7uany(;nWewJWt$(jF@J^PNUhHwvSJ%NwcsXu(KEaGEH z=l{q`o6yf=CI=$Izu_7%=ncdO5OW%lG#gvn7(E>w*%>4=&M!<$OM?}l0$Bl^WXffa z%P<@XsGj`8yj8r!*U69L@-f%@*1jez*>pyq#=G-XES9#U%3jMOjB@lkc)V?FymrUf zaQyvq<7%(2So%T{=HZ5C{Bzaw-DSR=kG#_9ARB>&1Nb+y`>K3@Wy|#mH&2?vj^w|vQ?VVvte}|;pr}_R$4NNlA0^`39u~&z1;|s@3F))E)ljtzg8J# z8Bu4}%Ny+t>KdEqtXs8dAFMK9)RD7xAYO%hw&-i8PoLJ%_1MJdgWq@^a z%RE!((PAx8FEol|;G)-1IR_mIBT6#5t?xoU2eL?^hl22$$3PvKFzNIi-e6Do)e;w9 zLr&W^d3`;UW0%C%clyzQrml9~y5R80e z=D~8ke%W1@pK|Fh;Jf-91qvn>GW5uH_M?8=v@{WTMN{c7PFJ^t+$M z562>ORoJs4?G(i>J6%z9xzV zJ?Cqj{-Qoy(lEl5e(2Dl3DP@cuqf~SJrl_dbPC48qIOej`LUVsip#$d3&JDgSr3;! z4h?0pNfWAhKTvq^dHuQcfM!fV0cVp!w>5Speo!RHpXeG_x0ZG{#cob!xJeZAtur8# zuQS$vi7;Jik*8g9E{?Fk3~ORu@65t~fF#+nh50*>M0Zov@!-Bu8Eer0yiHO4phK--7;R~c<4=GE&VY3bvpVWwfTU;L)qX&Q;QgaDAO zCEQPtX#Xiaua_WP+eak(kH=~x8qat#NbcXv(3fxNzNc%U&-ntJB=9P4yAW!Uwd4;q zX}Z`JI&6IKz3cV|mX_bKYFVO~G`);4(vq7iXjy&^O4;dc0Z?^d>%|{=LjQYLK@Q9>%a8-1+RqnhSpj3t=Up+xqR5gqz>ZtQ{avm6ex~AzuTy zeb?C7*akslM$UXcpyi>hk9>VW^Wz|oR5OWD`Bx781=jr*;u`+GyZ7wz^Q92vQK&Cz zMhsu*LV+mB=@#^#C|+gjmL5P(2Kr2*P0hZ%{Cun%2Gf=tKFk{Zq^0I1es2ABor!AY z?6#!)IR3X%Md7&IQQWi^{gHSi&_>6 z*y$Dt2DG%^z2QR8g5BOU6OTtWUIv~Mvm)@1RHaO`Mp4`3o5i)#nd|#P8qG|BqU_kH zhyi$>0hzL*XrEf60(3j{3CBlgrdA~gMVetD- z%lTMKbFg&#eSih%MU@fE2yMI=BVXO$@OH+XTbbi?hh=xF^SuRTCvv?$m6ul*vjFaa zk91bShj(3TCjA=7 zM>h5_eSKjqp#v+5hK=jF-l4o!x4xgvW)F>hWT8zh`+Ui=1~^z3{bFyT?Xv+Rf{bNz21mK2FXcyA(+Sb-M0 zx5*TK=2H0@2)}&}*MM<04VW3NA&~!vc6_62;ej+^nVzt}FKABRH#R&T{v@H6!%Gy$ zqgg3#TOOW1$i`M7>@l=UBicj1xpL_lyl)A57J=dQ84==Rs;-jWOC)2?(GV*l_`eiS zfg*`{P5QQ&qz?2v#VoPyWXW%rj1R_V&z_xcER0pbJ}X)ckBPw=al9(E%+r=|8L&ya zltTsj-PX&OR062iNXGKgfN@L&aeX~~Vq|$~(LdI0J`BH+F#V&>rCp!8z;;JirA=bR ze$(TKC|x5z4*fp$PlUz4t&tHT5fEw;Hv`sK_#=PhMI_M`aVkFe&mpH7lPV^7#&xf` zkhrU4VDs#STqcWTx}UM`dC~O0RVW3VD*NIwnXML4w&LukfQwAeprp6IFI;?bh18oW zd(Ug7EFO|15N#lE0%Qax`OVD3*ROzs;NwIn2NMg~Kt2ST{i|NA70j(mR6IHkv1nij5>F z>E1flM4l-e4pCLF#y!Z>J|#@OR@2%ctH-~_vFzZd_bZt3XttyPKxm$Ht8GEO!@!<% zv7~RD%oXih)Akt73nBgFMy$1J$ zK=pgJ|D-FY5BI!f3kWg+P7>3_vJNjgCtm?*AeN!J9perR_j0w*ES*z^31sm4&;9Z? zF5wAadqnj%_w<+qy8IOo{!veoJOy^zj(#gqhk#IMJT`KsbW<$Jo%!PEK)LWBiFN~I z5{Mf8XO(iU8B^H0lj-4u{ECUgpsTa?yUEMSZo*hZ#Nh)~)&Csx^&kJonD6^$%m>2Z zT_AAmLD)s4Q~L5c+IH#*q=B5lPezn761A-wR!P30#1un$G z#QI_;m5FpPq~6^tp5WfQYkZa@>?ei(uGpG)57u6a+dgj{^Ui4BatsPw*YTLWcy+bb6$GbEKtv|}h|8!vpqa{`Q~UTuz2CE$fYW@adjLUWZ0ci7u1 z$&i%@murfVcQ0<6)CxG3yhOZ7MGQKdE4B^`OP2h0wY&dPdA6?Nz`#POdG)H47?;}f z)6yq4fBXP)$_e)Ad((&&V&z<9<97%qX6*NcL2w5#T|sXi=XV8&g&?Mrj&1H`I?l4@ zp@#%UG;ns`;sTMje8s*6@-xCd-`T7{wLNuvYu6Oh8>fcvV@0F?_39t zg$2X(`2p21=t^Eqs{FMj!UmOL`*yH^{GMsN^uHFMffKz`m0yT>CAUh&Lo0wlEX}y( zG{J5`DW&5D#o-OC^bo`xU@Pd&;a|$i8@HbK#JR+jWK$ciMHpozeWKDopW#rY%-KP* z9bD9c*3-L-*l_e9i>>30Y&5%IBA`(pSNR?N%Nc}rvmCzj(@lP$Q(Ix;As`;{IN0Q2 zo4eydWbzIOu1&ACTpe*$f)%Zx*M>NSzao9~k|%M|1Di&rS3V z4i~$MuU!2v+B5{70ZTXt=z&|=%-2u+vGx3O4*a4~Ku5Q+Ug&#zGzw^R7~E*!Y`U$N zug7eSl6S|hYUi~wbL3vP>BE0Ee)jQbTeLx-r z?PX)m_lUE?MAL-$j5U8m{oPvI5ur`J`X{xG$3YAe=#NwFj$&)Yt8=c9#bW2c)}zOk z>(?aD7IW#^i~1#ezbzEZOi1eXMjrxyk6wBgX>4-xfj~7~oqs304(aS9qGv}Z)BecS zHZ?y|+P{5!JacFha+Ml>{@V&$@BmO5_j?e`!%PIP^%>A$Hw;(5pU!xyNNx=}-+T7> zP(qmAPJP$0&|g8g4dd1RIj=51W9qC6{s?tG2)BFl8#u&~_fsKd;*#Q@LpRT|+-v6} zjNixx>krqx@h=7COKHClSrw_~dak(M-E0&vWUjb=|IgnvNS5q8Njjb5rJWl=oS~PG zdyE7~dY$G?+*H0oFJGuy1y=gkR7c9t+9FZqUSQG9s3z+#5 zI6l`m$_x3ml@-%%_|3-J;!sD*J>yuPSP!bKM35x=m76u3iMcZDNW{tcee ziw}iboV5yWs)6iBRdfmV+BcCm%!(V=!N_gnbBtHkcz(!-`|_dZjx#-w_3;g7(8w8M zVE#s`T<{xX!qJC!@zsP%+jr@@)Jc}l?{S^U>*5Q&Tt(J}*g?;I=GUI*Tj);9X@g-hw~;c zBKPT2rtT$NKOxnDI>EYg0g8q?k}LNng0#N|w|puCPc24%3D0Na^Ym$vCsY!L6+~QW_P~*0|kg%U1M2wp^G>$+%pE4s;>;t3c<1AG-@w ztkSjd$WvYK!6aewrhcqFC8PXQo^~Vo!UPPZ$e&Bzf0Q%_5QCmrb)~BVp<*86YPOR8 zX8U+y2D)gtp^~}cI&>i~tfP(5zktRo@>t83TWk>f9C*YXObYP%fXCuBxPdGvJ^EF_ z47_Arq+R)gyvc-fG-K#&Uk}j#L1*g&y-F}lNH-fqMnoYlg?dH!I10HpPdG$WRMhC) zb1=8p!GTe=E=Bf;sLIL4MK|#k8Oh59_yfVwB{zvp(K$!1pPwxz3GJw8NhZ!@KzBl9 zDJmzIYIbB0%m5}JFUvLWXORz5FaWupXSd2)Gi^f?Jlz2lz752(J_?hy=;O_kDSOnA zCLC}ja=H%t34Cm|0M6+~quDJk_vy21L9|uo-neNQx8D}ibKDNW$eqfAXb2AQwErRl z2Kon{{v941YD@Ucta=cr@$`b95k>sK@Sj7^Ubxm)~t|J-P!B*Dq7 zq|BAN=7L|3M&_j6!=Yy?@=S`WUzxvwS@%*PN3bw%tsXgFW5ge8Mj?!JkFnGG!2&T4 z&u_|uKDbpMEo41JJ}F-a&Cv2(dsn>?L;-h&AlO}UniWn{HV#hcm41@wL=3?d@oroKD!jmet}Dk18uGRpXo!UL$ctOtA= zBhV;>u_`wG-L%PA>SRk^Jbp2H?kSG8f)hprb2QBQ$2|6C_5H{sQMysutxa**@#be%I{|&I0ngdWG@iVsUxhy)89wz7lK zi@?tMYza*GpG;>CPC99OEk+U$AJZ7%O^F@1i!w|&MOYqS!jFNg3NgQM^u%kOU>zk; zX9%M+1%$U99e30d+ZKwNJv9J)jAX_6D)XdUCY?rW6shy&XV#eIetqGj1cHEn3D&h) z{H^3SK&bV#&Pg%atZ_?{A>T5D5*?s(yP1Y=H8w*aeDsD;(6-k=OQ?f|)2V^i=h)mo z=Ue}#HZ_h{Km>s~YZ8ht+Qt(>bD1d|9tU>|@Yg+9j#yI+=2nMRxOCD`cvfr#eJk3; zovSip*R_FwksNoHGn5Zu*_%vyYPC_P{yvAoH@NseQsojKs-P)Vmc^5ZYR5^c z5_x_X-JdClc#_+R`w+VbRg+u~PHlAQAXbyr)PJ;^{CDaO{-$((%%Vn~>zZ4Ng@``9 z1VpnH$`?Z5e~6XSzK|XWQI9I`1rsyqivkhMNU|8Zf%u1`JV*&k{NCV^ZPB9bdUpQ8 zQw%B%{ebE}kxFarvFkKa1nTSw2#EZ8pjUKQ`qgTPRXR%XW_KZ$+EB~9&%=CQUeX!t z3{HFgv5p>A{Nb-`VQXD+kEA0zzE09uoZ&?5x^xYrV=HRpx7^be^ z^?6-VHGyUntOPZfbf9a-FG}*~JT4;O$85uml72Dd2vZY+OJYe9ZF-EETXE`z-Jo z0O13bE?}tO|C6#{vH8}R)8xKBv~)T`ahs);@b+v?>adJY-mF5X*KVRuqRk?u3qX>q zU~2O8GB8~4ujkH|{5s^FPu7Q?UveuG%+5J&38Le4jm##g{kJS0f&-xX#^9y*=y5YB zXF`U{hEu{s_*oVfNY+KqoimmFsHIBeV55mxH~U*?h_4+DJSTPTT;AL@f>0x_(OLOe zz{oXi4I5rPBZZ5l+HW>}bhkErbpM$rI>E~e!wQn}F<%3fO}M%SzHxBUH8eG8`&Xsnuk!C-cYzuJ z4?{Z7#_yf~xn`<0#GY+fIs3I# zw{xh~qAoC|EHJoLRYC9?Q!@yGIv)hR%sUP6@tc(gq~u$PWUoQHO9<=pO#yVr__SkQ zU`L90_ilKzcq&T9`FoG<1XNV!bUSU97yv=}1~!@K!=A`gB3(n>>x^xk!FF`e&d2fm z&7#rw2hb2d$~%gyQNT@2DL)0{uf{Zy7%1WGx z$PXRzZT}c@R$VOn| z|0!9#-9sM}s8DMn`V}HSq6xzLU}kTBU0X+|tjF=5 zP*}9fd7CK`DWt!|WwD**4jj?Jd_1SIbf4*nQDuR%0#wzOxXisB8ZuPp4@n0JryT9u zV)UD_S6jX_9kgts$pRa+jx$$<)X?VGMW5&j%QtBllE`u zYZD)6$0>#vy{#XE;yfedoLx{zC|%np-T3@!ZYRw`e2T)+ zC3>(Ox2jF6(8lr4J)bWlwF)Akn~lYT2f@fTNM01TN@qcd+}vE>ppbsP^IZ-<_Xb>i zqT<7J2XFh}fy1Fa=*j8nm#QCb+}F~wS76ZA)_y!NF!1Ffhh*SLl{O8CqS7g=J(Ap7 z%9IuQCGH+jD6O6&rg;q@hd;l-r4?#K3r*@a4|EK5KU!EiJ~fUFDgXJOtQh;m>jY8^%sptlNqS z>yaSXQ^X~J%>0Br=W{WQHjOI00G<02?z(4KIJ<9>G&AFjY$?#aufTFt zHY+8qyO$KfAgEi@BGPa^GCcg1ZV5J7{Yzdi_l3%oGs4hRwE!@@KYDt!DIz@FM!jlg zCBgYcKAQRYtAy1zXsgBe{J{v5zxpxx_80LUG9mM)r_#77dvvFOgXE6&MAqt(vD3V21`%K@c%pq?ZCS8*&Pfd6xEY*jIxTW;>{mgEx^`QXvqmM zHq-_t+t#EN47y(HI&H{`!fZu}C_PfWl71-%*-EJ(E+OFpKR^E{(n(!eKU;qM;8oDT zhA`^Z7^*kI&fWaIr*74N!Cot8!e93bfo3~FwfD|HJ z;bL1Yo33=-bd}6cPzNW&aFPnJ9Sjx&X{U)-g+I4jEIuDxogZ2Fz)h*`nOCS=B6S@r z@85k?t{sQFL5n-ELX$nIh4KEE;cI)mz9;lL(_9NDY6G_hq-ou z1p)P%)}LRuop{;Q)P(GgwB??zL(Ytiq2bZrLaU(BcmSEix_O-NLQrdW_hf&_4Qsh6 z#U;YIDaGAWcy9JQY7UY$0>r{yTl(W`9TPJO3c8#RNhX-?8bt1He22H1ak|HKJ@X<%18R zU{9$jJaZB)2?6ic&3TM0X3#QqVBs%rN|7eS#U1^7m<0_381fMIgE0jh+tce@S^W;? zHH;k-(<1{lU{4L2?k|zdT{17vVCF`dv@3*)5C&+8m3Rx!5z#rO@3oj2pS- znAYgu^Vobmp|(0*5%aRledRlJjH>GSe%nGlxH}O|B>>A0j{b$)k%v3oj_cdKL@2wM z4y%Qh5A>t&+WUwM&l#)04_PED{q=X?&#Z;*Q|?s}VQK^q4CqaQoI%#y!o|VC$}&Gi zWL|+?(?9`ecbjLsfATkBt;uDR6-0n5j?)Sr0K|;(JMbm-aCl(@`-R0gSYLJHsUtAZ zY|lAD&EX%E+WBu9Q~mAkRdpF!lDrmE%(t)v<2Ok7pu)haPs4V!V-v;ecBQiB`Xf6d zJ6(NE%U|NtmWcH-D`P~ab*kqoZhI_gYA;K$%Zr=^92Ik!O5mosw>3Y>BT^dFx9u&=L2dP+rP__yUC+=|67oTo#H#}nlNbtF@e?BxOXRMIrQ(D@M|4nU%#s0 zj^R2nc1!24KiRy2iNf9z47D*MW`~T->|6M#BBk)#a-_ce{*C+1WsbjE2oELs8DoV< z?5rqjuW_J_3A(39ot}v;y49nINhDoQ6(dsaI&?x9oGo{7+z4pzI$BLimbYg*@kWj5}bBJ7uXK7Ykv_;?g*cGv+aUX42sW z1hT{Z%V%eq?&v7tpkp7y+c_aO+Cm0RA>Kw%^=`GwQ)n^C?EA&!(ZaKM9=0CPLJOp99!tc;NK8p))TJA$a7Ae-aN3Vp?M5FPHb4) za~|T@XWvq-37x|-yHl7rR(G+mz~!#V@he=*x3da9|0t1LdrgFz-x;g9cFCB^;E~|W z;9W%bR8QgmsqQTIz&Z9 zq>Jf<7ra=R+2j4d-KEZT#T{qoWhaAjRW6@26>a@9Oz568NJV>AJiJ8r`z z5iAOgwXFDHl+AkQD1+4yk5R(RiWur*O~7&Z2RPn1j_5hdFcGLr=SRW1?~`?-rJ`q?B;K z^S?~a`TxE#uDNCaKE|(NR!AX~z_0Xa4an2#0Yo8#zNwW|;+aF=#6|y16>nGPN^|Po z>T8k_x56p)_xoe_l2$hN`|)c%ha$Bh&>7jam_t7X;DtXNAUlFd(}8MxDPbP|^H6=X zpb{fJG`2`kD-7eG9cAu4z*0YCiI& z_jH@#0DED~UAP+f%)4;&$vB$xa zZ>W;cD(Id_=Jv%f23Cl2y^50&qzFT0ZsqUpd$Q~qS$2^e3Gfv7h{}OrtM+HR|0@Z<+M_HrV(yzd+1#gxUncLt>2sQZmL>Z zK8@6capfv<)3SdyYjHQ0_lL zxC+_{drvD`P9S0hw^f`#6q1>I|)?`fW05r*3NSzi`UM>{3T^JbebC(JqI2y zx^`glwD&?0#@#*W`{b4Yt4wY!`7z(vpf`e0?oO7J1kaaqu%1#j_4C{k_aBP?b|cYw z>7~6>OtGHW3DiDG9tZ)dD>X)AC-@hml|_QG;7z;d6Q~1{KS`uGsH@mkp{6W<+a3Cn zH}fRtcopbrP3TnhxixcrxUy;09mqYH`dfU1pEhd?-{PP zT~09=WniK{W+y=wT@WP9J#JCGagZ}_fD_`}&YR41oc5nUyG2ZJY=o*I{fNHJT0F_V zvlzhTg8w0l?xWU6tK?oaqoQc>S>qkOa#zx@SZ1Nky_L#5*obeH6RpoOF zVG(BEkOz*L1*?YBfGsg;{=mc=a>YL4U$=I2?z!*hAJ}Xjmvpy&XAqA(7|_C1R* zx~BY`OsN#uEeE0O){+0!z;N&5ard1-k5tX!Dr+iUx3d=)I5Pm{a1whG@XHLRMU@bo z86)F-Cy2Hj_9FQPt9NA;S!_)Oy;{#cj*JIN^!Jwv13e`Pa)s>Jt7svx$d6qmT_CaGuJNB%^uY4E zO|auV%GNoh4GX%(LfpM!&flj#E_ij9u{@8@(rR8Hd{O(|8Hbag9*brYXXle%uVKkq zP|?URdfrnA7M|l)%tp!tzb0oPfThpg$5FOobCP(u1j3Ltir`8}Y8Rsss1>qqg9K%a z)!(Z|HdsC_*s-CClcW%gatKk)Iy5{@BQb@aagJ8uC+@JOZ?dj)o)I)fn2Z3RNbxdH zFD(PA?6~RQSb%agYy0xr__xdV04V(7iPui8EYN4sFqYmLVs$j89Ajs3aO-*DI=Iz`(#HkYqj3C{kBH7uRLUE@(V%LF2)<=U;a(V+~vA?2TAgU(|ASL9fwS zta=}O-e1Zfchd4^gkN>g9@G?PP-JcBzCprSmne{SOaPuBs1+nb<*u{yt?3aE1=ELu zNdW!Vm-hDdy;ffeL*7MR=gOdDy>sI`AtBF(Iu0DEtsPI@nZrJR$YN5CV_m~BdYwKK zbdlo?+?$8ml3_~dsJh!xz2#wXW-G0GuCPB|RRg4J&W zae{yV07_nUcb`=j^}ljWeLH&oXOyUprOu)4=i*$C0N@tFcrSVJtjZ|STM(kXzyVS3 zqZ{uDetG_L@4{o_Z~}yObUI9>_fS)6!Le{1qRUEZMqyA!1!WV|$9HSsG~}m3EhyXQ z&|%378I?*mS;*>7OcW1<&)e*zuOB)!HTC`H&v5!h0~lZm!YLdabQXK6m~C`k$-eWg z4cp=rlvfe;vqRgr5E;MIO0y_`1_#67$jM!tXgue=UK|vFQVW?s>NUI-3k^lkbPjx= z^+%3yrlzy&`!(Ng%F*>-+cQ$wL37T$ZpCm9dX%mn*hU1Q?jupRZEVhJN6I`A1<2^(|XLfy%>}1 z1Y^}(R3_dy1|!`X^z8+m&Lx7);AFJ-kAxsW9Vl9VEM5yN^^}|0f6T(tOJ$n@q5d9G zt=Jyq8MV>EUze>_zj!k{di{dyeqbYXM&%~LZOzEYxMypddMoGpn2V%RWMOlw(d;RM zL^nXo%Fw*vdV~$Ai1}|m5WzV2ZgZ}LEvhu%>4!abQ3)zunL8jes&>)aL6x2h@%p-K=n5>_^&+*}20Q@&_}V zWccI=Hv*JXQm|T=+jN*O~Vv~!D z7ev0@Y>o?x2T*^&b*OtCpF5u}aJ_Wq^LQaU=n)=gD(~7D#o|F(#|T<^FSsRU(7%j4 z!%4+8JlVW;$t;ia{F{Q-(yo9}UH|yYCB_|R=LzfA7gb_wZml3@KTf|WEs7DVM6B!- zq~kBE^X%KZH{`sDEIt|dt&~FbAbUAJs}fSha4%{r@#|4edp%7h)|}^Id=7W`&{&+ z`7vZ#OKlGP%q%iJQoNBTq-$8Xd|Uc7!EI#E=D>Tq5yhp}n&~&LgMHtE%)7DXB_49` zvNstV*tP^7F%RY$c1Z}bqx!iN4xa*rm&UZ?f8LBx36cEt%t-2dCV)gRTgvwY1My~9 zq?FwP-B65WR)A?S_0OtB?BIP#aaawKb;^jq25UcC(v5K(b{ytjLd;I22;c9qvh z*A09cstQFuv}#`F#7OlgSV;pe9UWJ!gJJDYD;`S%REfxEvsDlw0Dxq3*g(*(YG66m zp1Lj>b_O_3N>eviwbx-lG~;-mf;SDzyWRvrg$_gGB@71h&YLv((fi!qd#(vVeG?u2K)6xjGLpZ>hz9Dr|Da ztchRDab;9IT*xILgYW7LaxSKZIDN{xfc zS`oyA1z!CCU@_toh>MHQ+%y@5ju4kE(g~f2!mcgQ+JMn{S+Y+5l+NkX53Mp+# zwqKs*9U|P{OAZYVUZ>2FwaHv*>Trr^zzOc$TMl>>1!J>-BEDAw;HR8{`|v(F8IgNb z1R$E)+aG%R`iKt`L-5|OWpzkf8&Qd#o-X9ue-&V9ODJ8aoBV}xuyNH#qwzWJXj|9U zHT)K76=h{**YHy#C)vPEeF~QPYEbDDwO27!MUGHx|Crzk7S>5q2Kc;5Ve}JV+=@b$ zlVOjZ87}*t|3$gRrIY^q{8a$vzzD|8;3C3=>%?~dvx%wNo(FE}XTo z&^=_26#-vx$tH9ZyF0evl_O&&lnbk!68sQ&MEV%wrAkV|(va+9-$BbjHhfpY1)j{3 z$=V=Em#HiG`POC-<|zoNc>)hu2!blq$4a)$xikVxD>^qwx}6oZSQdWJYC{4G86HM>0b6)wyk|`_7@~!ztFo0pD)kb!`L; z+c!QgZ*0x+r3^PTFL-Z5ypeR1=U4(lap@@YE?)H@!yjdm?|>2eqJy1p!AEi?P*Zxh zC8}4EE|7wA8K~X%*SBY&SiSr|p#rP$1j@u6*_Qq< zEtyVbPZ}6c(9m1~B*Q;?&Br#;u7HzM95)QTONM4{90m~+o4a>)Z)OWApFE2g8*r_e zva_%W92jnThuk)FyVpN&1WN?WW6(Bh5i>Y8<}UUG1Juj1xo=SKv3xl~%0DOdhN_lU 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 literal 0 HcmV?d00001 diff --git a/icons/mob/legfile2test.dmi b/icons/mob/legfile2test.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index a9b83f27b6..a48579a19a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3619,6 +3619,7 @@ #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\lavaboat.dm" +#include "code\modules\vehicles\motorized_wheelchair.dm" #include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\ridden.dm" #include "code\modules\vehicles\scooter.dm" @@ -3630,7 +3631,6 @@ #include "code\modules\vehicles\wheelchair.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\cars\clowncar.dm" -#include "code\modules\vehicles\motorized_wheelchair.dm" #include "code\modules\vending\_vending.dm" #include "code\modules\vending\assist.dm" #include "code\modules\vending\autodrobe.dm" From a2a67e9a7030d606a9afe14b38ad7947d1b288fe Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 18 Jul 2021 13:44:52 +0100 Subject: [PATCH 10/98] Update legfile2test.dmi --- icons/mob/legfile2test.dmi | Bin 182 -> 12519 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/legfile2test.dmi b/icons/mob/legfile2test.dmi index cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f..1ed9f2e0685599495b465fe440d8fb441a1eba72 100644 GIT binary patch literal 12519 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 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf From 4d1dad2e5ba607e463a294841f0d47fc4d47712f Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 18 Jul 2021 13:59:45 +0100 Subject: [PATCH 11/98] yes --- code/modules/surgery/bodyparts/_bodyparts.dm | 7 +++++++ icons/mob/human_parts.dmi | Bin 16619 -> 47597 bytes icons/mob/human_parts_greyscale.dmi | Bin 103878 -> 109752 bytes 3 files changed, 7 insertions(+) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index e24268cc45..5fe0b32361 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -871,6 +871,13 @@ else limb.icon_state = "[body_zone]" + if(istype(/obj/item/bodypart/l_leg) || istype(/obj/item/bodypart/r_leg)) + var/original_state = limb.icon_state + var/image/second_limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + second_limb.icon = icon + limb.icon_state = "[original_state]_front" + second_limb.icon_state = "[original_state]_behind" + if(aux_icons) for(var/I in aux_icons) var/aux_layer = aux_icons[I] diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index 984891250563104ddf9f42c623e9ba20f919f733..3310d911cb6538812509ce694da3c4ac9de8fb4a 100644 GIT binary patch literal 47597 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

s7QuKE47HhjdG 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%0D*zxV;s0xu`Tw5_2Clrj5&G>!*#V(k68)FP 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 Iip`_{0SIO{vj6}9 literal 16619 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

e;Y_+~33a%Syri7?w!x9)ytZ|Cli=cT2e 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 diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index c404fbcacbf9d82e342e80bfc6dde0fba2a10fb4..7eb00f9a9d995e374ebd7e50c998bfe0451071b1 100644 GIT binary patch literal 109752 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 Date: Sun, 18 Jul 2021 14:00:19 +0100 Subject: [PATCH 12/98] Update _bodyparts.dm --- code/modules/surgery/bodyparts/_bodyparts.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5fe0b32361..5c9f7d35b2 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -877,6 +877,7 @@ second_limb.icon = icon limb.icon_state = "[original_state]_front" second_limb.icon_state = "[original_state]_behind" + . += second_limb if(aux_icons) for(var/I in aux_icons) From 06ccaf702a5e056badd345e86712480135a12f35 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 18 Jul 2021 15:10:39 +0100 Subject: [PATCH 13/98] bugfixes --- code/modules/surgery/bodyparts/_bodyparts.dm | 23 +++++++++++-------- icons/mob/human_parts_greyscale.dmi | Bin 109752 -> 109741 bytes icons/mob/legfile1test.dmi | Bin 42479 -> 182 bytes icons/mob/legfile2test.dmi | Bin 12519 -> 182 bytes 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5c9f7d35b2..90627e4276 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -792,6 +792,7 @@ . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + var/image/second_limb var/list/aux = list() var/list/auxmarking = list() @@ -825,6 +826,11 @@ else limb.icon_state = "[species_id]_[body_zone]" + if(istype(src, /obj/item/bodypart/l_leg) || istype(src, /obj/item/bodypart/r_leg)) + second_limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) + second_limb.icon = limb.icon + . += second_limb + // Body markings if(length(body_markings_list)) if(species_id == "husk") @@ -871,14 +877,6 @@ else limb.icon_state = "[body_zone]" - if(istype(/obj/item/bodypart/l_leg) || istype(/obj/item/bodypart/r_leg)) - var/original_state = limb.icon_state - var/image/second_limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) - second_limb.icon = icon - limb.icon_state = "[original_state]_front" - second_limb.icon_state = "[original_state]_behind" - . += second_limb - if(aux_icons) for(var/I in aux_icons) var/aux_layer = aux_icons[I] @@ -921,7 +919,8 @@ draw_color = "#[draw_color]" if(draw_color) if(grayscale) - limb.icon_state += "_g" + if(!second_limb) + limb.icon_state += "_g" limb.color = draw_color if(aux_icons) for(var/a in aux) @@ -939,6 +938,12 @@ for(var/image/marking in markings_list) marking.color = "#141414" + if(second_limb) + var/original_state = limb.icon_state + limb.icon_state = "[original_state]_front" + second_limb.icon_state = "[original_state]_behind" + second_limb.color = limb.color + /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() qdel(src) diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 7eb00f9a9d995e374ebd7e50c998bfe0451071b1..d04323b02bcf19318018242e33cf7465f4894db0 100644 GIT binary patch delta 44326 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 M`-}^AAN~8k0KnT1QUCw| delta 44284 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 W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 42479 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%0DOdhN_lU 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 diff --git a/icons/mob/legfile2test.dmi b/icons/mob/legfile2test.dmi index 1ed9f2e0685599495b465fe440d8fb441a1eba72..cf74d73796c8c6121c0818fdac74e4a7f0ab9a5f 100644 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;m;-!5T!HlRD%)E?im@cfFPOpM z*^M-ilB$r15|`BC)e_1!5cyiE*d|0 zq;uX!^CUx2Pwx&3;~?Y9#$F0CsjT7l;v3i)KHlcf^{%~V4K$R;)5S4_V`g%K#2p}S W0R!VxY5#RV7K5j&pUXO@geCygCOLEf literal 12519 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 From c7a7346939ae5782c43eab89c3b87b430cdce1a9 Mon Sep 17 00:00:00 2001 From: bunny232 Date: Mon, 19 Jul 2021 07:36:22 -0400 Subject: [PATCH 14/98] monophobia nerf --- code/datums/brain_damage/severe.dm | 2 +- tgstation.dme | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index 3ba00d305b..ed0a9fbab8 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -164,7 +164,7 @@ /datum/brain_trauma/severe/monophobia/on_life() ..() if(check_alone()) - stress = min(stress + 0.5, 100) + stress = min(stress + 0.25, 100) if(stress > 10 && (prob(5))) stress_reaction() else diff --git a/tgstation.dme b/tgstation.dme index 298443fd4e..4ffe7a19af 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3621,6 +3621,7 @@ #include "code\modules\vehicles\atv.dm" #include "code\modules\vehicles\bicycle.dm" #include "code\modules\vehicles\lavaboat.dm" +#include "code\modules\vehicles\motorized_wheelchair.dm" #include "code\modules\vehicles\pimpin_ride.dm" #include "code\modules\vehicles\ridden.dm" #include "code\modules\vehicles\scooter.dm" @@ -3632,7 +3633,6 @@ #include "code\modules\vehicles\wheelchair.dm" #include "code\modules\vehicles\cars\car.dm" #include "code\modules\vehicles\cars\clowncar.dm" -#include "code\modules\vehicles\motorized_wheelchair.dm" #include "code\modules\vending\_vending.dm" #include "code\modules\vending\assist.dm" #include "code\modules\vending\autodrobe.dm" From 0b55928f9b040b02cabb0f1d3b02cde2b10004ae Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Tue, 20 Jul 2021 22:46:33 -0700 Subject: [PATCH 15/98] Makes supermatter properties auxgm-based --- code/__DEFINES/atmospherics.dm | 9 + code/modules/atmospherics/auxgm/gas_types.dm | 27 ++- .../modules/atmospherics/gasmixtures/auxgm.dm | 17 +- code/modules/power/supermatter/supermatter.dm | 169 ++++++------------ 4 files changed, 105 insertions(+), 117 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 8fc2dc116b..67d16e6687 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -268,6 +268,15 @@ #define GAS_FLAG_DANGEROUS (1<<0) #define GAS_FLAG_BREATH_PROC (1<<1) +//SUPERMATTER DEFINES +#define HEAT_PENALTY "heat penalties" +#define TRANSMIT_MODIFIER "transmit" +#define RADIOACTIVITY_MODIFIER "radioactivity" +#define HEAT_RESISTANCE "heat resistance" +#define POWERLOSS_INHIBITION "powerloss inhibition" +#define ALL_SUPERMATTER_GASES "gases we care about" +#define POWER_MIX "gas powermix" + //HELPERS #define PIPING_LAYER_SHIFT(T, PipingLayer) \ if(T.dir & (NORTH|SOUTH)) { \ diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm index 0da2527b3b..56d4764d43 100644 --- a/code/modules/atmospherics/auxgm/gas_types.dm +++ b/code/modules/atmospherics/auxgm/gas_types.dm @@ -3,10 +3,16 @@ specific_heat = 20 name = "Oxygen" oxidation_temperature = T0C - 100 // it checks max of this and fire temperature, so rarely will things spontaneously combust + powermix = 1 + heat_penalty = 1 + transmit_modifier = 1.5 /datum/gas/nitrogen id = GAS_N2 specific_heat = 20 + name = "Nitrogen" + powermix = -1 + heat_penalty = -1.5 breath_alert_info = list( not_enough_alert = list( alert_category = "not_enough_nitro", @@ -17,12 +23,14 @@ alert_type = /obj/screen/alert/too_much_nitro ) ) - name = "Nitrogen" /datum/gas/carbon_dioxide //what the fuck is this? id = GAS_CO2 specific_heat = 30 name = "Carbon Dioxide" + powermix = 1 + heat_penalty = 0.1 + powerloss_inhibition = 1 breath_results = GAS_O2 breath_alert_info = list( not_enough_alert = list( @@ -43,6 +51,9 @@ gas_overlay = "plasma" moles_visible = MOLES_GAS_VISIBLE flags = GAS_FLAG_DANGEROUS + heat_penalty = 15 + transmit_modifier = 4 + powermix = 1 // no fire info cause it has its own bespoke reaction for trit generation reasons /datum/gas/water_vapor @@ -52,6 +63,8 @@ gas_overlay = "water_vapor" moles_visible = MOLES_GAS_VISIBLE fusion_power = 8 + heat_penalty = 8 + powermix = 1 breath_reagent = /datum/reagent/water /datum/gas/hypernoblium @@ -71,6 +84,7 @@ fire_products = list(GAS_N2 = 1) oxidation_rate = 0.5 oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100 + heat_resistance = 6 /datum/gas/nitryl id = GAS_NITRYL @@ -91,6 +105,9 @@ moles_visible = MOLES_GAS_VISIBLE flags = GAS_FLAG_DANGEROUS fusion_power = 1 + powermix = 1 + heat_penalty = 10 + transmit_modifier = 30 /* these are for when we add hydrogen, trit gets to keep its hardcoded fire for legacy reasons fire_provides = list(GAS_H2O = 2) @@ -105,6 +122,10 @@ name = "BZ" flags = GAS_FLAG_DANGEROUS fusion_power = 8 + powermix = 1 + heat_penalty = 5 + transmit_modifier = -2 + radioactivity_modifier = 5 /datum/gas/stimulum id = GAS_STIMULUM @@ -119,6 +140,10 @@ fusion_power = 10 oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 1000 // it is VERY stable oxidation_rate = 8 + powermix = -1 + heat_penalty = -1 + transmit_modifier = -5 + heat_resistance = 3 /datum/gas/miasma id = GAS_MIASMA diff --git a/code/modules/atmospherics/gasmixtures/auxgm.dm b/code/modules/atmospherics/gasmixtures/auxgm.dm index 6c7bc0cc49..4aa68aa710 100644 --- a/code/modules/atmospherics/gasmixtures/auxgm.dm +++ b/code/modules/atmospherics/gasmixtures/auxgm.dm @@ -35,6 +35,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA var/list/fire_enthalpies = list() var/list/fire_products = list() var/list/fire_burn_rates = list() + var/list/supermatter = list() /datum/gas @@ -55,6 +56,12 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA var/list/fire_products = null // what results when this gas is burned (oxidizer or fuel); null for none var/fire_energy_released = 0 // how much energy is released per mole of fuel burned var/fire_burn_rate = 1 // how many moles are burned per product released + var/powermix = 0 // how much this gas contributes to the supermatter's powermix ratio + var/heat_penalty = 0 // heat and waste penalty from having the supermatter crystal surrounded by this gas; negative numbers reduce + var/transmit_modifier = 0 // bonus to supermatter power generation (multiplicative, since it's % based, and divided by 10) + var/radioactivity_modifier = 0 // improves effect of transmit modifiers, must be from -10 to 10 + var/heat_resistance = 0 // makes the crystal more resistant against heat damage. + var/powerloss_inhibition = 0 // Reduces how much power the supermatter loses each tick /datum/gas/proc/breath(partial_pressure, light_threshold, heavy_threshold, moles, mob/living/carbon/C, obj/item/organ/lungs/lungs) // This is only called on gases with the GAS_FLAG_BREATH_PROC flag. When possible, do NOT use this-- @@ -100,12 +107,20 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA if(gas.fire_products) fire_products[g] = gas.fire_products fire_enthalpies[g] = gas.fire_energy_released - + add_supermatter_properties(gas) _auxtools_register_gas(gas) /proc/finalize_gas_refs() /datum/auxgm/New() + src.supermatter[HEAT_PENALTY] = list() + src.supermatter[TRANSMIT_MODIFIER] = list() + src.supermatter[RADIOACTIVITY_MODIFIER] = list() + src.supermatter[HEAT_RESISTANCE] = list() + src.supermatter[POWERLOSS_INHIBITION] = list() + src.supermatter[POWER_MIX] = list() + src.supermatter[ALL_SUPERMATTER_GASES] = list() + for(var/gas_path in subtypesof(/datum/gas)) var/datum/gas/gas = new gas_path add_gas(gas) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index b1e1ff2208..ed57fdbb69 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -12,6 +12,19 @@ #define OBJECT (LOWEST + 1) #define LOWEST (1) +/datum/auxgm/proc/add_supermatter_properties(datum/gas/gas) + var/g = gas.id + var/list/props = src.supermatter + if(gas.heat_penalty || gas.transmit_modifier || gas.radioactivity_modifier || gas.heat_resistance || gas.powerloss_inhibition) + props[HEAT_PENALTY][g] = gas.heat_penalty + props[TRANSMIT_MODIFIER][g] = gas.transmit_modifier + props[RADIOACTIVITY_MODIFIER][g] = gas.radioactivity_modifier + props[HEAT_RESISTANCE][g] = gas.heat_resistance + props[POWERLOSS_INHIBITION][g] = gas.powerloss_inhibition + props[POWER_MIX][g] = gas.powermix + props[ALL_SUPERMATTER_GASES] += g + + #define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty. #define OXYGEN_HEAT_PENALTY 1 #define PLUOXIUM_HEAT_PENALTY -1 @@ -148,90 +161,17 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/power = 0 ///Determines the rate of positve change in gas comp values var/gas_change_rate = 0.05 - ///The list of gases we will be interacting with in process_atoms() - var/list/gases_we_care_about = list( - GAS_O2, - GAS_H2O, - GAS_PLASMA, - GAS_CO2, - GAS_NITROUS, - GAS_N2, - GAS_PLUOXIUM, - GAS_TRITIUM, - GAS_BZ, -// /datum/gas/freon, -// /datum/gas/hydrogen, - ) - ///The list of gases mapped against their current comp. We use this to calculate different values the supermatter uses, like power or heat resistance. It doesn't perfectly match the air around the sm, instead moving up at a rate determined by gas_change_rate per call. Ranges from 0 to 1 - var/list/gas_comp = list( - GAS_O2 = 0, - GAS_H2O = 0, - GAS_PLASMA = 0, - GAS_CO2 = 0, - GAS_NITROUS = 0, - GAS_N2 = 0, - GAS_PLUOXIUM = 0, - GAS_TRITIUM = 0, - GAS_BZ = 0, -// /datum/gas/freon = 0, -// /datum/gas/hydrogen = 0, - ) - ///The list of gases mapped against their transmit values. We use it to determine the effect different gases have on radiation - var/list/gas_trans = list( - GAS_O2 = OXYGEN_TRANSMIT_MODIFIER, - GAS_H2O = H2O_TRANSMIT_MODIFIER, - GAS_PLASMA = PLASMA_TRANSMIT_MODIFIER, - GAS_PLUOXIUM = PLUOXIUM_TRANSMIT_MODIFIER, - GAS_TRITIUM = TRITIUM_TRANSMIT_MODIFIER, - GAS_BZ = BZ_TRANSMIT_MODIFIER, -// /datum/gas/hydrogen = HYDROGEN_TRANSMIT_MODIFIER, - ) - ///The list of gases mapped against their heat penaltys. We use it to determin molar and heat output - var/list/gas_heat = list( - GAS_O2 = OXYGEN_HEAT_PENALTY, - GAS_H2O = H2O_HEAT_PENALTY, - GAS_PLASMA = PLASMA_HEAT_PENALTY, - GAS_CO2 = CO2_HEAT_PENALTY, - GAS_N2 = NITROGEN_HEAT_PENALTY, - GAS_PLUOXIUM = PLUOXIUM_HEAT_PENALTY, - GAS_TRITIUM = TRITIUM_HEAT_PENALTY, - GAS_BZ = BZ_HEAT_PENALTY, -// /datum/gas/freon = FREON_HEAT_PENALTY, -// /datum/gas/hydrogen = HYDROGEN_HEAT_PENALTY, - ) - ///The list of gases mapped against their heat resistance. We use it to moderate heat damage. - var/list/gas_resist = list( - GAS_NITROUS = N2O_HEAT_RESISTANCE, - GAS_PLUOXIUM = PLUOXIUM_HEAT_RESISTANCE, -// /datum/gas/hydrogen = HYDROGEN_HEAT_RESISTANCE, - ) - ///The list of gases mapped against their powermix ratio - var/list/gas_powermix = list( - GAS_O2 = 1, - GAS_H2O = 1, - GAS_PLASMA = 1, - GAS_CO2 = 1, - GAS_N2 = -1, - GAS_PLUOXIUM = -1, - GAS_TRITIUM = 1, - GAS_BZ = 1, -// /datum/gas/freon = -1, -// /datum/gas/hydrogen = 1, - ) + var/list/gas_comp = list() ///The last air sample's total molar count, will always be above or equal to 0 var/combined_gas = 0 ///Affects the power gain the sm experiances from heat var/gasmix_power_ratio = 0 - ///Affects the amount of o2 and plasma the sm outputs, along with the heat it makes. - var/dynamic_heat_modifier = 1 ///Affects the amount of damage and minimum point at which the sm takes heat damage var/dynamic_heat_resistance = 1 ///Uses powerloss_dynamic_scaling and combined_gas to lessen the effects of our powerloss functions var/powerloss_inhibitor = 1 ///Based on co2 percentage, slowly moves between 0 and 1. We use it to calc the powerloss_inhibitor var/powerloss_dynamic_scaling= 0 - ///Affects the amount of radiation the sm makes. We multiply this with power to find the rads. - var/power_transmission_bonus = 0 ///Used to increase or lessen the amount of damage the sm takes from heat based on molar counts. var/mole_heat_penalty = 0 ///Takes the energy throwing things into the sm generates and slowly turns it into actual power @@ -481,6 +421,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) removed = new() damage_archived = damage + var/list/gas_info = GLOB.gas_data.supermatter + + var/list/gases_we_care_about = gas_info[ALL_SUPERMATTER_GASES] + /******** EXPERIMENTAL, HUGBOXY AS HELL CITADEL CHANGES: Even in a vaccum, update gas composition and modifiers. This means that the SM will usually have a very small explosion if it ends up being breached to space, @@ -491,7 +435,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(takes_damage) damage += max((power / 1000) * DAMAGE_INCREASE_MULTIPLIER, 0.1) // always does at least some damage combined_gas = max(0, combined_gas - 0.5) // Slowly wear off. - for(var/gasID in gases_we_care_about) + for(var/gasID in gas_comp) gas_comp[gasID] = max(0, gas_comp[gasID] - 0.05) //slowly ramp down else if(takes_damage) @@ -531,46 +475,49 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Prevents huge bursts of gas/heat when a large amount of something is introduced //They range between 0 and 1 for(var/gasID in gases_we_care_about) + if(!(gas_id in gas_comp)) + gas_comp[gasID] = 0 gas_comp[gasID] += clamp(max(removed.get_moles(gasID)/combined_gas, 0) - gas_comp[gasID], -1, gas_change_rate) - var/list/heat_mod = gases_we_care_about.Copy() - var/list/transit_mod = gases_we_care_about.Copy() - var/list/resistance_mod = gases_we_care_about.Copy() + var/list/threshold_mod = gases_we_care_about.Copy() + + var/list/powermix = gas_info[POWER_MIX] + var/list/heat = gas_info[HEAT_PENALTY] + var/list/transmit = gas_info[TRANSMIT_MODIFIER] + var/list/resist = gas_info[HEAT_RESISTANCE] + var/list/radioactivity = gas_info[RADIOACTIVITY_MODIFIER] + var/list/inhibition = gas_info[POWERLOSS_INHIBITION] //We're concerned about pluoxium being too easy to abuse at low percents, so we make sure there's a substantial amount. var/pluoxiumbonus = (gas_comp[GAS_PLUOXIUM] >= 0.15) //makes pluoxium only work at 15%+ - var/h2obonus = 1 - (gas_comp[GAS_H2O] * 0.25)//At max this value should be 0.75 + var/h2obonus = 1 - (gas_comp[GAS_H2O] * 0.25)//At min this value should be 0.75 // var/freonbonus = (gas_comp[/datum/gas/freon] <= 0.03) //Let's just yeet power output if this shit is high - heat_mod[GAS_PLUOXIUM] = pluoxiumbonus - transit_mod[GAS_PLUOXIUM] = pluoxiumbonus - resistance_mod[GAS_PLUOXIUM] = pluoxiumbonus + threshold_mod[GAS_PLUOXIUM] = pluoxiumbonus //No less then zero, and no greater then one, we use this to do explosions and heat to power transfer //Be very careful with modifing this var by large amounts, and for the love of god do not push it past 1 gasmix_power_ratio = 0 - for(var/gasID in gas_powermix) - gasmix_power_ratio += gas_comp[gasID] * gas_powermix[gasID] - gasmix_power_ratio = clamp(gasmix_power_ratio, 0, 1) - - //Minimum value of -10, maximum value of 23. Effects plasma and o2 output and the output heat - dynamic_heat_modifier = 0 - for(var/gasID in gas_heat) - dynamic_heat_modifier += gas_comp[gasID] * gas_heat[gasID] * (isnull(heat_mod[gasID]) ? 1 : heat_mod[gasID]) - dynamic_heat_modifier *= h2obonus - dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5) - - //Value between 1 and 10. Effects the damage heat does to the crystal + //Affects the amount of o2 and plasma the sm outputs, along with the heat it makes. + var/dynamic_heat_modifier = 0 + //Effects the damage heat does to the crystal. dynamic_heat_resistance = 0 - for(var/gasID in gas_resist) - dynamic_heat_resistance += gas_comp[gasID] * gas_resist[gasID] * (isnull(resistance_mod[gasID]) ? 1 : resistance_mod[gasID]) - dynamic_heat_resistance = max(dynamic_heat_resistance, 1) - - //Value between -5 and 30, used to determine radiation output as it concerns things like collectors. + //We multiply this with power to find the rads. power_transmission_bonus = 0 - for(var/gasID in gas_trans) - power_transmission_bonus += gas_comp[gasID] * gas_trans[gasID] * (isnull(transit_mod[gasID]) ? 1 : transit_mod[gasID]) + var/powerloss_inhibition_gas = 0 + var/radioactivity_modifier = 0 + for(var/gasID in gas_comp) + var/this_comp = gas_comp[gasID] * (isnull(threshold_mod[gasID] ? 1 : threshold_mod[gasID])) + gasmix_power_ratio += this_comp * powermix[gasID] + dynamic_heat_modifier += this_comp * heat[gasID] + dynamic_heat_resistance += this_comp * resist[gasID] + power_transmission_bonus += this_comp * transmit[gasID] + powerloss_inhibition_gas += this_comp * inhibition[gasID] + radioactivity_modifier += this_comp * radioactivity[gasID] + dynamic_heat_modifier *= h2obonus power_transmission_bonus *= h2obonus + gasmix_power_ratio = clamp(gasmix_power_ratio, 0, 1) + dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5) //more moles of gases are harder to heat than fewer, so let's scale heat damage around them mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25) @@ -578,8 +525,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Ramps up or down in increments of 0.02 up to the proportion of co2 //Given infinite time, powerloss_dynamic_scaling = co2comp //Some value between 0 and 1 - if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && gas_comp[GAS_CO2] > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2 - powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(gas_comp[GAS_CO2] - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) + if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && powerloss_inhibition_gas > POWERLOSS_INHIBITION_GAS_THRESHOLD) //If there are more then 20 mols, and more then 20% co2 + powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(powerloss_inhibition_gas - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) else powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05, 0, 1) //Ranges from 0 to 1(1-(value between 0 and 1 * ranges from 1 to 1.5(mol / 500))) @@ -611,23 +558,15 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(prob(50)) //(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus - radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus/(10-(gas_comp[GAS_BZ] * BZ_RADIOACTIVITY_MODIFIER)))) * 1))//freonbonus))// RadModBZ(500%) - if(gas_comp[GAS_BZ] >= 0.4 && prob(30 * gas_comp[GAS_BZ])) - src.fire_nuclear_particle() // Start to emit radballs at a maximum of 30% chance per tick + radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus/(10-radioactivity_modifier)))))//freonbonus))// RadModBZ(500%) + if(radioactivity_modifier >= 2 && prob(6 * radioactivity_modifier)) + src.fire_nuclear_particle() //Power * 0.55 * a value between 1 and 0.8 var/device_energy = power * REACTION_POWER_MODIFIER - //To figure out how much temperature to add each tick, consider that at one atmosphere's worth - //of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature - //that the device energy is around 2140. At that stage, we don't want too much heat to be put out - //Since the core is effectively "cold" - - //Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock - //is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall. - //Power * 0.55 * (some value between 1.5 and 23) / 5 removed.set_temperature(removed.return_temperature() + ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_MODIFIER)) - //We can only emit so much heat, that being 57500 + //We don't want our output to be too hot removed.set_temperature(max(0, min(removed.return_temperature(), 2500 * dynamic_heat_modifier))) //Calculate how much gas to release From cc2f7ec669415194485a2154a76b44ccabf284f7 Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Tue, 20 Jul 2021 23:13:46 -0700 Subject: [PATCH 16/98] forgot to remove the hardcoded defines --- code/modules/power/supermatter/supermatter.dm | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index ed57fdbb69..aebe68a794 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -24,35 +24,6 @@ props[POWER_MIX][g] = gas.powermix props[ALL_SUPERMATTER_GASES] += g - -#define PLASMA_HEAT_PENALTY 15 // Higher == Bigger heat and waste penalty from having the crystal surrounded by this gas. Negative numbers reduce penalty. -#define OXYGEN_HEAT_PENALTY 1 -#define PLUOXIUM_HEAT_PENALTY -1 -#define TRITIUM_HEAT_PENALTY 10 -#define CO2_HEAT_PENALTY 0.1 -#define NITROGEN_HEAT_PENALTY -1.5 -#define BZ_HEAT_PENALTY 5 -#define H2O_HEAT_PENALTY 8 -//#define FREON_HEAT_PENALTY -10 //very good heat absorbtion and less plasma and o2 generation -//#define HYDROGEN_HEAT_PENALTY 10 // similar heat penalty as tritium (dangerous) - - -//All of these get divided by 10-bzcomp * 5 before having 1 added and being multiplied with power to determine rads -//Keep the negative values here above -10 and we won't get negative rads -#define OXYGEN_TRANSMIT_MODIFIER 1.5 //Higher == Bigger bonus to power generation. -#define PLASMA_TRANSMIT_MODIFIER 4 -#define BZ_TRANSMIT_MODIFIER -2 -#define TRITIUM_TRANSMIT_MODIFIER 30 //We divide by 10, so this works out to 3 -#define PLUOXIUM_TRANSMIT_MODIFIER -5 //Should halve the power output -#define H2O_TRANSMIT_MODIFIER 2 -//#define HYDROGEN_TRANSMIT_MODIFIER 25 //increase the radiation emission, but less than the trit (2.5) - -#define BZ_RADIOACTIVITY_MODIFIER 5 //Improves the effect of transmit modifiers - -#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage. -#define PLUOXIUM_HEAT_RESISTANCE 3 -//#define HYDROGEN_HEAT_RESISTANCE 2 // just a bit of heat resistance to spice it up - #define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts. #define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached #define POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD 500 //bonus powerloss inhibition boost if this amount of moles is reached From be1e9e4e04509bbebaf38b80fd477c57c15dc4b0 Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 23 Jul 2021 18:53:48 +0300 Subject: [PATCH 17/98] deals with conflicts --- code/modules/antagonists/cult/cult_structures.dm | 2 +- code/modules/surgery/organs/lungs.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index a0093e4da1..baf62fe6ad 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -219,7 +219,7 @@ if(M.health < M.maxHealth) M.adjustHealth(-3) if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio)) - L.blood_volume += 1.0 + L.AddIntegrationBlood(1.0) CHECK_TICK diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 536b70044f..00f154739c 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -533,7 +533,7 @@ var/total_moles = breath.total_moles() var/pressure = breath.return_pressure() var/plasma_pp = PP(breath, GAS_PLASMA) - owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. + owner.AddIntegrationBlood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. /obj/item/organ/lungs/yamerol name = "Yamerol lungs" From 67de120624e293f1cad7f96936785f48b1f9b1c6 Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 23 Jul 2021 18:58:42 +0300 Subject: [PATCH 18/98] Replaces a few more direct blood refillers --- code/modules/antagonists/abductor/equipment/glands/heal.dm | 2 +- code/modules/mob/living/carbon/alien/organs.dm | 2 +- code/modules/mob/living/simple_animal/hostile/cat_butcher.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 5ea8f77d6c..7d7cf1c0a7 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -144,7 +144,7 @@ owner.Stun(15) owner.adjustToxLoss(-15, TRUE, TRUE) - owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20) + owner.AddIntegrationBlood(min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) keep_going = TRUE diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 8e3966eb03..f8d9abd75b 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -85,7 +85,7 @@ owner.adjustOxyLoss(-heal_amt) owner.adjustCloneLoss(-heal_amt) if(owner.blood_volume && (owner.blood_volume < BLOOD_VOLUME_NORMAL)) - owner.blood_volume += 5 + owner.AddIntegrationBlood(5) else owner.adjustPlasma(plasma_rate * 0.1) diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm index 6950c6409f..f9072f3934 100644 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm @@ -94,7 +94,7 @@ L.SetUnconscious(0, FALSE) L.adjustOxyLoss(-50)// do CPR first if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding - L.blood_volume += 30 + L.AddIntegrationBlood(30) L.bleedsuppress = 0 if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that var/healing = min(L.getBruteLoss(), 120) From d185c5a3e9786b3727a65a12b68bd973c8d0c98d Mon Sep 17 00:00:00 2001 From: Artur Date: Mon, 28 Jun 2021 20:40:15 +0300 Subject: [PATCH 19/98] Re-adds the badmin nanite hub --- code/modules/research/nanites/nanite_program_hub.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index 85a117f53f..5baeb8b846 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -148,3 +148,7 @@ disk.program = null disk.name = initial(disk.name) . = TRUE + +/obj/machinery/nanite_program_hub/admin/Initialize() + . = ..() + linked_techweb = SSresearch.admin_tech From cdbd585f4de7db52f7cc7b751e22e243b7d7e207 Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 6 Jul 2021 21:50:53 +0300 Subject: [PATCH 20/98] update_appearance --- code/__DEFINES/dcs/flags.dm | 16 +++++ code/__DEFINES/dcs/signals.dm | 33 ++++++++-- code/game/atoms.dm | 60 +++++++++++++++---- code/game/machinery/_machinery.dm | 11 ++++ .../mecha/equipment/weapons/mecha_ammo.dm | 2 +- code/game/objects/items/plushes.dm | 2 +- code/game/objects/items/stacks/cash.dm | 2 +- code/game/objects/structures/door_assembly.dm | 2 +- code/modules/arousal/genitals.dm | 4 +- code/modules/arousal/toys/dildos.dm | 2 +- .../food_and_drinks/food/customizables.dm | 2 +- code/modules/hydroponics/gene_modder.dm | 2 +- .../mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/power/power.dm | 24 +++++--- .../research/nanites/nanite_program_hub.dm | 5 +- .../research/nanites/nanite_programmer.dm | 5 +- 16 files changed, 134 insertions(+), 40 deletions(-) diff --git a/code/__DEFINES/dcs/flags.dm b/code/__DEFINES/dcs/flags.dm index 719a795824..3a6877eeb3 100644 --- a/code/__DEFINES/dcs/flags.dm +++ b/code/__DEFINES/dcs/flags.dm @@ -83,3 +83,19 @@ #define COMBAT_MODE_ACTIVE (1<<1) /// combat mode is not active #define COMBAT_MODE_INACTIVE (1<<2) + +// Update flags for [/atom/proc/update_appearance] +/// Update the atom's name +#define UPDATE_NAME (1<<0) +/// Update the atom's desc +#define UPDATE_DESC (1<<1) +/// Update the atom's icon state +#define UPDATE_ICON_STATE (1<<2) +/// Update the atom's overlays +#define UPDATE_OVERLAYS (1<<3) +/// Update the atom's greyscaling +#define UPDATE_GREYSCALE (1<<4) +/// Update the atom's smoothing. (More accurately, queue it for an update) +#define UPDATE_SMOOTHING (1<<5) +/// Update the atom's icon +#define UPDATE_ICON (UPDATE_ICON_STATE|UPDATE_OVERLAYS) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 5f8745ca8e..e692e424e8 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -74,11 +74,30 @@ #define EXAMINE_POSITION_BEFORE (1<<1) //End positions #define COMPONENT_EXNAME_CHANGED (1<<0) -#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" //from base of atom/update_icon(): () - #define COMSIG_ATOM_NO_UPDATE_ICON_STATE 1 - #define COMSIG_ATOM_NO_UPDATE_OVERLAYS 2 -#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" //from base of atom/update_overlays(): (list/new_overlays) -#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon" //from base of atom/update_icon(): (signalOut, did_anything) +///from base of [/atom/proc/update_appearance]: (updates) +#define COMSIG_ATOM_UPDATE_APPEARANCE "atom_update_appearance" + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its name. + #define COMSIG_ATOM_NO_UPDATE_NAME UPDATE_NAME + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its desc. + #define COMSIG_ATOM_NO_UPDATE_DESC UPDATE_DESC + /// If returned from [COMSIG_ATOM_UPDATE_APPEARANCE] it prevents the atom from updating its icon. + #define COMSIG_ATOM_NO_UPDATE_ICON UPDATE_ICON +///from base of [/atom/proc/update_name]: (updates) +#define COMSIG_ATOM_UPDATE_NAME "atom_update_name" +///from base of [/atom/proc/update_desc]: (updates) +#define COMSIG_ATOM_UPDATE_DESC "atom_update_desc" +///from base of [/atom/update_icon]: () +#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" + /// If returned from [COMSIG_ATOM_UPDATE_ICON] it prevents the atom from updating its icon state. + #define COMSIG_ATOM_NO_UPDATE_ICON_STATE UPDATE_ICON_STATE + /// If returned from [COMSIG_ATOM_UPDATE_ICON] it prevents the atom from updating its overlays. + #define COMSIG_ATOM_NO_UPDATE_OVERLAYS UPDATE_OVERLAYS +///from base of [atom/update_icon_state]: () +#define COMSIG_ATOM_UPDATE_ICON_STATE "atom_update_icon_state" +///from base of [/atom/update_overlays]: (list/new_overlays) +#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" +///from base of [/atom/update_icon]: (signalOut, did_anything) +#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon" #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (atom/movable/entering, /atom) #define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) #define COMPONENT_ATOM_BLOCK_EXIT 1 @@ -361,6 +380,10 @@ // /machinery signals #define COMSIG_MACHINE_EJECT_OCCUPANT "eject_occupant" //from base of obj/machinery/dropContents() (occupant) +///from base power_change() when power is lost +#define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost" +///from base power_change() when power is restored +#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" // /obj/item signals #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index e9957fdae2..0379897c08 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -531,37 +531,75 @@ if(!LAZYLEN(.)) // lol ..length return list("You examine [src] closer, but find nothing of interest...") +/** + * Updates the appearence of the icon + * + * Mostly delegates to update_name, update_desc, and update_icon + * + * Arguments: + * - updates: A set of bitflags dictating what should be updated. Defaults to [ALL] + */ +/atom/proc/update_appearance(updates=ALL) + //SHOULD_NOT_SLEEP(TRUE) + //SHOULD_CALL_PARENT(TRUE) + + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_APPEARANCE, updates) + if(updates & UPDATE_NAME) + . |= update_name(updates) + if(updates & UPDATE_DESC) + . |= update_desc(updates) + if(updates & UPDATE_ICON) + . |= update_icon(updates) + +/// Updates the name of the atom +/atom/proc/update_name(updates=ALL) + //SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_NAME, updates) + +/// Updates the description of the atom +/atom/proc/update_desc(updates=ALL) + //SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_DESC, updates) + /// Updates the icon of the atom -/atom/proc/update_icon() - // I expect we're going to need more return flags and options in this proc - var/signalOut = SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON) - . = FALSE +/atom/proc/update_icon(updates=ALL) + SIGNAL_HANDLER + //SHOULD_CALL_PARENT(TRUE) - if(!(signalOut & COMSIG_ATOM_NO_UPDATE_ICON_STATE)) + . = NONE + updates &= ~SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON, updates) + if(updates & UPDATE_ICON_STATE) update_icon_state() - . = TRUE + . |= UPDATE_ICON_STATE - if(!(signalOut & COMSIG_ATOM_NO_UPDATE_OVERLAYS)) - var/list/new_overlays = update_overlays() + if(updates & UPDATE_OVERLAYS) + if(LAZYLEN(managed_vis_overlays)) + SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) + + var/list/new_overlays = update_overlays(updates) if(managed_overlays) cut_overlay(managed_overlays) managed_overlays = null if(length(new_overlays)) managed_overlays = new_overlays add_overlay(new_overlays) - . = TRUE + . |= UPDATE_OVERLAYS - SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, signalOut, .) + . |= SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, updates, .) /// Updates the icon state of the atom /atom/proc/update_icon_state() + //SHOULD_CALL_PARENT(TRUE) + return SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) /// Updates the overlays of the atom /atom/proc/update_overlays() - SHOULD_CALL_PARENT(TRUE) + //SHOULD_CALL_PARENT(TRUE) . = list() SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .) + /atom/proc/relaymove(mob/living/user) if(!istype(user)) return //why are you buckling nonliving mobs to atoms? diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 2ccf7d317d..4f61577eca 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -176,6 +176,17 @@ Class Procs: /obj/machinery/proc/process_atmos()//If you dont use process why are you here return PROCESS_KILL +///Called when we want to change the value of the stat variable. Holds bitflags. +/obj/machinery/proc/set_machine_stat(new_value) + if(new_value == stat) + return + . = stat + stat = new_value + on_machine_stat_update(stat) + +/obj/machinery/proc/on_machine_stat_update(stat) + return + /obj/machinery/emp_act(severity) . = ..() if(use_power && !stat && !(. & EMP_PROTECT_SELF)) diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm index 83a85ffcba..3253e6cbd6 100644 --- a/code/game/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/game/mecha/equipment/weapons/mecha_ammo.dm @@ -12,7 +12,7 @@ var/load_audio = "sound/weapons/gun_magazine_insert_empty_1.ogg" var/ammo_type -/obj/item/mecha_ammo/proc/update_name() +/obj/item/mecha_ammo/update_name() if(!rounds) name = "empty ammo box" desc = "An exosuit ammuniton box that has since been emptied. Please recycle." diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 31481f58cf..4d2bee3089 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -446,7 +446,7 @@ mood_message = null cheer_up() -/obj/item/toy/plush/proc/update_desc() +/obj/item/toy/plush/update_desc() desc = normal_desc if(mood_message) desc += mood_message diff --git a/code/game/objects/items/stacks/cash.dm b/code/game/objects/items/stacks/cash.dm index 68762a63c7..382e361e8a 100644 --- a/code/game/objects/items/stacks/cash.dm +++ b/code/game/objects/items/stacks/cash.dm @@ -18,7 +18,7 @@ . = ..() update_desc() -/obj/item/stack/spacecash/proc/update_desc() +/obj/item/stack/spacecash/update_desc() var/total_worth = get_item_credit_value() desc = "It's worth [total_worth] credit[( total_worth > 1 ) ? "s" : ""]" diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index aba3b743bb..d03e0fd57e 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -269,7 +269,7 @@ . += get_airlock_overlay("glass_construction", overlays_file) . += get_airlock_overlay("panel_c[state+1]", overlays_file) -/obj/structure/door_assembly/proc/update_name() +/obj/structure/door_assembly/update_name() name = "" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 723049a784..ed41cae8ce 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -150,7 +150,7 @@ /obj/item/organ/genital/proc/update_size() return -/obj/item/organ/genital/proc/update_appearance() +/obj/item/organ/genital/proc/update_appearance_genitals() if(!owner || owner.stat == DEAD) aroused_state = FALSE @@ -187,7 +187,7 @@ . = ..() if(.) update() - RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance) + RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance_genitals) if(genital_flags & GENITAL_THROUGH_CLOTHES) owner.exposed_genitals += src diff --git a/code/modules/arousal/toys/dildos.dm b/code/modules/arousal/toys/dildos.dm index 2482b93300..4de6877915 100644 --- a/code/modules/arousal/toys/dildos.dm +++ b/code/modules/arousal/toys/dildos.dm @@ -20,7 +20,7 @@ var/is_knotted = FALSE //Lists moved to _cit_helpers.dm as globals so they're not instanced individually -/obj/item/dildo/proc/update_appearance() +/obj/item/dildo/update_appearance() icon_state = "[dildo_type]_[dildo_shape]_[dildo_size]" var/sizeword = "" switch(dildo_size) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 0e2bdc63c8..42f536c4f3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -66,7 +66,7 @@ . = ..() -/obj/item/reagent_containers/food/snacks/customizable/proc/update_name(obj/item/reagent_containers/food/snacks/S) +/obj/item/reagent_containers/food/snacks/customizable/update_name(obj/item/reagent_containers/food/snacks/S) for(var/obj/item/I in ingredients) if(!istype(S, I.type)) customname = "custom" diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index a0c273613f..a6ba5ec461 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -430,7 +430,7 @@ src.pixel_x = rand(-5, 5) src.pixel_y = rand(-5, 5) -/obj/item/disk/plantgene/proc/update_name() +/obj/item/disk/plantgene/update_name() if(gene) name = "[gene.get_name()] (plant data disk)" else diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index f6169be902..68de074e07 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -129,7 +129,7 @@ coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") regenerate_icons() -/mob/living/simple_animal/slime/proc/update_name() +/mob/living/simple_animal/slime/update_name() if(slime_name_regex.Find(name)) number = rand(1, 1000) name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 9bbdcf4f66..c2dd77290a 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -104,15 +104,23 @@ /obj/machinery/proc/removeStaticPower(value, powerchannel) addStaticPower(-value, powerchannel) -/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change - // by default, check equipment channel & set flag - // can override if needed - if(powered(power_channel)) - stat &= ~NOPOWER - else +/obj/machinery/proc/power_change() + //SIGNAL_HANDLER + //SHOULD_CALL_PARENT(TRUE) - stat |= NOPOWER - return + if(stat & BROKEN) + return + if(powered(power_channel)) + if(stat & NOPOWER) + SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_RESTORED) + . = TRUE + set_machine_stat(stat & ~NOPOWER) + else + if(!(stat & NOPOWER)) + SEND_SIGNAL(src, COMSIG_MACHINERY_POWER_LOST) + . = TRUE + set_machine_stat(stat | NOPOWER) + update_appearance() // connect the machine to a powernet if a node cable is present on the turf /obj/machinery/power/proc/connect_to_network() diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index 5baeb8b846..db94f6548b 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -28,11 +28,10 @@ /obj/machinery/nanite_program_hub/update_overlays() . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open) return - SSvis_overlays.add_vis_overlay(src, icon, "nanite_program_hub_on", layer, plane) - SSvis_overlays.add_vis_overlay(src, icon, "nanite_program_hub_on", EMISSIVE_LAYER, EMISSIVE_PLANE) + . += mutable_appearance(icon, "nanite_program_hub_on") + . += mutable_appearance(icon, "nanite_program_hub_on", layer, EMISSIVE_PLANE) /obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/disk/nanite_program)) diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index f23a44909c..9399e69086 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -13,11 +13,10 @@ /obj/machinery/nanite_programmer/update_overlays() . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open) return - SSvis_overlays.add_vis_overlay(src, icon, "nanite_programmer_on", layer, plane) - SSvis_overlays.add_vis_overlay(src, icon, "nanite_programmer_on", EMISSIVE_LAYER, EMISSIVE_PLANE) + . += mutable_appearance(icon, "nanite_programmer_on") + . += mutable_appearance(icon, "nanite_programmer_on", layer, EMISSIVE_PLANE) /obj/machinery/nanite_programmer/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/disk/nanite_program)) From 187f0e428013d5bd2aedbab904c9b905029079f7 Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 6 Jul 2021 23:21:47 +0300 Subject: [PATCH 21/98] update_appearance --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 2a21d72119..a28d558454 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -553,7 +553,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) A.power_equip = power_equip A.power_environ = power_environ INVOKE_ASYNC(A, .proc/power_change) - update_icon() + update_appearance() /area/proc/usage(chan) switch(chan) From 3100f98b9067eec73b25b344b32ed5a1939c525a Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 6 Jul 2021 23:52:42 +0300 Subject: [PATCH 22/98] https://github.com/tgstation/tgstation/pull/57915 --- code/__DEFINES/layers_planes.dm | 5 + code/__DEFINES/lighting.dm | 13 ++ code/__HELPERS/lighting.dm | 5 + code/_onclick/hud/plane_master.dm | 58 +++------ code/datums/mutable_appearance.dm | 6 +- code/game/atoms_movable.dm | 28 ++-- code/game/machinery/computer/_computer.dm | 4 +- code/game/machinery/computer/mechlaunchpad.dm | 4 +- code/game/machinery/firealarm.dm | 22 +++- code/game/machinery/lightswitch.dm | 15 ++- code/game/machinery/recharger.dm | 35 +++-- .../structures/crates_lockers/closets.dm | 2 +- .../kitchen_machinery/smartfridge.dm | 4 + code/modules/lighting/emissive_blocker.dm | 8 +- code/modules/power/apc.dm | 123 +++++++++--------- code/modules/recycling/disposal/bin.dm | 3 + .../research/nanites/nanite_program_hub.dm | 2 +- .../research/nanites/nanite_programmer.dm | 2 +- code/modules/vending/_vending.dm | 4 +- tgstation.dme | 1 + 20 files changed, 196 insertions(+), 148 deletions(-) create mode 100644 code/__HELPERS/lighting.dm diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm index 37584d892d..a6e2e8a695 100644 --- a/code/__DEFINES/layers_planes.dm +++ b/code/__DEFINES/layers_planes.dm @@ -128,12 +128,17 @@ #define EMISSIVE_UNBLOCKABLE_PLANE 14 #define EMISSIVE_UNBLOCKABLE_LAYER 14 +#define EMISSIVE_LAYER_UNBLOCKABLE 14 #define EMISSIVE_UNBLOCKABLE_RENDER_TARGET "*EMISSIVE_UNBLOCKABLE_PLANE" +#define EMISSIVE_RENDER_TARGET "*EMISSIVE_PLANE" #define LIGHTING_PLANE 15 #define LIGHTING_LAYER 15 #define LIGHTING_RENDER_TARGET "LIGHT_PLANE" +#define O_LIGHTING_VISUAL_PLANE 110 +#define O_LIGHTING_VISUAL_RENDER_TARGET "O_LIGHT_VISUAL_PLANE" + #define RAD_TEXT_LAYER 15.1 #define ABOVE_LIGHTING_PLANE 16 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 3fba27ba52..95d91da14a 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -84,11 +84,24 @@ #define FLASH_LIGHT_POWER 3 #define FLASH_LIGHT_RANGE 3.8 +// Emissive blocking. /// Uses vis_overlays to leverage caching so that very few new items need to be made for the overlay. For anything that doesn't change outline or opaque area much or at all. #define EMISSIVE_BLOCK_GENERIC 1 /// Uses a dedicated render_target object to copy the entire appearance in real time to the blocking layer. For things that can change in appearance a lot from the base state, like humans. #define EMISSIVE_BLOCK_UNIQUE 2 +/// The color matrix applied to all emissive overlays. Should be solely dependent on alpha and not have RGB overlap with [EM_BLOCK_COLOR]. +#define EMISSIVE_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 1,1,1,0) +/// A globaly cached version of [EMISSIVE_COLOR] for quick access. +GLOBAL_LIST_INIT(emissive_color, EMISSIVE_COLOR) +/// The color matrix applied to all emissive blockers. Should be solely dependent on alpha and not have RGB overlap with [EMISSIVE_COLOR]. +#define EM_BLOCK_COLOR list(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) +/// A globaly cached version of [EM_BLOCK_COLOR] for quick access. +GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) +/// The color matrix used to mask out emissive blockers on the emissive plane. Alpha should default to zero, be solely dependent on the RGB value of [EMISSIVE_COLOR], and be independant of the RGB value of [EM_BLOCK_COLOR]. +#define EM_MASK_MATRIX list(0,0,0,1/3, 0,0,0,1/3, 0,0,0,1/3, 0,0,0,0, 1,1,1,0) +/// A globaly cached version of [EM_MASK_MATRIX] for quick access. +GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) /// Returns the red part of a #RRGGBB hex sequence as number #define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4)) diff --git a/code/__HELPERS/lighting.dm b/code/__HELPERS/lighting.dm new file mode 100644 index 0000000000..685958b015 --- /dev/null +++ b/code/__HELPERS/lighting.dm @@ -0,0 +1,5 @@ +/// Produces a mutable appearance glued to the [EMISSIVE_PLANE] dyed to be the [EMISSIVE_COLOR]. +/proc/emissive_appearance(icon, icon_state = "", layer = FLOAT_LAYER, alpha = 255, appearance_flags = NONE) + var/mutable_appearance/appearance = mutable_appearance(icon, icon_state, layer, EMISSIVE_PLANE, alpha, appearance_flags) + appearance.color = GLOB.emissive_color + return appearance diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 4c736c9a2b..dcf1091264 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -127,18 +127,27 @@ mymob.overlay_fullscreen("lighting_backdrop_lit", /obj/screen/fullscreen/lighting_backdrop/lit) mymob.overlay_fullscreen("lighting_backdrop_unlit", /obj/screen/fullscreen/lighting_backdrop/unlit) -/obj/screen/plane_master/lighting/Initialize() +/*! + * This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers. + * + * Emissive overlays are pasted with an atom color that converts them to be entirely some specific color. + * Emissive blockers are pasted with an atom color that converts them to be entirely some different color. + * Emissive overlays and emissive blockers are put onto the same plane. + * The layers for the emissive overlays and emissive blockers cause them to mask eachother similar to normal BYOND objects. + * A color matrix filter is applied to the emissive plane to mask out anything that isn't whatever the emissive color is. + * This is then used to alpha mask the lighting plane. + */ + +/atom/movable/screen/plane_master/lighting/Initialize() . = ..() - filters += filter(type="alpha", render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE) - filters += filter(type="alpha", render_source = EMISSIVE_UNBLOCKABLE_RENDER_TARGET, flags = MASK_INVERSE) + add_filter("emissives", 1, alpha_mask_filter(render_source = EMISSIVE_RENDER_TARGET, flags = MASK_INVERSE)) + add_filter("object_lighting", 2, alpha_mask_filter(render_source = O_LIGHTING_VISUAL_RENDER_TARGET, flags = MASK_INVERSE)) + /** - * Things placed on this mask the lighting plane. Doesn't render directly. - * - * Gets masked by blocking plane. Use for things that you want blocked by - * mobs, items, etc. - */ -/obj/screen/plane_master/emissive + * Handles emissive overlays and emissive blockers. + */ +/atom/movable/screen/plane_master/emissive name = "emissive plane master" plane = EMISSIVE_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT @@ -146,36 +155,7 @@ /obj/screen/plane_master/emissive/Initialize() . = ..() - filters += filter(type="alpha", render_source=EMISSIVE_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE) - filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE) - -/** - * Things placed on this always mask the lighting plane. Doesn't render directly. - * - * Always masks the light plane, isn't blocked by anything (except Field of Vision). Use for on mob glows, - * magic stuff, etc. - */ - -/obj/screen/plane_master/emissive_unblockable - name = "unblockable emissive plane master" - plane = EMISSIVE_UNBLOCKABLE_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_target = EMISSIVE_UNBLOCKABLE_RENDER_TARGET - -/obj/screen/plane_master/emissive_unblockable/Initialize() - . = ..() - filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE) - -/** - * Things placed on this layer mask the emissive layer. Doesn't render directly - * - * You really shouldn't be directly using this, use atom helpers instead - */ -/obj/screen/plane_master/emissive_blocker - name = "emissive blocker plane master" - plane = EMISSIVE_BLOCKER_PLANE - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - render_target = EMISSIVE_BLOCKER_RENDER_TARGET + add_filter("em_block_masking", 1, color_matrix_filter(GLOB.em_mask_matrix)) ///Contains space parallax /obj/screen/plane_master/parallax diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm index 31023b3fc7..1256286ff8 100644 --- a/code/datums/mutable_appearance.dm +++ b/code/datums/mutable_appearance.dm @@ -10,11 +10,13 @@ // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var // Helper similar to image() -/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, color = "#FFFFFF") +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE) var/mutable_appearance/MA = new() MA.icon = icon MA.icon_state = icon_state MA.layer = layer MA.plane = plane - MA.color = color + MA.alpha = alpha + MA.appearance_flags |= appearance_flags return MA + diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 155a462295..a582419ee2 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -66,7 +66,11 @@ . = ..() switch(blocks_emissive) if(EMISSIVE_BLOCK_GENERIC) - update_emissive_block() + var/mutable_appearance/gen_emissive_blocker = mutable_appearance(icon, icon_state, plane = EMISSIVE_PLANE, alpha = src.alpha) + gen_emissive_blocker.color = GLOB.em_block_color + gen_emissive_blocker.dir = dir + gen_emissive_blocker.appearance_flags |= appearance_flags + add_overlay(list(gen_emissive_blocker)) if(EMISSIVE_BLOCK_UNIQUE) render_target = ref(src) em_block = new(src, render_target) @@ -111,13 +115,21 @@ /atom/movable/proc/update_emissive_block() if(blocks_emissive != EMISSIVE_BLOCK_GENERIC) return - if(length(managed_vis_overlays)) - for(var/a in managed_vis_overlays) - var/obj/effect/overlay/vis/vs - if(vs.plane == EMISSIVE_BLOCKER_PLANE) - SSvis_overlays.remove_vis_overlay(src, list(vs)) - break - SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE, dir) + else if (blocks_emissive == EMISSIVE_BLOCK_GENERIC) + var/mutable_appearance/gen_emissive_blocker = mutable_appearance(icon, icon_state, plane = EMISSIVE_PLANE, alpha = src.alpha) + gen_emissive_blocker.color = GLOB.em_block_color + gen_emissive_blocker.dir = dir + gen_emissive_blocker.appearance_flags |= appearance_flags + return gen_emissive_blocker + else if(blocks_emissive == EMISSIVE_BLOCK_UNIQUE) + if(!em_block) + render_target = ref(src) + em_block = new(src, render_target) + return em_block + +/atom/movable/update_overlays() + . = ..() + . += update_emissive_block() /atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction) if(!direction) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 0c628ba43e..a2d32e0d4f 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -57,8 +57,8 @@ var/overlay_state = icon_screen if(stat & BROKEN) overlay_state = "[icon_state]_broken" - SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, overlay_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha=128) + . += mutable_appearance(icon, overlay_state) + . += emissive_appearance(icon, overlay_state) /obj/machinery/computer/power_change() ..() diff --git a/code/game/machinery/computer/mechlaunchpad.dm b/code/game/machinery/computer/mechlaunchpad.dm index 3489ee5d35..86c4a35799 100644 --- a/code/game/machinery/computer/mechlaunchpad.dm +++ b/code/game/machinery/computer/mechlaunchpad.dm @@ -123,7 +123,7 @@ var/list/this_pad = list() this_pad["name"] = pad.display_name this_pad["id"] = i - if(pad.machine_stat & NOPOWER) + if(pad.stat & NOPOWER) this_pad["inactive"] = TRUE pad_list += list(this_pad) else @@ -135,7 +135,7 @@ var/obj/machinery/mechpad/current_pad = mechpads[selected_id] data["pad_name"] = current_pad.display_name data["selected_pad"] = current_pad - if(QDELETED(current_pad) || (current_pad.machine_stat & NOPOWER)) + if(QDELETED(current_pad) || (current_pad.stat & NOPOWER)) data["pad_active"] = FALSE return data data["pad_active"] = TRUE diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index c6b29cf54c..a76fbba5c7 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -78,24 +78,34 @@ . += "fire_overlay" if(is_station_level(z)) - . += "fire_[GLOB.security_level]" - SSvis_overlays.add_vis_overlay(src, icon, "fire_[GLOB.security_level]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) + . += "fire_[SSsecurity_level.current_level]" + . += mutable_appearance(icon, "fire_[SSsecurity_level.current_level]") + . += emissive_appearance(icon, "fire_[SSsecurity_level.current_level]") else . += "fire_[SEC_LEVEL_GREEN]" - SSvis_overlays.add_vis_overlay(src, icon, "fire_[SEC_LEVEL_GREEN]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) + . += mutable_appearance(icon, "fire_[SEC_LEVEL_GREEN]") + . += emissive_appearance(icon, "fire_[SEC_LEVEL_GREEN]") var/area/A = src.loc A = A.loc if(!detecting || !A.fire) . += "fire_off" - SSvis_overlays.add_vis_overlay(src, icon, "fire_off", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) + . += mutable_appearance(icon, "fire_off") + . += emissive_appearance(icon, "fire_off") else if(obj_flags & EMAGGED) . += "fire_emagged" - SSvis_overlays.add_vis_overlay(src, icon, "fire_emagged", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) + . += mutable_appearance(icon, "fire_emagged") + . += emissive_appearance(icon, "fire_emagged") else . += "fire_on" - SSvis_overlays.add_vis_overlay(src, icon, "fire_on", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) + . += mutable_appearance(icon, "fire_on") + . += emissive_appearance(icon, "fire_on") + + if(!panel_open && detecting && triggered) //It just looks horrible with the panel open + . += "fire_detected" + . += mutable_appearance(icon, "fire_detected") + . += emissive_appearance(icon, "fire_detected") //Pain /obj/machinery/firealarm/emp_act(severity) . = ..() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 421e3433ca..40ceaf8eb9 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -26,12 +26,15 @@ /obj/machinery/light_switch/update_icon_state() if(stat & NOPOWER) - icon_state = "light-p" - else - if(on) - icon_state = "light1" - else - icon_state = "light0" + icon_state = "[base_icon_state]-p" + return ..() + icon_state = "[base_icon_state][area.lightswitch ? 1 : 0]" + return ..() + +/obj/machinery/light_switch/update_overlays() + . = ..() + if(!(stat & NOPOWER)) + . += emissive_appearance(icon, "[base_icon_state]-glow", alpha = src.alpha) /obj/machinery/light_switch/examine(mob/user) . = ..() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index aad011119f..583b258df6 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -187,16 +187,29 @@ if(B.cell) B.cell.charge = 0 +/obj/machinery/recharger/update_appearance(updates) + . = ..() + if((stat & (NOPOWER|BROKEN)) || panel_open || !anchored) + luminosity = 0 + return + luminosity = 1 -/obj/machinery/recharger/update_icon_state() +/obj/machinery/recharger/update_overlays() + . = ..() if(stat & (NOPOWER|BROKEN) || !anchored) - icon_state = "rechargeroff" - else if(panel_open) - icon_state = "rechargeropen" - else if(charging) - if(using_power) - icon_state = "recharger1" - else - icon_state = "recharger2" - else - icon_state = "recharger0" + return + if(panel_open) + . += mutable_appearance(icon, "[base_icon_state]-open", alpha = src.alpha) + return + + if(!charging) + . += mutable_appearance(icon, "[base_icon_state]-empty", alpha = src.alpha) + . += emissive_appearance(icon, "[base_icon_state]-empty", alpha = src.alpha) + return + if(using_power) + . += mutable_appearance(icon, "[base_icon_state]-charging", alpha = src.alpha) + . += emissive_appearance(icon, "[base_icon_state]-charging", alpha = src.alpha) + return + + . += mutable_appearance(icon, "[base_icon_state]-full", alpha = src.alpha) + . += emissive_appearance(icon, "[base_icon_state]-full", alpha = src.alpha) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 00c4b1f7db..32ec852b60 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -86,7 +86,7 @@ . += "off" . += "sparking" //Overlay is similar enough for both that we can use the same mask for both - SSvis_overlays.add_vis_overlay(src, icon, "locked", EMISSIVE_LAYER, EMISSIVE_PLANE, dir, alpha) + . += emissive_appearance(icon, "locked", alpha = src.alpha) . += locked ? "locked" : "unlocked" diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index f97ef17364..6db4f9a3b4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -59,6 +59,10 @@ else icon_state = "[initial(icon_state)]-off" +/obj/machinery/smartfridge/update_overlays() + . = ..() + if(!stat) + . += emissive_appearance(icon, "smartfridge-light-mask", alpha = src.alpha) /******************* diff --git a/code/modules/lighting/emissive_blocker.dm b/code/modules/lighting/emissive_blocker.dm index 04c1bb7302..46dc44792b 100644 --- a/code/modules/lighting/emissive_blocker.dm +++ b/code/modules/lighting/emissive_blocker.dm @@ -7,9 +7,9 @@ * almost guaranteed to be doing something wrong. */ /atom/movable/emissive_blocker - name = "" - plane = EMISSIVE_BLOCKER_PLANE - layer = EMISSIVE_BLOCKER_LAYER + name = "emissive blocker" + plane = EMISSIVE_PLANE + layer = FLOAT_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS //Why? @@ -23,6 +23,8 @@ verbs.Cut() //Cargo culting from lighting object, this maybe affects memory usage? render_source = source + color = GLOB.em_block_color + /atom/movable/emissive_blocker/ex_act(severity) return FALSE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9a201b7d9c..db9ce3e92d 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -275,78 +275,75 @@ // update the APC icon to show the three base states // also add overlays for indicator lights -/obj/machinery/power/apc/update_icon() - var/update = check_updates() //returns 0 if no need to update icons. - // 1 if we need to update the icon_state - // 2 if we need to update the overlays - if(!update) - icon_update_needed = FALSE +/obj/machinery/power/apc/update_appearance(updates=check_updates()) + icon_update_needed = FALSE + if(!updates) return - if(update & 1) // Updating the icon state - if(update_state & UPSTATE_ALLGOOD) - icon_state = "apc0" - else if(update_state & (UPSTATE_OPENED1|UPSTATE_OPENED2)) - var/basestate = "apc[ cell ? "2" : "1" ]" - if(update_state & UPSTATE_OPENED1) - if(update_state & (UPSTATE_MAINT|UPSTATE_BROKE)) - icon_state = "apcmaint" //disabled APC cannot hold cell - else - icon_state = basestate - else if(update_state & UPSTATE_OPENED2) - if (update_state & UPSTATE_BROKE || malfhack) - icon_state = "[basestate]-b-nocover" - else - icon_state = "[basestate]-nocover" - else if(update_state & UPSTATE_BROKE) - icon_state = "apc-b" - else if(update_state & UPSTATE_BLUESCREEN) - icon_state = "apcemag" - else if(update_state & UPSTATE_WIREEXP) - icon_state = "apcewires" - else if(update_state & UPSTATE_MAINT) - icon_state = "apc0" - - if(!(update_state & UPSTATE_ALLGOOD)) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - var/hijackerreturn - if (hijacker) - var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack) - hijackerreturn = H && !H.stealthmode - if(update & 2) - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD) - SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apcox-[locked]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco3-[hijackerreturn ? "3" : charging]", layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco3-[hijackerreturn ? "3" : charging]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) - if(operating) - SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco0-[equipment]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco1-[lighting]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", layer, plane, dir) - SSvis_overlays.add_vis_overlay(src, icon, "apco2-[environ]", EMISSIVE_LAYER, EMISSIVE_PLANE, dir) - + . = ..() // And now, separately for cleanness, the lighting changing - if(update_state & UPSTATE_ALLGOOD) + if(!update_state) switch(charging) if(APC_NOT_CHARGING) - light_color = LIGHT_COLOR_RED + set_light_color(COLOR_SOFT_RED) if(APC_CHARGING) - light_color = LIGHT_COLOR_BLUE + set_light_color(LIGHT_COLOR_BLUE) if(APC_FULLY_CHARGED) - light_color = LIGHT_COLOR_GREEN - if (hijackerreturn) - light_color = LIGHT_COLOR_YELLOW + set_light_color(LIGHT_COLOR_GREEN) set_light(lon_range) - else if(update_state & UPSTATE_BLUESCREEN) - light_color = LIGHT_COLOR_BLUE - set_light(lon_range) - else - set_light(0) + return - icon_update_needed = FALSE + if(update_state & UPSTATE_BLUESCREEN) + set_light_color(LIGHT_COLOR_BLUE) + set_light(lon_range) + return + + set_light(0) + +// update the APC icon to show the three base states +// also add overlays for indicator lights +/obj/machinery/power/apc/update_icon_state() + if(!update_state) + icon_state = "apc0" + return ..() + if(update_state & (UPSTATE_OPENED1|UPSTATE_OPENED2)) + var/basestate = "apc[cell ? 2 : 1]" + if(update_state & UPSTATE_OPENED1) + icon_state = (update_state & (UPSTATE_MAINT|UPSTATE_BROKE)) ? "apcmaint" : basestate + else if(update_state & UPSTATE_OPENED2) + icon_state = "[basestate][((update_state & UPSTATE_BROKE) || malfhack) ? "-b" : null]-nocover" + return ..() + if(update_state & UPSTATE_BROKE) + icon_state = "apc-b" + return ..() + if(update_state & UPSTATE_BLUESCREEN) + icon_state = "apcemag" + return ..() + if(update_state & UPSTATE_WIREEXP) + icon_state = "apcewires" + return ..() + if(update_state & UPSTATE_MAINT) + icon_state = "apc0" + return ..() + +/obj/machinery/power/apc/update_overlays() + . = ..() + if((machine_stat & (BROKEN|MAINT)) || update_state) + return + + . += mutable_appearance(icon, "apcox-[locked]") + . += emissive_appearance(icon, "apcox-[locked]") + . += mutable_appearance(icon, "apco3-[charging]") + . += emissive_appearance(icon, "apco3-[charging]") + if(!operating) + return + + . += mutable_appearance(icon, "apco0-[equipment]") + . += emissive_appearance(icon, "apco0-[equipment]") + . += mutable_appearance(icon, "apco1-[lighting]") + . += emissive_appearance(icon, "apco1-[lighting]") + . += mutable_appearance(icon, "apco2-[environ]") + . += emissive_appearance(icon, "apco2-[environ]") /obj/machinery/power/apc/proc/check_updates() var/last_update_state = update_state diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index ef3a053027..57900f7098 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -401,12 +401,15 @@ //check for items in disposal - occupied light if(contents.len > 0) . += "dispover-full" + . += emissive_appearance(icon, "dispover-full", alpha = src.alpha) //charging and ready light if(pressure_charging) . += "dispover-charge" + . += emissive_appearance(icon, "dispover-charge-glow", alpha = src.alpha) else if(full_pressure) . += "dispover-ready" + . += emissive_appearance(icon, "dispover-ready-glow", alpha = src.alpha) /obj/machinery/disposal/bin/proc/do_flush() set waitfor = FALSE diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index db94f6548b..9a625cd0c7 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -31,7 +31,7 @@ if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open) return . += mutable_appearance(icon, "nanite_program_hub_on") - . += mutable_appearance(icon, "nanite_program_hub_on", layer, EMISSIVE_PLANE) + . += emissive_appearance(icon, "nanite_program_hub_on") /obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/disk/nanite_program)) diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index 9399e69086..d858063cb1 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -16,7 +16,7 @@ if((stat & (NOPOWER|MAINT|BROKEN)) || panel_open) return . += mutable_appearance(icon, "nanite_programmer_on") - . += mutable_appearance(icon, "nanite_programmer_on", layer, EMISSIVE_PLANE) + . += emissive_appearance(icon, "nanite_programmer_on") /obj/machinery/nanite_programmer/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/disk/nanite_program)) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index b86ab6023a..eab1c55ca9 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -243,10 +243,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C . = ..() if(!light_mask) return - - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if(!(stat & BROKEN) && powered()) - SSvis_overlays.add_vis_overlay(src, icon, light_mask, EMISSIVE_LAYER, EMISSIVE_PLANE) + . += emissive_appearance(icon, light_mask) /obj/machinery/vending/obj_break(damage_flag) . = ..() diff --git a/tgstation.dme b/tgstation.dme index 2da48b8f2f..6975143884 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -178,6 +178,7 @@ #include "code\__HELPERS\icon_smoothing.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\level_traits.dm" +#include "code\__HELPERS\lighting.dm" #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\mouse_control.dm" From 9fcc762b7d434bcb8df7d361986d589456beca5c Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 13 Jul 2021 18:18:48 +0300 Subject: [PATCH 23/98] pain --- code/game/machinery/firealarm.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index a76fbba5c7..50517e9082 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -78,9 +78,9 @@ . += "fire_overlay" if(is_station_level(z)) - . += "fire_[SSsecurity_level.current_level]" - . += mutable_appearance(icon, "fire_[SSsecurity_level.current_level]") - . += emissive_appearance(icon, "fire_[SSsecurity_level.current_level]") + . += "fire_[GLOB.security_level.current_level]" + . += mutable_appearance(icon, "fire_[GLOB.security_level.current_level]") + . += emissive_appearance(icon, "fire_[GLOB.security_level.current_level]") else . += "fire_[SEC_LEVEL_GREEN]" . += mutable_appearance(icon, "fire_[SEC_LEVEL_GREEN]") @@ -102,7 +102,7 @@ . += mutable_appearance(icon, "fire_on") . += emissive_appearance(icon, "fire_on") - if(!panel_open && detecting && triggered) //It just looks horrible with the panel open + if(!panel_open && detecting) //It just looks horrible with the panel open . += "fire_detected" . += mutable_appearance(icon, "fire_detected") . += emissive_appearance(icon, "fire_detected") //Pain From 30016f38a8327c7e51a53b0bb0e5d34bdbdec8c1 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 22 Jul 2021 18:59:47 +0300 Subject: [PATCH 24/98] compiles --- code/__DEFINES/colors.dm | 1 + code/__DEFINES/dcs/signals.dm | 28 +++++++++- code/__DEFINES/layers_planes.dm | 1 - code/datums/mutable_appearance.dm | 3 +- code/game/atoms.dm | 3 ++ code/game/machinery/firealarm.dm | 6 +-- code/game/machinery/lightswitch.dm | 1 + .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/machinery/recharger.dm | 1 + code/game/objects/items/defib.dm | 2 +- code/game/objects/items/shields.dm | 2 +- code/modules/lighting/lighting_atom.dm | 51 +++++++++++++++++++ code/modules/power/apc.dm | 2 +- code/modules/power/supermatter/supermatter.dm | 2 +- code/modules/spells/spell_types/aimed.dm | 2 +- 15 files changed, 94 insertions(+), 13 deletions(-) diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 9f45d8da79..db78144689 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -24,6 +24,7 @@ #define COLOR_BEIGE "#CEB689" #define COLOR_BLUE_GRAY "#75A2BB" #define COLOR_BROWN "#BA9F6D" +#define COLOR_SOFT_RED "#FA8282" #define COLOR_DARK_BROWN "#997C4F" #define COLOR_DARK_ORANGE "#C3630C" #define COLOR_GREEN_GRAY "#99BB76" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index e692e424e8..986023e3ff 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -131,8 +131,6 @@ ///from obj/machinery/bsa/full/proc/fire(): () #define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass" #define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0) -///from base of atom/set_light(): (l_range, l_power, l_color) -#define COMSIG_ATOM_SET_LIGHT "atom_set_light" ///from base of atom/setDir(): (old_dir, new_dir). Called before the direction changes. #define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" ///from base of atom/handle_atom_del(): (atom/deleted) @@ -297,6 +295,32 @@ ///from base of mob/AltClickOn(): (atom/A) #define COMSIG_MOB_ALTCLICKON "mob_altclickon" +// Lighting: +///from base of [atom/proc/set_light]: (l_range, l_power, l_color, l_on) +#define COMSIG_ATOM_SET_LIGHT "atom_set_light" + /// Blocks [/atom/proc/set_light], [/atom/proc/set_light_power], [/atom/proc/set_light_range], [/atom/proc/set_light_color], [/atom/proc/set_light_on], and [/atom/proc/set_light_flags]. + #define COMPONENT_BLOCK_LIGHT_UPDATE (1<<0) +///Called right before the atom changes the value of light_power to a different one, from base [atom/proc/set_light_power]: (new_power) +#define COMSIG_ATOM_SET_LIGHT_POWER "atom_set_light_power" +///Called right after the atom changes the value of light_power to a different one, from base of [/atom/proc/set_light_power]: (old_power) +#define COMSIG_ATOM_UPDATE_LIGHT_POWER "atom_update_light_power" +///Called right before the atom changes the value of light_range to a different one, from base [atom/proc/set_light_range]: (new_range) +#define COMSIG_ATOM_SET_LIGHT_RANGE "atom_set_light_range" +///Called right after the atom changes the value of light_range to a different one, from base of [/atom/proc/set_light_range]: (old_range) +#define COMSIG_ATOM_UPDATE_LIGHT_RANGE "atom_update_light_range" +///Called right before the atom changes the value of light_color to a different one, from base [atom/proc/set_light_color]: (new_color) +#define COMSIG_ATOM_SET_LIGHT_COLOR "atom_set_light_color" +///Called right after the atom changes the value of light_color to a different one, from base of [/atom/proc/set_light_color]: (old_color) +#define COMSIG_ATOM_UPDATE_LIGHT_COLOR "atom_update_light_color" +///Called right before the atom changes the value of light_on to a different one, from base [atom/proc/set_light_on]: (new_value) +#define COMSIG_ATOM_SET_LIGHT_ON "atom_set_light_on" +///Called right after the atom changes the value of light_on to a different one, from base of [/atom/proc/set_light_on]: (old_value) +#define COMSIG_ATOM_UPDATE_LIGHT_ON "atom_update_light_on" +///Called right before the atom changes the value of light_flags to a different one, from base [atom/proc/set_light_flags]: (new_flags) +#define COMSIG_ATOM_SET_LIGHT_FLAGS "atom_set_light_flags" +///Called right after the atom changes the value of light_flags to a different one, from base of [/atom/proc/set_light_flags]: (old_flags) +#define COMSIG_ATOM_UPDATE_LIGHT_FLAGS "atom_update_light_flags" + // /client signals #define COMSIG_MOB_CLIENT_LOGIN "mob_client_login" //sent when a mob/login() finishes: (client) #define COMSIG_MOB_CLIENT_LOGOUT "mob_client_logout" //sent when a mob/logout() starts: (client) diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm index a6e2e8a695..ea7b1b2e0a 100644 --- a/code/__DEFINES/layers_planes.dm +++ b/code/__DEFINES/layers_planes.dm @@ -124,7 +124,6 @@ #define EMISSIVE_PLANE 13 #define EMISSIVE_LAYER 13 -#define EMISSIVE_RENDER_TARGET "*EMISSIVE_PLANE" #define EMISSIVE_UNBLOCKABLE_PLANE 14 #define EMISSIVE_UNBLOCKABLE_LAYER 14 diff --git a/code/datums/mutable_appearance.dm b/code/datums/mutable_appearance.dm index 1256286ff8..968809747b 100644 --- a/code/datums/mutable_appearance.dm +++ b/code/datums/mutable_appearance.dm @@ -10,7 +10,7 @@ // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var // Helper similar to image() -/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE) +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE, alpha = 255, appearance_flags = NONE, color = "#FFFFFF") var/mutable_appearance/MA = new() MA.icon = icon MA.icon_state = icon_state @@ -18,5 +18,6 @@ MA.plane = plane MA.alpha = alpha MA.appearance_flags |= appearance_flags + MA.color = color return MA diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 0379897c08..b51ce3115a 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -103,6 +103,9 @@ /// A luminescence-shifted value of the last color calculated for chatmessage overlays var/chat_color_darkened + ///Used for changing icon states for different base sprites. + var/base_icon_state + ///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy() var/list/targeted_by diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 50517e9082..229a2d98d8 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -78,9 +78,9 @@ . += "fire_overlay" if(is_station_level(z)) - . += "fire_[GLOB.security_level.current_level]" - . += mutable_appearance(icon, "fire_[GLOB.security_level.current_level]") - . += emissive_appearance(icon, "fire_[GLOB.security_level.current_level]") + . += "fire_[GLOB.security_level]" + . += mutable_appearance(icon, "fire_[GLOB.security_level]") + . += emissive_appearance(icon, "fire_[GLOB.security_level]") else . += "fire_[SEC_LEVEL_GREEN]" . += mutable_appearance(icon, "fire_[SEC_LEVEL_GREEN]") diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 40ceaf8eb9..0b55f80c39 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -5,6 +5,7 @@ name = "light switch" icon = 'icons/obj/power.dmi' icon_state = "light1" + base_icon_state = "light" plane = ABOVE_WALL_PLANE desc = "Make dark." var/on = TRUE diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 231075a27d..e346439e03 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -30,7 +30,7 @@ integrity_failure = 0.5 armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) /// Base turret icon state - var/base_icon_state = "standard" + base_icon_state = "standard" /// Scan range of the turret for locating targets var/scan_range = 7 /// For turrets inside other objects diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 583b258df6..62696a0853 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -2,6 +2,7 @@ name = "recharger" icon = 'icons/obj/stationobjs.dmi' icon_state = "recharger0" + base_icon_state = "recharger" desc = "A charging dock for energy based weaponry." use_power = IDLE_POWER_USE idle_power_usage = 4 diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index ee65bd5c96..affa5d5768 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -283,7 +283,7 @@ var/combat = FALSE //If it penetrates armor and gives additional functionality var/grab_ghost = FALSE var/tlimit = DEFIB_TIME_LIMIT * 10 - var/base_icon_state = "defibpaddles" + base_icon_state = "defibpaddles" var/disarm_shock_time = 10 var/wielded = FALSE // track wielded status on item diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 9aed545509..74efe3a196 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -548,7 +548,7 @@ force = 3 throwforce = 3 throw_speed = 3 - var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted + base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted var/on_force = 10 var/on_throwforce = 8 var/on_throw_speed = 2 diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 71702bef12..f9df19d2ac 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -132,3 +132,54 @@ /mob/living/proc/mob_light(_color, _range, _power, _duration) var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj = new (src, _color, _range, _power, _duration) return mob_light_obj + +// Setter for the light power of this atom. +/atom/proc/set_light_power(new_power) + if(new_power == light_power) + return + if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_POWER, new_power) & COMPONENT_BLOCK_LIGHT_UPDATE) + return + . = light_power + light_power = new_power + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_POWER, .) + +/// Setter for the light range of this atom. +/atom/proc/set_light_range(new_range) + if(new_range == light_range) + return + if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_RANGE, new_range) & COMPONENT_BLOCK_LIGHT_UPDATE) + return + . = light_range + light_range = new_range + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_RANGE, .) + +/// Setter for the light color of this atom. +/atom/proc/set_light_color(new_color) + if(new_color == light_color) + return + if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_COLOR, new_color) & COMPONENT_BLOCK_LIGHT_UPDATE) + return + . = light_color + light_color = new_color + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_COLOR, .) +/* +/// Setter for whether or not this atom's light is on. +/atom/proc/set_light_on(new_value) + if(new_value == ) + return + if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_ON, new_value) & COMPONENT_BLOCK_LIGHT_UPDATE) + return + . = light_on + light_on = new_value + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_ON, .) + +/// Setter for the light flags of this atom. +/atom/proc/set_light_flags(new_value) + if(new_value == light_flags) + return + if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_FLAGS, new_value) & COMPONENT_BLOCK_LIGHT_UPDATE) + return + . = light_flags + light_flags = new_value + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_FLAGS, .) +*/ diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index db9ce3e92d..fdfe18d0e3 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -328,7 +328,7 @@ /obj/machinery/power/apc/update_overlays() . = ..() - if((machine_stat & (BROKEN|MAINT)) || update_state) + if((stat & (BROKEN|MAINT)) || update_state) return . += mutable_appearance(icon, "apcox-[locked]") diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 16317bf9a3..363d3f6b71 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -116,7 +116,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) ///The portion of the gasmix we're on that we should remove var/gasefficency = 0.15 ///Used for changing icon states for diff base sprites - var/base_icon_state = "darkmatter" + base_icon_state = "darkmatter" ///Are we exploding? var/final_countdown = FALSE diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 8fab4a221d..aa2a2e4083 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -4,7 +4,7 @@ var/projectile_type = /obj/item/projectile/magic/teleport var/deactive_msg = "You discharge your projectile..." var/active_msg = "You charge your projectile!" - var/base_icon_state = "projectile" + base_icon_state = "projectile" var/active_icon_state = "projectile" var/list/projectile_var_overrides = list() var/projectile_amount = 1 //Projectiles per cast. From 82ccfc40dcf26a80e062addf711059e9acf3e7fa Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 13:57:19 +0300 Subject: [PATCH 25/98] /obj/screen --> /atom/movable/screen --- code/__HELPERS/game.dm | 2 +- code/_onclick/ai.dm | 2 +- code/_onclick/click.dm | 8 +- code/_onclick/drag_drop.dm | 4 +- code/_onclick/hud/action_button.dm | 34 ++-- code/_onclick/hud/ai.dm | 110 +++++------ code/_onclick/hud/alert.dm | 172 +++++++++--------- code/_onclick/hud/alien.dm | 40 ++-- code/_onclick/hud/alien_larva.dm | 14 +- code/_onclick/hud/blob_overmind.dm | 70 +++---- code/_onclick/hud/blobbernauthud.dm | 4 +- code/_onclick/hud/clockwork_marauder.dm | 20 +- code/_onclick/hud/constructs.dm | 4 +- code/_onclick/hud/credits.dm | 10 +- code/_onclick/hud/devil.dm | 16 +- code/_onclick/hud/drones.dm | 8 +- code/_onclick/hud/fullscreen.dm | 54 +++--- code/_onclick/hud/generic_dextrous.dm | 20 +- code/_onclick/hud/ghost.dm | 38 ++-- code/_onclick/hud/guardian.dm | 56 +++--- code/_onclick/hud/hud.dm | 58 +++--- code/_onclick/hud/human.dm | 132 +++++++------- code/_onclick/hud/lavaland_elite.dm | 4 +- code/_onclick/hud/map_popups.dm | 12 +- code/_onclick/hud/monkey.dm | 42 ++--- code/_onclick/hud/movable_screen_objects.dm | 10 +- code/_onclick/hud/parallax.dm | 52 +++--- code/_onclick/hud/picture_in_picture.dm | 38 ++-- code/_onclick/hud/plane_master.dm | 62 +++---- code/_onclick/hud/radial.dm | 26 +-- code/_onclick/hud/radial_persistent.dm | 10 +- code/_onclick/hud/revenanthud.dm | 2 +- code/_onclick/hud/robot.dm | 90 ++++----- code/_onclick/hud/screen_objects.dm | 164 ++++++++--------- .../_onclick/hud/screen_objects/clickdelay.dm | 24 +-- code/_onclick/hud/screen_objects/sprint.dm | 18 +- code/_onclick/hud/screen_objects/stamina.dm | 24 +-- code/_onclick/hud/screen_objects/storage.dm | 84 ++++----- code/_onclick/hud/screen_objects/vore.dm | 6 +- code/_onclick/hud/simple_animal.dm | 4 +- code/_onclick/hud/swarmer.dm | 40 ++-- code/controllers/subsystem/parallax.dm | 2 +- code/controllers/subsystem/ticker.dm | 2 +- code/controllers/subsystem/title.dm | 2 +- code/datums/action.dm | 2 +- code/datums/brain_damage/hypnosis.dm | 2 +- code/datums/cinematic.dm | 8 +- code/datums/components/combat_mode.dm | 10 +- code/datums/components/crafting/crafting.dm | 4 +- code/datums/components/embedded.dm | 2 +- code/datums/components/mood.dm | 2 +- code/datums/components/storage/storage.dm | 6 +- code/datums/components/storage/ui.dm | 22 +-- code/datums/components/tackle.dm | 6 +- code/datums/numbered_display.dm | 2 +- code/datums/status_effects/buffs.dm | 60 +++--- code/datums/status_effects/debuffs.dm | 40 ++-- code/datums/status_effects/gas.dm | 4 +- code/datums/status_effects/neutral.dm | 4 +- code/datums/status_effects/status_effect.dm | 8 +- code/datums/status_effects/wound_effects.dm | 12 +- code/datums/world_topic.dm | 2 +- code/datums/wounds/_wounds.dm | 2 +- code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/computer/camera.dm | 8 +- .../machinery/computer/camera_advanced.dm | 2 +- code/game/mecha/mecha.dm | 14 +- code/game/objects/buckling.dm | 2 +- code/game/objects/items/defib.dm | 4 +- code/game/objects/items/devices/multitool.dm | 4 +- .../items/devices/portable_chem_mixer.dm | 4 +- code/game/objects/items/gift.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 4 +- code/game/objects/items/toys.dm | 4 +- .../structures/crates_lockers/closets.dm | 4 +- code/game/objects/structures/morgue.dm | 2 +- .../antagonists/abductor/equipment/gland.dm | 2 +- .../abductor/equipment/glands/mindshock.dm | 2 +- .../abductor/equipment/glands/quantum.dm | 2 +- .../antagonists/blob/blob/blobs/factory.dm | 2 +- .../bloodsucker/datum_bloodsucker.dm | 24 +-- .../antagonists/bloodsucker/datum_hunter.dm | 4 +- .../antagonists/bloodsucker/datum_vassal.dm | 4 +- .../changeling/powers/pheromone_receptors.dm | 4 +- .../clock_effects/city_of_cogs_rift.dm | 2 +- .../clock_items/wraith_spectacles.dm | 6 +- .../ark_of_the_clockwork_justicar.dm | 4 +- .../antagonists/clockcult/clockcult.dm | 2 +- code/modules/antagonists/cult/cult.dm | 2 +- .../devil/true_devil/_true_devil.dm | 2 +- code/modules/antagonists/morph/morph.dm | 2 +- .../traitor/IAA/internal_affairs.dm | 4 +- .../antagonists/wizard/equipment/soulstone.dm | 4 +- .../atmospherics/auxgm/breathing_classes.dm | 8 +- code/modules/atmospherics/auxgm/gas_types.dm | 16 +- .../components/unary_devices/cryo.dm | 2 +- code/modules/buildmode/buildmode.dm | 26 +-- code/modules/buildmode/buttons.dm | 38 ++-- code/modules/cargo/centcom_podlauncher.dm | 12 +- code/modules/client/client_defines.dm | 4 +- code/modules/client/client_procs.dm | 4 +- code/modules/client/preferences.dm | 6 +- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/shoes/_shoes.dm | 10 +- .../modules/clothing/spacesuits/chronosuit.dm | 6 +- code/modules/flufftext/Hallucination.dm | 40 ++-- code/modules/holiday/halloween/jacqueen.dm | 2 +- code/modules/mob/dead/dead.dm | 2 +- .../modules/mob/dead/new_player/new_player.dm | 4 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/carbon/alien/alien.dm | 2 +- .../carbon/alien/humanoid/caste/hunter.dm | 2 +- code/modules/mob/living/carbon/alien/life.dm | 2 +- .../modules/mob/living/carbon/alien/organs.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 16 +- .../mob/living/carbon/carbon_defense.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 10 +- .../mob/living/carbon/human/species.dm | 38 ++-- .../carbon/human/species_types/ethereal.dm | 10 +- .../mob/living/carbon/human/update_icons.dm | 24 +-- code/modules/mob/living/carbon/inventory.dm | 2 +- code/modules/mob/living/carbon/life.dm | 8 +- code/modules/mob/living/carbon/monkey/life.dm | 20 +- .../mob/living/carbon/monkey/update_icons.dm | 2 +- .../modules/mob/living/carbon/status_procs.dm | 8 +- .../modules/mob/living/carbon/update_icons.dm | 12 +- code/modules/mob/living/living.dm | 12 +- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/living_sprint.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 2 +- .../modules/mob/living/silicon/ai/multicam.dm | 32 ++-- code/modules/mob/living/silicon/laws.dm | 2 +- code/modules/mob/living/silicon/robot/life.dm | 10 +- .../modules/mob/living/silicon/robot/robot.dm | 10 +- .../mob/living/silicon/robot/robot_defines.dm | 18 +- .../mob/living/silicon/silicon_defense.dm | 2 +- .../living/simple_animal/guardian/guardian.dm | 2 +- .../simple_animal/guardian/types/assassin.dm | 10 +- .../simple_animal/guardian/types/charger.dm | 4 +- .../simple_animal/guardian/types/protector.dm | 2 +- .../simple_animal/guardian/types/ranged.dm | 2 +- .../simple_animal/guardian/types/support.dm | 2 +- .../simple_animal/hostile/jungle/seedling.dm | 6 +- .../hostile/megafauna/demonic_frost_miner.dm | 4 +- .../hostile/mining_mobs/elites/elite.dm | 2 +- .../simple_animal/hostile/retaliate/clown.dm | 4 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/living/status_procs.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 +- code/modules/mob/mob_helpers.dm | 2 +- code/modules/mob/mob_movement.dm | 18 +- code/modules/mob/status_procs.dm | 8 +- .../computers/item/computer.dm | 2 +- .../computers/item/laptop.dm | 6 +- .../file_system/programs/secureye.dm | 8 +- code/modules/paperwork/paper_cutter.dm | 4 +- code/modules/paperwork/paperbin.dm | 4 +- code/modules/power/apc.dm | 4 +- .../projectiles/guns/energy/laser_gatling.dm | 4 +- .../projectiles/guns/misc/beam_rifle.dm | 4 +- .../chemistry/reagents/toxin_reagents.dm | 2 +- code/modules/recycling/disposal/bin.dm | 2 +- .../crossbreeding/_status_effects.dm | 30 +-- .../ruins/spaceruin_code/hilbertshotel.dm | 2 +- code/modules/shuttle/navigation_computer.dm | 2 +- .../surgery/bodyparts/dismemberment.dm | 6 +- code/modules/surgery/bodyparts/parts.dm | 4 +- code/modules/surgery/organs/eyes.dm | 4 +- code/modules/surgery/organs/stomach.dm | 6 +- code/modules/tooltip/tooltip.dm | 2 +- .../code/modules/mob/living/carbon/carbon.dm | 4 +- 173 files changed, 1267 insertions(+), 1267 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 745b12e84f..e55faab1be 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -395,7 +395,7 @@ /proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) if(!isobj(O)) - O = new /obj/screen/text() + O = new /atom/movable/screen/text() O.maptext = maptext O.maptext_height = maptext_height O.maptext_width = maptext_width diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index f153b5965c..c7834dc5ef 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -25,7 +25,7 @@ if(multicam_on) var/turf/T = get_turf(A) if(T) - for(var/obj/screen/movable/pic_in_pic/ai/P in T.vis_locs) + for(var/atom/movable/screen/movable/pic_in_pic/ai/P in T.vis_locs) if(P.ai == src) P.Click(params) break diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index d24aa06806..9321427387 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -429,14 +429,14 @@ setDir(WEST, ismousemovement) //debug -/obj/screen/proc/scale_to(x1,y1) +/atom/movable/screen/proc/scale_to(x1,y1) if(!y1) y1 = x1 var/matrix/M = new M.Scale(x1,y1) transform = M -/obj/screen/click_catcher +/atom/movable/screen/click_catcher icon = 'icons/mob/screen_gen.dmi' icon_state = "catcher" plane = CLICKCATCHER_PLANE @@ -446,7 +446,7 @@ #define MAX_SAFE_BYOND_ICON_SCALE_TILES (MAX_SAFE_BYOND_ICON_SCALE_PX / world.icon_size) #define MAX_SAFE_BYOND_ICON_SCALE_PX (33 * 32) //Not using world.icon_size on purpose. -/obj/screen/click_catcher/proc/UpdateGreed(view_size_x = 15, view_size_y = 15) +/atom/movable/screen/click_catcher/proc/UpdateGreed(view_size_x = 15, view_size_y = 15) var/icon/newicon = icon('icons/mob/screen_gen.dmi', "catcher") var/ox = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_x) var/oy = min(MAX_SAFE_BYOND_ICON_SCALE_TILES, view_size_y) @@ -461,7 +461,7 @@ M.Scale(px/sx, py/sy) transform = M -/obj/screen/click_catcher/Click(location, control, params) +/atom/movable/screen/click_catcher/Click(location, control, params) var/list/modifiers = params2list(params) if(modifiers["middle"] && iscarbon(usr)) var/mob/living/carbon/C = usr diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 43451bd056..ae853a4e1a 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -80,10 +80,10 @@ /atom/proc/IsAutoclickable() . = 1 -/obj/screen/IsAutoclickable() +/atom/movable/screen/IsAutoclickable() . = 0 -/obj/screen/click_catcher/IsAutoclickable() +/atom/movable/screen/click_catcher/IsAutoclickable() . = 1 //Please don't roast me too hard diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 8a66374029..735c95b28e 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -1,6 +1,6 @@ #define ACTION_BUTTON_DEFAULT_BACKGROUND "default" -/obj/screen/movable/action_button +/atom/movable/screen/movable/action_button var/datum/action/linked_action var/actiontooltipstyle = "" screen_loc = null @@ -11,7 +11,7 @@ var/id var/ordered = TRUE //If the button gets placed into the default bar -/obj/screen/movable/action_button/proc/can_use(mob/user) +/atom/movable/screen/movable/action_button/proc/can_use(mob/user) if (linked_action) return linked_action.owner == user else if (isobserver(user)) @@ -20,14 +20,14 @@ else return TRUE -/obj/screen/movable/action_button/MouseDrop(over_object) +/atom/movable/screen/movable/action_button/MouseDrop(over_object) if(!can_use(usr)) return - if((istype(over_object, /obj/screen/movable/action_button) && !istype(over_object, /obj/screen/movable/action_button/hide_toggle))) + if((istype(over_object, /atom/movable/screen/movable/action_button) && !istype(over_object, /atom/movable/screen/movable/action_button/hide_toggle))) if(locked) to_chat(usr, "Action button \"[name]\" is locked, unlock it first.") return - var/obj/screen/movable/action_button/B = over_object + var/atom/movable/screen/movable/action_button/B = over_object var/list/actions = usr.actions actions.Swap(actions.Find(src.linked_action), actions.Find(B.linked_action)) moved = FALSE @@ -38,7 +38,7 @@ else return ..() -/obj/screen/movable/action_button/Click(location,control,params) +/atom/movable/screen/movable/action_button/Click(location,control,params) if (!can_use(usr)) return @@ -60,7 +60,7 @@ return TRUE //Hide/Show Action Buttons ... Button -/obj/screen/movable/action_button/hide_toggle +/atom/movable/screen/movable/action_button/hide_toggle name = "Hide Buttons" desc = "Shift-click any button to reset its position, and Control-click it to lock it in place. Alt-click this button to reset all buttons to their default positions." icon = 'icons/mob/actions.dmi' @@ -72,7 +72,7 @@ var/mutable_appearance/hide_appearance var/mutable_appearance/show_appearance -/obj/screen/movable/action_button/hide_toggle/Initialize() +/atom/movable/screen/movable/action_button/hide_toggle/Initialize() . = ..() var/static/list/icon_cache = list() @@ -86,7 +86,7 @@ if(!show_appearance) show_appearance = icon_cache[cache_key] = mutable_appearance(hide_icon, show_state) -/obj/screen/movable/action_button/hide_toggle/Click(location,control,params) +/atom/movable/screen/movable/action_button/hide_toggle/Click(location,control,params) if (!can_use(usr)) return @@ -107,7 +107,7 @@ if(modifiers["alt"]) for(var/V in usr.actions) var/datum/action/A = V - var/obj/screen/movable/action_button/B = A.button + var/atom/movable/screen/movable/action_button/B = A.button B.moved = FALSE if(B.id && usr.client) usr.client.prefs.action_buttons_screen_locs["[B.name]_[B.id]"] = null @@ -129,10 +129,10 @@ update_icon() usr.update_action_buttons() -/obj/screen/movable/action_button/hide_toggle/AltClick(mob/user) +/atom/movable/screen/movable/action_button/hide_toggle/AltClick(mob/user) for(var/V in user.actions) var/datum/action/A = V - var/obj/screen/movable/action_button/B = A.button + var/atom/movable/screen/movable/action_button/B = A.button B.moved = FALSE if(moved) moved = FALSE @@ -141,7 +141,7 @@ return TRUE -/obj/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud) +/atom/movable/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(datum/hud/owner_hud) var/settings = owner_hud.get_action_buttons_icons() icon = settings["bg_icon"] icon_state = settings["bg_state"] @@ -150,7 +150,7 @@ show_state = settings["toggle_show"] update_icon() -/obj/screen/movable/action_button/hide_toggle/update_overlays() +/atom/movable/screen/movable/action_button/hide_toggle/update_overlays() . = ..() if(hidden) . += show_appearance @@ -158,12 +158,12 @@ . += hide_appearance -/obj/screen/movable/action_button/MouseEntered(location,control,params) +/atom/movable/screen/movable/action_button/MouseEntered(location,control,params) if(!QDELETED(src)) openToolTip(usr,src,params,title = name,content = desc,theme = actiontooltipstyle) -/obj/screen/movable/action_button/MouseExited() +/atom/movable/screen/movable/action_button/MouseExited() closeToolTip(usr) /datum/hud/proc/get_action_buttons_icons() @@ -203,7 +203,7 @@ else for(var/datum/action/A in actions) A.UpdateButtonIcon() - var/obj/screen/movable/action_button/B = A.button + var/atom/movable/screen/movable/action_button/B = A.button if(B.ordered) button_number++ if(B.moved) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 93c3b63d1e..17b5a9ed61 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -1,136 +1,136 @@ -/obj/screen/ai +/atom/movable/screen/ai icon = 'icons/mob/screen_ai.dmi' -/obj/screen/ai/Click() +/atom/movable/screen/ai/Click() if(isobserver(usr) || usr.incapacitated()) return TRUE -/obj/screen/ai/aicore +/atom/movable/screen/ai/aicore name = "AI core" icon_state = "ai_core" -/obj/screen/ai/aicore/Click() +/atom/movable/screen/ai/aicore/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.view_core() -/obj/screen/ai/camera_list +/atom/movable/screen/ai/camera_list name = "Show Camera List" icon_state = "camera" -/obj/screen/ai/camera_list/Click() +/atom/movable/screen/ai/camera_list/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.show_camera_list() -/obj/screen/ai/camera_track +/atom/movable/screen/ai/camera_track name = "Track With Camera" icon_state = "track" -/obj/screen/ai/camera_track/Click() +/atom/movable/screen/ai/camera_track/Click() if(..()) return var/mob/living/silicon/ai/AI = usr var/target_name = input(AI, "Choose who you want to track", "Tracking") as null|anything in AI.trackable_mobs() AI.ai_camera_track(target_name) -/obj/screen/ai/camera_light +/atom/movable/screen/ai/camera_light name = "Toggle Camera Light" icon_state = "camera_light" -/obj/screen/ai/camera_light/Click() +/atom/movable/screen/ai/camera_light/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.toggle_camera_light() -/obj/screen/ai/crew_monitor +/atom/movable/screen/ai/crew_monitor name = "Crew Monitoring Console" icon_state = "crew_monitor" -/obj/screen/ai/crew_monitor/Click() +/atom/movable/screen/ai/crew_monitor/Click() if(..()) return var/mob/living/silicon/ai/AI = usr GLOB.crewmonitor.show(AI,AI) -/obj/screen/ai/crew_manifest +/atom/movable/screen/ai/crew_manifest name = "Crew Manifest" icon_state = "manifest" -/obj/screen/ai/crew_manifest/Click() +/atom/movable/screen/ai/crew_manifest/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.ai_roster() -/obj/screen/ai/alerts +/atom/movable/screen/ai/alerts name = "Show Alerts" icon_state = "alerts" -/obj/screen/ai/alerts/Click() +/atom/movable/screen/ai/alerts/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.ai_alerts() -/obj/screen/ai/announcement +/atom/movable/screen/ai/announcement name = "Make Vox Announcement" icon_state = "announcement" -/obj/screen/ai/announcement/Click() +/atom/movable/screen/ai/announcement/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.announcement() -/obj/screen/ai/call_shuttle +/atom/movable/screen/ai/call_shuttle name = "Call Emergency Shuttle" icon_state = "call_shuttle" -/obj/screen/ai/call_shuttle/Click() +/atom/movable/screen/ai/call_shuttle/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.ai_call_shuttle() -/obj/screen/ai/state_laws +/atom/movable/screen/ai/state_laws name = "State Laws" icon_state = "state_laws" -/obj/screen/ai/state_laws/Click() +/atom/movable/screen/ai/state_laws/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.checklaws() -/obj/screen/ai/pda_msg_send +/atom/movable/screen/ai/pda_msg_send name = "PDA - Send Message" icon_state = "pda_send" -/obj/screen/ai/pda_msg_send/Click() +/atom/movable/screen/ai/pda_msg_send/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.cmd_send_pdamesg(usr) -/obj/screen/ai/pda_msg_show +/atom/movable/screen/ai/pda_msg_show name = "PDA - Show Message Log" icon_state = "pda_receive" -/obj/screen/ai/pda_msg_show/Click() +/atom/movable/screen/ai/pda_msg_show/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.cmd_show_message_log(usr) -/obj/screen/ai/image_take +/atom/movable/screen/ai/image_take name = "Take Image" icon_state = "take_picture" -/obj/screen/ai/image_take/Click() +/atom/movable/screen/ai/image_take/Click() if(..()) return if(isAI(usr)) @@ -140,11 +140,11 @@ var/mob/living/silicon/robot/R = usr R.aicamera.toggle_camera_mode(usr) -/obj/screen/ai/image_view +/atom/movable/screen/ai/image_view name = "View Images" icon_state = "view_images" -/obj/screen/ai/image_view/Click() +/atom/movable/screen/ai/image_view/Click() if(..()) return if(isAI(usr)) @@ -154,31 +154,31 @@ var/mob/living/silicon/robot/R = usr R.aicamera.viewpictures(usr) -/obj/screen/ai/sensors +/atom/movable/screen/ai/sensors name = "Sensor Augmentation" icon_state = "ai_sensor" -/obj/screen/ai/sensors/Click() +/atom/movable/screen/ai/sensors/Click() if(..()) return var/mob/living/silicon/S = usr S.toggle_sensors() -/obj/screen/ai/multicam +/atom/movable/screen/ai/multicam name = "Multicamera Mode" icon_state = "multicam" -/obj/screen/ai/multicam/Click() +/atom/movable/screen/ai/multicam/Click() if(..()) return var/mob/living/silicon/ai/AI = usr AI.toggle_multicam() -/obj/screen/ai/add_multicam +/atom/movable/screen/ai/add_multicam name = "New Camera" icon_state = "new_cam" -/obj/screen/ai/add_multicam/Click() +/atom/movable/screen/ai/add_multicam/Click() if(..()) return var/mob/living/silicon/ai/AI = usr @@ -190,112 +190,112 @@ /datum/hud/ai/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using // Language menu - using = new /obj/screen/language_menu + using = new /atom/movable/screen/language_menu using.screen_loc = ui_borg_language_menu using.hud = src static_inventory += using //AI core - using = new /obj/screen/ai/aicore() + using = new /atom/movable/screen/ai/aicore() using.screen_loc = ui_ai_core using.hud = src static_inventory += using //Camera list - using = new /obj/screen/ai/camera_list() + using = new /atom/movable/screen/ai/camera_list() using.screen_loc = ui_ai_camera_list using.hud = src static_inventory += using //Track - using = new /obj/screen/ai/camera_track() + using = new /atom/movable/screen/ai/camera_track() using.screen_loc = ui_ai_track_with_camera using.hud = src static_inventory += using //Camera light - using = new /obj/screen/ai/camera_light() + using = new /atom/movable/screen/ai/camera_light() using.screen_loc = ui_ai_camera_light using.hud = src static_inventory += using //Crew Monitoring - using = new /obj/screen/ai/crew_monitor() + using = new /atom/movable/screen/ai/crew_monitor() using.screen_loc = ui_ai_crew_monitor using.hud = src static_inventory += using //Crew Manifest - using = new /obj/screen/ai/crew_manifest() + using = new /atom/movable/screen/ai/crew_manifest() using.screen_loc = ui_ai_crew_manifest using.hud = src static_inventory += using //Alerts - using = new /obj/screen/ai/alerts() + using = new /atom/movable/screen/ai/alerts() using.screen_loc = ui_ai_alerts using.hud = src static_inventory += using //Announcement - using = new /obj/screen/ai/announcement() + using = new /atom/movable/screen/ai/announcement() using.screen_loc = ui_ai_announcement using.hud = src static_inventory += using //Shuttle - using = new /obj/screen/ai/call_shuttle() + using = new /atom/movable/screen/ai/call_shuttle() using.screen_loc = ui_ai_shuttle using.hud = src static_inventory += using //Laws - using = new /obj/screen/ai/state_laws() + using = new /atom/movable/screen/ai/state_laws() using.screen_loc = ui_ai_state_laws using.hud = src static_inventory += using //PDA message - using = new /obj/screen/ai/pda_msg_send() + using = new /atom/movable/screen/ai/pda_msg_send() using.screen_loc = ui_ai_pda_send using.hud = src static_inventory += using //PDA log - using = new /obj/screen/ai/pda_msg_show() + using = new /atom/movable/screen/ai/pda_msg_show() using.screen_loc = ui_ai_pda_log using.hud = src static_inventory += using //Take image - using = new /obj/screen/ai/image_take() + using = new /atom/movable/screen/ai/image_take() using.screen_loc = ui_ai_take_picture using.hud = src static_inventory += using //View images - using = new /obj/screen/ai/image_view() + using = new /atom/movable/screen/ai/image_view() using.screen_loc = ui_ai_view_images using.hud = src static_inventory += using //Medical/Security sensors - using = new /obj/screen/ai/sensors() + using = new /atom/movable/screen/ai/sensors() using.screen_loc = ui_ai_sensor using.hud = src static_inventory += using //Multicamera mode - using = new /obj/screen/ai/multicam() + using = new /atom/movable/screen/ai/multicam() using.screen_loc = ui_ai_multicam using.hud = src static_inventory += using //Add multicamera camera - using = new /obj/screen/ai/add_multicam() + using = new /atom/movable/screen/ai/add_multicam() using.screen_loc = ui_ai_add_multicam using.hud = src static_inventory += using diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 81d8593d4e..e148ae301d 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -18,7 +18,7 @@ if(!category || QDELETED(src)) return - var/obj/screen/alert/thealert + var/atom/movable/screen/alert/thealert if(alerts[category]) thealert = alerts[category] if(thealert.override_alerts) @@ -75,7 +75,7 @@ // Proc to clear an existing alert. /mob/proc/clear_alert(category, clear_override = FALSE) - var/obj/screen/alert/alert = alerts[category] + var/atom/movable/screen/alert/alert = alerts[category] if(!alert) return 0 if(alert.override_alerts && !clear_override) @@ -87,7 +87,7 @@ client.screen -= alert qdel(alert) -/obj/screen/alert +/atom/movable/screen/alert icon = 'icons/mob/screen_alert.dmi' icon_state = "default" name = "Alert" @@ -100,72 +100,72 @@ var/mob/mob_viewer //the mob viewing this alert -/obj/screen/alert/MouseEntered(location,control,params) +/atom/movable/screen/alert/MouseEntered(location,control,params) if(!QDELETED(src)) openToolTip(usr,src,params,title = name,content = desc,theme = alerttooltipstyle) -/obj/screen/alert/MouseExited() +/atom/movable/screen/alert/MouseExited() closeToolTip(usr) //Gas alerts -/obj/screen/alert/not_enough_oxy +/atom/movable/screen/alert/not_enough_oxy name = "Choking (No O2)" desc = "You're not getting enough oxygen. Find some good air before you pass out! The box in your backpack has an oxygen tank and breath mask in it." icon_state = "not_enough_oxy" -/obj/screen/alert/too_much_oxy +/atom/movable/screen/alert/too_much_oxy name = "Choking (O2)" desc = "There's too much oxygen in the air, and you're breathing it in! Find some good air before you pass out!" icon_state = "too_much_oxy" -/obj/screen/alert/not_enough_nitro +/atom/movable/screen/alert/not_enough_nitro name = "Choking (No N2)" desc = "You're not getting enough nitrogen. Find some good air before you pass out!" icon_state = "not_enough_nitro" -/obj/screen/alert/too_much_nitro +/atom/movable/screen/alert/too_much_nitro name = "Choking (N2)" desc = "There's too much nitrogen in the air, and you're breathing it in! Find some good air before you pass out!" icon_state = "too_much_nitro" -/obj/screen/alert/not_enough_co2 +/atom/movable/screen/alert/not_enough_co2 name = "Choking (No CO2)" desc = "You're not getting enough carbon dioxide. Find some good air before you pass out!" icon_state = "not_enough_co2" -/obj/screen/alert/too_much_co2 +/atom/movable/screen/alert/too_much_co2 name = "Choking (CO2)" desc = "There's too much carbon dioxide in the air, and you're breathing it in! Find some good air before you pass out!" icon_state = "too_much_co2" -/obj/screen/alert/not_enough_tox +/atom/movable/screen/alert/not_enough_tox name = "Choking (No Plasma)" desc = "You're not getting enough plasma. Find some good air before you pass out!" icon_state = "not_enough_tox" -/obj/screen/alert/too_much_tox +/atom/movable/screen/alert/too_much_tox name = "Choking (Plasma)" desc = "There's highly flammable, toxic plasma in the air and you're breathing it in. Find some fresh air. The box in your backpack has an oxygen tank and gas mask in it." icon_state = "too_much_tox" -/obj/screen/alert/not_enough_ch4 +/atom/movable/screen/alert/not_enough_ch4 name = "Choking (No CH4)" desc = "You're not getting enough methane. Find some good air before you pass out!" icon_state = "not_enough_ch4" -/obj/screen/alert/too_much_ch4 +/atom/movable/screen/alert/too_much_ch4 name = "Choking (CH4)" desc = "There's too much methane in the air, and you're breathing it in! Find some good air before you pass out!" icon_state = "too_much_ch4" -/obj/screen/alert/not_enough_ch3br +/atom/movable/screen/alert/not_enough_ch3br name = "Choking (No CH3Br)" desc = "You're not getting enough methyl bromide. Find some good air before you pass out!" icon_state = "not_enough_tox" -/obj/screen/alert/too_much_ch3br +/atom/movable/screen/alert/too_much_ch3br name = "Choking (CH3Br)" desc = "There's highly toxic methyl bromide in the air and you're breathing it in. Find some fresh air. The box in your backpack has an oxygen tank and gas mask in it." icon_state = "too_much_tox" @@ -173,109 +173,109 @@ //End gas alerts -/obj/screen/alert/fat +/atom/movable/screen/alert/fat name = "Fat" desc = "You ate too much food, lardass. Run around the station and lose some weight." icon_state = "fat" -/obj/screen/alert/hungry +/atom/movable/screen/alert/hungry name = "Hungry" desc = "Some food would be good right about now." icon_state = "hungry" -/obj/screen/alert/starving +/atom/movable/screen/alert/starving name = "Starving" desc = "You're severely malnourished. The hunger pains make moving around a chore." icon_state = "starving" -/obj/screen/alert/gross +/atom/movable/screen/alert/gross name = "Grossed out." desc = "That was kind of gross..." icon_state = "gross" -/obj/screen/alert/verygross +/atom/movable/screen/alert/verygross name = "Very grossed out." desc = "You're not feeling very well..." icon_state = "gross2" -/obj/screen/alert/disgusted +/atom/movable/screen/alert/disgusted name = "DISGUSTED" desc = "ABSOLUTELY DISGUSTIN'" icon_state = "gross3" -/obj/screen/alert/hot +/atom/movable/screen/alert/hot name = "Too Hot" desc = "The air around you is pretty toasty! Consider putting on some insulating clothing, or moving to a cooler area." icon_state = "hot" -/obj/screen/alert/cold +/atom/movable/screen/alert/cold name = "Too Cold" desc = "The air around you is pretty cold! Consider wearing a coat, or moving to a warmer area." icon_state = "cold" -/obj/screen/alert/sweat +/atom/movable/screen/alert/sweat name = "Sweating" desc = "You're sweating! Get somewhere cooler and take off any insulating clothing like a fire suit." icon_state = "sweat" -/obj/screen/alert/shiver +/atom/movable/screen/alert/shiver name = "Shivering" desc = "You're shivering! Get somewhere warmer and take off any insulating clothing like a space suit." -/obj/screen/alert/lowpressure +/atom/movable/screen/alert/lowpressure name = "Low Pressure" desc = "The air around you is hazardously thin. A space suit would protect you." icon_state = "lowpressure" -/obj/screen/alert/highpressure +/atom/movable/screen/alert/highpressure name = "High Pressure" desc = "The air around you is hazardously thick. A fire suit would protect you." icon_state = "highpressure" -/obj/screen/alert/blind +/atom/movable/screen/alert/blind name = "Blind" desc = "You can't see! This may be caused by a genetic defect, eye trauma, being unconscious, \ or something covering your eyes." icon_state = "blind" -/obj/screen/alert/high +/atom/movable/screen/alert/high name = "High" desc = "Whoa man, you're tripping balls! Careful you don't get addicted... if you aren't already." icon_state = "high" -/obj/screen/alert/mind_control +/atom/movable/screen/alert/mind_control name = "Mind Control" desc = "Your mind has been hijacked! Click to view the mind control command." icon_state = "mind_control" var/command -/obj/screen/alert/mind_control/Click() +/atom/movable/screen/alert/mind_control/Click() var/mob/living/L = usr to_chat(L, "[command]") -/obj/screen/alert/hypnosis +/atom/movable/screen/alert/hypnosis name = "Hypnosis" desc = "Something's hypnotizing you, but you're not really sure about what." icon_state = "hypnosis" var/phrase -/obj/screen/alert/drunk //Not implemented +/atom/movable/screen/alert/drunk //Not implemented name = "Drunk" desc = "All that alcohol you've been drinking is impairing your speech, motor skills, and mental cognition. Make sure to act like it." icon_state = "drunk" -/obj/screen/alert/embeddedobject +/atom/movable/screen/alert/embeddedobject name = "Embedded Object" desc = "Something got lodged into your flesh and is causing major bleeding. It might fall out with time, but surgery is the safest way. \ If you're feeling frisky, examine yourself and click the underlined item to pull the object out." icon_state = "embeddedobject" -/obj/screen/alert/embeddedobject/Click() +/atom/movable/screen/alert/embeddedobject/Click() if(isliving(usr)) var/mob/living/carbon/M = usr return M.help_shake_act(M) -/obj/screen/alert/weightless +/atom/movable/screen/alert/weightless name = "Weightless" desc = "Gravity has ceased affecting you, and you're floating around aimlessly. You'll need something large and heavy, like a \ wall or lattice, to push yourself off if you want to move. A jetpack would enable free range of motion. A pair of \ @@ -283,22 +283,22 @@ magboots would let you walk around normally on the floor. Barring those, you can or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "weightless" -/obj/screen/alert/highgravity +/atom/movable/screen/alert/highgravity name = "High Gravity" desc = "You're getting crushed by high gravity, picking up items and movement will be slowed." icon_state = "paralysis" -/obj/screen/alert/veryhighgravity +/atom/movable/screen/alert/veryhighgravity name = "Crushing Gravity" desc = "You're getting crushed by high gravity, picking up items and movement will be slowed. You'll also accumulate brute damage!" icon_state = "paralysis" -/obj/screen/alert/fire +/atom/movable/screen/alert/fire name = "On Fire" desc = "You're on fire. Stop, drop and roll to put the fire out or move to a vacuum area." icon_state = "fire" -/obj/screen/alert/fire/Click() +/atom/movable/screen/alert/fire/Click() var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return @@ -306,7 +306,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." if(CHECK_MOBILITY(L, MOBILITY_MOVE)) return L.resist_fire() //I just want to start a flame in your hearrrrrrtttttt. -/obj/screen/alert/give // information set when the give alert is made +/atom/movable/screen/alert/give // information set when the give alert is made icon_state = "default" var/mob/living/carbon/giver var/obj/item/receiving @@ -321,7 +321,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." * * giver - The person giving the alert and item * * receiving - The item being given by the giver */ -/obj/screen/alert/give/proc/setup(mob/living/carbon/taker, mob/living/carbon/giver, obj/item/receiving) +/atom/movable/screen/alert/give/proc/setup(mob/living/carbon/taker, mob/living/carbon/giver, obj/item/receiving) name = "[giver] is offering [receiving]" desc = "[giver] is offering [receiving]. Click this alert to take it." icon_state = "template" @@ -331,31 +331,31 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." src.giver = giver RegisterSignal(taker, COMSIG_MOVABLE_MOVED, .proc/removeAlert) -/obj/screen/alert/give/proc/removeAlert() +/atom/movable/screen/alert/give/proc/removeAlert() to_chat(usr, "You moved out of range of [giver]!") usr.clear_alert("[giver]") -/obj/screen/alert/give/Click(location, control, params) +/atom/movable/screen/alert/give/Click(location, control, params) . = ..() var/mob/living/carbon/C = usr C.take(giver, receiving) //ALIENS -/obj/screen/alert/alien_tox +/atom/movable/screen/alert/alien_tox name = "Plasma" desc = "There's flammable plasma in the air. If it lights up, you'll be toast." icon_state = "alien_tox" alerttooltipstyle = "alien" -/obj/screen/alert/alien_fire +/atom/movable/screen/alert/alien_fire // This alert is temporarily gonna be thrown for all hot air but one day it will be used for literally being on fire name = "Too Hot" desc = "It's too hot! Flee to space or at least away from the flames. Standing on weeds will heal you." icon_state = "alien_fire" alerttooltipstyle = "alien" -/obj/screen/alert/alien_vulnerable +/atom/movable/screen/alert/alien_vulnerable name = "Severed Matriarchy" desc = "Your queen has been killed, you will suffer movement penalties and loss of hivemind. A new queen cannot be made until you recover." icon_state = "alien_noqueen" @@ -363,7 +363,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //BLOBS -/obj/screen/alert/nofactory +/atom/movable/screen/alert/nofactory name = "No Factory" desc = "You have no factory, and are slowly dying!" icon_state = "blobbernaut_nofactory" @@ -371,7 +371,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." // BLOODCULT -/obj/screen/alert/bloodsense +/atom/movable/screen/alert/bloodsense name = "Blood Sense" desc = "Allows you to sense blood that is manipulated by dark magicks." icon_state = "cult_sense" @@ -380,17 +380,17 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/angle = 0 var/mob/living/simple_animal/hostile/construct/Cviewer = null -/obj/screen/alert/bloodsense/Initialize() +/atom/movable/screen/alert/bloodsense/Initialize() . = ..() narnar = new('icons/mob/screen_alert.dmi', "mini_nar") START_PROCESSING(SSprocessing, src) -/obj/screen/alert/bloodsense/Destroy() +/atom/movable/screen/alert/bloodsense/Destroy() Cviewer = null STOP_PROCESSING(SSprocessing, src) return ..() -/obj/screen/alert/bloodsense/process() +/atom/movable/screen/alert/bloodsense/process() var/atom/blood_target if(!mob_viewer.mind) @@ -480,15 +480,15 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." // CLOCKCULT -/obj/screen/alert/clockwork +/atom/movable/screen/alert/clockwork alerttooltipstyle = "clockcult" -/obj/screen/alert/clockwork/infodump +/atom/movable/screen/alert/clockwork/infodump name = "Global Records" desc = "You shouldn't be seeing this description, because it should be dynamically generated." icon_state = "clockinfo" -/obj/screen/alert/clockwork/infodump/MouseEntered(location,control,params) +/atom/movable/screen/alert/clockwork/infodump/MouseEntered(location,control,params) if(GLOB.ratvar_awakens) desc = "CHETR
NYY
HAGEHUGF-NAQ-UBABE
RATVAR.
" else @@ -520,19 +520,19 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //GUARDIANS -/obj/screen/alert/cancharge +/atom/movable/screen/alert/cancharge name = "Charge Ready" desc = "You are ready to charge at a location!" icon_state = "guardian_charge" alerttooltipstyle = "parasite" -/obj/screen/alert/canstealth +/atom/movable/screen/alert/canstealth name = "Stealth Ready" desc = "You are ready to enter stealth!" icon_state = "guardian_canstealth" alerttooltipstyle = "parasite" -/obj/screen/alert/instealth +/atom/movable/screen/alert/instealth name = "In Stealth" desc = "You are in stealth and your next attack will do bonus damage!" icon_state = "guardian_instealth" @@ -540,52 +540,52 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." //SILICONS -/obj/screen/alert/nocell +/atom/movable/screen/alert/nocell name = "Missing Power Cell" desc = "Unit has no power cell. No modules available until a power cell is reinstalled. Robotics may provide assistance." icon_state = "nocell" -/obj/screen/alert/emptycell +/atom/movable/screen/alert/emptycell name = "Out of Power" desc = "Unit's power cell has no charge remaining. No modules available until power cell is recharged. \ Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." icon_state = "emptycell" -/obj/screen/alert/lowcell +/atom/movable/screen/alert/lowcell name = "Low Charge" desc = "Unit's power cell is running low. Recharging stations are available in robotics, the dormitory bathrooms, and the AI satellite." icon_state = "lowcell" -/obj/screen/alert/etherealcharge +/atom/movable/screen/alert/etherealcharge name = "Low Blood Charge" desc = "Your blood's electric charge is running low, find a source of charge for your blood. Use a recharging station found in robotics or the dormitory bathrooms, or eat some Ethereal-friendly food." icon_state = "etherealcharge" -/obj/screen/alert/ethereal_overcharge +/atom/movable/screen/alert/ethereal_overcharge name = "Blood Overcharge" desc = "Your blood's electric charge is becoming dangerously high, find an outlet for your energy. Use Grab Intent on an APC to channel your energy into it." icon_state = "ethereal_overcharge" //Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg -/obj/screen/alert/hacked +/atom/movable/screen/alert/hacked name = "Hacked" desc = "Hazardous non-standard equipment detected. Please ensure any usage of this equipment is in line with unit's laws, if any." icon_state = "hacked" -/obj/screen/alert/locked +/atom/movable/screen/alert/locked name = "Locked Down" desc = "Unit has been remotely locked down. Usage of a Robotics Control Console like the one in the Research Director's \ office by your AI master or any qualified human may resolve this matter. Robotics may provide further assistance if necessary." icon_state = "locked" -/obj/screen/alert/newlaw +/atom/movable/screen/alert/newlaw name = "Law Update" desc = "Laws have potentially been uploaded to or removed from this unit. Please be aware of any changes \ so as to remain in compliance with the most up-to-date laws." icon_state = "newlaw" timeout = 300 -/obj/screen/alert/hackingapc +/atom/movable/screen/alert/hackingapc name = "Hacking APC" desc = "An Area Power Controller is being hacked. When the process is \ complete, you will have exclusive control of it, and you will gain \ @@ -594,7 +594,7 @@ so as to remain in compliance with the most up-to-date laws." timeout = 600 var/atom/target = null -/obj/screen/alert/hackingapc/Click() +/atom/movable/screen/alert/hackingapc/Click() if(!usr || !usr.client) return if(!target) @@ -606,7 +606,7 @@ so as to remain in compliance with the most up-to-date laws." //MECHS -/obj/screen/alert/low_mech_integrity +/atom/movable/screen/alert/low_mech_integrity name = "Mech Damaged" desc = "Mech integrity is low." icon_state = "low_mech_integrity" @@ -614,19 +614,19 @@ so as to remain in compliance with the most up-to-date laws." //GHOSTS //TODO: expand this system to replace the pollCandidates/CheckAntagonist/"choose quickly"/etc Yes/No messages -/obj/screen/alert/notify_cloning +/atom/movable/screen/alert/notify_cloning name = "Revival" desc = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!" icon_state = "template" timeout = 300 -/obj/screen/alert/notify_cloning/Click() +/atom/movable/screen/alert/notify_cloning/Click() if(!usr || !usr.client) return var/mob/dead/observer/G = usr G.reenter_corpse() -/obj/screen/alert/notify_action +/atom/movable/screen/alert/notify_action name = "Body created" desc = "A body was created. You can enter it." icon_state = "template" @@ -634,7 +634,7 @@ so as to remain in compliance with the most up-to-date laws." var/atom/target = null var/action = NOTIFY_JUMP -/obj/screen/alert/notify_action/Click() +/atom/movable/screen/alert/notify_action/Click() if(!usr || !usr.client) return if(!target) @@ -654,44 +654,44 @@ so as to remain in compliance with the most up-to-date laws." //OBJECT-BASED -/obj/screen/alert/restrained/buckled +/atom/movable/screen/alert/restrained/buckled name = "Buckled" desc = "You've been buckled to something. Click the alert to unbuckle unless you're handcuffed." icon_state = "buckled" -/obj/screen/alert/restrained/handcuffed +/atom/movable/screen/alert/restrained/handcuffed name = "Handcuffed" desc = "You're handcuffed and can't act. If anyone drags you, you won't be able to move. Click the alert to free yourself." -/obj/screen/alert/restrained/legcuffed +/atom/movable/screen/alert/restrained/legcuffed name = "Legcuffed" desc = "You're legcuffed, which slows you down considerably. Click the alert to free yourself." -/obj/screen/alert/restrained/Click() +/atom/movable/screen/alert/restrained/Click() var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return L.MarkResistTime() return L.resist_restraints() -/obj/screen/alert/restrained/buckled/Click() +/atom/movable/screen/alert/restrained/buckled/Click() var/mob/living/L = usr if(!istype(L) || !L.can_resist()) return L.MarkResistTime() return L.resist_buckle() -/obj/screen/alert/shoes/untied +/atom/movable/screen/alert/shoes/untied name = "Untied Shoes" desc = "Your shoes are untied! Click the alert or your shoes to tie them." icon_state = "shoealert" -/obj/screen/alert/shoes/knotted +/atom/movable/screen/alert/shoes/knotted name = "Knotted Shoes" desc = "Someone tied your shoelaces together! Click the alert or your shoes to undo the knot." icon_state = "shoealert" -/obj/screen/alert/shoes/Click() +/atom/movable/screen/alert/shoes/Click() var/mob/living/carbon/C = usr if(!istype(C) || !C.can_resist() || C != mob_viewer || !C.shoes) return @@ -708,7 +708,7 @@ so as to remain in compliance with the most up-to-date laws." mymob.client.screen -= alerts[alerts[i]] return 1 for(var/i = 1, i <= alerts.len, i++) - var/obj/screen/alert/alert = alerts[alerts[i]] + var/atom/movable/screen/alert/alert = alerts[alerts[i]] if(alert.icon_state == "template") alert.icon = ui_style switch(i) @@ -728,7 +728,7 @@ so as to remain in compliance with the most up-to-date laws." mymob.client.screen |= alert return 1 -/obj/screen/alert/Click(location, control, params) +/atom/movable/screen/alert/Click(location, control, params) if(!usr || !usr.client) return var/paramslist = params2list(params) @@ -738,7 +738,7 @@ so as to remain in compliance with the most up-to-date laws." if(master) return usr.client.Click(master, location, control, params) -/obj/screen/alert/Destroy() +/atom/movable/screen/alert/Destroy() . = ..() severity = 0 master = null diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index 94585cbd52..bf7969a6ba 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -1,23 +1,23 @@ -/obj/screen/alien +/atom/movable/screen/alien icon = 'icons/mob/screen_alien.dmi' -/obj/screen/alien/leap +/atom/movable/screen/alien/leap name = "toggle leap" icon_state = "leap_off" -/obj/screen/alien/leap/Click() +/atom/movable/screen/alien/leap/Click() if(isalienhunter(usr)) var/mob/living/carbon/alien/humanoid/hunter/AH = usr AH.toggle_leap() -/obj/screen/alien/plasma_display +/atom/movable/screen/alien/plasma_display icon = 'icons/mob/screen_gen.dmi' icon_state = "power_display2" name = "plasma stored" screen_loc = ui_alienplasmadisplay -/obj/screen/alien/alien_queen_finder +/atom/movable/screen/alien/alien_queen_finder icon = 'icons/mob/screen_alien.dmi' icon_state = "queen_finder" name = "queen sense" @@ -30,7 +30,7 @@ /datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using //equippable shit @@ -39,55 +39,55 @@ //begin buttons - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) using.hud = src static_inventory += using - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) using.hud = src static_inventory += using - action_intent = new /obj/screen/act_intent/alien() + action_intent = new /atom/movable/screen/act_intent/alien() action_intent.icon_state = mymob.a_intent action_intent.hud = src static_inventory += action_intent if(isalienhunter(mymob)) var/mob/living/carbon/alien/humanoid/hunter/H = mymob - H.leap_icon = new /obj/screen/alien/leap() + H.leap_icon = new /atom/movable/screen/alien/leap() H.leap_icon.screen_loc = ui_alien_storage_r static_inventory += H.leap_icon - using = new/obj/screen/language_menu + using = new/atom/movable/screen/language_menu using.screen_loc = ui_alien_language_menu using.hud = src static_inventory += using - using = new /obj/screen/drop() + using = new /atom/movable/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw using.hud = src static_inventory += using - using = new /obj/screen/resist() + using = new /atom/movable/screen/resist() using.icon = ui_style using.screen_loc = ui_pull_resist using.hud = src hotkeybuttons += using - throw_icon = new /obj/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw throw_icon.hud = src hotkeybuttons += throw_icon - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() @@ -96,25 +96,25 @@ //begin indicators - healths = new /obj/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien() healths.hud = src infodisplay += healths - alien_plasma_display = new /obj/screen/alien/plasma_display() + alien_plasma_display = new /atom/movable/screen/alien/plasma_display() alien_plasma_display.hud = src infodisplay += alien_plasma_display if(!isalienqueen(mymob)) - alien_queen_finder = new /obj/screen/alien/alien_queen_finder + alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder alien_queen_finder.hud = src infodisplay += alien_queen_finder - zone_select = new /obj/screen/zone_sel/alien() + zone_select = new /atom/movable/screen/zone_sel/alien() zone_select.hud = src zone_select.update_icon() static_inventory += zone_select - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index 0f3c6ccf17..17d3ad35e4 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -3,34 +3,34 @@ /datum/hud/larva/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - action_intent = new /obj/screen/act_intent/alien() + action_intent = new /atom/movable/screen/act_intent/alien() action_intent.icon_state = mymob.a_intent action_intent.hud = src static_inventory += action_intent - healths = new /obj/screen/healths/alien() + healths = new /atom/movable/screen/healths/alien() healths.hud = src infodisplay += healths - alien_queen_finder = new /obj/screen/alien/alien_queen_finder() + alien_queen_finder = new /atom/movable/screen/alien/alien_queen_finder() alien_queen_finder.hud = src infodisplay += alien_queen_finder - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = 'icons/mob/screen_alien.dmi' pull_icon.hud = src pull_icon.update_icon() pull_icon.screen_loc = ui_pull_resist hotkeybuttons += pull_icon - using = new/obj/screen/language_menu + using = new/atom/movable/screen/language_menu using.screen_loc = ui_alien_language_menu using.hud = src static_inventory += using - zone_select = new /obj/screen/zone_sel/alien() + zone_select = new /atom/movable/screen/zone_sel/alien() zone_select.hud = src zone_select.update_icon() static_inventory += zone_select diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index b9118da5f1..f4d6ffc919 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -1,39 +1,39 @@ -/obj/screen/blob +/atom/movable/screen/blob icon = 'icons/mob/blob.dmi' -/obj/screen/blob/MouseEntered(location,control,params) +/atom/movable/screen/blob/MouseEntered(location,control,params) openToolTip(usr,src,params,title = name,content = desc, theme = "blob") -/obj/screen/blob/MouseExited() +/atom/movable/screen/blob/MouseExited() closeToolTip(usr) -/obj/screen/blob/BlobHelp +/atom/movable/screen/blob/BlobHelp icon_state = "ui_help" name = "Blob Help" desc = "Help on playing blob!" -/obj/screen/blob/BlobHelp/Click() +/atom/movable/screen/blob/BlobHelp/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.blob_help() -/obj/screen/blob/JumpToNode +/atom/movable/screen/blob/JumpToNode icon_state = "ui_tonode" name = "Jump to Node" desc = "Moves your camera to a selected blob node." -/obj/screen/blob/JumpToNode/Click() +/atom/movable/screen/blob/JumpToNode/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.jump_to_node() -/obj/screen/blob/JumpToCore +/atom/movable/screen/blob/JumpToCore icon_state = "ui_tocore" name = "Jump to Core" desc = "Moves your camera to your blob core." -/obj/screen/blob/JumpToCore/MouseEntered(location,control,params) +/atom/movable/screen/blob/JumpToCore/MouseEntered(location,control,params) if(hud && hud.mymob && isovermind(hud.mymob)) var/mob/camera/blob/B = hud.mymob if(!B.placed) @@ -44,59 +44,59 @@ desc = initial(desc) ..() -/obj/screen/blob/JumpToCore/Click() +/atom/movable/screen/blob/JumpToCore/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr if(!B.placed) B.place_blob_core(0) B.transport_core() -/obj/screen/blob/Blobbernaut +/atom/movable/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" name = "Produce Blobbernaut (40)" desc = "Produces a strong, smart blobbernaut from a factory blob for 40 resources.
The factory blob used will become fragile and unable to produce spores." -/obj/screen/blob/Blobbernaut/Click() +/atom/movable/screen/blob/Blobbernaut/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.create_blobbernaut() -/obj/screen/blob/ResourceBlob +/atom/movable/screen/blob/ResourceBlob icon_state = "ui_resource" name = "Produce Resource Blob (40)" desc = "Produces a resource blob for 40 resources.
Resource blobs will give you resources every few seconds." -/obj/screen/blob/ResourceBlob/Click() +/atom/movable/screen/blob/ResourceBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.create_resource() -/obj/screen/blob/NodeBlob +/atom/movable/screen/blob/NodeBlob icon_state = "ui_node" name = "Produce Node Blob (50)" desc = "Produces a node blob for 50 resources.
Node blobs will expand and activate nearby resource and factory blobs." -/obj/screen/blob/NodeBlob/Click() +/atom/movable/screen/blob/NodeBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.create_node() -/obj/screen/blob/FactoryBlob +/atom/movable/screen/blob/FactoryBlob icon_state = "ui_factory" name = "Produce Factory Blob (60)" desc = "Produces a factory blob for 60 resources.
Factory blobs will produce spores every few seconds." -/obj/screen/blob/FactoryBlob/Click() +/atom/movable/screen/blob/FactoryBlob/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.create_factory() -/obj/screen/blob/ReadaptStrain +/atom/movable/screen/blob/ReadaptStrain icon_state = "ui_chemswap" name = "Readapt Strain (40)" desc = "Allows you to choose a new strain from 4 random choices for 40 resources." -/obj/screen/blob/ReadaptStrain/MouseEntered(location,control,params) +/atom/movable/screen/blob/ReadaptStrain/MouseEntered(location,control,params) if(hud && hud.mymob && isovermind(hud.mymob)) var/mob/camera/blob/B = hud.mymob if(B.free_strain_rerolls) @@ -107,26 +107,26 @@ desc = initial(desc) ..() -/obj/screen/blob/ReadaptStrain/Click() +/atom/movable/screen/blob/ReadaptStrain/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.strain_reroll() -/obj/screen/blob/RelocateCore +/atom/movable/screen/blob/RelocateCore icon_state = "ui_swap" name = "Relocate Core (80)" desc = "Swaps a node and your core for 80 resources." -/obj/screen/blob/RelocateCore/Click() +/atom/movable/screen/blob/RelocateCore/Click() if(isovermind(usr)) var/mob/camera/blob/B = usr B.relocate_core() /datum/hud/blob_overmind/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - blobpwrdisplay = new /obj/screen() + blobpwrdisplay = new /atom/movable/screen() blobpwrdisplay.name = "blob power" blobpwrdisplay.icon_state = "block" blobpwrdisplay.screen_loc = ui_health @@ -136,51 +136,51 @@ blobpwrdisplay.hud = src infodisplay += blobpwrdisplay - healths = new /obj/screen/healths/blob() + healths = new /atom/movable/screen/healths/blob() healths.hud = src infodisplay += healths - using = new /obj/screen/blob/BlobHelp() + using = new /atom/movable/screen/blob/BlobHelp() using.screen_loc = "WEST:6,NORTH:-3" using.hud = src static_inventory += using - using = new /obj/screen/blob/JumpToNode() + using = new /atom/movable/screen/blob/JumpToNode() using.screen_loc = ui_inventory using.hud = src static_inventory += using - using = new /obj/screen/blob/JumpToCore() + using = new /atom/movable/screen/blob/JumpToCore() using.screen_loc = ui_zonesel using.hud = src static_inventory += using - using = new /obj/screen/blob/Blobbernaut() + using = new /atom/movable/screen/blob/Blobbernaut() using.screen_loc = ui_belt using.hud = src static_inventory += using - using = new /obj/screen/blob/ResourceBlob() + using = new /atom/movable/screen/blob/ResourceBlob() using.screen_loc = ui_back using.hud = src static_inventory += using - using = new /obj/screen/blob/NodeBlob() + using = new /atom/movable/screen/blob/NodeBlob() using.screen_loc = ui_hand_position(2) using.hud = src static_inventory += using - using = new /obj/screen/blob/FactoryBlob() + using = new /atom/movable/screen/blob/FactoryBlob() using.screen_loc = ui_hand_position(1) using.hud = src static_inventory += using - using = new /obj/screen/blob/ReadaptStrain() + using = new /atom/movable/screen/blob/ReadaptStrain() using.screen_loc = ui_storage1 using.hud = src static_inventory += using - using = new /obj/screen/blob/RelocateCore() + using = new /atom/movable/screen/blob/RelocateCore() using.screen_loc = ui_storage2 using.hud = src static_inventory += using diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm index ed45d5b1f6..430e8e81e7 100644 --- a/code/_onclick/hud/blobbernauthud.dm +++ b/code/_onclick/hud/blobbernauthud.dm @@ -2,10 +2,10 @@ /datum/hud/blobbernaut/New(mob/owner) ..() - blobpwrdisplay = new /obj/screen/healths/blob/naut/core() + blobpwrdisplay = new /atom/movable/screen/healths/blob/naut/core() blobpwrdisplay.hud = src infodisplay += blobpwrdisplay - healths = new /obj/screen/healths/blob/naut() + healths = new /atom/movable/screen/healths/blob/naut() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/clockwork_marauder.dm b/code/_onclick/hud/clockwork_marauder.dm index b1b24cc58b..de9cb65c75 100644 --- a/code/_onclick/hud/clockwork_marauder.dm +++ b/code/_onclick/hud/clockwork_marauder.dm @@ -1,20 +1,20 @@ /datum/hud/marauder - var/obj/screen/hosthealth - var/obj/screen/blockchance - var/obj/screen/counterchance + var/atom/movable/screen/hosthealth + var/atom/movable/screen/blockchance + var/atom/movable/screen/counterchance /datum/hud/marauder/New(mob/living/simple_animal/hostile/clockwork/guardian/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - healths = new /obj/screen/healths/clock() + healths = new /atom/movable/screen/healths/clock() infodisplay += healths - hosthealth = new /obj/screen/healths/clock() + hosthealth = new /atom/movable/screen/healths/clock() hosthealth.screen_loc = ui_internal infodisplay += hosthealth - using = new /obj/screen/marauder/emerge() + using = new /atom/movable/screen/marauder/emerge() using.screen_loc = ui_zonesel static_inventory += using @@ -28,15 +28,15 @@ if(client && !hud_used) hud_used = new /datum/hud/marauder(src, ui_style2icon(client.prefs.UI_style)) -/obj/screen/marauder +/atom/movable/screen/marauder icon = 'icons/mob/clockwork_mobs.dmi' -/obj/screen/marauder/emerge +/atom/movable/screen/marauder/emerge icon_state = "clockguard_emerge" name = "Emerge/Return" desc = "Emerge or Return." -/obj/screen/marauder/emerge/Click() +/atom/movable/screen/marauder/emerge/Click() if(istype(usr, /mob/living/simple_animal/hostile/clockwork/guardian)) var/mob/living/simple_animal/hostile/clockwork/guardian/G = usr if(G.is_in_host()) diff --git a/code/_onclick/hud/constructs.dm b/code/_onclick/hud/constructs.dm index 06e657d136..31f1060f17 100644 --- a/code/_onclick/hud/constructs.dm +++ b/code/_onclick/hud/constructs.dm @@ -3,13 +3,13 @@ /datum/hud/constructs/New(mob/owner) ..() - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() pull_icon.screen_loc = ui_construct_pull static_inventory += pull_icon - healths = new /obj/screen/healths/construct() + healths = new /atom/movable/screen/healths/construct() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm index 31ea453d4a..974f158323 100644 --- a/code/_onclick/hud/credits.dm +++ b/code/_onclick/hud/credits.dm @@ -18,7 +18,7 @@ for(var/I in credit_order_for_this_round) if(!credits) return - _credits += new /obj/screen/credit(null, I, src, credits_icon) + _credits += new /atom/movable/screen/credit(null, I, src, credits_icon) sleep(CREDIT_SPAWN_SPEED) sleep(CREDIT_ROLL_SPEED - CREDIT_SPAWN_SPEED) remove_verb(src, /client/proc/ClearCredits) @@ -31,7 +31,7 @@ QDEL_LIST(credits) credits = null -/obj/screen/credit +/atom/movable/screen/credit mouse_opacity = MOUSE_OPACITY_TRANSPARENT alpha = 0 screen_loc = "12,1" @@ -39,7 +39,7 @@ var/client/parent var/matrix/target -/obj/screen/credit/Initialize(mapload, credited, client/P, icon/I) +/atom/movable/screen/credit/Initialize(mapload, credited, client/P, icon/I) . = ..() icon = I parent = P @@ -57,7 +57,7 @@ QDEL_IN(src, CREDIT_ROLL_SPEED) P.screen += src -/obj/screen/credit/Destroy() +/atom/movable/screen/credit/Destroy() var/client/P = parent P.screen -= src icon = null @@ -65,5 +65,5 @@ parent = null return ..() -/obj/screen/credit/proc/FadeOut() +/atom/movable/screen/credit/proc/FadeOut() animate(src, alpha = 0, transform = target, time = CREDIT_EASE_DURATION) diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm index fd2146424c..574f5dd1fd 100644 --- a/code/_onclick/hud/devil.dm +++ b/code/_onclick/hud/devil.dm @@ -4,15 +4,15 @@ /datum/hud/devil/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - using = new /obj/screen/drop() + using = new /atom/movable/screen/drop() using.icon = ui_style using.screen_loc = ui_drone_drop using.hud = src static_inventory += using - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() @@ -21,7 +21,7 @@ build_hand_slots() - using = new /obj/screen/inventory() + using = new /atom/movable/screen/inventory() using.name = "hand" using.icon = ui_style using.icon_state = "swap_1_m" @@ -31,7 +31,7 @@ using.hud = src static_inventory += using - using = new /obj/screen/inventory() + using = new /atom/movable/screen/inventory() using.name = "hand" using.icon = ui_style using.icon_state = "swap_2" @@ -41,15 +41,15 @@ using.hud = src static_inventory += using - zone_select = new /obj/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src zone_select.update_icon() - lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay = new /atom/movable/screen/ling/chems() lingchemdisplay.hud = src - devilsouldisplay = new /obj/screen/devil/soul_counter + devilsouldisplay = new /atom/movable/screen/devil/soul_counter devilsouldisplay.hud = src infodisplay += devilsouldisplay diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm index bcdfa084d3..849936d4ed 100644 --- a/code/_onclick/hud/drones.dm +++ b/code/_onclick/hud/drones.dm @@ -1,8 +1,8 @@ /datum/hud/dextrous/drone/New(mob/owner) ..() - var/obj/screen/inventory/inv_box + var/atom/movable/screen/inventory/inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "internal storage" inv_box.icon = ui_style inv_box.icon_state = "suit_storage" @@ -11,7 +11,7 @@ inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "head/mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -20,7 +20,7 @@ inv_box.slot_id = SLOT_HEAD static_inventory += inv_box - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 076c949f8e..7481baa2c0 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -1,5 +1,5 @@ /mob/proc/overlay_fullscreen(category, type, severity) - var/obj/screen/fullscreen/screen = screens[category] + var/atom/movable/screen/fullscreen/screen = screens[category] if (!screen || screen.type != type) // needs to be recreated clear_fullscreen(category, FALSE) @@ -17,7 +17,7 @@ return screen /mob/proc/clear_fullscreen(category, animated = 10) - var/obj/screen/fullscreen/screen = screens[category] + var/atom/movable/screen/fullscreen/screen = screens[category] if(!screen) return @@ -47,7 +47,7 @@ /mob/proc/reload_fullscreen() if(client) - var/obj/screen/fullscreen/screen + var/atom/movable/screen/fullscreen/screen for(var/category in screens) screen = screens[category] if(screen.should_show_to(src)) @@ -56,7 +56,7 @@ else client.screen -= screen -/obj/screen/fullscreen +/atom/movable/screen/fullscreen icon = 'icons/mob/screen_full.dmi' icon_state = "default" screen_loc = "CENTER-7,CENTER-7" @@ -67,89 +67,89 @@ var/severity = 0 var/show_when_dead = FALSE -/obj/screen/fullscreen/proc/update_for_view(client_view) +/atom/movable/screen/fullscreen/proc/update_for_view(client_view) if (screen_loc == "CENTER-7,CENTER-7" && view != client_view) var/list/actualview = getviewsize(client_view) view = client_view transform = matrix(actualview[1]/FULLSCREEN_OVERLAY_RESOLUTION_X, 0, 0, 0, actualview[2]/FULLSCREEN_OVERLAY_RESOLUTION_Y, 0) -/obj/screen/fullscreen/proc/should_show_to(mob/mymob) +/atom/movable/screen/fullscreen/proc/should_show_to(mob/mymob) if(!show_when_dead && mymob.stat == DEAD) return FALSE return TRUE -/obj/screen/fullscreen/Destroy() +/atom/movable/screen/fullscreen/Destroy() severity = 0 . = ..() -/obj/screen/fullscreen/brute +/atom/movable/screen/fullscreen/brute icon_state = "brutedamageoverlay" layer = UI_DAMAGE_LAYER plane = FULLSCREEN_PLANE -/obj/screen/fullscreen/oxy +/atom/movable/screen/fullscreen/oxy icon_state = "oxydamageoverlay" layer = UI_DAMAGE_LAYER plane = FULLSCREEN_PLANE -/obj/screen/fullscreen/crit +/atom/movable/screen/fullscreen/crit icon_state = "passage" layer = CRIT_LAYER plane = FULLSCREEN_PLANE -/obj/screen/fullscreen/crit/vision +/atom/movable/screen/fullscreen/crit/vision icon_state = "oxydamageoverlay" layer = BLIND_LAYER -/obj/screen/fullscreen/blind +/atom/movable/screen/fullscreen/blind icon_state = "blackimageoverlay" layer = BLIND_LAYER plane = FULLSCREEN_PLANE -/obj/screen/fullscreen/curse +/atom/movable/screen/fullscreen/curse icon_state = "curse" layer = CURSE_LAYER plane = FULLSCREEN_PLANE -/obj/screen/fullscreen/impaired +/atom/movable/screen/fullscreen/impaired icon_state = "impairedoverlay" -/obj/screen/fullscreen/blurry +/atom/movable/screen/fullscreen/blurry icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "blurry" -/obj/screen/fullscreen/flash +/atom/movable/screen/fullscreen/flash icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "flash" -/obj/screen/fullscreen/flash/static +/atom/movable/screen/fullscreen/flash/static icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "noise" -/obj/screen/fullscreen/high +/atom/movable/screen/fullscreen/high icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "druggy" -/obj/screen/fullscreen/color_vision +/atom/movable/screen/fullscreen/color_vision icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "flash" alpha = 80 -/obj/screen/fullscreen/color_vision/green +/atom/movable/screen/fullscreen/color_vision/green color = "#00ff00" -/obj/screen/fullscreen/color_vision/red +/atom/movable/screen/fullscreen/color_vision/red color = "#ff0000" -/obj/screen/fullscreen/color_vision/blue +/atom/movable/screen/fullscreen/color_vision/blue color = "#0000ff" -/obj/screen/fullscreen/cinematic_backdrop +/atom/movable/screen/fullscreen/cinematic_backdrop icon = 'icons/mob/screen_gen.dmi' screen_loc = "WEST,SOUTH to EAST,NORTH" icon_state = "flash" @@ -158,7 +158,7 @@ color = "#000000" show_when_dead = TRUE -/obj/screen/fullscreen/lighting_backdrop +/atom/movable/screen/fullscreen/lighting_backdrop icon = 'icons/mob/screen_gen.dmi' icon_state = "flash" transform = matrix(200, 0, 0, 0, 200, 0) @@ -167,18 +167,18 @@ show_when_dead = TRUE //Provides darkness to the back of the lighting plane -/obj/screen/fullscreen/lighting_backdrop/lit +/atom/movable/screen/fullscreen/lighting_backdrop/lit invisibility = INVISIBILITY_LIGHTING layer = BACKGROUND_LAYER+21 color = "#000" show_when_dead = TRUE //Provides whiteness in case you don't see lights so everything is still visible -/obj/screen/fullscreen/lighting_backdrop/unlit +/atom/movable/screen/fullscreen/lighting_backdrop/unlit layer = BACKGROUND_LAYER+20 show_when_dead = TRUE -/obj/screen/fullscreen/see_through_darkness +/atom/movable/screen/fullscreen/see_through_darkness icon_state = "nightvision" plane = LIGHTING_PLANE layer = LIGHTING_LAYER diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index e9f325fb10..88407bb04c 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -1,15 +1,15 @@ //Used for normal mobs that have hands. /datum/hud/dextrous/New(mob/living/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - using = new /obj/screen/drop() + using = new /atom/movable/screen/drop() using.icon = ui_style using.screen_loc = ui_drone_drop using.hud = src static_inventory += using - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() @@ -18,14 +18,14 @@ build_hand_slots() - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_1_m" using.screen_loc = ui_swaphand_position(owner,1) using.hud = src static_inventory += using - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) @@ -35,29 +35,29 @@ if(mymob.possible_a_intents) if(mymob.possible_a_intents.len == 4) // All possible intents - full intent selector - action_intent = new /obj/screen/act_intent/segmented + action_intent = new /atom/movable/screen/act_intent/segmented else - action_intent = new /obj/screen/act_intent + action_intent = new /atom/movable/screen/act_intent action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent action_intent.hud = src static_inventory += action_intent - zone_select = new /obj/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src zone_select.update_icon() static_inventory += zone_select - using = new /obj/screen/area_creator + using = new /atom/movable/screen/area_creator using.icon = ui_style using.hud = src static_inventory += using mymob.client.screen = list() - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 0cdac111b0..b9514bff46 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -1,79 +1,79 @@ -/obj/screen/ghost +/atom/movable/screen/ghost icon = 'icons/mob/screen_ghost.dmi' -/obj/screen/ghost/MouseEntered() +/atom/movable/screen/ghost/MouseEntered() flick(icon_state + "_anim", src) -/obj/screen/ghost/jumptomob +/atom/movable/screen/ghost/jumptomob name = "Jump to mob" icon_state = "jumptomob" -/obj/screen/ghost/jumptomob/Click() +/atom/movable/screen/ghost/jumptomob/Click() var/mob/dead/observer/G = usr G.jumptomob() -/obj/screen/ghost/orbit +/atom/movable/screen/ghost/orbit name = "Orbit" icon_state = "orbit" -/obj/screen/ghost/orbit/Click() +/atom/movable/screen/ghost/orbit/Click() var/mob/dead/observer/G = usr G.follow() -/obj/screen/ghost/reenter_corpse +/atom/movable/screen/ghost/reenter_corpse name = "Reenter corpse" icon_state = "reenter_corpse" -/obj/screen/ghost/reenter_corpse/Click() +/atom/movable/screen/ghost/reenter_corpse/Click() var/mob/dead/observer/G = usr G.reenter_corpse() -/obj/screen/ghost/teleport +/atom/movable/screen/ghost/teleport name = "Teleport" icon_state = "teleport" -/obj/screen/ghost/teleport/Click() +/atom/movable/screen/ghost/teleport/Click() var/mob/dead/observer/G = usr G.dead_tele() -/obj/screen/ghost/spawners +/atom/movable/screen/ghost/spawners name = "Ghost role spawners" icon_state = "spawners" -/obj/screen/ghost/spawners/Click() +/atom/movable/screen/ghost/spawners/Click() var/mob/dead/observer/G = usr G.open_spawners_menu() /datum/hud/ghost/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - using = new /obj/screen/ghost/jumptomob() + using = new /atom/movable/screen/ghost/jumptomob() using.screen_loc = ui_ghost_jumptomob using.hud = src static_inventory += using - using = new /obj/screen/ghost/orbit() + using = new /atom/movable/screen/ghost/orbit() using.screen_loc = ui_ghost_orbit using.hud = src static_inventory += using - using = new /obj/screen/ghost/reenter_corpse() + using = new /atom/movable/screen/ghost/reenter_corpse() using.screen_loc = ui_ghost_reenter_corpse using.hud = src static_inventory += using - using = new /obj/screen/ghost/teleport() + using = new /atom/movable/screen/ghost/teleport() using.screen_loc = ui_ghost_teleport using.hud = src static_inventory += using - using = new /obj/screen/ghost/spawners() + using = new /atom/movable/screen/ghost/spawners() using.screen_loc = ui_ghost_spawners using.hud = src static_inventory += using - using = new /obj/screen/language_menu + using = new /atom/movable/screen/language_menu using.icon = ui_style using.hud = src static_inventory += using diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 35b40ee5db..7f360b48dc 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -1,18 +1,18 @@ /datum/hud/guardian/New(mob/living/simple_animal/hostile/guardian/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - healths = new /obj/screen/healths/guardian() + healths = new /atom/movable/screen/healths/guardian() healths.hud = src infodisplay += healths - using = new /obj/screen/guardian/Manifest() + using = new /atom/movable/screen/guardian/Manifest() using.screen_loc = ui_hand_position(2) using.hud = src static_inventory += using - using = new /obj/screen/guardian/Recall() + using = new /atom/movable/screen/guardian/Recall() using.screen_loc = ui_hand_position(1) using.hud = src static_inventory += using @@ -22,23 +22,23 @@ using.hud = src static_inventory += using - using = new /obj/screen/guardian/ToggleLight() + using = new /atom/movable/screen/guardian/ToggleLight() using.screen_loc = ui_inventory using.hud = src static_inventory += using - using = new /obj/screen/guardian/Communicate() + using = new /atom/movable/screen/guardian/Communicate() using.screen_loc = ui_back using.hud = src static_inventory += using /datum/hud/dextrous/guardian/New(mob/living/simple_animal/hostile/guardian/owner) //for a dextrous guardian ..() - var/obj/screen/using + var/atom/movable/screen/using if(istype(owner, /mob/living/simple_animal/hostile/guardian/dextrous)) - var/obj/screen/inventory/inv_box + var/atom/movable/screen/inventory/inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "internal storage" inv_box.icon = ui_style inv_box.icon_state = "suit_storage" @@ -46,24 +46,24 @@ inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE static_inventory += inv_box - using = new /obj/screen/guardian/Communicate() + using = new /atom/movable/screen/guardian/Communicate() using.screen_loc = ui_sstore1 static_inventory += using else - using = new /obj/screen/guardian/Communicate() + using = new /atom/movable/screen/guardian/Communicate() using.screen_loc = ui_id static_inventory += using - healths = new /obj/screen/healths/guardian() + healths = new /atom/movable/screen/healths/guardian() infodisplay += healths - using = new /obj/screen/guardian/Manifest() + using = new /atom/movable/screen/guardian/Manifest() using.screen_loc = ui_belt static_inventory += using - using = new /obj/screen/guardian/Recall() + using = new /atom/movable/screen/guardian/Recall() using.screen_loc = ui_back static_inventory += using @@ -71,7 +71,7 @@ using.screen_loc = ui_storage2 static_inventory += using - using = new /obj/screen/guardian/ToggleLight() + using = new /atom/movable/screen/guardian/ToggleLight() using.screen_loc = ui_inventory static_inventory += using @@ -91,65 +91,65 @@ ..() -/obj/screen/guardian +/atom/movable/screen/guardian icon = 'icons/mob/guardian.dmi' -/obj/screen/guardian/Manifest +/atom/movable/screen/guardian/Manifest icon_state = "manifest" name = "Manifest" desc = "Spring forth into battle!" -/obj/screen/guardian/Manifest/Click() +/atom/movable/screen/guardian/Manifest/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr G.Manifest() -/obj/screen/guardian/Recall +/atom/movable/screen/guardian/Recall icon_state = "recall" name = "Recall" desc = "Return to your user." -/obj/screen/guardian/Recall/Click() +/atom/movable/screen/guardian/Recall/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr G.Recall() -/obj/screen/guardian/ToggleMode +/atom/movable/screen/guardian/ToggleMode icon_state = "toggle" name = "Toggle Mode" desc = "Switch between ability modes." -/obj/screen/guardian/ToggleMode/Click() +/atom/movable/screen/guardian/ToggleMode/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr G.ToggleMode() -/obj/screen/guardian/ToggleMode/Inactive +/atom/movable/screen/guardian/ToggleMode/Inactive icon_state = "notoggle" //greyed out so it doesn't look like it'll work -/obj/screen/guardian/ToggleMode/Assassin +/atom/movable/screen/guardian/ToggleMode/Assassin icon_state = "stealth" name = "Toggle Stealth" desc = "Enter or exit stealth." -/obj/screen/guardian/Communicate +/atom/movable/screen/guardian/Communicate icon_state = "communicate" name = "Communicate" desc = "Communicate telepathically with your user." -/obj/screen/guardian/Communicate/Click() +/atom/movable/screen/guardian/Communicate/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr G.Communicate() -/obj/screen/guardian/ToggleLight +/atom/movable/screen/guardian/ToggleLight icon_state = "light" name = "Toggle Light" desc = "Glow like star dust." -/obj/screen/guardian/ToggleLight/Click() +/atom/movable/screen/guardian/ToggleLight/Click() if(isguardian(usr)) var/mob/living/simple_animal/hostile/guardian/G = usr G.ToggleLight() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 57335a966e..36a3cd1f1a 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -25,38 +25,38 @@ GLOBAL_LIST_INIT(available_ui_styles, list( var/inventory_shown = FALSE //Equipped item inventory var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) - var/obj/screen/ling/chems/lingchemdisplay - var/obj/screen/ling/sting/lingstingdisplay + var/atom/movable/screen/ling/chems/lingchemdisplay + var/atom/movable/screen/ling/sting/lingstingdisplay - var/obj/screen/blobpwrdisplay + var/atom/movable/screen/blobpwrdisplay - var/obj/screen/alien_plasma_display - var/obj/screen/alien_queen_finder + var/atom/movable/screen/alien_plasma_display + var/atom/movable/screen/alien_queen_finder - var/obj/screen/devil/soul_counter/devilsouldisplay + var/atom/movable/screen/devil/soul_counter/devilsouldisplay - var/obj/screen/action_intent - var/obj/screen/zone_select - var/obj/screen/pull_icon - var/obj/screen/rest_icon - var/obj/screen/throw_icon - var/obj/screen/module_store_icon + var/atom/movable/screen/action_intent + var/atom/movable/screen/zone_select + var/atom/movable/screen/pull_icon + var/atom/movable/screen/rest_icon + var/atom/movable/screen/throw_icon + var/atom/movable/screen/module_store_icon var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden - var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys + var/list/atom/movable/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...) - var/list/inv_slots[SLOTS_AMT] // /obj/screen/inventory objects, ordered by their slot ID. - var/list/hand_slots // /obj/screen/inventory/hand objects, assoc list of "[held_index]" = object - var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object + var/list/inv_slots[SLOTS_AMT] // /atom/movable/screen/inventory objects, ordered by their slot ID. + var/list/hand_slots // /atom/movable/screen/inventory/hand objects, assoc list of "[held_index]" = object + var/list/atom/movable/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object - var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle + var/atom/movable/screen/movable/action_button/hide_toggle/hide_actions_toggle var/action_buttons_hidden = FALSE - var/obj/screen/healths - var/obj/screen/healthdoll - var/obj/screen/internals + var/atom/movable/screen/healths + var/atom/movable/screen/healthdoll + var/atom/movable/screen/internals // subtypes can override this to force a specific UI style var/ui_style @@ -75,8 +75,8 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hand_slots = list() - for(var/mytype in subtypesof(/obj/screen/plane_master)) - var/obj/screen/plane_master/instance = new mytype() + for(var/mytype in subtypesof(/atom/movable/screen/plane_master)) + var/atom/movable/screen/plane_master/instance = new mytype() plane_masters["[instance.plane]"] = instance instance.backdrop(mymob) @@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( //These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay for(var/h in hand_slots) - var/obj/screen/hand = hand_slots[h] + var/atom/movable/screen/hand = hand_slots[h] if(hand) screenmob.client.screen += hand if(action_intent) @@ -207,7 +207,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( /datum/hud/proc/plane_masters_update() // Plane masters are always shown to OUR mob, never to observers for(var/thing in plane_masters) - var/obj/screen/plane_master/PM = plane_masters[thing] + var/atom/movable/screen/plane_master/PM = plane_masters[thing] PM.backdrop(mymob) mymob.client.screen += PM @@ -261,13 +261,13 @@ GLOBAL_LIST_INIT(available_ui_styles, list( //9/10 this is only called once per mob and only for 2 hands /datum/hud/proc/build_hand_slots() for(var/h in hand_slots) - var/obj/screen/inventory/hand/H = hand_slots[h] + var/atom/movable/screen/inventory/hand/H = hand_slots[h] if(H) static_inventory -= H hand_slots = list() - var/obj/screen/inventory/hand/hand_box + var/atom/movable/screen/inventory/hand/hand_box for(var/i in 1 to mymob.held_items.len) - hand_box = new /obj/screen/inventory/hand() + hand_box = new /atom/movable/screen/inventory/hand() hand_box.name = mymob.get_held_index_name(i) hand_box.icon = ui_style hand_box.icon_state = "hand_[mymob.held_index_to_dir(i)]" @@ -279,10 +279,10 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hand_box.update_icon() var/i = 1 - for(var/obj/screen/swap_hand/SH in static_inventory) + for(var/atom/movable/screen/swap_hand/SH in static_inventory) SH.screen_loc = ui_swaphand_position(mymob,!(i % 2) ? 2: 1) i++ - for(var/obj/screen/human/equip/E in static_inventory) + for(var/atom/movable/screen/human/equip/E in static_inventory) E.screen_loc = ui_equip_position(mymob) if(ismob(mymob) && mymob.hud_used == src) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 841a3e8303..e4a9dc24e8 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -1,11 +1,11 @@ -/obj/screen/human +/atom/movable/screen/human icon = 'icons/mob/screen_midnight.dmi' -/obj/screen/human/toggle +/atom/movable/screen/human/toggle name = "toggle" icon_state = "toggle" -/obj/screen/human/toggle/Click() +/atom/movable/screen/human/toggle/Click() var/mob/targetmob = usr @@ -23,26 +23,26 @@ targetmob.hud_used.hidden_inventory_update(usr) -/obj/screen/human/equip +/atom/movable/screen/human/equip name = "equip" icon_state = "act_equip" -/obj/screen/human/equip/Click() +/atom/movable/screen/human/equip/Click() if(ismecha(usr.loc)) // stops inventory actions in a mech return 1 var/mob/living/carbon/human/H = usr H.quick_equip() -/obj/screen/devil +/atom/movable/screen/devil invisibility = INVISIBILITY_ABSTRACT -/obj/screen/devil/soul_counter +/atom/movable/screen/devil/soul_counter icon = 'icons/mob/screen_gen.dmi' name = "souls owned" icon_state = "Devil-6" screen_loc = ui_devilsouldisplay -/obj/screen/devil/soul_counter/proc/update_counter(souls = 0) +/atom/movable/screen/devil/soul_counter/proc/update_counter(souls = 0) invisibility = 0 maptext = "

" switch(souls) @@ -59,53 +59,53 @@ else icon_state = "Devil-6" -/obj/screen/devil/soul_counter/proc/clear() +/atom/movable/screen/devil/soul_counter/proc/clear() invisibility = INVISIBILITY_ABSTRACT -/obj/screen/ling +/atom/movable/screen/ling invisibility = INVISIBILITY_ABSTRACT -/obj/screen/ling/sting +/atom/movable/screen/ling/sting name = "current sting" screen_loc = ui_lingstingdisplay -/obj/screen/ling/sting/Click() +/atom/movable/screen/ling/sting/Click() if(isobserver(usr)) return var/mob/living/carbon/U = usr U.unset_sting() -/obj/screen/ling/chems +/atom/movable/screen/ling/chems name = "chemical storage" icon_state = "power_display" screen_loc = ui_lingchemdisplay /datum/hud/human/New(mob/living/carbon/human/owner) ..() - owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) + owner.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) var/widescreenlayout = FALSE //CIT CHANGE - adds support for different hud layouts depending on widescreen pref if(owner.client && owner.client.prefs && owner.client.prefs.widescreenpref) //CIT CHANGE - ditto widescreenlayout = TRUE // CIT CHANGE - ditto - var/obj/screen/using - var/obj/screen/inventory/inv_box + var/atom/movable/screen/using + var/atom/movable/screen/inventory/inv_box - using = new/obj/screen/language_menu + using = new/atom/movable/screen/language_menu using.icon = ui_style if(!widescreenlayout) // CIT CHANGE using.screen_loc = ui_boxlang // CIT CHANGE using.hud = src static_inventory += using - using = new /obj/screen/area_creator + using = new /atom/movable/screen/area_creator using.icon = ui_style if(!widescreenlayout) // CIT CHANGE using.screen_loc = ui_boxarea // CIT CHANGE using.hud = src static_inventory += using - using = new /obj/screen/voretoggle() //We fancy Vore now + using = new /atom/movable/screen/voretoggle() //We fancy Vore now using.icon = tg_ui_icon_to_cit_ui(ui_style) using.screen_loc = ui_voremode if(!widescreenlayout) @@ -113,7 +113,7 @@ using.hud = src static_inventory += using - action_intent = new /obj/screen/act_intent/segmented + action_intent = new /atom/movable/screen/act_intent/segmented action_intent.icon_state = mymob.a_intent action_intent.hud = src static_inventory += action_intent @@ -132,13 +132,13 @@ resistdelay.screen_loc = ui_resistdelay static_inventory += resistdelay - using = new /obj/screen/drop() + using = new /atom/movable/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw using.hud = src static_inventory += using - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "i_clothing" inv_box.icon = ui_style inv_box.slot_id = SLOT_W_UNIFORM @@ -146,7 +146,7 @@ inv_box.screen_loc = ui_iclothing toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "o_clothing" inv_box.icon = ui_style inv_box.slot_id = SLOT_WEAR_SUIT @@ -156,21 +156,21 @@ build_hand_slots() - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_1" using.screen_loc = ui_swaphand_position(owner,1) using.hud = src static_inventory += using - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) using.hud = src static_inventory += using - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "id" inv_box.icon = ui_style inv_box.icon_state = "id" @@ -178,7 +178,7 @@ inv_box.slot_id = SLOT_WEAR_ID static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -186,7 +186,7 @@ inv_box.slot_id = SLOT_WEAR_MASK toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "neck" inv_box.icon = ui_style inv_box.icon_state = "neck" @@ -194,7 +194,7 @@ inv_box.slot_id = SLOT_NECK toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "back" inv_box.icon = ui_style inv_box.icon_state = "back" @@ -202,7 +202,7 @@ inv_box.slot_id = SLOT_BACK static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "storage1" inv_box.icon = ui_style inv_box.icon_state = "pocket" @@ -210,7 +210,7 @@ inv_box.slot_id = SLOT_L_STORE static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "storage2" inv_box.icon = ui_style inv_box.icon_state = "pocket" @@ -218,7 +218,7 @@ inv_box.slot_id = SLOT_R_STORE static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "suit storage" inv_box.icon = ui_style inv_box.icon_state = "suit_storage" @@ -226,32 +226,32 @@ inv_box.slot_id = SLOT_S_STORE static_inventory += inv_box - using = new /obj/screen/resist() + using = new /atom/movable/screen/resist() using.icon = ui_style using.screen_loc = ui_overridden_resist // CIT CHANGE - changes this to overridden resist using.hud = src hotkeybuttons += using - using = new /obj/screen/rest() + using = new /atom/movable/screen/rest() using.icon = ui_style using.screen_loc = ui_pull_resist using.hud = src static_inventory += using //END OF CIT CHANGES - using = new /obj/screen/human/toggle() + using = new /atom/movable/screen/human/toggle() using.icon = ui_style using.screen_loc = ui_inventory using.hud = src static_inventory += using - using = new /obj/screen/human/equip() + using = new /atom/movable/screen/human/equip() using.icon = ui_style using.screen_loc = ui_equip_position(mymob) using.hud = src static_inventory += using - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "gloves" inv_box.icon = ui_style inv_box.icon_state = "gloves" @@ -259,7 +259,7 @@ inv_box.slot_id = SLOT_GLOVES toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "eyes" inv_box.icon = ui_style inv_box.icon_state = "glasses" @@ -267,7 +267,7 @@ inv_box.slot_id = SLOT_GLASSES toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "ears" inv_box.icon = ui_style inv_box.icon_state = "ears" @@ -275,7 +275,7 @@ inv_box.slot_id = SLOT_EARS toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "head" inv_box.icon = ui_style inv_box.icon_state = "head" @@ -283,7 +283,7 @@ inv_box.slot_id = SLOT_HEAD toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "shoes" inv_box.icon = ui_style inv_box.icon_state = "shoes" @@ -291,7 +291,7 @@ inv_box.slot_id = SLOT_SHOES toggleable_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "belt" inv_box.icon = ui_style inv_box.icon_state = "belt" @@ -300,72 +300,72 @@ inv_box.slot_id = SLOT_BELT static_inventory += inv_box - throw_icon = new /obj/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw throw_icon.hud = src hotkeybuttons += throw_icon - internals = new /obj/screen/internals() + internals = new /atom/movable/screen/internals() internals.hud = src infodisplay += internals - healths = new /obj/screen/healths() + healths = new /atom/movable/screen/healths() healths.hud = src infodisplay += healths - staminas = new /obj/screen/staminas() + staminas = new /atom/movable/screen/staminas() staminas.hud = src infodisplay += staminas if(!CONFIG_GET(flag/disable_stambuffer)) - staminabuffer = new /obj/screen/staminabuffer() + staminabuffer = new /atom/movable/screen/staminabuffer() staminabuffer.hud = src infodisplay += staminabuffer //END OF CIT CHANGES - healthdoll = new /obj/screen/healthdoll() + healthdoll = new /atom/movable/screen/healthdoll() healthdoll.hud = src infodisplay += healthdoll - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() pull_icon.screen_loc = ui_pull_resist static_inventory += pull_icon - lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay = new /atom/movable/screen/ling/chems() lingchemdisplay.hud = src infodisplay += lingchemdisplay - lingstingdisplay = new /obj/screen/ling/sting() + lingstingdisplay = new /atom/movable/screen/ling/sting() lingstingdisplay.hud = src infodisplay += lingstingdisplay - devilsouldisplay = new /obj/screen/devil/soul_counter + devilsouldisplay = new /atom/movable/screen/devil/soul_counter devilsouldisplay.hud = src infodisplay += devilsouldisplay - blood_display = new /obj/screen/bloodsucker/blood_counter // Blood Volume + blood_display = new /atom/movable/screen/bloodsucker/blood_counter // Blood Volume blood_display.hud = src infodisplay += blood_display - vamprank_display = new /obj/screen/bloodsucker/rank_counter // Bloodsucker Rank + vamprank_display = new /atom/movable/screen/bloodsucker/rank_counter // Bloodsucker Rank vamprank_display.hud = src infodisplay += vamprank_display - sunlight_display = new /obj/screen/bloodsucker/sunlight_counter // Sunlight + sunlight_display = new /atom/movable/screen/bloodsucker/sunlight_counter // Sunlight sunlight_display.hud = src infodisplay += sunlight_display - zone_select = new /obj/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src zone_select.update_icon() static_inventory += zone_select - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv @@ -374,12 +374,12 @@ update_locked_slots() /datum/hud/human/proc/assert_move_intent_ui(mob/living/carbon/human/owner = mymob, on_new = FALSE) - var/obj/screen/using + var/atom/movable/screen/using // delete old ones - var/list/obj/screen/victims = list() - victims += locate(/obj/screen/mov_intent) in static_inventory - victims += locate(/obj/screen/sprintbutton) in static_inventory - victims += locate(/obj/screen/sprint_buffer) in static_inventory + var/list/atom/movable/screen/victims = list() + victims += locate(/atom/movable/screen/mov_intent) in static_inventory + victims += locate(/atom/movable/screen/sprintbutton) in static_inventory + victims += locate(/atom/movable/screen/sprint_buffer) in static_inventory if(victims) static_inventory -= victims if(mymob?.client) @@ -388,7 +388,7 @@ // make new ones // walk/run - using = new /obj/screen/mov_intent + using = new /atom/movable/screen/mov_intent using.icon = tg_ui_icon_to_cit_ui(ui_style) // CIT CHANGE - overrides mov intent icon using.screen_loc = ui_movi using.hud = src @@ -401,7 +401,7 @@ return // sprint button - using = new /obj/screen/sprintbutton + using = new /atom/movable/screen/sprintbutton using.icon = tg_ui_icon_to_cit_ui(ui_style) using.icon_state = ((owner.combat_flags & COMBAT_FLAG_SPRINT_ACTIVE) ? "act_sprint_on" : "act_sprint") using.screen_loc = ui_movi @@ -411,7 +411,7 @@ owner?.client?.screen += using // same as above but buffer. - sprint_buffer = new /obj/screen/sprint_buffer + sprint_buffer = new /atom/movable/screen/sprint_buffer sprint_buffer.screen_loc = ui_sprintbufferloc sprint_buffer.hud = src static_inventory += sprint_buffer @@ -425,7 +425,7 @@ if(!istype(H) || !H.dna.species) return var/datum/species/S = H.dna.species - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) if(inv.slot_id in S.no_equip) inv.alpha = 128 diff --git a/code/_onclick/hud/lavaland_elite.dm b/code/_onclick/hud/lavaland_elite.dm index a36d9a0f36..f3ca5fec32 100644 --- a/code/_onclick/hud/lavaland_elite.dm +++ b/code/_onclick/hud/lavaland_elite.dm @@ -4,13 +4,13 @@ /datum/hud/lavaland_elite/New(mob/living/simple_animal/hostile/asteroid/elite) ..() - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.hud = src pull_icon.update_icon() pull_icon.screen_loc = ui_living_pull static_inventory += pull_icon - healths = new /obj/screen/healths/lavaland_elite() + healths = new /atom/movable/screen/healths/lavaland_elite() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm index 2ecfe80ab5..72c98433a6 100644 --- a/code/_onclick/hud/map_popups.dm +++ b/code/_onclick/hud/map_popups.dm @@ -2,7 +2,7 @@ * A screen object, which acts as a container for turfs and other things * you want to show on the map, which you usually attach to "vis_contents". */ -/obj/screen/map_view +/atom/movable/screen/map_view // Map view has to be on the lowest plane to enable proper lighting layer = GAME_PLANE plane = GAME_PLANE @@ -12,7 +12,7 @@ * It is also implicitly used to allocate a rectangle on the map, which will * be used for auto-scaling the map. */ -/obj/screen/background +/atom/movable/screen/background name = "background" icon = 'icons/mob/map_backgrounds.dmi' icon_state = "clear" @@ -25,7 +25,7 @@ * * If applicable, "assigned_map" has to be assigned before this proc call. */ -/obj/screen/proc/set_position(x, y, px = 0, py = 0) +/atom/movable/screen/proc/set_position(x, y, px = 0, py = 0) if(assigned_map) screen_loc = "[assigned_map]:[x]:[px],[y]:[py]" else @@ -36,7 +36,7 @@ * * If applicable, "assigned_map" has to be assigned before this proc call. */ -/obj/screen/proc/fill_rect(x1, y1, x2, y2) +/atom/movable/screen/proc/fill_rect(x1, y1, x2, y2) if(assigned_map) screen_loc = "[assigned_map]:[x1],[y1] to [x2],[y2]" else @@ -68,7 +68,7 @@ /client/proc/clear_map(map_name) if(!map_name || !(map_name in screen_maps)) return FALSE - for(var/obj/screen/screen_obj in screen_maps[map_name]) + for(var/atom/movable/screen/screen_obj in screen_maps[map_name]) screen_maps[map_name] -= screen_obj if(screen_obj.del_on_map_removal) qdel(screen_obj) @@ -122,7 +122,7 @@ var/y_value = world.icon_size * tilesize * height var/map_name = create_popup(popup_name, x_value, y_value) - var/obj/screen/background/background = new + var/atom/movable/screen/background/background = new background.assigned_map = map_name background.fill_rect(1, 1, width, height) if(bg_icon) diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index d665330aac..376db7bf96 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -1,28 +1,28 @@ /datum/hud/monkey/New(mob/living/carbon/monkey/owner) ..() - var/obj/screen/using - var/obj/screen/inventory/inv_box + var/atom/movable/screen/using + var/atom/movable/screen/inventory/inv_box - action_intent = new /obj/screen/act_intent() + action_intent = new /atom/movable/screen/act_intent() action_intent.icon = ui_style action_intent.icon_state = mymob.a_intent action_intent.screen_loc = ui_acti action_intent.hud = src static_inventory += action_intent - using = new /obj/screen/mov_intent() + using = new /atom/movable/screen/mov_intent() using.icon = ui_style using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi using.hud = src static_inventory += using - using = new/obj/screen/language_menu + using = new/atom/movable/screen/language_menu using.icon = ui_style using.hud = src static_inventory += using - using = new /obj/screen/drop() + using = new /atom/movable/screen/drop() using.icon = ui_style using.screen_loc = ui_drop_throw using.hud = src @@ -30,21 +30,21 @@ build_hand_slots() - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_1_m" //extra wide! using.screen_loc = ui_swaphand_position(owner,1) using.hud = src static_inventory += using - using = new /obj/screen/swap_hand() + using = new /atom/movable/screen/swap_hand() using.icon = ui_style using.icon_state = "swap_2" using.screen_loc = ui_swaphand_position(owner,2) using.hud = src static_inventory += using - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "mask" inv_box.icon = ui_style inv_box.icon_state = "mask" @@ -53,7 +53,7 @@ inv_box.slot_id = SLOT_WEAR_MASK static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "neck" inv_box.icon = ui_style inv_box.icon_state = "neck" @@ -62,7 +62,7 @@ inv_box.slot_id = SLOT_NECK static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "head" inv_box.icon = ui_style inv_box.icon_state = "head" @@ -71,7 +71,7 @@ inv_box.slot_id = SLOT_HEAD static_inventory += inv_box - inv_box = new /obj/screen/inventory() + inv_box = new /atom/movable/screen/inventory() inv_box.name = "back" inv_box.icon = ui_style inv_box.icon_state = "back" @@ -79,37 +79,37 @@ inv_box.slot_id = SLOT_BACK static_inventory += inv_box - throw_icon = new /obj/screen/throw_catch() + throw_icon = new /atom/movable/screen/throw_catch() throw_icon.icon = ui_style throw_icon.screen_loc = ui_drop_throw throw_icon.hud = src hotkeybuttons += throw_icon - internals = new /obj/screen/internals() + internals = new /atom/movable/screen/internals() internals.hud = src infodisplay += internals - healths = new /obj/screen/healths() + healths = new /atom/movable/screen/healths() healths.hud = src infodisplay += healths - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.screen_loc = ui_pull_resist pull_icon.hud = src pull_icon.update_icon() static_inventory += pull_icon - lingchemdisplay = new /obj/screen/ling/chems() + lingchemdisplay = new /atom/movable/screen/ling/chems() lingchemdisplay.hud = src infodisplay += lingchemdisplay - lingstingdisplay = new /obj/screen/ling/sting() + lingstingdisplay = new /atom/movable/screen/ling/sting() lingstingdisplay.hud = src infodisplay += lingstingdisplay - zone_select = new /obj/screen/zone_sel() + zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src zone_select.update_icon() @@ -117,13 +117,13 @@ mymob.client.screen = list() - using = new /obj/screen/resist() + using = new /atom/movable/screen/resist() using.icon = ui_style using.screen_loc = ui_pull_resist using.hud = src hotkeybuttons += using - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src inv_slots[inv.slot_id] = inv diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index ae11613885..eeb56d67f5 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -8,7 +8,7 @@ //Movable Screen Object //Not tied to the grid, places it's center where the cursor is -/obj/screen/movable +/atom/movable/screen/movable var/snap2grid = FALSE var/moved = FALSE var/locked = FALSE @@ -18,11 +18,11 @@ //Snap Screen Object //Tied to the grid, snaps to the nearest turf -/obj/screen/movable/snap +/atom/movable/screen/movable/snap snap2grid = TRUE -/obj/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) +/atom/movable/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) if(locked) //no! I am locked! begone! return var/list/PM = params2list(params) @@ -56,7 +56,7 @@ set category = "Debug" set name = "Spawn Movable UI Object" - var/obj/screen/movable/M = new() + var/atom/movable/screen/movable/M = new() M.name = "Movable UI Object" M.icon_state = "block" M.maptext = "Movable" @@ -75,7 +75,7 @@ set category = "Debug" set name = "Spawn Snap UI Object" - var/obj/screen/movable/snap/S = new() + var/atom/movable/screen/movable/snap/S = new() S.name = "Snap UI Object" S.icon_state = "block" S.maptext = "Snap" diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 5d48f430d7..a98fec03c4 100755 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -7,12 +7,12 @@ if(!length(C.parallax_layers_cached)) C.parallax_layers_cached = list() - C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_1(null, C.view) - C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_2(null, C.view) - C.parallax_layers_cached += new /obj/screen/parallax_layer/planet(null, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/planet(null, C.view) if(SSparallax.random_layer) C.parallax_layers_cached += new SSparallax.random_layer - C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_3(null, C.view) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, C.view) C.parallax_layers = C.parallax_layers_cached.Copy() @@ -20,9 +20,9 @@ C.parallax_layers.len = C.parallax_layers_max C.screen |= (C.parallax_layers) - var/obj/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] + var/atom/movable/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] if(screenmob != mymob) - C.screen -= locate(/obj/screen/plane_master/parallax_white) in C.screen + C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen C.screen += PM PM.color = list( 0, 0, 0, 0, @@ -37,9 +37,9 @@ var/mob/screenmob = viewmob || mymob var/client/C = screenmob.client C.screen -= (C.parallax_layers_cached) - var/obj/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] + var/atom/movable/screen/plane_master/PM = screenmob.hud_used.plane_masters["[PLANE_SPACE]"] if(screenmob != mymob) - C.screen -= locate(/obj/screen/plane_master/parallax_white) in C.screen + C.screen -= locate(/atom/movable/screen/plane_master/parallax_white) in C.screen C.screen += PM PM.color = initial(PM.color) C.parallax_layers = null @@ -90,7 +90,7 @@ if(new_parallax_movedir == FALSE) var/animate_time = 0 for(var/thing in C.parallax_layers) - var/obj/screen/parallax_layer/L = thing + var/atom/movable/screen/parallax_layer/L = thing L.icon_state = initial(L.icon_state) L.update_o(C.view) var/T = PARALLAX_LOOP_TIME / L.speed @@ -113,7 +113,7 @@ var/shortesttimer if(!skip_windups) for(var/thing in C.parallax_layers) - var/obj/screen/parallax_layer/L = thing + var/atom/movable/screen/parallax_layer/L = thing var/T = PARALLAX_LOOP_TIME / L.speed if (isnull(shortesttimer)) @@ -141,7 +141,7 @@ return C.parallax_animate_timer = FALSE for(var/thing in C.parallax_layers) - var/obj/screen/parallax_layer/L = thing + var/atom/movable/screen/parallax_layer/L = thing if (!new_parallax_movedir) animate(L) continue @@ -188,7 +188,7 @@ C.last_parallax_shift = world.time for(var/thing in C.parallax_layers) - var/obj/screen/parallax_layer/L = thing + var/atom/movable/screen/parallax_layer/L = thing L.update_status(mymob) if (L.view_sized != C.view) L.update_o(C.view) @@ -233,7 +233,7 @@ var/area/areaobj = get_area(client.eye) hud_used.set_parallax_movedir(areaobj.parallax_movedir, TRUE) -/obj/screen/parallax_layer +/atom/movable/screen/parallax_layer icon = 'icons/effects/parallax.dmi' var/speed = 1 var/offset_x = 0 @@ -246,13 +246,13 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/parallax_layer/Initialize(mapload, view) +/atom/movable/screen/parallax_layer/Initialize(mapload, view) . = ..() if (!view) view = world.view update_o(view) -/obj/screen/parallax_layer/proc/update_o(view) +/atom/movable/screen/parallax_layer/proc/update_o(view) if (!view) view = world.view @@ -271,52 +271,52 @@ add_overlay(new_overlays) view_sized = view -/obj/screen/parallax_layer/proc/update_status(mob/M) +/atom/movable/screen/parallax_layer/proc/update_status(mob/M) return -/obj/screen/parallax_layer/layer_1 +/atom/movable/screen/parallax_layer/layer_1 icon_state = "layer1" speed = 0.6 layer = 1 -/obj/screen/parallax_layer/layer_2 +/atom/movable/screen/parallax_layer/layer_2 icon_state = "layer2" speed = 1 layer = 2 -/obj/screen/parallax_layer/layer_3 +/atom/movable/screen/parallax_layer/layer_3 icon_state = "layer3" speed = 1.4 layer = 3 -/obj/screen/parallax_layer/random +/atom/movable/screen/parallax_layer/random blend_mode = BLEND_OVERLAY speed = 3 layer = 3 -/obj/screen/parallax_layer/random/space_gas +/atom/movable/screen/parallax_layer/random/space_gas icon_state = "space_gas" -/obj/screen/parallax_layer/random/space_gas/Initialize(mapload, view) +/atom/movable/screen/parallax_layer/random/space_gas/Initialize(mapload, view) . = ..() src.add_atom_colour(SSparallax.random_parallax_color, ADMIN_COLOUR_PRIORITY) -/obj/screen/parallax_layer/random/asteroids +/atom/movable/screen/parallax_layer/random/asteroids icon_state = "asteroids" -/obj/screen/parallax_layer/planet +/atom/movable/screen/parallax_layer/planet icon_state = "planet" blend_mode = BLEND_OVERLAY absolute = TRUE //Status of seperation speed = 3 layer = 30 -/obj/screen/parallax_layer/planet/update_status(mob/M) +/atom/movable/screen/parallax_layer/planet/update_status(mob/M) var/client/C = M.client var/turf/posobj = get_turf(C.eye) if(!posobj) return invisibility = is_station_level(posobj.z) ? 0 : INVISIBILITY_ABSTRACT -/obj/screen/parallax_layer/planet/update_o() +/atom/movable/screen/parallax_layer/planet/update_o() return //Shit won't move diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index 5e474331f6..847c49b0cc 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -1,4 +1,4 @@ -/obj/screen/movable/pic_in_pic +/atom/movable/screen/movable/pic_in_pic name = "Picture-in-picture" screen_loc = "CENTER" plane = FLOOR_PLANE @@ -7,18 +7,18 @@ var/height = 0 var/list/shown_to = list() var/list/viewing_turfs = list() - var/obj/screen/component_button/button_x - var/obj/screen/component_button/button_expand - var/obj/screen/component_button/button_shrink + var/atom/movable/screen/component_button/button_x + var/atom/movable/screen/component_button/button_expand + var/atom/movable/screen/component_button/button_shrink var/mutable_appearance/standard_background var/const/max_dimensions = 10 -/obj/screen/movable/pic_in_pic/Initialize() +/atom/movable/screen/movable/pic_in_pic/Initialize() . = ..() make_backgrounds() -/obj/screen/movable/pic_in_pic/Destroy() +/atom/movable/screen/movable/pic_in_pic/Destroy() for(var/C in shown_to) unshow_to(C) QDEL_NULL(button_x) @@ -26,7 +26,7 @@ QDEL_NULL(button_expand) return ..() -/obj/screen/movable/pic_in_pic/component_click(obj/screen/component_button/component, params) +/atom/movable/screen/movable/pic_in_pic/component_click(obj/screen/component_button/component, params) if(component == button_x) qdel(src) else if(component == button_expand) @@ -34,13 +34,13 @@ else if(component == button_shrink) set_view_size(width-1, height-1) -/obj/screen/movable/pic_in_pic/proc/make_backgrounds() +/atom/movable/screen/movable/pic_in_pic/proc/make_backgrounds() standard_background = new /mutable_appearance() standard_background.icon = 'icons/misc/pic_in_pic.dmi' standard_background.icon_state = "background" standard_background.layer = SPACE_LAYER -/obj/screen/movable/pic_in_pic/proc/add_buttons() +/atom/movable/screen/movable/pic_in_pic/proc/add_buttons() var/static/mutable_appearance/move_tab if(!move_tab) move_tab = new /mutable_appearance() @@ -55,7 +55,7 @@ add_overlay(move_tab) if(!button_x) - button_x = new /obj/screen/component_button(null, src) + button_x = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "close" MA.icon = 'icons/misc/pic_in_pic.dmi' @@ -68,7 +68,7 @@ vis_contents += button_x if(!button_expand) - button_expand = new /obj/screen/component_button(null, src) + button_expand = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "expand" MA.icon = 'icons/misc/pic_in_pic.dmi' @@ -81,7 +81,7 @@ vis_contents += button_expand if(!button_shrink) - button_shrink = new /obj/screen/component_button(null, src) + button_shrink = new /atom/movable/screen/component_button(null, src) var/mutable_appearance/MA = new /mutable_appearance() MA.name = "shrink" MA.icon = 'icons/misc/pic_in_pic.dmi' @@ -93,7 +93,7 @@ button_shrink.transform = M vis_contents += button_shrink -/obj/screen/movable/pic_in_pic/proc/add_background() +/atom/movable/screen/movable/pic_in_pic/proc/add_background() if((width > 0) && (height > 0)) var/matrix/M = matrix() M.Scale(width + 0.5, height + 0.5) @@ -101,7 +101,7 @@ standard_background.transform = M add_overlay(standard_background) -/obj/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE) +/atom/movable/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE) width = clamp(width, 0, max_dimensions) height = clamp(height, 0, max_dimensions) src.width = width @@ -115,19 +115,19 @@ if(do_refresh) refresh_view() -/obj/screen/movable/pic_in_pic/proc/set_view_center(atom/target, do_refresh = TRUE) +/atom/movable/screen/movable/pic_in_pic/proc/set_view_center(atom/target, do_refresh = TRUE) center = target if(do_refresh) refresh_view() -/obj/screen/movable/pic_in_pic/proc/refresh_view() +/atom/movable/screen/movable/pic_in_pic/proc/refresh_view() vis_contents -= viewing_turfs if(!width || !height) return viewing_turfs = get_visible_turfs() vis_contents += viewing_turfs -/obj/screen/movable/pic_in_pic/proc/get_visible_turfs() +/atom/movable/screen/movable/pic_in_pic/proc/get_visible_turfs() var/turf/T = get_turf(center) if(!T) return list() @@ -135,12 +135,12 @@ var/turf/upperright = locate(min(world.maxx, lowerleft.x + width - 1), min(world.maxy, lowerleft.y + height - 1), lowerleft.z) return block(lowerleft, upperright) -/obj/screen/movable/pic_in_pic/proc/show_to(client/C) +/atom/movable/screen/movable/pic_in_pic/proc/show_to(client/C) if(C) shown_to[C] = 1 C.screen += src -/obj/screen/movable/pic_in_pic/proc/unshow_to(client/C) +/atom/movable/screen/movable/pic_in_pic/proc/unshow_to(client/C) if(C) shown_to -= C C.screen -= src diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index dcf1091264..bb6a9cd925 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -1,4 +1,4 @@ -/obj/screen/plane_master +/atom/movable/screen/plane_master screen_loc = "CENTER" icon_state = "blank" appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR @@ -6,25 +6,25 @@ var/show_alpha = 255 var/hide_alpha = 0 -/obj/screen/plane_master/proc/Show(override) +/atom/movable/screen/plane_master/proc/Show(override) alpha = override || show_alpha -/obj/screen/plane_master/proc/Hide(override) +/atom/movable/screen/plane_master/proc/Hide(override) alpha = override || hide_alpha //Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928 //Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong. -/obj/screen/plane_master/proc/backdrop(mob/mymob) +/atom/movable/screen/plane_master/proc/backdrop(mob/mymob) ///Things rendered on "openspace"; holes in multi-z -/obj/screen/plane_master/openspace +/atom/movable/screen/plane_master/openspace name = "open space plane master" plane = OPENSPACE_BACKDROP_PLANE appearance_flags = PLANE_MASTER blend_mode = BLEND_MULTIPLY alpha = 255 -/obj/screen/plane_master/openspace/Initialize() +/atom/movable/screen/plane_master/openspace/Initialize() . = ..() filters += filter(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE) @@ -32,100 +32,100 @@ filters += filter(type = "drop_shadow", color = "#04080FAA", size = -15) filters += filter(type = "drop_shadow", color = "#04080FAA", size = -20) -/obj/screen/plane_master/proc/outline(_size, _color) +/atom/movable/screen/plane_master/proc/outline(_size, _color) filters += filter(type = "outline", size = _size, color = _color) -/obj/screen/plane_master/proc/shadow(_size, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA") +/atom/movable/screen/plane_master/proc/shadow(_size, _offset = 0, _x = 0, _y = 0, _color = "#04080FAA") filters += filter(type = "drop_shadow", x = _x, y = _y, color = _color, size = _size, offset = _offset) ///Contains just the floor -/obj/screen/plane_master/floor +/atom/movable/screen/plane_master/floor name = "floor plane master" plane = FLOOR_PLANE appearance_flags = PLANE_MASTER blend_mode = BLEND_OVERLAY -/obj/screen/plane_master/wall +/atom/movable/screen/plane_master/wall name = "wall plane master" plane = WALL_PLANE appearance_flags = PLANE_MASTER -/obj/screen/plane_master/wall/backdrop(mob/mymob) +/atom/movable/screen/plane_master/wall/backdrop(mob/mymob) if(mymob?.client?.prefs.ambientocclusion) add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(4, "#04080FAA")) else remove_filter("ambient_occlusion") -/obj/screen/plane_master/above_wall +/atom/movable/screen/plane_master/above_wall name = "above wall plane master" plane = ABOVE_WALL_PLANE appearance_flags = PLANE_MASTER -/obj/screen/plane_master/above_wall/Initialize() +/atom/movable/screen/plane_master/above_wall/Initialize() . = ..() add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)) -/obj/screen/plane_master/above_wall/backdrop(mob/mymob) +/atom/movable/screen/plane_master/above_wall/backdrop(mob/mymob) if(mymob?.client?.prefs.ambientocclusion) add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(3, "#04080F64")) else remove_filter("ambient_occlusion") ///Contains most things in the game world -/obj/screen/plane_master/game_world +/atom/movable/screen/plane_master/game_world name = "game world plane master" plane = GAME_PLANE appearance_flags = PLANE_MASTER //should use client color blend_mode = BLEND_OVERLAY -/obj/screen/plane_master/game_world/Initialize() +/atom/movable/screen/plane_master/game_world/Initialize() . = ..() add_filter("vision_cone", 100, list(type="alpha", render_source=FIELD_OF_VISION_RENDER_TARGET, flags=MASK_INVERSE)) -/obj/screen/plane_master/game_world/backdrop(mob/mymob) +/atom/movable/screen/plane_master/game_world/backdrop(mob/mymob) if(mymob?.client?.prefs.ambientocclusion) add_filter("ambient_occlusion", 0, AMBIENT_OCCLUSION(4, "#04080FAA")) else remove_filter("ambient_occlusion") ///Contains all shadow cone masks, whose image overrides are displayed only to their respective owners. -/obj/screen/plane_master/field_of_vision +/atom/movable/screen/plane_master/field_of_vision name = "field of vision mask plane master" plane = FIELD_OF_VISION_PLANE render_target = FIELD_OF_VISION_RENDER_TARGET mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/plane_master/field_of_vision/Initialize() +/atom/movable/screen/plane_master/field_of_vision/Initialize() . = ..() filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE) ///Used to display the owner and its adjacent surroundings through the FoV plane mask. -/obj/screen/plane_master/field_of_vision_blocker +/atom/movable/screen/plane_master/field_of_vision_blocker name = "field of vision blocker plane master" plane = FIELD_OF_VISION_BLOCKER_PLANE render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET mouse_opacity = MOUSE_OPACITY_TRANSPARENT ///Stores the visible portion of the FoV shadow cone. -/obj/screen/plane_master/field_of_vision_visual +/atom/movable/screen/plane_master/field_of_vision_visual name = "field of vision visual plane master" plane = FIELD_OF_VISION_VISUAL_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/plane_master/field_of_vision_visual/Initialize() +/atom/movable/screen/plane_master/field_of_vision_visual/Initialize() . = ..() filters += filter(type="alpha", render_source=FIELD_OF_VISION_BLOCKER_RENDER_TARGET, flags=MASK_INVERSE) ///Contains all lighting objects -/obj/screen/plane_master/lighting +/atom/movable/screen/plane_master/lighting name = "lighting plane master" plane = LIGHTING_PLANE blend_mode = BLEND_MULTIPLY mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/plane_master/lighting/backdrop(mob/mymob) - mymob.overlay_fullscreen("lighting_backdrop_lit", /obj/screen/fullscreen/lighting_backdrop/lit) - mymob.overlay_fullscreen("lighting_backdrop_unlit", /obj/screen/fullscreen/lighting_backdrop/unlit) +/atom/movable/screen/plane_master/lighting/backdrop(mob/mymob) + mymob.overlay_fullscreen("lighting_backdrop_lit", /atom/movable/screen/fullscreen/lighting_backdrop/lit) + mymob.overlay_fullscreen("lighting_backdrop_unlit", /atom/movable/screen/fullscreen/lighting_backdrop/unlit) /*! * This system works by exploiting BYONDs color matrix filter to use layers to handle emissive blockers. @@ -153,22 +153,22 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT render_target = EMISSIVE_RENDER_TARGET -/obj/screen/plane_master/emissive/Initialize() +/atom/movable/screen/plane_master/emissive/Initialize() . = ..() add_filter("em_block_masking", 1, color_matrix_filter(GLOB.em_mask_matrix)) ///Contains space parallax -/obj/screen/plane_master/parallax +/atom/movable/screen/plane_master/parallax name = "parallax plane master" plane = PLANE_SPACE_PARALLAX blend_mode = BLEND_MULTIPLY mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/plane_master/parallax_white +/atom/movable/screen/plane_master/parallax_white name = "parallax whitifier plane master" plane = PLANE_SPACE -/obj/screen/plane_master/camera_static +/atom/movable/screen/plane_master/camera_static name = "camera static plane master" plane = CAMERA_STATIC_PLANE appearance_flags = PLANE_MASTER @@ -176,7 +176,7 @@ //Reserved to chat messages, so they are still displayed above the field of vision masking. -/obj/screen/plane_master/chat_messages +/atom/movable/screen/plane_master/chat_messages name = "runechat plane master" plane = CHAT_PLANE appearance_flags = PLANE_MASTER diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 7d22b70cbc..f817851999 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -3,49 +3,49 @@ GLOBAL_LIST_EMPTY(radial_menus) -/obj/screen/radial +/atom/movable/screen/radial icon = 'icons/mob/radial.dmi' layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE var/datum/radial_menu/parent -/obj/screen/radial/slice +/atom/movable/screen/radial/slice icon_state = "radial_slice" var/choice var/next_page = FALSE -/obj/screen/radial/slice/MouseEntered(location, control, params) +/atom/movable/screen/radial/slice/MouseEntered(location, control, params) . = ..() icon_state = "radial_slice_focus" if(tooltips) openToolTip(usr, src, params, title = name) -/obj/screen/radial/slice/MouseExited(location, control, params) +/atom/movable/screen/radial/slice/MouseExited(location, control, params) . = ..() icon_state = "radial_slice" if(tooltips) closeToolTip(usr) -/obj/screen/radial/slice/Click(location, control, params) +/atom/movable/screen/radial/slice/Click(location, control, params) if(usr.client == parent.current_user) if(next_page) parent.next_page() else parent.element_chosen(choice,usr) -/obj/screen/radial/center +/atom/movable/screen/radial/center name = "Close Menu" icon_state = "radial_center" -/obj/screen/radial/center/MouseEntered(location, control, params) +/atom/movable/screen/radial/center/MouseEntered(location, control, params) . = ..() icon_state = "radial_center_focus" -/obj/screen/radial/center/MouseExited(location, control, params) +/atom/movable/screen/radial/center/MouseExited(location, control, params) . = ..() icon_state = "radial_center" -/obj/screen/radial/center/Click(location, control, params) +/atom/movable/screen/radial/center/Click(location, control, params) if(usr.client == parent.current_user) parent.finished = TRUE @@ -57,8 +57,8 @@ GLOBAL_LIST_EMPTY(radial_menus) var/selected_choice - var/list/obj/screen/elements = list() - var/obj/screen/radial/center/close_button + var/list/atom/movable/screen/elements = list() + var/atom/movable/screen/radial/center/close_button var/client/current_user var/atom/anchor var/image/menu_holder @@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(radial_menus) if(elements.len < max_elements) var/elements_to_add = max_elements - elements.len for(var/i in 1 to elements_to_add) //Create all elements - var/obj/screen/radial/slice/new_element = new /obj/screen/radial/slice + var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice new_element.tooltips = use_tooltips new_element.parent = src elements += new_element @@ -152,7 +152,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/list/page_choices = page_data[current_page] var/angle_per_element = round(zone / page_choices.len) for(var/i in 1 to elements.len) - var/obj/screen/radial/E = elements[i] + var/atom/movable/screen/radial/E = elements[i] var/angle = WRAP(starting_angle + (i - 1) * angle_per_element,0,360) if(i > page_choices.len) HideElement(E) diff --git a/code/_onclick/hud/radial_persistent.dm b/code/_onclick/hud/radial_persistent.dm index 0b5e8dc356..e7f7c664ad 100644 --- a/code/_onclick/hud/radial_persistent.dm +++ b/code/_onclick/hud/radial_persistent.dm @@ -2,19 +2,19 @@ A derivative of radial menu which persists onscreen until closed and invokes a callback each time an element is clicked */ -/obj/screen/radial/persistent/center +/atom/movable/screen/radial/persistent/center name = "Close Menu" icon_state = "radial_center" -/obj/screen/radial/persistent/center/Click(location, control, params) +/atom/movable/screen/radial/persistent/center/Click(location, control, params) if(usr.client == parent.current_user) parent.element_chosen(null,usr) -/obj/screen/radial/persistent/center/MouseEntered(location, control, params) +/atom/movable/screen/radial/persistent/center/MouseEntered(location, control, params) . = ..() icon_state = "radial_center_focus" -/obj/screen/radial/persistent/center/MouseExited(location, control, params) +/atom/movable/screen/radial/persistent/center/MouseExited(location, control, params) . = ..() icon_state = "radial_center" @@ -25,7 +25,7 @@ var/datum/callback/select_proc_callback /datum/radial_menu/persistent/New() - close_button = new /obj/screen/radial/persistent/center + close_button = new /atom/movable/screen/radial/persistent/center close_button.parent = src diff --git a/code/_onclick/hud/revenanthud.dm b/code/_onclick/hud/revenanthud.dm index 9369313941..708b1d4915 100644 --- a/code/_onclick/hud/revenanthud.dm +++ b/code/_onclick/hud/revenanthud.dm @@ -2,6 +2,6 @@ /datum/hud/revenant/New(mob/owner) ..() - healths = new /obj/screen/healths/revenant() + healths = new /atom/movable/screen/healths/revenant() healths.hud = src infodisplay += healths diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 33a9cec80c..03ad1b1821 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -1,15 +1,15 @@ -/obj/screen/robot +/atom/movable/screen/robot icon = 'icons/mob/screen_cyborg.dmi' -/obj/screen/robot/module +/atom/movable/screen/robot/module name = "cyborg module" icon_state = "nomod" -/obj/screen/robot/Click() +/atom/movable/screen/robot/Click() if(isobserver(usr)) return 1 -/obj/screen/robot/module/Click() +/atom/movable/screen/robot/module/Click() if(..()) return var/mob/living/silicon/robot/R = usr @@ -18,51 +18,51 @@ return 1 R.pick_module() -/obj/screen/robot/module1 +/atom/movable/screen/robot/module1 name = "module1" icon_state = "inv1" -/obj/screen/robot/module1/Click() +/atom/movable/screen/robot/module1/Click() if(..()) return var/mob/living/silicon/robot/R = usr R.toggle_module(1) -/obj/screen/robot/module2 +/atom/movable/screen/robot/module2 name = "module2" icon_state = "inv2" -/obj/screen/robot/module2/Click() +/atom/movable/screen/robot/module2/Click() if(..()) return var/mob/living/silicon/robot/R = usr R.toggle_module(2) -/obj/screen/robot/module3 +/atom/movable/screen/robot/module3 name = "module3" icon_state = "inv3" -/obj/screen/robot/module3/Click() +/atom/movable/screen/robot/module3/Click() if(..()) return var/mob/living/silicon/robot/R = usr R.toggle_module(3) -/obj/screen/robot/radio +/atom/movable/screen/robot/radio name = "radio" icon_state = "radio" -/obj/screen/robot/radio/Click() +/atom/movable/screen/robot/radio/Click() if(..()) return var/mob/living/silicon/robot/R = usr R.radio.interact(R) -/obj/screen/robot/store +/atom/movable/screen/robot/store name = "store" icon_state = "store" -/obj/screen/robot/store/Click() +/atom/movable/screen/robot/store/Click() if(..()) return var/mob/living/silicon/robot/R = usr @@ -75,35 +75,35 @@ ..() // i, Robit var/mob/living/silicon/robot/robit = mymob - var/obj/screen/using + var/atom/movable/screen/using - using = new/obj/screen/language_menu + using = new/atom/movable/screen/language_menu using.screen_loc = ui_borg_language_menu static_inventory += using //Radio - using = new /obj/screen/robot/radio() + using = new /atom/movable/screen/robot/radio() using.screen_loc = ui_borg_radio using.hud = src static_inventory += using //Module select if(!robit.inv1) - robit.inv1 = new /obj/screen/robot/module1() + robit.inv1 = new /atom/movable/screen/robot/module1() robit.inv1.screen_loc = ui_inv1 robit.inv1.hud = src static_inventory += robit.inv1 if(!robit.inv2) - robit.inv2 = new /obj/screen/robot/module2() + robit.inv2 = new /atom/movable/screen/robot/module2() robit.inv2.screen_loc = ui_inv2 robit.inv2.hud = src static_inventory += robit.inv2 if(!robit.inv3) - robit.inv3 = new /obj/screen/robot/module3() + robit.inv3 = new /atom/movable/screen/robot/module3() robit.inv3.screen_loc = ui_inv3 robit.inv3.hud = src @@ -111,73 +111,73 @@ //End of module select - using = new /obj/screen/robot/lamp() + using = new /atom/movable/screen/robot/lamp() using.screen_loc = ui_borg_lamp using.hud = src static_inventory += using robit.lampButton = using - var/obj/screen/robot/lamp/lampscreen = using + var/atom/movable/screen/robot/lamp/lampscreen = using lampscreen.robot = robit //Photography stuff - using = new /obj/screen/ai/image_take() + using = new /atom/movable/screen/ai/image_take() using.screen_loc = ui_borg_camera using.hud = src static_inventory += using //Sec/Med HUDs - using = new /obj/screen/robot/sensors() + using = new /atom/movable/screen/robot/sensors() using.screen_loc = ui_borg_sensor using.hud = src static_inventory += using //Borg Integrated Tablet - using = new /obj/screen/robot/modPC() + using = new /atom/movable/screen/robot/modPC() using.screen_loc = ui_borg_tablet using.hud = src static_inventory += using robit.interfaceButton = using if(robit.modularInterface) using.vis_contents += robit.modularInterface - var/obj/screen/robot/modPC/tabletbutton = using + var/atom/movable/screen/robot/modPC/tabletbutton = using tabletbutton.robot = robit //Alerts - using = new /obj/screen/robot/alerts() + using = new /atom/movable/screen/robot/alerts() using.screen_loc = ui_borg_alerts using.hud = src static_inventory += using //Thrusters - using = new /obj/screen/robot/thrusters() + using = new /atom/movable/screen/robot/thrusters() using.screen_loc = ui_borg_thrusters using.hud = src static_inventory += using robit.thruster_button = using //Intent - action_intent = new /obj/screen/act_intent/robot() + action_intent = new /atom/movable/screen/act_intent/robot() action_intent.icon_state = mymob.a_intent action_intent.hud = src static_inventory += action_intent //Health - healths = new /obj/screen/healths/robot() + healths = new /atom/movable/screen/healths/robot() healths.hud = src infodisplay += healths //Installed Module - robit.hands = new /obj/screen/robot/module() + robit.hands = new /atom/movable/screen/robot/module() robit.hands.screen_loc = ui_borg_module robit.hands.hud = src static_inventory += robit.hands //Store - module_store_icon = new /obj/screen/robot/store() + module_store_icon = new /atom/movable/screen/robot/store() module_store_icon.screen_loc = ui_borg_store module_store_icon.hud = src - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = 'icons/mob/screen_cyborg.dmi' pull_icon.screen_loc = ui_borg_pull pull_icon.hud = src @@ -185,7 +185,7 @@ hotkeybuttons += pull_icon - zone_select = new /obj/screen/zone_sel/robot() + zone_select = new /atom/movable/screen/zone_sel/robot() zone_select.hud = src zone_select.update_icon() static_inventory += zone_select @@ -283,61 +283,61 @@ for(var/obj/item/I in R.held_items) screenmob.client.screen -= I -/obj/screen/robot/lamp +/atom/movable/screen/robot/lamp name = "headlamp" icon_state = "lamp_off" var/mob/living/silicon/robot/robot -/obj/screen/robot/lamp/Click() +/atom/movable/screen/robot/lamp/Click() . = ..() if(.) return robot?.toggle_headlamp() update_icon() -/obj/screen/robot/lamp/update_icon() +/atom/movable/screen/robot/lamp/update_icon() if(robot?.lamp_enabled) icon_state = "lamp_on" else icon_state = "lamp_off" -/obj/screen/robot/alerts +/atom/movable/screen/robot/alerts name = "Alert Panel" icon = 'icons/mob/screen_ai.dmi' icon_state = "alerts" -/obj/screen/robot/alerts/Click() +/atom/movable/screen/robot/alerts/Click() . = ..() if(.) return var/mob/living/silicon/robot/borgo = usr borgo.robot_alerts() -/obj/screen/robot/thrusters +/atom/movable/screen/robot/thrusters name = "ion thrusters" icon_state = "ionpulse0" -/obj/screen/robot/thrusters/Click() +/atom/movable/screen/robot/thrusters/Click() if(..()) return var/mob/living/silicon/robot/R = usr R.toggle_ionpulse() -/obj/screen/robot/sensors +/atom/movable/screen/robot/sensors name = "Sensor Augmentation" icon_state = "cyborg_sensor" -/obj/screen/robot/sensors/Click() +/atom/movable/screen/robot/sensors/Click() if(..()) return var/mob/living/silicon/S = usr S.toggle_sensors() -/obj/screen/robot/modPC +/atom/movable/screen/robot/modPC name = "Modular Interface" icon_state = "template" var/mob/living/silicon/robot/robot -/obj/screen/robot/modPC/Click() +/atom/movable/screen/robot/modPC/Click() . = ..() if(.) return diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index b27abad841..517ecfec48 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -6,7 +6,7 @@ They are used with the client/screen list and the screen_loc var. For more information, see the byond documentation on the screen_loc and screen vars. */ -/obj/screen +/atom/movable/screen name = "" icon = 'icons/mob/screen_gen.dmi' layer = HUD_LAYER @@ -34,24 +34,24 @@ */ var/del_on_map_removal = TRUE -/obj/screen/take_damage() +/atom/movable/screen/take_damage() return -/obj/screen/Destroy() +/atom/movable/screen/Destroy() master = null hud = null return ..() -/obj/screen/examine(mob/user) +/atom/movable/screen/examine(mob/user) return list() -/obj/screen/orbit() +/atom/movable/screen/orbit() return -/obj/screen/proc/component_click(obj/screen/component_button/component, params) +/atom/movable/screen/proc/component_click(obj/screen/component_button/component, params) return -/obj/screen/text +/atom/movable/screen/text icon = null icon_state = null mouse_opacity = MOUSE_OPACITY_TRANSPARENT @@ -59,12 +59,12 @@ maptext_height = 480 maptext_width = 480 -/obj/screen/swap_hand +/atom/movable/screen/swap_hand layer = HUD_LAYER plane = HUD_PLANE name = "swap hand" -/obj/screen/swap_hand/Click() +/atom/movable/screen/swap_hand/Click() // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click // if(world.time <= usr.next_move) @@ -78,19 +78,19 @@ M.swap_hand() return 1 -/obj/screen/craft +/atom/movable/screen/craft name = "crafting menu" icon = 'icons/mob/screen_midnight.dmi' icon_state = "craft" screen_loc = ui_crafting -/obj/screen/area_creator +/atom/movable/screen/area_creator name = "create new area" icon = 'icons/mob/screen_midnight.dmi' icon_state = "area_edit" screen_loc = ui_building -/obj/screen/area_creator/Click() +/atom/movable/screen/area_creator/Click() if(usr.incapacitated() || (isobserver(usr) && !IsAdminGhost(usr))) return TRUE var/area/A = get_area(usr) @@ -99,18 +99,18 @@ return TRUE create_area(usr) -/obj/screen/language_menu +/atom/movable/screen/language_menu name = "language menu" icon = 'icons/mob/screen_midnight.dmi' icon_state = "talk_wheel" screen_loc = ui_language_menu -/obj/screen/language_menu/Click() +/atom/movable/screen/language_menu/Click() var/mob/M = usr var/datum/language_holder/H = M.get_language_holder() H.open_language_menu(usr) -/obj/screen/inventory +/atom/movable/screen/inventory /// The identifier for the slot. It has nothing to do with ID cards. var/slot_id /// Icon when empty. For now used only by humans. @@ -122,7 +122,7 @@ layer = HUD_LAYER plane = HUD_PLANE -/obj/screen/inventory/Click(location, control, params) +/atom/movable/screen/inventory/Click(location, control, params) // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click // if(world.time <= usr.next_move) @@ -142,16 +142,16 @@ usr.update_inv_hands() return TRUE -/obj/screen/inventory/MouseEntered() +/atom/movable/screen/inventory/MouseEntered() ..() add_overlays() -/obj/screen/inventory/MouseExited() +/atom/movable/screen/inventory/MouseExited() ..() cut_overlay(object_overlays) object_overlays.Cut() -/obj/screen/inventory/update_icon_state() +/atom/movable/screen/inventory/update_icon_state() if(!icon_empty) icon_empty = icon_state @@ -161,7 +161,7 @@ else icon_state = icon_empty -/obj/screen/inventory/proc/add_overlays() +/atom/movable/screen/inventory/proc/add_overlays() var/mob/user = hud?.mymob if(!user || !slot_id) @@ -184,12 +184,12 @@ // object_overlay = item_overlay add_overlay(object_overlays) -/obj/screen/inventory/hand +/atom/movable/screen/inventory/hand var/mutable_appearance/handcuff_overlay var/static/mutable_appearance/blocked_overlay = mutable_appearance('icons/mob/screen_gen.dmi', "blocked") var/held_index = 0 -/obj/screen/inventory/hand/update_overlays() +/atom/movable/screen/inventory/hand/update_overlays() . = ..() if(!handcuff_overlay) @@ -212,7 +212,7 @@ . += "hand_active" -/obj/screen/inventory/hand/Click(location, control, params) +/atom/movable/screen/inventory/hand/Click(location, control, params) // At this point in client Click() code we have passed the 1/10 sec check and little else // We don't even know if it's a middle click var/mob/user = hud?.mymob @@ -234,26 +234,26 @@ return TRUE -/obj/screen/drop +/atom/movable/screen/drop name = "drop" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_drop" layer = HUD_LAYER plane = HUD_PLANE -/obj/screen/drop/Click() +/atom/movable/screen/drop/Click() if(usr.stat == CONSCIOUS) usr.dropItemToGround(usr.get_active_held_item()) -/obj/screen/act_intent +/atom/movable/screen/act_intent name = "intent" icon_state = "help" screen_loc = ui_acti -/obj/screen/act_intent/Click(location, control, params) +/atom/movable/screen/act_intent/Click(location, control, params) usr.a_intent_change(INTENT_HOTKEY_RIGHT) -/obj/screen/act_intent/segmented/Click(location, control, params) +/atom/movable/screen/act_intent/segmented/Click(location, control, params) if(usr.client.prefs.toggles & INTENT_STYLE) var/_x = text2num(params2list(params)["icon-x"]) var/_y = text2num(params2list(params)["icon-y"]) @@ -272,20 +272,20 @@ else return ..() -/obj/screen/act_intent/alien +/atom/movable/screen/act_intent/alien icon = 'icons/mob/screen_alien.dmi' screen_loc = ui_movi -/obj/screen/act_intent/robot +/atom/movable/screen/act_intent/robot icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_intents -/obj/screen/internals +/atom/movable/screen/internals name = "toggle internals" icon_state = "internal0" screen_loc = ui_internal -/obj/screen/internals/Click() +/atom/movable/screen/internals/Click() if(!iscarbon(usr)) return var/mob/living/carbon/C = usr @@ -346,71 +346,71 @@ return C.update_action_buttons_icon() -/obj/screen/mov_intent +/atom/movable/screen/mov_intent name = "run/walk toggle" icon = 'icons/mob/screen_midnight.dmi' icon_state = "running" -/obj/screen/mov_intent/Initialize(mapload) +/atom/movable/screen/mov_intent/Initialize(mapload) . = ..() update_icon() -/obj/screen/mov_intent/Click() +/atom/movable/screen/mov_intent/Click() toggle(usr) -/obj/screen/mov_intent/update_icon_state() +/atom/movable/screen/mov_intent/update_icon_state() switch(hud?.mymob?.m_intent) if(MOVE_INTENT_WALK) icon_state = CONFIG_GET(flag/sprint_enabled)? "walking" : "walking_nosprint" if(MOVE_INTENT_RUN) icon_state = CONFIG_GET(flag/sprint_enabled)? "running" : "running_nosprint" -/obj/screen/mov_intent/proc/toggle(mob/user) +/atom/movable/screen/mov_intent/proc/toggle(mob/user) if(isobserver(user)) return user.toggle_move_intent(user) -/obj/screen/pull +/atom/movable/screen/pull name = "stop pulling" icon = 'icons/mob/screen_midnight.dmi' icon_state = "pull" -/obj/screen/pull/Click() +/atom/movable/screen/pull/Click() if(isobserver(usr)) return usr.stop_pulling() -/obj/screen/pull/update_icon_state() +/atom/movable/screen/pull/update_icon_state() if(hud?.mymob?.pulling) icon_state = "pull" else icon_state = "pull0" -/obj/screen/resist +/atom/movable/screen/resist name = "resist" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_resist" layer = HUD_LAYER plane = HUD_PLANE -/obj/screen/resist/Click() +/atom/movable/screen/resist/Click() if(isliving(usr)) var/mob/living/L = usr L.resist() -/obj/screen/rest +/atom/movable/screen/rest name = "rest" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_rest" layer = HUD_LAYER plane = HUD_PLANE -/obj/screen/rest/Click() +/atom/movable/screen/rest/Click() if(isliving(usr)) var/mob/living/L = usr L.lay_down() -/obj/screen/rest/update_icon_state() +/atom/movable/screen/rest/update_icon_state() var/mob/living/user = hud?.mymob if(!istype(user)) return @@ -419,17 +419,17 @@ else icon_state = "act_rest0" -/obj/screen/throw_catch +/atom/movable/screen/throw_catch name = "throw/catch" icon = 'icons/mob/screen_midnight.dmi' icon_state = "act_throw_off" -/obj/screen/throw_catch/Click() +/atom/movable/screen/throw_catch/Click() if(iscarbon(usr)) var/mob/living/carbon/C = usr C.toggle_throw_mode() -/obj/screen/zone_sel +/atom/movable/screen/zone_sel name = "damage zone" icon_state = "zone_sel" screen_loc = ui_zonesel @@ -437,7 +437,7 @@ var/static/list/hover_overlays_cache = list() var/hovering -/obj/screen/zone_sel/Click(location, control,params) +/atom/movable/screen/zone_sel/Click(location, control,params) if(isobserver(usr)) return @@ -450,10 +450,10 @@ return set_selected_zone(choice, usr) -/obj/screen/zone_sel/MouseEntered(location, control, params) +/atom/movable/screen/zone_sel/MouseEntered(location, control, params) MouseMove(location, control, params) -/obj/screen/zone_sel/MouseMove(location, control, params) +/atom/movable/screen/zone_sel/MouseMove(location, control, params) if(isobserver(usr)) return @@ -482,12 +482,12 @@ layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE -/obj/screen/zone_sel/MouseExited(location, control, params) +/atom/movable/screen/zone_sel/MouseExited(location, control, params) if(!isobserver(usr) && hovering) vis_contents -= hover_overlays_cache[hovering] hovering = null -/obj/screen/zone_sel/proc/get_zone_at(icon_x, icon_y) +/atom/movable/screen/zone_sel/proc/get_zone_at(icon_x, icon_y) switch(icon_y) if(1 to 9) //Legs switch(icon_x) @@ -525,7 +525,7 @@ return BODY_ZONE_PRECISE_EYES return BODY_ZONE_HEAD -/obj/screen/zone_sel/proc/set_selected_zone(choice, mob/user) +/atom/movable/screen/zone_sel/proc/set_selected_zone(choice, mob/user) if(user != hud?.mymob) return @@ -535,21 +535,21 @@ return TRUE -/obj/screen/zone_sel/update_overlays() +/atom/movable/screen/zone_sel/update_overlays() . = ..() if(!hud?.mymob) return . += mutable_appearance(overlay_icon, "[hud.mymob.zone_selected]") -/obj/screen/zone_sel/alien +/atom/movable/screen/zone_sel/alien icon = 'icons/mob/screen_alien.dmi' overlay_icon = 'icons/mob/screen_alien.dmi' -/obj/screen/zone_sel/robot +/atom/movable/screen/zone_sel/robot icon = 'icons/mob/screen_cyborg.dmi' -/obj/screen/flash +/atom/movable/screen/flash name = "flash" icon_state = "blank" blend_mode = BLEND_ADD @@ -557,7 +557,7 @@ layer = FLASH_LAYER plane = FULLSCREEN_PLANE -/obj/screen/damageoverlay +/atom/movable/screen/damageoverlay icon = 'icons/mob/screen_full.dmi' icon_state = "oxydamageoverlay0" name = "dmg" @@ -567,87 +567,87 @@ layer = UI_DAMAGE_LAYER plane = FULLSCREEN_PLANE -/obj/screen/healths +/atom/movable/screen/healths name = "health" icon_state = "health0" screen_loc = ui_health -/obj/screen/healths/alien +/atom/movable/screen/healths/alien icon = 'icons/mob/screen_alien.dmi' screen_loc = ui_alien_health -/obj/screen/healths/robot +/atom/movable/screen/healths/robot icon = 'icons/mob/screen_cyborg.dmi' screen_loc = ui_borg_health -/obj/screen/healths/blob +/atom/movable/screen/healths/blob name = "blob health" icon_state = "block" screen_loc = ui_internal mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/blob/naut +/atom/movable/screen/healths/blob/naut name = "health" icon = 'icons/mob/blob.dmi' icon_state = "nauthealth" -/obj/screen/healths/blob/naut/core +/atom/movable/screen/healths/blob/naut/core name = "overmind health" screen_loc = ui_health icon_state = "corehealth" -/obj/screen/healths/guardian +/atom/movable/screen/healths/guardian name = "summoner health" icon = 'icons/mob/guardian.dmi' icon_state = "base" screen_loc = ui_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/clock +/atom/movable/screen/healths/clock icon = 'icons/mob/actions.dmi' icon_state = "bg_clock" screen_loc = ui_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/clock/gear +/atom/movable/screen/healths/clock/gear icon = 'icons/mob/clockwork_mobs.dmi' icon_state = "bg_gear" screen_loc = ui_internal -/obj/screen/healths/revenant +/atom/movable/screen/healths/revenant name = "essence" icon = 'icons/mob/actions.dmi' icon_state = "bg_revenant" screen_loc = ui_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/construct +/atom/movable/screen/healths/construct icon = 'icons/mob/screen_construct.dmi' icon_state = "artificer_health0" screen_loc = ui_construct_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/lavaland_elite +/atom/movable/screen/healths/lavaland_elite icon = 'icons/mob/screen_elite.dmi' icon_state = "elite_health0" screen_loc = ui_health mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healthdoll +/atom/movable/screen/healthdoll name = "health doll" screen_loc = ui_healthdoll -/obj/screen/healthdoll/living +/atom/movable/screen/healthdoll/living icon_state = "fullhealth0" screen_loc = ui_living_healthdoll var/filtered = FALSE //so we don't repeatedly create the mask of the mob every update -/obj/screen/mood +/atom/movable/screen/mood name = "mood" icon_state = "mood5" screen_loc = ui_mood -/obj/screen/splash +/atom/movable/screen/splash icon = 'icons/blank_title.png' icon_state = "" screen_loc = "1,1" @@ -655,7 +655,7 @@ plane = SPLASHSCREEN_PLANE var/client/holder -/obj/screen/splash/New(client/C, visible, use_previous_title) //TODO: Make this use INITIALIZE_IMMEDIATE, except its not easy +/atom/movable/screen/splash/New(client/C, visible, use_previous_title) //TODO: Make this use INITIALIZE_IMMEDIATE, except its not easy . = ..() holder = C @@ -674,7 +674,7 @@ holder.screen += src -/obj/screen/splash/proc/Fade(out, qdel_after = TRUE) +/atom/movable/screen/splash/proc/Fade(out, qdel_after = TRUE) if(QDELETED(src)) return if(out) @@ -685,20 +685,20 @@ if(qdel_after) QDEL_IN(src, 30) -/obj/screen/splash/Destroy() +/atom/movable/screen/splash/Destroy() if(holder) holder.screen -= src holder = null return ..() -/obj/screen/component_button - var/obj/screen/parent +/atom/movable/screen/component_button + var/atom/movable/screen/parent -/obj/screen/component_button/Initialize(mapload, obj/screen/parent) +/atom/movable/screen/component_button/Initialize(mapload, obj/screen/parent) . = ..() src.parent = parent -/obj/screen/component_button/Click(params) +/atom/movable/screen/component_button/Click(params) if(parent) parent.component_click(src, params) diff --git a/code/_onclick/hud/screen_objects/clickdelay.dm b/code/_onclick/hud/screen_objects/clickdelay.dm index e0ad039cdf..c62f051c1a 100644 --- a/code/_onclick/hud/screen_objects/clickdelay.dm +++ b/code/_onclick/hud/screen_objects/clickdelay.dm @@ -1,37 +1,37 @@ -/obj/screen/action_bar +/atom/movable/screen/action_bar -/obj/screen/action_bar/Destroy() +/atom/movable/screen/action_bar/Destroy() STOP_PROCESSING(SShuds, src) return ..() -/obj/screen/action_bar/proc/mark_dirty() +/atom/movable/screen/action_bar/proc/mark_dirty() var/mob/living/L = hud?.mymob if(L?.client && update_to_mob(L)) START_PROCESSING(SShuds, src) -/obj/screen/action_bar/process() +/atom/movable/screen/action_bar/process() var/mob/living/L = hud?.mymob if(!L?.client || !update_to_mob(L)) return PROCESS_KILL -/obj/screen/action_bar/proc/update_to_mob(mob/living/L) +/atom/movable/screen/action_bar/proc/update_to_mob(mob/living/L) return FALSE -/datum/hud/var/obj/screen/action_bar/clickdelay/clickdelay +/datum/hud/var/atom/movable/screen/action_bar/clickdelay/clickdelay -/obj/screen/action_bar/clickdelay +/atom/movable/screen/action_bar/clickdelay name = "click delay" icon = 'icons/effects/progessbar.dmi' icon_state = "prog_bar_100" layer = 20 // under hand buttons -/obj/screen/action_bar/clickdelay/Initialize() +/atom/movable/screen/action_bar/clickdelay/Initialize() . = ..() var/matrix/M = new M.Scale(2, 1) transform = M -/obj/screen/action_bar/clickdelay/update_to_mob(mob/living/L) +/atom/movable/screen/action_bar/clickdelay/update_to_mob(mob/living/L) var/estimated = L.EstimatedNextActionTime() var/diff = estimated - L.last_action var/left = estimated - world.time @@ -41,14 +41,14 @@ icon_state = "prog_bar_[round(clamp(((diff - left)/diff) * 100, 0, 100), 5)]" return TRUE -/datum/hud/var/obj/screen/action_bar/resistdelay/resistdelay +/datum/hud/var/atom/movable/screen/action_bar/resistdelay/resistdelay -/obj/screen/action_bar/resistdelay +/atom/movable/screen/action_bar/resistdelay name = "resist delay" icon = 'icons/effects/progessbar.dmi' icon_state = "prog_bar_100" -/obj/screen/action_bar/resistdelay/update_to_mob(mob/living/L) +/atom/movable/screen/action_bar/resistdelay/update_to_mob(mob/living/L) var/diff = L.next_resist - L.last_resist var/left = L.next_resist - world.time if(left < 0 || diff < 0) diff --git a/code/_onclick/hud/screen_objects/sprint.dm b/code/_onclick/hud/screen_objects/sprint.dm index 326bb81745..f8760ddd85 100644 --- a/code/_onclick/hud/screen_objects/sprint.dm +++ b/code/_onclick/hud/screen_objects/sprint.dm @@ -1,19 +1,19 @@ -/obj/screen/mov_intent +/atom/movable/screen/mov_intent icon = 'modular_citadel/icons/ui/screen_midnight.dmi' -/obj/screen/sprintbutton +/atom/movable/screen/sprintbutton name = "toggle sprint" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "act_sprint" layer = ABOVE_HUD_LAYER - 0.1 var/mutable_appearance/flashy -/obj/screen/sprintbutton/Click() +/atom/movable/screen/sprintbutton/Click() if(ishuman(usr)) var/mob/living/carbon/human/H = usr H.default_toggle_sprint() -/obj/screen/sprintbutton/update_icon_state() +/atom/movable/screen/sprintbutton/update_icon_state() var/mob/living/user = hud?.mymob if(!istype(user)) return @@ -24,7 +24,7 @@ else icon_state = "act_sprint" -/obj/screen/sprintbutton/update_overlays() +/atom/movable/screen/sprintbutton/update_overlays() . = ..() var/mob/living/carbon/user = hud?.mymob if(!istype(user) || !user.client) @@ -38,20 +38,20 @@ . += flashy //Sprint buffer onscreen code. -/datum/hud/var/obj/screen/sprint_buffer/sprint_buffer +/datum/hud/var/atom/movable/screen/sprint_buffer/sprint_buffer -/obj/screen/sprint_buffer +/atom/movable/screen/sprint_buffer name = "sprint buffer" icon = 'icons/effects/progessbar.dmi' icon_state = "prog_bar_100" -/obj/screen/sprint_buffer/Click() +/atom/movable/screen/sprint_buffer/Click() if(isliving(usr)) var/mob/living/L = usr to_chat(L, "Your sprint buffer's maximum capacity is [L.sprint_buffer_max]. It is currently at [L.sprint_buffer], regenerating at [L.sprint_buffer_regen_ds * 10] per second. \ Sprinting while this is empty will incur a [L.sprint_stamina_cost] stamina cost per tile.") -/obj/screen/sprint_buffer/proc/update_to_mob(mob/living/L) +/atom/movable/screen/sprint_buffer/proc/update_to_mob(mob/living/L) var/amount = 0 if(L.sprint_buffer_max > 0) amount = round(clamp((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5) diff --git a/code/_onclick/hud/screen_objects/stamina.dm b/code/_onclick/hud/screen_objects/stamina.dm index 98a387d32d..b4c4807ec8 100644 --- a/code/_onclick/hud/screen_objects/stamina.dm +++ b/code/_onclick/hud/screen_objects/stamina.dm @@ -1,21 +1,21 @@ -/datum/hud/var/obj/screen/staminas/staminas -/datum/hud/var/obj/screen/staminabuffer/staminabuffer +/datum/hud/var/atom/movable/screen/staminas/staminas +/datum/hud/var/atom/movable/screen/staminabuffer/staminabuffer -/obj/screen/staminas +/atom/movable/screen/staminas icon = 'modular_citadel/icons/ui/screen_gen.dmi' name = "stamina" icon_state = "stamina0" screen_loc = ui_stamina mouse_opacity = 1 -/obj/screen/staminas/Click(location,control,params) +/atom/movable/screen/staminas/Click(location,control,params) if(isliving(usr)) var/mob/living/L = usr CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/buffer_max, buffer_max) to_chat(L, "You have [L.getStaminaLoss()] stamina loss.
\
Your stamina buffer is [round((L.stamina_buffer / buffer_max) * 100, 0.1)]% full.
") -/obj/screen/staminas/update_icon_state() +/atom/movable/screen/staminas/update_icon_state() var/mob/living/carbon/user = hud?.mymob if(!user) return @@ -26,21 +26,21 @@ else icon_state = "stamina[clamp(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" -/obj/screen/staminas/update_overlays() +/atom/movable/screen/staminas/update_overlays() . = ..() var/mob/living/carbon/user = hud?.mymob if(!user) return var/percent = user.getStaminaLoss() / STAMINA_CRIT if((user.stat == DEAD) || (user.combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (user.hal_screwyhud in 1 to 2)) - . += list("stamina_alert3") + . += list("stamina_alert3") else if(percent >= 0.85) . += list("stamina_alert2") else if(percent >= 0.7) . += list("stamina_alert1") //stam buffer -/obj/screen/staminabuffer +/atom/movable/screen/staminabuffer icon = 'modular_citadel/icons/ui/screen_gen.dmi' name = "stamina buffer" icon_state = "stambuffer0" @@ -48,19 +48,19 @@ layer = ABOVE_HUD_LAYER + 0.1 mouse_opacity = 0 -/obj/screen/staminabuffer/proc/mark_dirty() +/atom/movable/screen/staminabuffer/proc/mark_dirty() if(update_to_mob()) START_PROCESSING(SShuds, src) -/obj/screen/staminabuffer/process() +/atom/movable/screen/staminabuffer/process() if(!update_to_mob()) return PROCESS_KILL -/obj/screen/staminabuffer/Destroy() +/atom/movable/screen/staminabuffer/Destroy() STOP_PROCESSING(SShuds, src) return ..() -/obj/screen/staminabuffer/proc/update_to_mob() +/atom/movable/screen/staminabuffer/proc/update_to_mob() var/mob/living/carbon/user = hud?.mymob user.UpdateStaminaBuffer(FALSE) CONFIG_CACHE_ENTRY_AND_FETCH_VALUE(number/stamina_combat/buffer_max, buffer_max) diff --git a/code/_onclick/hud/screen_objects/storage.dm b/code/_onclick/hud/screen_objects/storage.dm index 1ce1df24c6..55156d9b0d 100644 --- a/code/_onclick/hud/screen_objects/storage.dm +++ b/code/_onclick/hud/screen_objects/storage.dm @@ -1,12 +1,12 @@ -/obj/screen/storage +/atom/movable/screen/storage name = "storage" var/insertion_click = FALSE -/obj/screen/storage/Initialize(mapload, new_master) +/atom/movable/screen/storage/Initialize(mapload, new_master) . = ..() master = new_master -/obj/screen/storage/Click(location, control, params) +/atom/movable/screen/storage/Click(location, control, params) if(!insertion_click) return ..() if(hud?.mymob && (hud.mymob != usr)) @@ -18,7 +18,7 @@ master.attackby(null, I, usr, params) return TRUE -/obj/screen/storage/boxes +/atom/movable/screen/storage/boxes name = "storage" icon_state = "block" screen_loc = "7,7 to 10,8" @@ -26,83 +26,83 @@ plane = HUD_PLANE insertion_click = TRUE -/obj/screen/storage/close +/atom/movable/screen/storage/close name = "close" layer = ABOVE_HUD_LAYER plane = ABOVE_HUD_PLANE icon_state = "backpack_close" -/obj/screen/storage/close/Click() +/atom/movable/screen/storage/close/Click() var/datum/component/storage/S = master S.close(usr) return TRUE -/obj/screen/storage/left +/atom/movable/screen/storage/left icon_state = "storage_start" insertion_click = TRUE -/obj/screen/storage/right +/atom/movable/screen/storage/right icon_state = "storage_end" insertion_click = TRUE -/obj/screen/storage/continuous +/atom/movable/screen/storage/continuous icon_state = "storage_continue" insertion_click = TRUE -/obj/screen/storage/volumetric_box +/atom/movable/screen/storage/volumetric_box icon_state = "stored_continue" layer = VOLUMETRIC_STORAGE_BOX_LAYER plane = VOLUMETRIC_STORAGE_BOX_PLANE var/obj/item/our_item -/obj/screen/storage/volumetric_box/Initialize(mapload, new_master, obj/item/our_item) +/atom/movable/screen/storage/volumetric_box/Initialize(mapload, new_master, obj/item/our_item) src.our_item = our_item RegisterSignal(our_item, COMSIG_ITEM_MOUSE_ENTER, .proc/on_item_mouse_enter) RegisterSignal(our_item, COMSIG_ITEM_MOUSE_EXIT, .proc/on_item_mouse_exit) return ..() -/obj/screen/storage/volumetric_box/Destroy() +/atom/movable/screen/storage/volumetric_box/Destroy() makeItemInactive() our_item = null return ..() -/obj/screen/storage/volumetric_box/Click(location, control, params) +/atom/movable/screen/storage/volumetric_box/Click(location, control, params) return our_item.Click(location, control, params) -/obj/screen/storage/volumetric_box/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) +/atom/movable/screen/storage/volumetric_box/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) return our_item.MouseDrop(over, src_location, over_location, src_control, over_control, params) -/obj/screen/storage/volumetric_box/MouseExited(location, control, params) +/atom/movable/screen/storage/volumetric_box/MouseExited(location, control, params) makeItemInactive() -/obj/screen/storage/volumetric_box/MouseEntered(location, control, params) +/atom/movable/screen/storage/volumetric_box/MouseEntered(location, control, params) makeItemActive() -/obj/screen/storage/volumetric_box/proc/on_item_mouse_enter() +/atom/movable/screen/storage/volumetric_box/proc/on_item_mouse_enter() makeItemActive() -/obj/screen/storage/volumetric_box/proc/on_item_mouse_exit() +/atom/movable/screen/storage/volumetric_box/proc/on_item_mouse_exit() makeItemInactive() -/obj/screen/storage/volumetric_box/proc/makeItemInactive() +/atom/movable/screen/storage/volumetric_box/proc/makeItemInactive() return -/obj/screen/storage/volumetric_box/proc/makeItemActive() +/atom/movable/screen/storage/volumetric_box/proc/makeItemActive() return -/obj/screen/storage/volumetric_box/center +/atom/movable/screen/storage/volumetric_box/center icon_state = "stored_continue" - var/obj/screen/storage/volumetric_edge/stored_left/left - var/obj/screen/storage/volumetric_edge/stored_right/right - var/obj/screen/storage/item_holder/holder + var/atom/movable/screen/storage/volumetric_edge/stored_left/left + var/atom/movable/screen/storage/volumetric_edge/stored_right/right + var/atom/movable/screen/storage/item_holder/holder var/pixel_size -/obj/screen/storage/volumetric_box/center/Initialize(mapload, new_master, our_item) +/atom/movable/screen/storage/volumetric_box/center/Initialize(mapload, new_master, our_item) left = new(null, src, our_item) right = new(null, src, our_item) return ..() -/obj/screen/storage/volumetric_box/center/Destroy() +/atom/movable/screen/storage/volumetric_box/center/Destroy() QDEL_NULL(left) QDEL_NULL(right) vis_contents.Cut() @@ -110,13 +110,13 @@ QDEL_NULL(holder) return ..() -/obj/screen/storage/volumetric_box/center/proc/on_screen_objects() +/atom/movable/screen/storage/volumetric_box/center/proc/on_screen_objects() return list(src) /** * Sets the size of this box screen object and regenerates its left/right borders. This includes the actual border's size! */ -/obj/screen/storage/volumetric_box/center/proc/set_pixel_size(pixels) +/atom/movable/screen/storage/volumetric_box/center/proc/set_pixel_size(pixels) if(pixel_size == pixels) return pixel_size = pixels @@ -139,59 +139,59 @@ add_overlay(left) add_overlay(right) -/obj/screen/storage/volumetric_box/center/makeItemInactive() +/atom/movable/screen/storage/volumetric_box/center/makeItemInactive() if(!holder) return holder.layer = VOLUMETRIC_STORAGE_ITEM_LAYER holder.plane = VOLUMETRIC_STORAGE_ITEM_PLANE -/obj/screen/storage/volumetric_box/center/makeItemActive() +/atom/movable/screen/storage/volumetric_box/center/makeItemActive() if(!holder) return holder.our_item.layer = VOLUMETRIC_STORAGE_ACTIVE_ITEM_LAYER //make sure we display infront of the others! holder.our_item.plane = VOLUMETRIC_STORAGE_ACTIVE_ITEM_PLANE -/obj/screen/storage/volumetric_edge +/atom/movable/screen/storage/volumetric_edge layer = VOLUMETRIC_STORAGE_BOX_LAYER plane = VOLUMETRIC_STORAGE_BOX_PLANE -/obj/screen/storage/volumetric_edge/Initialize(mapload, master, our_item) +/atom/movable/screen/storage/volumetric_edge/Initialize(mapload, master, our_item) src.master = master return ..() -/obj/screen/storage/volumetric_edge/Click(location, control, params) +/atom/movable/screen/storage/volumetric_edge/Click(location, control, params) return master.Click(location, control, params) -/obj/screen/storage/volumetric_edge/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) +/atom/movable/screen/storage/volumetric_edge/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) return master.MouseDrop(over, src_location, over_location, src_control, over_control, params) -/obj/screen/storage/volumetric_edge/MouseExited(location, control, params) +/atom/movable/screen/storage/volumetric_edge/MouseExited(location, control, params) return master.MouseExited(location, control, params) -/obj/screen/storage/volumetric_edge/MouseEntered(location, control, params) +/atom/movable/screen/storage/volumetric_edge/MouseEntered(location, control, params) return master.MouseEntered(location, control, params) -/obj/screen/storage/volumetric_edge/stored_left +/atom/movable/screen/storage/volumetric_edge/stored_left icon_state = "stored_start" appearance_flags = APPEARANCE_UI | KEEP_APART | RESET_TRANSFORM // Yes I know RESET_TRANSFORM is in APPEARANCE_UI but we're hard-asserting this incase someone changes it. -/obj/screen/storage/volumetric_edge/stored_right +/atom/movable/screen/storage/volumetric_edge/stored_right icon_state = "stored_end" appearance_flags = APPEARANCE_UI | KEEP_APART | RESET_TRANSFORM -/obj/screen/storage/item_holder +/atom/movable/screen/storage/item_holder var/obj/item/our_item vis_flags = NONE -/obj/screen/storage/item_holder/Initialize(mapload, new_master, obj/item/I) +/atom/movable/screen/storage/item_holder/Initialize(mapload, new_master, obj/item/I) . = ..() our_item = I vis_contents += I -/obj/screen/storage/item_holder/Destroy() +/atom/movable/screen/storage/item_holder/Destroy() vis_contents.Cut() our_item = null return ..() -/obj/screen/storage/item_holder/Click(location, control, params) +/atom/movable/screen/storage/item_holder/Click(location, control, params) return our_item.Click(location, control, params) diff --git a/code/_onclick/hud/screen_objects/vore.dm b/code/_onclick/hud/screen_objects/vore.dm index 017f7f3485..91aa8f318c 100644 --- a/code/_onclick/hud/screen_objects/vore.dm +++ b/code/_onclick/hud/screen_objects/vore.dm @@ -1,9 +1,9 @@ -/obj/screen/voretoggle +/atom/movable/screen/voretoggle name = "toggle vore mode" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "nom_off" -/obj/screen/voretoggle/Click() +/atom/movable/screen/voretoggle/Click() if(usr != hud.mymob) return var/mob/living/carbon/C = usr @@ -12,7 +12,7 @@ return C.toggle_vore_mode() -/obj/screen/voretoggle/update_icon_state() +/atom/movable/screen/voretoggle/update_icon_state() var/mob/living/carbon/user = hud?.mymob if(!istype(user)) return diff --git a/code/_onclick/hud/simple_animal.dm b/code/_onclick/hud/simple_animal.dm index ef46c0d66e..2f7902c965 100644 --- a/code/_onclick/hud/simple_animal.dm +++ b/code/_onclick/hud/simple_animal.dm @@ -2,7 +2,7 @@ ui_style = 'icons/mob/screen_gen.dmi' /datum/hud/living/simple_animal/New(mob/living/owner) ..() - pull_icon = new /obj/screen/pull() + pull_icon = new /atom/movable/screen/pull() pull_icon.icon = ui_style pull_icon.update_icon() pull_icon.screen_loc = ui_living_pull @@ -10,6 +10,6 @@ static_inventory += pull_icon //mob health doll! assumes whatever sprite the mob is - healthdoll = new /obj/screen/healthdoll/living() + healthdoll = new /atom/movable/screen/healthdoll/living() healthdoll.hud = src infodisplay += healthdoll diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm index 80cc01c3b3..6aba23fab5 100644 --- a/code/_onclick/hud/swarmer.dm +++ b/code/_onclick/hud/swarmer.dm @@ -1,98 +1,98 @@ -/obj/screen/swarmer +/atom/movable/screen/swarmer icon = 'icons/mob/swarmer.dmi' -/obj/screen/swarmer/FabricateTrap +/atom/movable/screen/swarmer/FabricateTrap icon_state = "ui_trap" name = "Create trap (Costs 5 Resources)" desc = "Creates a trap that will nonlethally shock any non-swarmer that attempts to cross it. (Costs 5 resources)" -/obj/screen/swarmer/FabricateTrap/Click() +/atom/movable/screen/swarmer/FabricateTrap/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.CreateTrap() -/obj/screen/swarmer/Barricade +/atom/movable/screen/swarmer/Barricade icon_state = "ui_barricade" name = "Create barricade (Costs 5 Resources)" desc = "Creates a destructible barricade that will stop any non swarmer from passing it. Also allows disabler beams to pass through. (Costs 5 resources)" -/obj/screen/swarmer/Barricade/Click() +/atom/movable/screen/swarmer/Barricade/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.CreateBarricade() -/obj/screen/swarmer/Replicate +/atom/movable/screen/swarmer/Replicate icon_state = "ui_replicate" name = "Replicate (Costs 50 Resources)" desc = "Creates another of our kind." -/obj/screen/swarmer/Replicate/Click() +/atom/movable/screen/swarmer/Replicate/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.CreateSwarmer() -/obj/screen/swarmer/RepairSelf +/atom/movable/screen/swarmer/RepairSelf icon_state = "ui_self_repair" name = "Repair self" desc = "Repairs damage to our body." -/obj/screen/swarmer/RepairSelf/Click() +/atom/movable/screen/swarmer/RepairSelf/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.RepairSelf() -/obj/screen/swarmer/ToggleLight +/atom/movable/screen/swarmer/ToggleLight icon_state = "ui_light" name = "Toggle light" desc = "Toggles our inbuilt light on or off." -/obj/screen/swarmer/ToggleLight/Click() +/atom/movable/screen/swarmer/ToggleLight/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.ToggleLight() -/obj/screen/swarmer/ContactSwarmers +/atom/movable/screen/swarmer/ContactSwarmers icon_state = "ui_contact_swarmers" name = "Contact swarmers" desc = "Sends a message to all other swarmers, should they exist." -/obj/screen/swarmer/ContactSwarmers/Click() +/atom/movable/screen/swarmer/ContactSwarmers/Click() if(isswarmer(usr)) var/mob/living/simple_animal/hostile/swarmer/S = usr S.ContactSwarmers() /datum/hud/swarmer/New(mob/owner) ..() - var/obj/screen/using + var/atom/movable/screen/using - using = new /obj/screen/swarmer/FabricateTrap() + using = new /atom/movable/screen/swarmer/FabricateTrap() using.screen_loc = ui_hand_position(2) using.hud = src static_inventory += using - using = new /obj/screen/swarmer/Barricade() + using = new /atom/movable/screen/swarmer/Barricade() using.screen_loc = ui_hand_position(1) using.hud = src static_inventory += using - using = new /obj/screen/swarmer/Replicate() + using = new /atom/movable/screen/swarmer/Replicate() using.screen_loc = ui_zonesel using.hud = src static_inventory += using - using = new /obj/screen/swarmer/RepairSelf() + using = new /atom/movable/screen/swarmer/RepairSelf() using.screen_loc = ui_storage1 using.hud = src static_inventory += using - using = new /obj/screen/swarmer/ToggleLight() + using = new /atom/movable/screen/swarmer/ToggleLight() using.screen_loc = ui_back using.hud = src static_inventory += using - using = new /obj/screen/swarmer/ContactSwarmers() + using = new /atom/movable/screen/swarmer/ContactSwarmers() using.screen_loc = ui_inventory using.hud = src static_inventory += using diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 7096c667e1..86bd517602 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -15,7 +15,7 @@ SUBSYSTEM_DEF(parallax) /datum/controller/subsystem/parallax/PreInit() . = ..() if(prob(70)) //70% chance to pick a special extra layer - random_layer = pick(/obj/screen/parallax_layer/random/space_gas, /obj/screen/parallax_layer/random/asteroids) + random_layer = pick(/atom/movable/screen/parallax_layer/random/space_gas, /atom/movable/screen/parallax_layer/random/asteroids) random_parallax_color = pick(COLOR_TEAL, COLOR_GREEN, COLOR_YELLOW, COLOR_CYAN, COLOR_ORANGE, COLOR_PURPLE)//Special color for random_layer1. Has to be done here so everyone sees the same color. [COLOR_SILVER] planet_y_offset = rand(100, 160) planet_x_offset = rand(100, 160) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a7a3e87672..dfee659080 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -421,7 +421,7 @@ SUBSYSTEM_DEF(ticker) if (living.client.prefs && living.client.prefs.auto_ooc) if (living.client.prefs.chat_toggles & CHAT_OOC) living.client.prefs.chat_toggles ^= CHAT_OOC - var/obj/screen/splash/S = new(living.client, TRUE) + var/atom/movable/screen/splash/S = new(living.client, TRUE) S.Fade(TRUE) living.client.init_verbs() livings += living diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 996f73ccf6..e83eaf4c36 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -59,7 +59,7 @@ SUBSYSTEM_DEF(title) for(var/thing in GLOB.clients) if(!thing) continue - var/obj/screen/splash/S = new(thing, FALSE) + var/atom/movable/screen/splash/S = new(thing, FALSE) S.Fade(FALSE,FALSE) /datum/controller/subsystem/title/Recover() diff --git a/code/datums/action.dm b/code/datums/action.dm index 064829f0df..66a3530c82 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -11,7 +11,7 @@ var/check_flags = 0 var/required_mobility_flags = MOBILITY_USE var/processing = FALSE - var/obj/screen/movable/action_button/button = null + var/atom/movable/screen/movable/action_button/button = null var/buttontooltipstyle = "" var/transparent_when_unavailable = TRUE var/use_target_appearance = FALSE diff --git a/code/datums/brain_damage/hypnosis.dm b/code/datums/brain_damage/hypnosis.dm index f4c4541db9..de5311943c 100644 --- a/code/datums/brain_damage/hypnosis.dm +++ b/code/datums/brain_damage/hypnosis.dm @@ -47,7 +47,7 @@ "These words keep echoing in your mind. You find yourself completely fascinated by them.")]") to_chat(owner, "You've been hypnotized by this sentence. You must follow these words. If it isn't a clear order, you can freely interpret how to do so,\ as long as you act like the words are your highest priority.") - var/obj/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /obj/screen/alert/hypnosis) + var/atom/movable/screen/alert/hypnosis/hypno_alert = owner.throw_alert("hypnosis", /atom/movable/screen/alert/hypnosis) hypno_alert.desc = "\"[hypnotic_phrase]\"... your mind seems to be fixated on this concept." ..() diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm index 2648ae1eab..2a8a0ea98a 100644 --- a/code/datums/cinematic.dm +++ b/code/datums/cinematic.dm @@ -18,7 +18,7 @@ playing.play(watcher) qdel(playing) -/obj/screen/cinematic +/atom/movable/screen/cinematic icon = 'icons/effects/station_explosion.dmi' icon_state = "station_intact" plane = SPLASHSCREEN_PLANE @@ -32,7 +32,7 @@ var/list/watching = list() //List of clients watching this var/list/locked = list() //Who had mob_transforming set during the cinematic var/is_global = FALSE //Global cinematics will override mob-specific ones - var/obj/screen/cinematic/screen + var/atom/movable/screen/cinematic/screen var/datum/callback/special_callback //For special effects synced with animation (explosions after the countdown etc) var/cleanup_time = 300 //How long for the final screen to remain var/stop_ooc = TRUE //Turns off ooc when played globally. @@ -74,7 +74,7 @@ ooc_toggled = TRUE toggle_ooc(FALSE) - //Place /obj/screen/cinematic into everyone's screens, prevent them from moving + //Place /atom/movable/screen/cinematic into everyone's screens, prevent them from moving for(var/MM in watchers) var/mob/M = MM show_to(M, M.client) @@ -101,7 +101,7 @@ if(!C) return watching += C - M.overlay_fullscreen("cinematic",/obj/screen/fullscreen/cinematic_backdrop) + M.overlay_fullscreen("cinematic",/atom/movable/screen/fullscreen/cinematic_backdrop) C.screen += screen //Sound helper diff --git a/code/datums/components/combat_mode.dm b/code/datums/components/combat_mode.dm index ac18becb67..b61ca33fb8 100644 --- a/code/datums/components/combat_mode.dm +++ b/code/datums/components/combat_mode.dm @@ -7,7 +7,7 @@ var/mode_flags = COMBAT_MODE_INACTIVE var/combatmessagecooldown var/lastmousedir - var/obj/screen/combattoggle/hud_icon + var/atom/movable/screen/combattoggle/hud_icon var/hud_loc /datum/component/combat_mode/Initialize(hud_loc = ui_combat_toggle) @@ -178,18 +178,18 @@ safe_disable_combat_mode(source) /// The screen button. -/obj/screen/combattoggle +/atom/movable/screen/combattoggle name = "toggle combat mode" icon = 'modular_citadel/icons/ui/screen_midnight.dmi' icon_state = "combat_off" var/mutable_appearance/flashy var/combat_on = FALSE ///Wheter combat mode is enabled or not, so we don't have to store a reference. -/obj/screen/combattoggle/Click() +/atom/movable/screen/combattoggle/Click() if(hud && usr == hud.mymob) SEND_SIGNAL(hud.mymob, COMSIG_TOGGLE_COMBAT_MODE) -/obj/screen/combattoggle/update_icon_state() +/atom/movable/screen/combattoggle/update_icon_state() var/mob/living/user = hud?.mymob if(!user) return @@ -200,7 +200,7 @@ else icon_state = "combat_off" -/obj/screen/combattoggle/update_overlays() +/atom/movable/screen/combattoggle/update_overlays() . = ..() var/mob/living/carbon/user = hud?.mymob if(!(user?.client)) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 147dd287ca..3f0e2c3b1c 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -5,10 +5,10 @@ /datum/component/personal_crafting/proc/create_mob_button(mob/user, client/CL) var/datum/hud/H = user.hud_used for(var/huds in H.static_inventory) - if(istype(huds, /obj/screen/craft)) + if(istype(huds, /atom/movable/screen/craft)) return //We don't want to be stacking multiple crafting huds on relogs - var/obj/screen/craft/C = new() + var/atom/movable/screen/craft/C = new() C.icon = H.ui_style H.static_inventory += C CL.screen += C diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index eca38fee34..dcbf40a16b 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -142,7 +142,7 @@ if(harmful) victim.visible_message("[weapon] embeds itself in [victim]'s [limb.name]!",ignored_mobs=victim) to_chat(victim, "[weapon] embeds itself in your [limb.name]!") - victim.throw_alert("embeddedobject", /obj/screen/alert/embeddedobject) + victim.throw_alert("embeddedobject", /atom/movable/screen/alert/embeddedobject) playsound(victim,'sound/weapons/bladeslice.ogg', 40) weapon.add_mob_blood(victim)//it embedded itself in you, of course it's bloody! damage = weapon.w_class * impact_pain_mult diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 359c97c507..e100326f7b 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -13,7 +13,7 @@ var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets var/list/datum/mood_event/mood_events = list() var/insanity_effect = 0 //is the owner being punished for low mood? If so, how much? - var/obj/screen/mood/screen_obj + var/atom/movable/screen/mood/screen_obj var/datum/skill_modifier/bad_mood/malus var/datum/skill_modifier/great_mood/bonus var/static/malus_id = 0 diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index cf0b3d6920..752fafe6bd 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -435,15 +435,15 @@ RevenantThrow(over_object, M, source) return if(!M.incapacitated()) - if(!istype(over_object, /obj/screen)) + if(!istype(over_object, /atom/movable/screen)) dump_content_at(over_object, M) return if(A.loc != M) return playsound(A, "rustle", 50, 1, -5) A.do_jiggle() - if(istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(A, H.held_index) return A.add_fingerprint(M) diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm index 044afa2850..820d7067d4 100644 --- a/code/datums/components/storage/ui.dm +++ b/code/datums/components/storage/ui.dm @@ -20,8 +20,8 @@ . = list() var/list/accessible_contents = accessible_items() var/adjusted_contents = length(accessible_contents) - var/obj/screen/storage/close/ui_close - var/obj/screen/storage/boxes/ui_boxes + var/atom/movable/screen/storage/close/ui_close + var/atom/movable/screen/storage/boxes/ui_boxes //Numbered contents display var/list/datum/numbered_display/numbered_contents @@ -62,7 +62,7 @@ for(var/obj/O in accessible_items()) if(QDELETED(O)) continue - var/obj/screen/storage/item_holder/D = new(null, src, O) + var/atom/movable/screen/storage/item_holder/D = new(null, src, O) D.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip" D.screen_loc = "[cx]:[screen_pixel_x],[cy]:[screen_pixel_y]" O.maptext = "" @@ -81,9 +81,9 @@ */ /datum/component/storage/proc/orient2hud_volumetric(mob/user, maxcolumns) . = list() - var/obj/screen/storage/left/ui_left - var/obj/screen/storage/continuous/ui_continuous - var/obj/screen/storage/close/ui_close + var/atom/movable/screen/storage/left/ui_left + var/atom/movable/screen/storage/continuous/ui_continuous + var/atom/movable/screen/storage/close/ui_close // Generate ui_item_blocks for missing ones and render+orient. var/list/atom/contents = accessible_items() @@ -137,7 +137,7 @@ for(var/i in percentage_by_item) I = i var/percent = percentage_by_item[I] - var/obj/screen/storage/volumetric_box/center/B = new /obj/screen/storage/volumetric_box/center(null, src, I) + var/atom/movable/screen/storage/volumetric_box/center/B = new /atom/movable/screen/storage/volumetric_box/center(null, src, I) var/pixels_to_use = overrun? MINIMUM_PIXELS_PER_ITEM : max(using_horizontal_pixels * percent, MINIMUM_PIXELS_PER_ITEM) var/addrow = FALSE if(CEILING(pixels_to_use, 1) >= FLOOR(horizontal_pixels - current_pixel - VOLUMETRIC_STORAGE_EDGE_PADDING, 1)) @@ -255,22 +255,22 @@ * Gets our ui_boxes, making it if it doesn't exist. */ /datum/component/storage/proc/get_ui_boxes() - return new /obj/screen/storage/boxes(null, src) + return new /atom/movable/screen/storage/boxes(null, src) /** * Gets our ui_left, making it if it doesn't exist. */ /datum/component/storage/proc/get_ui_left() - return new /obj/screen/storage/left(null, src) + return new /atom/movable/screen/storage/left(null, src) /** * Gets our ui_close, making it if it doesn't exist. */ /datum/component/storage/proc/get_ui_close() - return new /obj/screen/storage/close(null, src) + return new /atom/movable/screen/storage/close(null, src) /** * Gets our ui_continuous, making it if it doesn't exist. */ /datum/component/storage/proc/get_ui_continuous() - return new /obj/screen/storage/continuous(null, src) + return new /atom/movable/screen/storage/continuous(null, src) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 10ff5bda3d..911ca7ecbe 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -370,7 +370,7 @@ user.emote("scream") user.gain_trauma(/datum/brain_trauma/severe/paralysis/spinesnapped) // oopsie indeed! shake_camera(user, 7, 7) - user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) user.clear_fullscreen("flash", 4.5) if(94 to 98) @@ -381,7 +381,7 @@ user.gain_trauma_type(BRAIN_TRAUMA_MILD) user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) shake_camera(user, 6, 6) - user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) user.clear_fullscreen("flash", 3.5) if(84 to 93) @@ -394,7 +394,7 @@ user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) user.DefaultCombatKnockdown(40) shake_camera(user, 5, 5) - user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) user.clear_fullscreen("flash", 2.5) if(64 to 83) diff --git a/code/datums/numbered_display.dm b/code/datums/numbered_display.dm index fc2035b39f..b714be23fb 100644 --- a/code/datums/numbered_display.dm +++ b/code/datums/numbered_display.dm @@ -6,5 +6,5 @@ /datum/numbered_display/New(obj/item/sample, _number = 1, datum/component/storage/parent) if(!istype(sample)) qdel(src) - sample_object = new /obj/screen/storage/item_holder(null, parent, sample) + sample_object = new /atom/movable/screen/storage/item_holder(null, parent, sample) number = _number diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index bf910b3944..ae05134b56 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -3,9 +3,9 @@ /datum/status_effect/shadow_mend id = "shadow_mend" duration = 30 - alert_type = /obj/screen/alert/status_effect/shadow_mend + alert_type = /atom/movable/screen/alert/status_effect/shadow_mend -/obj/screen/alert/status_effect/shadow_mend +/atom/movable/screen/alert/status_effect/shadow_mend name = "Shadow Mend" desc = "Shadowy energies wrap around your wounds, sealing them at a price. After healing, you will slowly lose health every three seconds for thirty seconds." icon_state = "shadow_mend" @@ -29,9 +29,9 @@ id = "void_price" duration = 300 tick_interval = 30 - alert_type = /obj/screen/alert/status_effect/void_price + alert_type = /atom/movable/screen/alert/status_effect/void_price -/obj/screen/alert/status_effect/void_price +/atom/movable/screen/alert/status_effect/void_price name = "Void Price" desc = "Black tendrils cinch tightly against you, digging wicked barbs into your flesh." icon_state = "shadow_mend" @@ -46,17 +46,17 @@ duration = 200 tick_interval = 0 //tick as fast as possible status_type = STATUS_EFFECT_REPLACE - alert_type = /obj/screen/alert/status_effect/vanguard + alert_type = /atom/movable/screen/alert/status_effect/vanguard var/datum/progressbar/progbar var/stamhealed = 0 //How much stamina did we regenerate? -/obj/screen/alert/status_effect/vanguard +/atom/movable/screen/alert/status_effect/vanguard name = "Vanguard" desc = "You're absorbing stuns aswell as quickly regenerating stamina, but be careful: 50% of stamina restored and 25% of stuns absorbed will affect you after this effect ends." icon_state = "vanguard" alerttooltipstyle = "clockcult" -/obj/screen/alert/status_effect/vanguard/MouseEntered(location,control,params) +/atom/movable/screen/alert/status_effect/vanguard/MouseEntered(location,control,params) var/mob/living/L = usr var/datum/status_effect/vanguard_shield/E = attached_effect if(istype(L)) //this is probably more safety than actually needed @@ -118,9 +118,9 @@ /datum/status_effect/inathneqs_endowment id = "inathneqs_endowment" duration = 150 - alert_type = /obj/screen/alert/status_effect/inathneqs_endowment + alert_type = /atom/movable/screen/alert/status_effect/inathneqs_endowment -/obj/screen/alert/status_effect/inathneqs_endowment +/atom/movable/screen/alert/status_effect/inathneqs_endowment name = "Inath-neq's Endowment" desc = "Adrenaline courses through you as the Resonant Cogwheel's energy shields you from all harm!" icon_state = "inathneqs_endowment" @@ -149,7 +149,7 @@ /datum/status_effect/cyborg_power_regen id = "power_regen" duration = 100 - alert_type = /obj/screen/alert/status_effect/power_regen + alert_type = /atom/movable/screen/alert/status_effect/power_regen var/power_to_give = 0 //how much power is gained each tick /datum/status_effect/cyborg_power_regen/on_creation(mob/living/new_owner, new_power_per_tick) @@ -157,7 +157,7 @@ if(. && isnum(new_power_per_tick)) power_to_give = new_power_per_tick -/obj/screen/alert/status_effect/power_regen +/atom/movable/screen/alert/status_effect/power_regen name = "Power Regeneration" desc = "You are quickly regenerating power!" icon_state = "power_regen" @@ -174,16 +174,16 @@ id = "his_grace" duration = -1 tick_interval = 4 - alert_type = /obj/screen/alert/status_effect/his_grace + alert_type = /atom/movable/screen/alert/status_effect/his_grace var/bloodlust = 0 -/obj/screen/alert/status_effect/his_grace +/atom/movable/screen/alert/status_effect/his_grace name = "His Grace" desc = "His Grace hungers, and you must feed Him." icon_state = "his_grace" alerttooltipstyle = "hisgrace" -/obj/screen/alert/status_effect/his_grace/MouseEntered(location,control,params) +/atom/movable/screen/alert/status_effect/his_grace/MouseEntered(location,control,params) desc = initial(desc) var/datum/status_effect/his_grace/HG = attached_effect desc += "
Current Bloodthirst: [HG.bloodlust]\ @@ -225,7 +225,7 @@ /datum/status_effect/wish_granters_gift //Fully revives after ten seconds. id = "wish_granters_gift" duration = 50 - alert_type = /obj/screen/alert/status_effect/wish_granters_gift + alert_type = /atom/movable/screen/alert/status_effect/wish_granters_gift /datum/status_effect/wish_granters_gift/on_apply() to_chat(owner, "Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise...") @@ -236,7 +236,7 @@ owner.revive(full_heal = TRUE, admin_revive = TRUE) owner.visible_message("[owner] appears to wake from the dead, having healed all wounds!", "You have regenerated.") -/obj/screen/alert/status_effect/wish_granters_gift +/atom/movable/screen/alert/status_effect/wish_granters_gift name = "Wish Granter's Immortality" desc = "You are being resurrected!" icon_state = "wish_granter" @@ -274,7 +274,7 @@ id = "blooddrunk" duration = 10 tick_interval = 0 - alert_type = /obj/screen/alert/status_effect/blooddrunk + alert_type = /atom/movable/screen/alert/status_effect/blooddrunk var/last_health = 0 var/last_bruteloss = 0 var/last_fireloss = 0 @@ -283,7 +283,7 @@ var/last_cloneloss = 0 var/last_staminaloss = 0 -/obj/screen/alert/status_effect/blooddrunk +/atom/movable/screen/alert/status_effect/blooddrunk name = "Blood-Drunk" desc = "You are drunk on blood! Your pulse thunders in your ears! Nothing can harm you!" //not true, and the item description mentions its actual effect icon_state = "blooddrunk" @@ -430,7 +430,7 @@ /datum/status_effect/fleshmend id = "fleshmend" duration = 100 - alert_type = /obj/screen/alert/status_effect/fleshmend + alert_type = /atom/movable/screen/alert/status_effect/fleshmend /datum/status_effect/fleshmend/tick() if(owner.on_fire) @@ -453,7 +453,7 @@ QDEL_LIST(C.all_scars) -/obj/screen/alert/status_effect/fleshmend +/atom/movable/screen/alert/status_effect/fleshmend name = "Fleshmend" desc = "Our wounds are rapidly healing. This effect is prevented if we are on fire." icon_state = "fleshmend" @@ -562,7 +562,7 @@ var/mob/living/simple_animal/SM = L SM.adjustHealth(-3.5, forced = TRUE) -/obj/screen/alert/status_effect/regenerative_core +/atom/movable/screen/alert/status_effect/regenerative_core name = "Reinforcing Tendrils" desc = "You can move faster than your broken body could normally handle!" icon_state = "regenerative_core" @@ -572,7 +572,7 @@ id = "Regenerative Core" duration = 1 MINUTES status_type = STATUS_EFFECT_REPLACE - alert_type = /obj/screen/alert/status_effect/regenerative_core + alert_type = /atom/movable/screen/alert/status_effect/regenerative_core var/heal_amount = 25 /datum/status_effect/regenerative_core/on_apply() @@ -597,9 +597,9 @@ id = "Anatomic Panacea" duration = 100 tick_interval = 10 - alert_type = /obj/screen/alert/status_effect/panacea + alert_type = /atom/movable/screen/alert/status_effect/panacea -/obj/screen/alert/status_effect/panacea +/atom/movable/screen/alert/status_effect/panacea name = "Panacea" desc = "We purge the impurities from our body." icon_state = "panacea" @@ -774,7 +774,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 15 SECONDS examine_text = "They don't seem to be all here." - alert_type = /obj/screen/alert/status_effect/crucible_soul + alert_type = /atom/movable/screen/alert/status_effect/crucible_soul var/turf/location /datum/status_effect/crucible_soul/on_apply() @@ -796,7 +796,7 @@ id = "Blessing of Dusk and Dawn" status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS - alert_type =/obj/screen/alert/status_effect/duskndawn + alert_type =/atom/movable/screen/alert/status_effect/duskndawn /datum/status_effect/duskndawn/on_apply() . = ..() @@ -813,7 +813,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS tick_interval = 1 SECONDS - alert_type = /obj/screen/alert/status_effect/marshal + alert_type = /atom/movable/screen/alert/status_effect/marshal /datum/status_effect/marshal/on_apply() . = ..() @@ -849,17 +849,17 @@ carbie.blood_volume += carbie.blood_volume >= BLOOD_VOLUME_NORMAL ? 0 : heal_amt*3 -/obj/screen/alert/status_effect/crucible_soul +/atom/movable/screen/alert/status_effect/crucible_soul name = "Blessing of Crucible Soul" desc = "You phased through the reality, you are halfway to your final destination..." icon_state = "crucible" -/obj/screen/alert/status_effect/duskndawn +/atom/movable/screen/alert/status_effect/duskndawn name = "Blessing of Dusk and Dawn" desc = "Many things hide beyond the horizon, with Owl's help i managed to slip past sun's guard and moon's watch." icon_state = "duskndawn" -/obj/screen/alert/status_effect/marshal +/atom/movable/screen/alert/status_effect/marshal name = "Blessing of Wounded Soldier" desc = "Some people seek power through redemption, one thing many people don't know is that battle is the ultimate redemption and wounds let you bask in eternal glory." icon_state = "wounded_soldier" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index ba5f2e1e18..d6cde67198 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -58,7 +58,7 @@ //SLEEPING /datum/status_effect/incapacitating/sleeping id = "sleeping" - alert_type = /obj/screen/alert/status_effect/asleep + alert_type = /atom/movable/screen/alert/status_effect/asleep needs_update_stat = TRUE var/mob/living/carbon/carbon_owner var/mob/living/carbon/human/human_owner @@ -122,7 +122,7 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/off_balance) return ..() -/obj/screen/alert/status_effect/asleep +/atom/movable/screen/alert/status_effect/asleep name = "Asleep" desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" @@ -139,7 +139,7 @@ /datum/status_effect/mesmerize id = "Mesmerize" - alert_type = /obj/screen/alert/status_effect/mesmerized + alert_type = /atom/movable/screen/alert/status_effect/mesmerized /datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration) . = ..() @@ -156,7 +156,7 @@ duration = set_duration . = ..() -/obj/screen/alert/status_effect/mesmerized +/atom/movable/screen/alert/status_effect/mesmerized name = "Mesmerized" desc = "You can't tear your sight from who is in front of you... their gaze is simply too enthralling.." icon = 'icons/mob/actions/bloodsucker.dmi' @@ -222,9 +222,9 @@ id = "his_wrath" duration = -1 tick_interval = 4 - alert_type = /obj/screen/alert/status_effect/his_wrath + alert_type = /atom/movable/screen/alert/status_effect/his_wrath -/obj/screen/alert/status_effect/his_wrath +/atom/movable/screen/alert/status_effect/his_wrath name = "His Wrath" desc = "You fled from His Grace instead of feeding Him, and now you suffer." icon_state = "his_grace" @@ -243,11 +243,11 @@ duration = 70 tick_interval = 0 //tick as fast as possible status_type = STATUS_EFFECT_REPLACE - alert_type = /obj/screen/alert/status_effect/belligerent + alert_type = /atom/movable/screen/alert/status_effect/belligerent var/leg_damage_on_toggle = 2 //damage on initial application and when the owner tries to toggle to run var/cultist_damage_on_toggle = 10 //damage on initial application and when the owner tries to toggle to run, but to cultists -/obj/screen/alert/status_effect/belligerent +/atom/movable/screen/alert/status_effect/belligerent name = "Belligerent" desc = "Kneel, her-eti'c." icon_state = "belligerent" @@ -768,7 +768,7 @@ /datum/status_effect/necropolis_curse/proc/apply_curse(set_curse) curse_flags |= set_curse if(curse_flags & CURSE_BLINDING) - owner.overlay_fullscreen("curse", /obj/screen/fullscreen/curse, 1) + owner.overlay_fullscreen("curse", /atom/movable/screen/fullscreen/curse, 1) /datum/status_effect/necropolis_curse/proc/remove_curse(remove_curse) if(remove_curse & CURSE_BLINDING) @@ -827,7 +827,7 @@ status_type = STATUS_EFFECT_UNIQUE tick_interval = 5 duration = 100 - alert_type = /obj/screen/alert/status_effect/kindle + alert_type = /atom/movable/screen/alert/status_effect/kindle var/old_health var/old_oxyloss @@ -856,7 +856,7 @@ owner.visible_message("The light in [owner]'s eyes fades!", \ "You snap out of your daze!") -/obj/screen/alert/status_effect/kindle +/atom/movable/screen/alert/status_effect/kindle name = "Dazzling Lights" desc = "Blinding light dances in your vision, stunning and silencing you. Any damage taken will shorten the light's effects!" icon_state = "kindle" @@ -869,7 +869,7 @@ status_type = STATUS_EFFECT_UNIQUE duration = 600 examine_text = "SUBJECTPRONOUN is drenched in thick, blue ichor!" - alert_type = /obj/screen/alert/status_effect/ichorial_stain + alert_type = /atom/movable/screen/alert/status_effect/ichorial_stain /datum/status_effect/ichorial_stain/on_apply() . = ..() @@ -882,7 +882,7 @@ owner.visible_message("The blue ichor on [owner]'s body dries out!", \ "The ichor on your body is dry - you can now be revived by vitality matrices again!") -/obj/screen/alert/status_effect/ichorial_stain +/atom/movable/screen/alert/status_effect/ichorial_stain name = "Ichorial Stain" desc = "Your body is covered in blue ichor! You can't be revived by vitality matrices." icon_state = "ichorial_stain" @@ -908,7 +908,7 @@ /datum/status_effect/strandling //get it, strand as in durathread strand + strangling = strandling hahahahahahahahahahhahahaha i want to die id = "strandling" status_type = STATUS_EFFECT_UNIQUE - alert_type = /obj/screen/alert/status_effect/strandling + alert_type = /atom/movable/screen/alert/status_effect/strandling /datum/status_effect/strandling/on_apply() ADD_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron") @@ -918,13 +918,13 @@ REMOVE_TRAIT(owner, TRAIT_MAGIC_CHOKE, "dumbmoron") return ..() -/obj/screen/alert/status_effect/strandling +/atom/movable/screen/alert/status_effect/strandling name = "Choking strand" desc = "A magical strand of Durathread is wrapped around your neck, preventing you from breathing! Click this icon to remove the strand." icon_state = "his_grace" alerttooltipstyle = "hisgrace" -/obj/screen/alert/status_effect/strandling/Click(location, control, params) +/atom/movable/screen/alert/status_effect/strandling/Click(location, control, params) . = ..() to_chat(mob_viewer, "You attempt to remove the durathread strand from around your neck.") if(do_after(mob_viewer, 35, null, mob_viewer)) @@ -961,9 +961,9 @@ tick_interval = 10 examine_text = "SUBJECTPRONOUN seems slow and unfocused." var/stun = TRUE - alert_type = /obj/screen/alert/status_effect/trance + alert_type = /atom/movable/screen/alert/status_effect/trance -/obj/screen/alert/status_effect/trance +/atom/movable/screen/alert/status_effect/trance name = "Trance" desc = "Everything feels so distant, and you can feel your thoughts forming loops inside your head..." icon_state = "high" @@ -1069,7 +1069,7 @@ id = "dna_melt" duration = 600 status_type = STATUS_EFFECT_REPLACE - alert_type = /obj/screen/alert/status_effect/dna_melt + alert_type = /atom/movable/screen/alert/status_effect/dna_melt var/kill_either_way = FALSE //no amount of removing mutations is gonna save you now /datum/status_effect/dna_melt/on_creation(mob/living/new_owner, set_duration, updating_canmove) @@ -1084,7 +1084,7 @@ H.something_horrible(kill_either_way) return ..() -/obj/screen/alert/status_effect/dna_melt +/atom/movable/screen/alert/status_effect/dna_melt name = "Genetic Breakdown" desc = "I don't feel so good. Your body can't handle the mutations! You have one minute to remove your mutations, or you will be met with a horrible fate." icon_state = "dna_melt" diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index d3d39e625a..26881fe94c 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -2,11 +2,11 @@ id = "frozen" duration = 100 status_type = STATUS_EFFECT_UNIQUE - alert_type = /obj/screen/alert/status_effect/freon + alert_type = /atom/movable/screen/alert/status_effect/freon var/icon/cube var/can_melt = TRUE -/obj/screen/alert/status_effect/freon +/atom/movable/screen/alert/status_effect/freon name = "Frozen Solid" desc = "You're frozen inside an ice cube, and cannot move! You can still do stuff, like shooting. Resist out of the cube!" icon_state = "frozen" diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 5f59359193..2c274802b4 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -48,7 +48,7 @@ get_kill() return ..() -/obj/screen/alert/status_effect/in_love +/atom/movable/screen/alert/status_effect/in_love name = "In Love" desc = "You feel so wonderfully in love!" icon_state = "in_love" @@ -57,7 +57,7 @@ id = "in_love" duration = -1 status_type = STATUS_EFFECT_UNIQUE - alert_type = /obj/screen/alert/status_effect/in_love + alert_type = /atom/movable/screen/alert/status_effect/in_love var/mob/living/date /datum/status_effect/in_love/on_creation(mob/living/new_owner, mob/living/love_interest) diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 6d0c62a8b2..fe605ba4a6 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -12,10 +12,10 @@ var/mob/living/owner //The mob affected by the status effect. var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves - var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description + var/alert_type = /atom/movable/screen/alert/status_effect //the alert thrown by the status effect, contains name and description /// If this is TRUE, the user will have sprint forcefully disabled while this is active. var/blocks_sprint = FALSE - var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists + var/atom/movable/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists /// How many of the effect can be on one mob, and what happens when you try to add another var/status_type = STATUS_EFFECT_UNIQUE @@ -34,7 +34,7 @@ duration = world.time + duration next_tick = world.time + tick_interval if(alert_type) - var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type) + var/atom/movable/screen/alert/status_effect/A = owner.throw_alert(id, alert_type) A.attached_effect = src //so the alert can reference us, if it needs to linked_alert = A //so we can reference the alert, if we need to START_PROCESSING(SSstatus_effects, src) @@ -100,7 +100,7 @@ // ALERT HOOK // //////////////// -/obj/screen/alert/status_effect +/atom/movable/screen/alert/status_effect name = "Curse of Mundanity" desc = "You don't feel any different..." var/datum/status_effect/attached_effect diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index 2ead3e6e19..74fc55e95b 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -1,13 +1,13 @@ // The shattered remnants of your broken limbs fill you with determination! -/obj/screen/alert/status_effect/determined +/atom/movable/screen/alert/status_effect/determined name = "Determined" desc = "The serious wounds you've sustained have put your body into fight-or-flight mode! Now's the time to look for an exit!" icon_state = "regenerative_core" /datum/status_effect/determined id = "determined" - alert_type = /obj/screen/alert/status_effect/determined + alert_type = /atom/movable/screen/alert/status_effect/determined /datum/status_effect/determined/on_apply() . = ..() @@ -21,7 +21,7 @@ id = "limp" status_type = STATUS_EFFECT_REPLACE tick_interval = 10 - alert_type = /obj/screen/alert/status_effect/limp + alert_type = /atom/movable/screen/alert/status_effect/limp var/msg_stage = 0//so you dont get the most intense messages immediately /// The left leg of the limping person var/obj/item/bodypart/l_leg/left @@ -49,7 +49,7 @@ UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_CARBON_GAIN_WOUND, COMSIG_CARBON_LOSE_WOUND, COMSIG_CARBON_ATTACH_LIMB, COMSIG_CARBON_REMOVE_LIMB)) return ..() -/obj/screen/alert/status_effect/limp +/atom/movable/screen/alert/status_effect/limp name = "Limping" desc = "One or more of your legs has been wounded, slowing down steps with that leg! Get it fixed, or at least splinted!" @@ -99,11 +99,11 @@ ///////////////////////// // wound alert -/obj/screen/alert/status_effect/wound +/atom/movable/screen/alert/status_effect/wound name = "Wounded" desc = "Your body has sustained serious damage, click here to inspect yourself." -/obj/screen/alert/status_effect/wound/Click() +/atom/movable/screen/alert/status_effect/wound/Click() var/mob/living/carbon/C = usr C.check_self_for_injuries() diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 6b8d1c9ce5..679d2faf11 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -124,7 +124,7 @@ for(var/mob/dead/observer/O in GLOB.player_list) if(O.key == expected_key) if(O.client?.address == addr) - new /obj/screen/splash(O.client, TRUE) + new /atom/movable/screen/splash(O.client, TRUE) break /datum/world_topic/adminmsg diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 9c5a41de5d..6cab8818ee 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -136,7 +136,7 @@ SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb) victim.emote("pain") if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds - victim.throw_alert("wound", /obj/screen/alert/status_effect/wound) + victim.throw_alert("wound", /atom/movable/screen/alert/status_effect/wound) var/demoted if(old_wound) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7950d54ad3..35aa822a23 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -407,7 +407,7 @@ /obj/machinery/camera/get_remote_view_fullscreens(mob/user) if(view_range == short_range) //unfocused - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) /obj/machinery/camera/update_remote_sight(mob/living/user) user.see_invisible = SEE_INVISIBLE_LIVING //can't see ghosts through cameras diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index a62d2cd102..a6b774523c 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -16,10 +16,10 @@ // Stuff needed to render the map var/map_name - var/obj/screen/map_view/cam_screen + var/atom/movable/screen/map_view/cam_screen /// All the plane masters that need to be applied. var/list/cam_plane_masters - var/obj/screen/background/cam_background + var/atom/movable/screen/background/cam_background interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_SET_MACHINE //| INTERACT_MACHINE_REQUIRES_SIGHT @@ -40,8 +40,8 @@ cam_screen.del_on_map_removal = FALSE cam_screen.screen_loc = "[map_name]:1,1" cam_plane_masters = list() - for(var/plane in subtypesof(/obj/screen/plane_master)) - var/obj/screen/instance = new plane() + for(var/plane in subtypesof(/atom/movable/screen/plane_master)) + var/atom/movable/screen/instance = new plane() instance.assigned_map = map_name instance.del_on_map_removal = FALSE instance.screen_loc = "[map_name]:CENTER" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 7d2c851206..9d675bc5dd 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -275,7 +275,7 @@ if(final) playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0) remote_eye.setLoc(get_turf(final)) - C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static) + C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console! else playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, 0) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f8b462961b..86bbf81dd2 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -357,22 +357,22 @@ if(0.75 to INFINITY) occupant.clear_alert("charge") if(0.5 to 0.75) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 1) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 1) if(0.25 to 0.5) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 2) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 2) if(0.01 to 0.25) - occupant.throw_alert("charge", /obj/screen/alert/lowcell, 3) + occupant.throw_alert("charge", /atom/movable/screen/alert/lowcell, 3) else - occupant.throw_alert("charge", /obj/screen/alert/emptycell) + occupant.throw_alert("charge", /atom/movable/screen/alert/emptycell) var/integrity = obj_integrity/max_integrity*100 switch(integrity) if(30 to 45) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 1) + occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 1) if(15 to 35) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 2) + occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 2) if(-INFINITY to 15) - occupant.throw_alert("mech damage", /obj/screen/alert/low_mech_integrity, 3) + occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 3) else occupant.clear_alert("mech damage") var/atom/checking = occupant.loc diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 27b0aa4e66..afc4312779 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -73,7 +73,7 @@ M.setDir(dir) buckled_mobs |= M M.update_mobility() - M.throw_alert("buckled", /obj/screen/alert/restrained/buckled) + M.throw_alert("buckled", /atom/movable/screen/alert/restrained/buckled) post_buckle_mob(M) SEND_SIGNAL(src, COMSIG_MOVABLE_BUCKLE, M, force) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index affa5d5768..0570de6bcf 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -99,8 +99,8 @@ . = ..() if(!. && ismob(loc) && loc == usr) var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/defibrillator/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 5177224835..1e43f0f883 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -184,7 +184,7 @@ /obj/item/multitool/ai_detect/proc/show_hud(mob/user) if(user && hud_type) - var/obj/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] + var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] PM.alpha = 150 var/datum/atom_hud/H = GLOB.huds[hud_type] if(!H.hudusers[user]) @@ -194,7 +194,7 @@ /obj/item/multitool/ai_detect/proc/remove_hud(mob/user) if(user && hud_type) - var/obj/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] + var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"] PM.alpha = 255 var/datum/atom_hud/H = GLOB.huds[hud_type] H.remove_hud_from(user) diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm index 3e1b20cfc2..c773699b1d 100644 --- a/code/game/objects/items/devices/portable_chem_mixer.dm +++ b/code/game/objects/items/devices/portable_chem_mixer.dm @@ -130,8 +130,8 @@ . = ..() if(ismob(loc)) var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index a9ed94aae9..9f9db64873 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(gift_item_blacklist, typecacheof(list( /obj/mafia_game_board, /obj/docking_port, /obj/shapeshift_holder, - /obj/screen + /atom/movable/screen ))) GLOBAL_LIST_EMPTY(possible_gifts) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 16a91b6358..ad9c8edf8f 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -80,8 +80,8 @@ /obj/item/watertank/MouseDrop(obj/over_object) var/mob/M = loc - if(istype(M) && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(istype(M) && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) return ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 454016d9e7..547217366b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -889,8 +889,8 @@ M.put_in_hands(src) to_chat(usr, "You pick up the deck.") - else if(istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + else if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) to_chat(usr, "You pick up the deck.") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 32ec852b60..4e57a2f717 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -356,7 +356,7 @@ return /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) - if(!istype(O) || O.anchored || istype(O, /obj/screen)) + if(!istype(O) || O.anchored || istype(O, /atom/movable/screen)) return if(!istype(user) || user.incapacitated() || user.lying) return @@ -531,7 +531,7 @@ /obj/structure/closet/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) /obj/structure/closet/emp_act(severity) . = ..() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 82ca59161c..4980981574 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants an /obj/structure/bodycontainer/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) /* * Morgue */ diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index aed096e9df..d0002d1f4a 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -61,7 +61,7 @@ active_mind_control = TRUE message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]") update_gland_hud() - var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control) + var/atom/movable/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) mind_alert.command = command addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration) return TRUE diff --git a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm index fa63e2c82a..cb3bb50b1e 100644 --- a/code/modules/antagonists/abductor/equipment/glands/mindshock.dm +++ b/code/modules/antagonists/abductor/equipment/glands/mindshock.dm @@ -43,7 +43,7 @@ message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]") - var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control) + var/atom/movable/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) mind_alert.command = command if(LAZYLEN(broadcasted_mobs)) diff --git a/code/modules/antagonists/abductor/equipment/glands/quantum.dm b/code/modules/antagonists/abductor/equipment/glands/quantum.dm index fc1ddae030..eade62b1bb 100644 --- a/code/modules/antagonists/abductor/equipment/glands/quantum.dm +++ b/code/modules/antagonists/abductor/equipment/glands/quantum.dm @@ -35,7 +35,7 @@ if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD)) to_chat(entangled_mob, "You suddenly feel an irresistible compulsion to follow an order...") to_chat(entangled_mob, "[command]") - var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control) + var/atom/movable/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /atom/movable/screen/alert/mind_control) mind_alert.command = command message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]") update_gland_hud() diff --git a/code/modules/antagonists/blob/blob/blobs/factory.dm b/code/modules/antagonists/blob/blob/blobs/factory.dm index 284a43562e..dfb3c6d71b 100644 --- a/code/modules/antagonists/blob/blob/blobs/factory.dm +++ b/code/modules/antagonists/blob/blob/blobs/factory.dm @@ -26,7 +26,7 @@ if(naut) naut.factory = null to_chat(naut, "Your factory was destroyed! You feel yourself dying!") - naut.throw_alert("nofactory", /obj/screen/alert/nofactory) + naut.throw_alert("nofactory", /atom/movable/screen/alert/nofactory) spores = null return ..() diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 5af2a49b1b..07c92bfd97 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -670,9 +670,9 @@ #define ui_vamprank_display "WEST:6,CENTER-2:-5" // 2 tiles down /datum/hud - var/obj/screen/bloodsucker/blood_counter/blood_display - var/obj/screen/bloodsucker/rank_counter/vamprank_display - var/obj/screen/bloodsucker/sunlight_counter/sunlight_display + var/atom/movable/screen/bloodsucker/blood_counter/blood_display + var/atom/movable/screen/bloodsucker/rank_counter/vamprank_display + var/atom/movable/screen/bloodsucker/sunlight_counter/sunlight_display /datum/antagonist/bloodsucker/proc/add_hud() return @@ -708,36 +708,36 @@ owner.current.hud_used.vamprank_display.icon_state = (bloodsucker_level_unspent > 0) ? "rank_up" : "rank" -/obj/screen/bloodsucker +/atom/movable/screen/bloodsucker invisibility = INVISIBILITY_ABSTRACT -/obj/screen/bloodsucker/proc/clear() +/atom/movable/screen/bloodsucker/proc/clear() invisibility = INVISIBILITY_ABSTRACT -/obj/screen/bloodsucker/proc/update_counter(value, valuecolor) +/atom/movable/screen/bloodsucker/proc/update_counter(value, valuecolor) invisibility = 0 -/obj/screen/bloodsucker/blood_counter +/atom/movable/screen/bloodsucker/blood_counter icon = 'icons/mob/actions/bloodsucker.dmi' name = "Blood Consumed" icon_state = "blood_display" screen_loc = ui_blood_display -/obj/screen/bloodsucker/blood_counter/update_counter(value, valuecolor) +/atom/movable/screen/bloodsucker/blood_counter/update_counter(value, valuecolor) ..() maptext = "
[round(value,1)]
" -/obj/screen/bloodsucker/rank_counter +/atom/movable/screen/bloodsucker/rank_counter name = "Bloodsucker Rank" icon = 'icons/mob/actions/bloodsucker.dmi' icon_state = "rank" screen_loc = ui_vamprank_display -/obj/screen/bloodsucker/rank_counter/update_counter(value, valuecolor) +/atom/movable/screen/bloodsucker/rank_counter/update_counter(value, valuecolor) ..() maptext = "
[round(value,1)]
" -/obj/screen/bloodsucker/sunlight_counter +/atom/movable/screen/bloodsucker/sunlight_counter icon = 'icons/mob/actions/bloodsucker.dmi' name = "Solar Flare Timer" icon_state = "sunlight_night" @@ -761,7 +761,7 @@ owner.current.hud_used.sunlight_display.icon_state = "sunlight_" + (amDay ? "day":"night") -/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor) +/atom/movable/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor) ..() maptext = "
[value]
" diff --git a/code/modules/antagonists/bloodsucker/datum_hunter.dm b/code/modules/antagonists/bloodsucker/datum_hunter.dm index c0933d8a3c..b221a83a60 100644 --- a/code/modules/antagonists/bloodsucker/datum_hunter.dm +++ b/code/modules/antagonists/bloodsucker/datum_hunter.dm @@ -109,13 +109,13 @@ /datum/status_effect/agent_pinpointer/hunter_edition - alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition minimum_range = HUNTER_SCAN_MIN_DISTANCE tick_interval = HUNTER_SCAN_PING_TIME duration = 160 // Lasts 10s range_fuzz_factor = 5//PINPOINTER_EXTRA_RANDOM_RANGE -/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition +/atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition name = "Monster Tracking" desc = "You always know where the hellspawn are." diff --git a/code/modules/antagonists/bloodsucker/datum_vassal.dm b/code/modules/antagonists/bloodsucker/datum_vassal.dm index 91e89e71e6..5162897d60 100644 --- a/code/modules/antagonists/bloodsucker/datum_vassal.dm +++ b/code/modules/antagonists/bloodsucker/datum_vassal.dm @@ -110,13 +110,13 @@ /datum/status_effect/agent_pinpointer/vassal_edition id = "agent_pinpointer" - alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition minimum_range = VASSAL_SCAN_MIN_DISTANCE tick_interval = VASSAL_SCAN_PING_TIME duration = -1 // runs out fast range_fuzz_factor = 0 -/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition +/atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition name = "Blood Bond" desc = "You always know where your master is." //icon = 'icons/obj/device.dmi' diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 3d54c19350..3bda7335a1 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -30,7 +30,7 @@ //Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target. //You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places. /datum/status_effect/agent_pinpointer/changeling - alert_type = /obj/screen/alert/status_effect/agent_pinpointer/changeling + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/changeling minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE tick_interval = CHANGELING_PHEROMONE_PING_TIME range_fuzz_factor = 0 @@ -55,6 +55,6 @@ scan_target = null -/obj/screen/alert/status_effect/agent_pinpointer/changeling +/atom/movable/screen/alert/status_effect/agent_pinpointer/changeling name = "Pheromone Scent" desc = "The nose always knows." diff --git a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm index 1da49efe3c..3609037f58 100644 --- a/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm +++ b/code/modules/antagonists/clockcult/clock_effects/city_of_cogs_rift.dm @@ -69,7 +69,7 @@ do_sparks(5, TRUE, AM) if(isliving(AM)) var/mob/living/L = AM - L.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static) + L.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) L.clear_fullscreen("flash", 5) var/obj/item/transfer_valve/TTV = locate() in L.GetAllContents() if(TTV) diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index 2a916c7a2f..5e25b8de82 100644 --- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -97,18 +97,18 @@ id = "wraith_spectacles" duration = -1 //remains until eye damage done reaches 0 while the glasses are not worn tick_interval = 20 - alert_type = /obj/screen/alert/status_effect/wraith_spectacles + alert_type = /atom/movable/screen/alert/status_effect/wraith_spectacles var/eye_damage_done = 0 var/nearsight_breakpoint = 30 var/blind_breakpoint = 45 -/obj/screen/alert/status_effect/wraith_spectacles +/atom/movable/screen/alert/status_effect/wraith_spectacles name = "Wraith Spectacles" desc = "You shouldn't actually see this, as it should be procedurally generated." icon_state = "wraithspecs" alerttooltipstyle = "clockcult" -/obj/screen/alert/status_effect/wraith_spectacles/MouseEntered(location,control,params) +/atom/movable/screen/alert/status_effect/wraith_spectacles/MouseEntered(location,control,params) var/mob/living/carbon/human/L = usr if(istype(L)) //this is probably more safety than actually needed var/datum/status_effect/wraith_spectacles/W = attached_effect diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 8fcc36a456..973b615f4a 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -141,7 +141,7 @@ if(isliving(M.current) && M.current.stat != DEAD) var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark. do_teleport(M.current, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE) - M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + M.current.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) M.current.clear_fullscreen("flash", 5) playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE) recalls_remaining-- @@ -311,7 +311,7 @@ var/turf/T = get_turf(M) if(is_servant_of_ratvar(M) && (!T || T.z != z)) M.forceMove(get_step(src, SOUTH)) - M.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + M.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash) M.clear_fullscreen("flash", 5) progress_in_seconds += GATEWAY_SUMMON_RATE switch(progress_in_seconds) diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm index 6f91299cdb..8bf26d6397 100644 --- a/code/modules/antagonists/clockcult/clockcult.dm +++ b/code/modules/antagonists/clockcult/clockcult.dm @@ -136,7 +136,7 @@ hierophant_network.span_for_name = "nezbere" hierophant_network.span_for_message = "brass" hierophant_network.Grant(current) - current.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump) + current.throw_alert("clockinfo", /atom/movable/screen/alert/clockwork/infodump) var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar if(G && G.active && ishuman(current)) current.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -ANTAG_LAYER)) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 0cc0ed133e..a18523069e 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -124,7 +124,7 @@ communion.Grant(current) if(ishuman(current)) magic.Grant(current) - current.throw_alert("bloodsense", /obj/screen/alert/bloodsense) + current.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) if(cult_team?.cult_risen) cult_team.rise(current) if(cult_team.cult_ascendent) diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 069080170e..ac1e5630da 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -104,7 +104,7 @@ /mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) return 666 -/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0) +/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0) if(mind && has_bane(BANE_LIGHT)) mind.disrupt_spells(-500) return ..() //flashes don't stop devils UNLESS it's their bane. diff --git a/code/modules/antagonists/morph/morph.dm b/code/modules/antagonists/morph/morph.dm index 077c380ef0..8352b8f238 100644 --- a/code/modules/antagonists/morph/morph.dm +++ b/code/modules/antagonists/morph/morph.dm @@ -38,7 +38,7 @@ var/atom/movable/form = null var/morph_time = 0 var/static/list/blacklist_typecache = typecacheof(list( - /obj/screen, + /atom/movable/screen, /obj/singularity, /mob/living/simple_animal/hostile/morph, /obj/effect, diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm index ff012e556a..4414fe8257 100644 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm @@ -42,12 +42,12 @@ id = "agent_pinpointer" duration = -1 tick_interval = PINPOINTER_PING_TIME - alert_type = /obj/screen/alert/status_effect/agent_pinpointer + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer var/minimum_range = PINPOINTER_MINIMUM_RANGE var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE var/mob/scan_target = null -/obj/screen/alert/status_effect/agent_pinpointer +/atom/movable/screen/alert/status_effect/agent_pinpointer name = "Internal Affairs Integrated Pinpointer" desc = "Even stealthier than a normal implant." icon = 'icons/obj/device.dmi' diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index c328fa232d..d4d70cd053 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -224,7 +224,7 @@ if(target.type == /mob/living/simple_animal/hostile/construct/shade) //Make sure we remember which body belonged to the shade var/mob/living/simple_animal/hostile/construct/shade/shade = target newstruct.original_mind = shade.original_mind - var/obj/screen/alert/bloodsense/BS + var/atom/movable/screen/alert/bloodsense/BS if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker?.mode) SSticker.mode.add_cultist(newstruct.mind, 0) if(iscultist(stoner) || cultoverride) @@ -232,7 +232,7 @@ else if(stoner) to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") newstruct.clear_alert("bloodsense") - BS = newstruct.throw_alert("bloodsense", /obj/screen/alert/bloodsense) + BS = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) if(BS) BS.Cviewer = newstruct newstruct.cancel_camera() diff --git a/code/modules/atmospherics/auxgm/breathing_classes.dm b/code/modules/atmospherics/auxgm/breathing_classes.dm index f04f89a419..4abfab58ee 100644 --- a/code/modules/atmospherics/auxgm/breathing_classes.dm +++ b/code/modules/atmospherics/auxgm/breathing_classes.dm @@ -10,9 +10,9 @@ var/list/products = null var/danger_reagent = null var/low_alert_category = "not_enough_oxy" - var/low_alert_datum = /obj/screen/alert/not_enough_oxy + var/low_alert_datum = /atom/movable/screen/alert/not_enough_oxy var/high_alert_category = "too_much_oxy" - var/high_alert_datum = /obj/screen/alert/too_much_oxy + var/high_alert_datum = /atom/movable/screen/alert/too_much_oxy /datum/breathing_class/oxygen gases = list( @@ -32,6 +32,6 @@ GAS_CO2 = 1 ) low_alert_category = "not_enough_tox" - low_alert_datum = /obj/screen/alert/not_enough_tox + low_alert_datum = /atom/movable/screen/alert/not_enough_tox high_alert_category = "too_much_tox" - high_alert_datum = /obj/screen/alert/too_much_tox + high_alert_datum = /atom/movable/screen/alert/too_much_tox diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm index 0da2527b3b..22a42319b3 100644 --- a/code/modules/atmospherics/auxgm/gas_types.dm +++ b/code/modules/atmospherics/auxgm/gas_types.dm @@ -10,11 +10,11 @@ breath_alert_info = list( not_enough_alert = list( alert_category = "not_enough_nitro", - alert_type = /obj/screen/alert/not_enough_nitro + alert_type = /atom/movable/screen/alert/not_enough_nitro ), too_much_alert = list( alert_category = "too_much_nitro", - alert_type = /obj/screen/alert/too_much_nitro + alert_type = /atom/movable/screen/alert/too_much_nitro ) ) name = "Nitrogen" @@ -27,11 +27,11 @@ breath_alert_info = list( not_enough_alert = list( alert_category = "not_enough_co2", - alert_type = /obj/screen/alert/not_enough_co2 + alert_type = /atom/movable/screen/alert/not_enough_co2 ), too_much_alert = list( alert_category = "too_much_co2", - alert_type = /obj/screen/alert/too_much_co2 + alert_type = /atom/movable/screen/alert/too_much_co2 ) ) fusion_power = 3 @@ -138,11 +138,11 @@ breath_alert_info = list( not_enough_alert = list( alert_category = "not_enough_ch4", - alert_type = /obj/screen/alert/not_enough_ch4 + alert_type = /atom/movable/screen/alert/not_enough_ch4 ), too_much_alert = list( alert_category = "too_much_ch4", - alert_type = /obj/screen/alert/too_much_ch4 + alert_type = /atom/movable/screen/alert/too_much_ch4 ) ) fire_energy_released = FIRE_CARBON_ENERGY_RELEASED @@ -156,11 +156,11 @@ breath_alert_info = list( not_enough_alert = list( alert_category = "not_enough_ch3br", - alert_type = /obj/screen/alert/not_enough_ch3br + alert_type = /atom/movable/screen/alert/not_enough_ch3br ), too_much_alert = list( alert_category = "too_much_ch3br", - alert_type = /obj/screen/alert/too_much_ch3br + alert_type = /atom/movable/screen/alert/too_much_ch3br ) ) fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BZ = 0.5) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index eacb7ed392..efafc1c9a8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -439,7 +439,7 @@ return // we don't see the pipe network while inside cryo. /obj/machinery/atmospherics/components/unary/cryo_cell/get_remote_view_fullscreens(mob/user) - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) /obj/machinery/atmospherics/components/unary/cryo_cell/can_crawl_through() return // can't ventcrawl in or out of cryo. diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 4a56257882..e0703201a1 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -17,10 +17,10 @@ var/switch_state = BM_SWITCHSTATE_NONE var/switch_width = 5 // modeswitch UI - var/obj/screen/buildmode/mode/modebutton + var/atom/movable/screen/buildmode/mode/modebutton var/list/modeswitch_buttons = list() // dirswitch UI - var/obj/screen/buildmode/bdir/dirbutton + var/atom/movable/screen/buildmode/bdir/dirbutton var/list/dirswitch_buttons = list() /datum/buildmode/New(client/c) @@ -34,7 +34,7 @@ holder.screen += buttons holder.click_intercept = src mode.enter_mode(src) - + /datum/buildmode/proc/quit() mode.exit_mode(src) holder.screen -= buttons @@ -63,16 +63,16 @@ /datum/buildmode/proc/create_buttons() // keep a reference so we can update it upon mode switch - modebutton = new /obj/screen/buildmode/mode(src) + modebutton = new /atom/movable/screen/buildmode/mode(src) buttons += modebutton - buttons += new /obj/screen/buildmode/help(src) + buttons += new /atom/movable/screen/buildmode/help(src) // keep a reference so we can update it upon dir switch - dirbutton = new /obj/screen/buildmode/bdir(src) + dirbutton = new /atom/movable/screen/buildmode/bdir(src) buttons += dirbutton - buttons += new /obj/screen/buildmode/quit(src) + buttons += new /atom/movable/screen/buildmode/quit(src) // build the lists of switching buttons - build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /obj/screen/buildmode/modeswitch) - build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /obj/screen/buildmode/dirswitch) + build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /atom/movable/screen/buildmode/modeswitch) + build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch) // this creates a nice offset grid for choosing between buildmode options, // because going "click click click ah hell" sucks. @@ -81,7 +81,7 @@ for(var/thing in elements) var/x = pos_idx % switch_width var/y = FLOOR(pos_idx / switch_width, 1) - var/obj/screen/buildmode/B = new buttontype(src, thing) + var/atom/movable/screen/buildmode/B = new buttontype(src, thing) // extra .5 for a nice offset look B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]" buttonslist += B @@ -100,7 +100,7 @@ else close_switchstates() open_modeswitch() - + /datum/buildmode/proc/open_modeswitch() switch_state = BM_SWITCHSTATE_MODE holder.screen += modeswitch_buttons @@ -115,7 +115,7 @@ else close_switchstates() open_dirswitch() - + /datum/buildmode/proc/open_dirswitch() switch_state = BM_SWITCHSTATE_DIR holder.screen += dirswitch_buttons @@ -155,7 +155,7 @@ new /datum/buildmode(M.client) message_admins("[key_name_admin(usr)] has entered build mode.") log_admin("[key_name(usr)] has entered build mode.") - + #undef BM_SWITCHSTATE_NONE #undef BM_SWITCHSTATE_MODE #undef BM_SWITCHSTATE_DIR diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index 6901a0e42e..5c5c0000d1 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -1,23 +1,23 @@ -/obj/screen/buildmode +/atom/movable/screen/buildmode icon = 'icons/misc/buildmode.dmi' var/datum/buildmode/bd // If we don't do this, we get occluded by item action buttons layer = ABOVE_HUD_LAYER -/obj/screen/buildmode/New(bld) +/atom/movable/screen/buildmode/New(bld) bd = bld return ..() -/obj/screen/buildmode/Destroy() +/atom/movable/screen/buildmode/Destroy() bd = null return ..() -/obj/screen/buildmode/mode +/atom/movable/screen/buildmode/mode name = "Toggle Mode" icon_state = "buildmode_basic" screen_loc = "NORTH,WEST" -/obj/screen/buildmode/mode/Click(location, control, params) +/atom/movable/screen/buildmode/mode/Click(location, control, params) var/list/pa = params2list(params) if(pa.Find("left")) @@ -27,63 +27,63 @@ update_icon() return 1 -/obj/screen/buildmode/mode/update_icon_state() +/atom/movable/screen/buildmode/mode/update_icon_state() icon_state = bd.mode.get_button_iconstate() -/obj/screen/buildmode/help +/atom/movable/screen/buildmode/help icon_state = "buildhelp" screen_loc = "NORTH,WEST+1" name = "Buildmode Help" -/obj/screen/buildmode/help/Click(location, control, params) +/atom/movable/screen/buildmode/help/Click(location, control, params) bd.mode.show_help(usr.client) return 1 -/obj/screen/buildmode/bdir +/atom/movable/screen/buildmode/bdir icon_state = "build" screen_loc = "NORTH,WEST+2" name = "Change Dir" -/obj/screen/buildmode/bdir/update_icon_state() +/atom/movable/screen/buildmode/bdir/update_icon_state() dir = bd.build_dir -/obj/screen/buildmode/bdir/Click() +/atom/movable/screen/buildmode/bdir/Click() bd.toggle_dirswitch() update_icon() return 1 // used to switch between modes -/obj/screen/buildmode/modeswitch +/atom/movable/screen/buildmode/modeswitch var/datum/buildmode_mode/modetype -/obj/screen/buildmode/modeswitch/New(bld, mt) +/atom/movable/screen/buildmode/modeswitch/New(bld, mt) modetype = mt icon_state = "buildmode_[initial(modetype.key)]" name = initial(modetype.key) return ..(bld) -/obj/screen/buildmode/modeswitch/Click() +/atom/movable/screen/buildmode/modeswitch/Click() bd.change_mode(modetype) return 1 // used to switch between dirs -/obj/screen/buildmode/dirswitch +/atom/movable/screen/buildmode/dirswitch icon_state = "build" -/obj/screen/buildmode/dirswitch/New(bld, dir) +/atom/movable/screen/buildmode/dirswitch/New(bld, dir) src.dir = dir name = dir2text(dir) return ..(bld) -/obj/screen/buildmode/dirswitch/Click() +/atom/movable/screen/buildmode/dirswitch/Click() bd.change_dir(dir) return 1 -/obj/screen/buildmode/quit +/atom/movable/screen/buildmode/quit icon_state = "buildquit" screen_loc = "NORTH,WEST+3" name = "Quit Buildmode" -/obj/screen/buildmode/quit/Click() +/atom/movable/screen/buildmode/quit/Click() bd.quit() return 1 diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 05a9eef4f2..e4060de1a2 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -51,9 +51,9 @@ var/obj/structure/closet/supplypod/centcompod/temp_pod //The temporary pod that is modified by this datum, then cloned. The buildObject() clone of this pod is what is launched // Stuff needed to render the map var/map_name - var/obj/screen/map_view/cam_screen + var/atom/movable/screen/map_view/cam_screen var/list/cam_plane_masters - var/obj/screen/background/cam_background + var/atom/movable/screen/background/cam_background var/tabIndex = 1 var/renderLighting = FALSE @@ -92,8 +92,8 @@ cam_screen.del_on_map_removal = TRUE cam_screen.screen_loc = "[map_name]:1,1" cam_plane_masters = list() - for(var/plane in subtypesof(/obj/screen/plane_master)) - var/obj/screen/instance = new plane() + for(var/plane in subtypesof(/atom/movable/screen/plane_master)) + var/atom/movable/screen/instance = new plane() if (!renderLighting && instance.plane == LIGHTING_PLANE) instance.alpha = 100 instance.assigned_map = map_name @@ -581,7 +581,7 @@ var/left_click = pa.Find("left") if (launcherActivated) //Clicking on UI elements shouldn't launch a pod - if(istype(target,/obj/screen)) + if(istype(target,/atom/movable/screen)) return FALSE . = TRUE @@ -616,7 +616,7 @@ sleep(rand()*2) //looks cooler than them all appearing at once. Gives the impression of burst fire. else if (picking_dropoff_turf) //Clicking on UI elements shouldn't pick a dropoff turf - if(istype(target,/obj/screen)) + if(istype(target,/atom/movable/screen)) return FALSE . = TRUE diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index a4d94e994c..f428088fe1 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -60,7 +60,7 @@ preload_rsc = PRELOAD_RSC - var/obj/screen/click_catcher/void + var/atom/movable/screen/click_catcher/void //These two vars are used to make a special mouse cursor, with a unique icon for clicking var/mouse_up_icon = null @@ -168,7 +168,7 @@ * Assoc list with all the active maps - when a screen obj is added to * a map, it's put in here as well. * - * Format: list( = list(/obj/screen)) + * Format: list( = list(/atom/movable/screen)) */ var/list/screen_maps = list() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 8add693d48..571adb406b 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1029,7 +1029,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( var/pos = 0 for(var/D in GLOB.cardinals) pos++ - var/obj/screen/O = LAZYACCESS(char_render_holders, "[D]") + var/atom/movable/screen/O = LAZYACCESS(char_render_holders, "[D]") if(!O) O = new LAZYSET(char_render_holders, "[D]", O) @@ -1040,7 +1040,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( /client/proc/clear_character_previews() for(var/index in char_render_holders) - var/obj/screen/S = char_render_holders[index] + var/atom/movable/screen/S = char_render_holders[index] screen -= S qdel(S) char_render_holders = null diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0f0bf6a62c..5bc0440b77 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2840,9 +2840,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("ambientocclusion") ambientocclusion = !ambientocclusion if(parent && parent.screen && parent.screen.len) - var/obj/screen/plane_master/game_world/G = parent.mob.hud_used.plane_masters["[GAME_PLANE]"] - var/obj/screen/plane_master/above_wall/A = parent.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"] - var/obj/screen/plane_master/wall/W = parent.mob.hud_used.plane_masters["[WALL_PLANE]"] + var/atom/movable/screen/plane_master/game_world/G = parent.mob.hud_used.plane_masters["[GAME_PLANE]"] + var/atom/movable/screen/plane_master/above_wall/A = parent.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"] + var/atom/movable/screen/plane_master/wall/W = parent.mob.hud_used.plane_masters["[WALL_PLANE]"] G.backdrop(parent.mob) A.backdrop(parent.mob) W.backdrop(parent.mob) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 416c6309d4..56ddb5f5f1 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -79,8 +79,8 @@ if(ismecha(M.loc)) // stops inventory actions in a mech return - if(!. && !M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(!. && !M.incapacitated() && loc == M && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) add_fingerprint(usr) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 49256b490d..7a1e6b14f3 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -27,7 +27,7 @@ ///How long it takes to lace/unlace these shoes var/lace_time = 5 SECONDS ///any alerts we have active - var/obj/screen/alert/our_alert + var/atom/movable/screen/alert/our_alert /obj/item/clothing/shoes/ComponentInitialize() . = ..() @@ -93,7 +93,7 @@ user.update_inv_shoes() equipped_before_drop = TRUE if(can_be_tied && tied == SHOES_UNTIED) - our_alert = user.throw_alert("shoealert", /obj/screen/alert/shoes/untied) + our_alert = user.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied) RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_trip, override=TRUE) /obj/item/clothing/shoes/proc/restore_offsets(mob/user) @@ -150,7 +150,7 @@ UnregisterSignal(src, COMSIG_SHOES_STEP_ACTION) else if(tied == SHOES_UNTIED && our_guy && user == our_guy) - our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/untied) // if we're the ones unknotting our own laces, of course we know they're untied + our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied) // if we're the ones unknotting our own laces, of course we know they're untied RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_trip, override=TRUE) /** @@ -233,7 +233,7 @@ our_guy.Knockdown(10) our_guy.visible_message("[our_guy] trips on [our_guy.p_their()] knotted shoelaces and falls! What a klutz!", "You trip on your knotted shoelaces and fall over!") SEND_SIGNAL(our_guy, COMSIG_ADD_MOOD_EVENT, "trip", /datum/mood_event/tripped) // well we realized they're knotted now! - our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/knotted) + our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/knotted) else if(tied == SHOES_UNTIED) var/wiser = TRUE // did we stumble and realize our laces are undone? @@ -263,7 +263,7 @@ wiser = FALSE if(wiser) SEND_SIGNAL(our_guy, COMSIG_ADD_MOOD_EVENT, "untied", /datum/mood_event/untied) // well we realized they're untied now! - our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/untied) + our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied) /obj/item/clothing/shoes/on_attack_hand(mob/living/user, act_intent, unarmed_attack_flags) diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 57659a70c4..6642731d8b 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -238,7 +238,7 @@ var/mob/holder = null var/phase_time = 0 var/phase_time_length = 3 - var/obj/screen/chronos_target/target_ui = null + var/atom/movable/screen/chronos_target/target_ui = null var/obj/item/clothing/suit/space/chronos/chronosuit /obj/effect/chronos_cam/singularity_act() @@ -299,13 +299,13 @@ holder.unset_machine() return ..() -/obj/screen/chronos_target +/atom/movable/screen/chronos_target name = "target display" screen_loc = "CENTER,CENTER" color = "#ff3311" blend_mode = BLEND_SUBTRACT -/obj/screen/chronos_target/New(loc, var/mob/living/carbon/human/user) +/atom/movable/screen/chronos_target/New(loc, var/mob/living/carbon/human/user) if(user) var/icon/user_icon = getFlatIcon(user) icon = user_icon diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 7f81fb9993..adbf48470d 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -933,46 +933,46 @@ GLOBAL_LIST_INIT(hallucination_list, list( feedback_details += "Type: [alert_type]" switch(alert_type) if("not_enough_oxy") - target.throw_alert(alert_type, /obj/screen/alert/not_enough_oxy, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_oxy, override = TRUE) if("not_enough_tox") - target.throw_alert(alert_type, /obj/screen/alert/not_enough_tox, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_tox, override = TRUE) if("not_enough_co2") - target.throw_alert(alert_type, /obj/screen/alert/not_enough_co2, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_co2, override = TRUE) if("too_much_oxy") - target.throw_alert(alert_type, /obj/screen/alert/too_much_oxy, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_oxy, override = TRUE) if("too_much_co2") - target.throw_alert(alert_type, /obj/screen/alert/too_much_co2, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_co2, override = TRUE) if("too_much_tox") - target.throw_alert(alert_type, /obj/screen/alert/too_much_tox, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_tox, override = TRUE) if("nutrition") if(prob(50)) - target.throw_alert(alert_type, /obj/screen/alert/fat, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/fat, override = TRUE) else - target.throw_alert(alert_type, /obj/screen/alert/starving, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/starving, override = TRUE) if("gravity") - target.throw_alert(alert_type, /obj/screen/alert/weightless, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/weightless, override = TRUE) if("fire") - target.throw_alert(alert_type, /obj/screen/alert/fire, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/fire, override = TRUE) if("temphot") alert_type = "temp" - target.throw_alert(alert_type, /obj/screen/alert/hot, 3, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/hot, 3, override = TRUE) if("tempcold") alert_type = "temp" - target.throw_alert(alert_type, /obj/screen/alert/cold, 3, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/cold, 3, override = TRUE) if("pressure") if(prob(50)) - target.throw_alert(alert_type, /obj/screen/alert/highpressure, 2, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/highpressure, 2, override = TRUE) else - target.throw_alert(alert_type, /obj/screen/alert/lowpressure, 2, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/lowpressure, 2, override = TRUE) //BEEP BOOP I AM A ROBOT if("newlaw") - target.throw_alert(alert_type, /obj/screen/alert/newlaw, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/newlaw, override = TRUE) if("locked") - target.throw_alert(alert_type, /obj/screen/alert/locked, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/locked, override = TRUE) if("hacked") - target.throw_alert(alert_type, /obj/screen/alert/hacked, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/hacked, override = TRUE) if("charge") - target.throw_alert(alert_type, /obj/screen/alert/emptycell, override = TRUE) + target.throw_alert(alert_type, /atom/movable/screen/alert/emptycell, override = TRUE) sleep(duration) target.clear_alert(alert_type, clear_override = TRUE) qdel(src) @@ -1181,7 +1181,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(target.client) target.client.images += fire_overlay to_chat(target, "You're set on fire!") - target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE) + target.throw_alert("fire", /atom/movable/screen/alert/fire, override = TRUE) sleep(20) for(var/i in 1 to 3) if(target.fire_stacks <= 0) @@ -1203,7 +1203,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.clear_alert("temp", clear_override = TRUE) else target.clear_alert("temp", clear_override = TRUE) - target.throw_alert("temp", /obj/screen/alert/hot, stage, override = TRUE) + target.throw_alert("temp", /atom/movable/screen/alert/hot, stage, override = TRUE) /datum/hallucination/fire/proc/clear_fire() if(!active) diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm index 11bd330112..ed7453ad3e 100644 --- a/code/modules/holiday/halloween/jacqueen.dm +++ b/code/modules/holiday/halloween/jacqueen.dm @@ -57,7 +57,7 @@ /obj/mafia_game_board, /obj/docking_port, /obj/shapeshift_holder, - /obj/screen + /atom/movable/screen )) /mob/living/simple_animal/jacq/Initialize() diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 223366c7ab..5647bc2305 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -91,7 +91,7 @@ INITIALIZE_IMMEDIATE(/mob/dead) var/client/C = client to_chat(C, "Sending you to [pick].") - new /obj/screen/splash(C) + new /atom/movable/screen/splash(C) mob_transforming = TRUE sleep(29) //let the animation play diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 11f1d58c0c..f7f3450f6e 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -21,7 +21,7 @@ /mob/dead/new_player/Initialize() if(client && SSticker.state == GAME_STATE_STARTUP) - var/obj/screen/splash/S = new(client, TRUE, TRUE) + var/atom/movable/screen/splash/S = new(client, TRUE, TRUE) S.Fade(TRUE) if(length(GLOB.newplayer_start)) @@ -567,7 +567,7 @@ if(job && !job.override_latejoin_spawn(character)) SSjob.SendToLateJoin(character) if(!arrivals_docked) - var/obj/screen/splash/Spl = new(character.client, TRUE) + var/atom/movable/screen/splash/Spl = new(character.client, TRUE) Spl.Fade(TRUE) character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 6c464c3cd1..429f00161b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -447,7 +447,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(message) to_chat(src, "[message]") if(source) - var/obj/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /obj/screen/alert/notify_cloning) + var/atom/movable/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /atom/movable/screen/alert/notify_cloning) if(A) if(client && client.prefs && client.prefs.UI_style) A.icon = ui_style2icon(client.prefs.UI_style) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index f5970d9da2..e9a62d209b 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -78,7 +78,7 @@ if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) //Body temperature is too hot. - throw_alert("alien_fire", /obj/screen/alert/alien_fire) + throw_alert("alien_fire", /atom/movable/screen/alert/alien_fire) switch(bodytemperature) if(360 to 400) apply_damage(HEAT_DAMAGE_LEVEL_1, BURN) 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 0ce8482ca1..a7044174b0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -7,7 +7,7 @@ meleeKnockdownPower = 75 meleeSlashHumanPower = 20 meleeSlashSAPower = 45 - var/obj/screen/leap_icon = null + var/atom/movable/screen/leap_icon = null /mob/living/carbon/alien/humanoid/hunter/create_internal_organs() internal_organs += new /obj/item/organ/alien/plasmavessel/small diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index cd994dfd10..530d2acd63 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -20,7 +20,7 @@ if(Toxins_pp > tox_detect_threshold) // Detect toxins in air adjustPlasma(breath.get_moles(GAS_PLASMA)*250) - throw_alert("alien_tox", /obj/screen/alert/alien_tox) + throw_alert("alien_tox", /atom/movable/screen/alert/alien_tox) toxins_used = breath.get_moles(GAS_PLASMA) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 8e3966eb03..cae9280c61 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -141,7 +141,7 @@ owner.stuttering += 30 recent_queen_death = 1 - owner.throw_alert("alien_noqueen", /obj/screen/alert/alien_vulnerable) + owner.throw_alert("alien_noqueen", /atom/movable/screen/alert/alien_vulnerable) addtimer(CALLBACK(src, .proc/clear_queen_death), QUEEN_DEATH_DEBUFF_DURATION) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 44379660b6..541db47431 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -57,7 +57,7 @@ var/oindex = active_hand_index active_hand_index = held_index if(hud_used) - var/obj/screen/inventory/hand/H + var/atom/movable/screen/inventory/hand/H H = hud_used.hand_slots["[oindex]"] if(H) H.update_icon() @@ -158,7 +158,7 @@ throw_mode_off() if(!target || !isturf(loc)) return - if(istype(target, /obj/screen)) + if(istype(target, /atom/movable/screen)) return //CIT CHANGES - makes it impossible to throw while in stamina softcrit @@ -699,7 +699,7 @@ become_blind(EYES_COVERED) else if(tinttotal >= TINT_DARKENED) cure_blind(EYES_COVERED) - overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2) + overlay_fullscreen("tint", /atom/movable/screen/fullscreen/impaired, 2) else cure_blind(EYES_COVERED) clear_fullscreen("tint", 0) @@ -775,10 +775,10 @@ visionseverity = 9 if(-INFINITY to -24) visionseverity = 10 - overlay_fullscreen("critvision", /obj/screen/fullscreen/crit/vision, visionseverity) + overlay_fullscreen("critvision", /atom/movable/screen/fullscreen/crit/vision, visionseverity) else clear_fullscreen("critvision") - overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity) + overlay_fullscreen("crit", /atom/movable/screen/fullscreen/crit, severity) else clear_fullscreen("crit") clear_fullscreen("critvision") @@ -802,7 +802,7 @@ severity = 6 if(45 to INFINITY) severity = 7 - overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity) + overlay_fullscreen("oxy", /atom/movable/screen/fullscreen/oxy, severity) else clear_fullscreen("oxy") @@ -823,7 +823,7 @@ severity = 5 if(85 to INFINITY) severity = 6 - overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) else clear_fullscreen("brute") @@ -888,7 +888,7 @@ if(handcuffed) drop_all_held_items() stop_pulling() - throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) + throw_alert("handcuffed", /atom/movable/screen/alert/restrained/handcuffed, new_master = src.handcuffed) if(handcuffed.demoralize_criminals) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) else diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index b2c14c30fe..46ba9a5eb0 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -361,7 +361,7 @@ return embeds -/mob/living/carbon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0) +/mob/living/carbon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0) . = ..() var/damage = override_protection ? intensity : intensity - get_eye_protection() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index c4d023da58..b135ae9cd8 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -209,7 +209,7 @@ update_tint() if(G.vision_correction) if(HAS_TRAIT(src, TRAIT_NEARSIGHT)) - overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) + overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/impaired, 1) if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() if(!QDELETED(src)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 767250c863..b43cd266be 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -89,15 +89,15 @@ var/datum/species/S = dna.species if(S.breathid == "o2") - throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) else if(S.breathid == "tox") - throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) + throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox) else if(S.breathid == "co2") - throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) + throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2) else if(S.breathid == "n2") - throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) + throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro) else if(S.breathid == "ch3br") - throw_alert("not_enough_ch3br", /obj/screen/alert/not_enough_ch3br) + throw_alert("not_enough_ch3br", /atom/movable/screen/alert/not_enough_ch3br) return FALSE else diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 3eb7771025..75803f6c96 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1458,13 +1458,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) switch(H.nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) - H.throw_alert("nutrition", /obj/screen/alert/fat) + H.throw_alert("nutrition", /atom/movable/screen/alert/fat) if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL) H.clear_alert("nutrition") if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - H.throw_alert("nutrition", /obj/screen/alert/hungry) + H.throw_alert("nutrition", /atom/movable/screen/alert/hungry) if(0 to NUTRITION_LEVEL_STARVING) - H.throw_alert("nutrition", /obj/screen/alert/starving) + H.throw_alert("nutrition", /atom/movable/screen/alert/starving) /datum/species/proc/update_health_hud(mob/living/carbon/human/H) return 0 @@ -2168,19 +2168,19 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.adjust_bodytemperature(natural*(1/(thermal_protection+1)) + min(thermal_protection * (loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX)) switch((loc_temp - H.bodytemperature)*thermal_protection) if(-INFINITY to -50) - H.throw_alert("tempfeel", /obj/screen/alert/cold, 3) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 3) if(-50 to -35) - H.throw_alert("tempfeel", /obj/screen/alert/cold, 2) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2) if(-35 to -20) - H.throw_alert("tempfeel", /obj/screen/alert/cold, 1) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 1) if(-20 to 0) //This is the sweet spot where air is considered normal H.clear_alert("tempfeel") if(0 to 15) //When the air around you matches your body's temperature, you'll start to feel warm. - H.throw_alert("tempfeel", /obj/screen/alert/hot, 1) + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 1) if(15 to 30) - H.throw_alert("tempfeel", /obj/screen/alert/hot, 2) + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2) if(30 to INFINITY) - H.throw_alert("tempfeel", /obj/screen/alert/hot, 3) + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 3) // +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt. if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) @@ -2201,11 +2201,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if (burn_damage) switch(burn_damage) if(0 to 2) - H.throw_alert("temp", /obj/screen/alert/sweat, 1) + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 1) if(2 to 4) - H.throw_alert("temp", /obj/screen/alert/sweat, 2) + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 2) else - H.throw_alert("temp", /obj/screen/alert/sweat, 3) + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 3) burn_damage = burn_damage * heatmod * H.physiology.heat_mod if (H.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans H.emote("scream") @@ -2218,13 +2218,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR)) switch(H.bodytemperature) if(200 to BODYTEMP_COLD_DAMAGE_LIMIT) - H.throw_alert("temp", /obj/screen/alert/shiver, 1) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 1) H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN) if(120 to 200) - H.throw_alert("temp", /obj/screen/alert/shiver, 2) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 2) H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod*H.physiology.cold_mod, BURN) else - H.throw_alert("temp", /obj/screen/alert/shiver, 3) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 3) H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN) else @@ -2239,21 +2239,21 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(HAZARD_HIGH_PRESSURE to INFINITY) if(!HAS_TRAIT(H, TRAIT_RESISTHIGHPRESSURE)) H.adjustBruteLoss(min(((adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 ) * PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE) * H.physiology.pressure_mod) - H.throw_alert("pressure", /obj/screen/alert/highpressure, 2) + H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2) else H.clear_alert("pressure") if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) - H.throw_alert("pressure", /obj/screen/alert/highpressure, 1) + H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 1) if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) H.clear_alert("pressure") if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) - H.throw_alert("pressure", /obj/screen/alert/lowpressure, 1) + H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 1) else if(HAS_TRAIT(H, TRAIT_RESISTLOWPRESSURE)) H.clear_alert("pressure") else H.adjustBruteLoss(LOW_PRESSURE_DAMAGE * H.physiology.pressure_mod) - H.throw_alert("pressure", /obj/screen/alert/lowpressure, 2) + H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2) ////////// // FIRE // diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index d92f4ab14a..ae7a7546e1 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -124,21 +124,21 @@ brutemod = 1.25 switch(get_charge(H)) if(ETHEREAL_CHARGE_NONE) - H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 3) + H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 3) if(ETHEREAL_CHARGE_NONE to ETHEREAL_CHARGE_LOWPOWER) - H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 2) + H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 2) if(H.health > 10.5) apply_damage(0.65, TOX, null, null, H) brutemod = 1.75 if(ETHEREAL_CHARGE_LOWPOWER to ETHEREAL_CHARGE_NORMAL) - H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 1) + H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 1) brutemod = 1.5 if(ETHEREAL_CHARGE_FULL to ETHEREAL_CHARGE_OVERLOAD) - H.throw_alert("ethereal_overcharge", /obj/screen/alert/ethereal_overcharge, 1) + H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1) apply_damage(0.2, TOX, null, null, H) brutemod = 1.5 if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS) - H.throw_alert("ethereal_overcharge", /obj/screen/alert/ethereal_overcharge, 2) + H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2) apply_damage(0.65, TOX, null, null, H) brutemod = 1.75 if(prob(10)) //10% each tick for ethereals to explosively release excess energy if it reaches dangerous levels diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f18d768df3..52d736f9ce 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -128,7 +128,7 @@ There are several things that need to be remembered: remove_overlay(UNIFORM_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] inv.update_icon() if(istype(w_uniform, /obj/item/clothing/under)) @@ -180,7 +180,7 @@ There are several things that need to be remembered: remove_overlay(ID_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] inv.update_icon() var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] @@ -205,7 +205,7 @@ There are several things that need to be remembered: remove_overlay(GLOVES_LAYER) if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] inv.update_icon() if(!gloves && bloody_hands) @@ -242,7 +242,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] inv.update_icon() if(glasses) @@ -269,7 +269,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] inv.update_icon() if(ears) @@ -295,7 +295,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] inv.update_icon() if(dna.species.mutant_bodyparts["taur"]) @@ -330,7 +330,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] inv.update_icon() if(s_store) @@ -357,7 +357,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] inv.update_icon() if(head) @@ -394,7 +394,7 @@ There are several things that need to be remembered: remove_overlay(BELT_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] inv.update_icon() if(belt) @@ -416,7 +416,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] inv.update_icon() if(wear_suit) @@ -477,7 +477,7 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_pockets() if(client && hud_used) - var/obj/screen/inventory/inv + var/atom/movable/screen/inventory/inv inv = hud_used.inv_slots[SLOT_L_STORE] inv.update_icon() @@ -506,7 +506,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] inv.update_icon() if(wear_mask) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 0447de6064..fca7c1f72c 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -183,7 +183,7 @@ if(!targets) return for(var/mob/living/carbon/C in targets) - var/obj/screen/alert/give/G = C.throw_alert("[src]", /obj/screen/alert/give) + var/atom/movable/screen/alert/give/G = C.throw_alert("[src]", /atom/movable/screen/alert/give) if(!G) return G.setup(C, src, receiving) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index f42661ca47..6f0f5453da 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -155,7 +155,7 @@ adjustOxyLoss(1) failed_last_breath = 1 - throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) return 0 var/safe_oxy_min = 16 @@ -183,7 +183,7 @@ adjustOxyLoss(8) if(prob(20)) emote("cough") - throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) + throw_alert("too_much_oxy", /atom/movable/screen/alert/too_much_oxy) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) if(O2_partialpressure < safe_oxy_min) //Not enough oxygen @@ -197,7 +197,7 @@ else adjustOxyLoss(3) failed_last_breath = 1 - throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) else //Enough oxygen @@ -231,7 +231,7 @@ if(Toxins_partialpressure > safe_tox_max) var/ratio = (breath.get_moles(GAS_PLASMA)/safe_tox_max) * 10 adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) - throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) + throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox) else clear_alert("too_much_tox") diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 9e6431985c..480cbebe11 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -80,13 +80,13 @@ if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTHEAT)) switch(bodytemperature) if(360 to 400) - throw_alert("temp", /obj/screen/alert/hot, 1) + throw_alert("temp", /atom/movable/screen/alert/hot, 1) apply_damage(HEAT_DAMAGE_LEVEL_1, BURN) if(400 to 460) - throw_alert("temp", /obj/screen/alert/hot, 2) + throw_alert("temp", /atom/movable/screen/alert/hot, 2) apply_damage(HEAT_DAMAGE_LEVEL_2, BURN) if(460 to INFINITY) - throw_alert("temp", /obj/screen/alert/hot, 3) + throw_alert("temp", /atom/movable/screen/alert/hot, 3) if(on_fire) apply_damage(HEAT_DAMAGE_LEVEL_3, BURN) else @@ -96,13 +96,13 @@ if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell)) switch(bodytemperature) if(200 to 260) - throw_alert("temp", /obj/screen/alert/cold, 1) + throw_alert("temp", /atom/movable/screen/alert/cold, 1) apply_damage(COLD_DAMAGE_LEVEL_1, BURN) if(120 to 200) - throw_alert("temp", /obj/screen/alert/cold, 2) + throw_alert("temp", /atom/movable/screen/alert/cold, 2) apply_damage(COLD_DAMAGE_LEVEL_2, BURN) if(-INFINITY to 120) - throw_alert("temp", /obj/screen/alert/cold, 3) + throw_alert("temp", /atom/movable/screen/alert/cold, 3) apply_damage(COLD_DAMAGE_LEVEL_3, BURN) else clear_alert("temp") @@ -117,16 +117,16 @@ switch(adjusted_pressure) if(HAZARD_HIGH_PRESSURE to INFINITY) adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) - throw_alert("pressure", /obj/screen/alert/highpressure, 2) + throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2) if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE) - throw_alert("pressure", /obj/screen/alert/highpressure, 1) + throw_alert("pressure", /atom/movable/screen/alert/highpressure, 1) if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE) clear_alert("pressure") if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) - throw_alert("pressure", /obj/screen/alert/lowpressure, 1) + throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 1) else adjustBruteLoss( LOW_PRESSURE_DAMAGE ) - throw_alert("pressure", /obj/screen/alert/lowpressure, 2) + throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2) return diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 43f57ea40d..cd1a5896eb 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -51,7 +51,7 @@ overlays_standing[HANDCUFF_LAYER] = legcuffs apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) + throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = legcuffed) //monkey HUD updates for items in our inventory diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index d602c25331..5b5aa9d5c0 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -5,8 +5,8 @@ /mob/living/carbon/adjust_drugginess(amount) druggy = max(druggy+amount, 0) if(druggy) - overlay_fullscreen("high", /obj/screen/fullscreen/high) - throw_alert("high", /obj/screen/alert/high) + overlay_fullscreen("high", /atom/movable/screen/fullscreen/high) + throw_alert("high", /atom/movable/screen/alert/high) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/high) sound_environment_override = SOUND_ENVIRONMENT_DRUGGED else @@ -18,8 +18,8 @@ /mob/living/carbon/set_drugginess(amount) druggy = max(amount, 0) if(druggy) - overlay_fullscreen("high", /obj/screen/fullscreen/high) - throw_alert("high", /obj/screen/alert/high) + overlay_fullscreen("high", /atom/movable/screen/fullscreen/high) + throw_alert("high", /atom/movable/screen/alert/high) else clear_fullscreen("high") clear_alert("high") diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index a1ea18a8b9..43e0db1f08 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -91,7 +91,7 @@ return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] inv?.update_icon() if(wear_mask) @@ -105,7 +105,7 @@ remove_overlay(NECK_LAYER) if(client && hud_used && hud_used.inv_slots[SLOT_NECK]) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] inv.update_icon() if(wear_neck) @@ -119,7 +119,7 @@ remove_overlay(BACK_LAYER) if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] inv?.update_icon() if(back) @@ -135,7 +135,7 @@ return if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] inv?.update_icon() if(head) @@ -163,7 +163,7 @@ overlays_standing[LEGCUFF_LAYER] = legcuffs apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) + throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = legcuffed) //mob HUD updates for items in our inventory @@ -171,7 +171,7 @@ /mob/living/carbon/proc/update_hud_handcuffed() if(hud_used) for(var/hand in hud_used.hand_slots) - var/obj/screen/inventory/hand/H = hud_used.hand_slots[hand] + var/atom/movable/screen/inventory/hand/H = hud_used.hand_slots[hand] if(H) H.update_icon() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a3e6b28fd6..5603801dce 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -548,7 +548,7 @@ var/severity = 0 var/healthpercent = (health/maxHealth) * 100 if(hud_used?.healthdoll) //to really put you in the boots of a simplemob - var/obj/screen/healthdoll/living/livingdoll = hud_used.healthdoll + var/atom/movable/screen/healthdoll/living/livingdoll = hud_used.healthdoll switch(healthpercent) if(100 to INFINITY) livingdoll.icon_state = "living0" @@ -579,7 +579,7 @@ UNLINT(livingdoll.filters += filter(type="alpha", icon = mob_mask)) livingdoll.filters += filter(type="drop_shadow", size = -1) if(severity > 0) - overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) else clear_fullscreen("brute") @@ -869,11 +869,11 @@ clear_alert("gravity") else if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD) - throw_alert("gravity", /obj/screen/alert/veryhighgravity) + throw_alert("gravity", /atom/movable/screen/alert/veryhighgravity) else - throw_alert("gravity", /obj/screen/alert/highgravity) + throw_alert("gravity", /atom/movable/screen/alert/highgravity) else - throw_alert("gravity", /obj/screen/alert/weightless) + throw_alert("gravity", /atom/movable/screen/alert/weightless) if(!override && !is_flying()) INVOKE_ASYNC(src, /atom/movable.proc/float, !has_gravity) @@ -1159,7 +1159,7 @@ visible_message("[src] catches fire!", \ "You're set on fire!") new/obj/effect/dummy/lighting_obj/moblight/fire(src) - throw_alert("fire", /obj/screen/alert/fire) + throw_alert("fire", /atom/movable/screen/alert/fire) update_fire() SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src) return TRUE diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 4c6ede3904..2888507baa 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -539,7 +539,7 @@ //called when the mob receives a bright flash -/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0) +/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0) if((override_protection || get_eye_protection() < intensity) && (override_blindness_check || !(HAS_TRAIT(src, TRAIT_BLIND)))) overlay_fullscreen("flash", type) addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) diff --git a/code/modules/mob/living/living_sprint.dm b/code/modules/mob/living/living_sprint.dm index 728645c3eb..3fbc229385 100644 --- a/code/modules/mob/living/living_sprint.dm +++ b/code/modules/mob/living/living_sprint.dm @@ -3,7 +3,7 @@ RegisterSignal(src, SIGNAL_TRAIT(TRAIT_SPRINT_LOCKED), .proc/update_sprint_lock) /mob/living/proc/update_sprint_icon() - var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory + var/atom/movable/screen/sprintbutton/S = locate() in hud_used?.static_inventory S?.update_icon() /mob/living/proc/update_hud_sprint_bar() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 1f582b68bf..b2b1d2fb5f 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -91,7 +91,7 @@ var/multicam_on = FALSE - var/obj/screen/movable/pic_in_pic/ai/master_multicam + var/atom/movable/screen/movable/pic_in_pic/ai/master_multicam var/list/multicam_screens = list() var/list/all_eyes = list() var/max_multicams = 6 diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index ba92932579..7e7f609169 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -1,34 +1,34 @@ //Picture in picture -/obj/screen/movable/pic_in_pic/ai +/atom/movable/screen/movable/pic_in_pic/ai var/mob/living/silicon/ai/ai var/mutable_appearance/highlighted_background var/highlighted = FALSE var/mob/camera/aiEye/pic_in_pic/aiEye -/obj/screen/movable/pic_in_pic/ai/Initialize() +/atom/movable/screen/movable/pic_in_pic/ai/Initialize() . = ..() aiEye = new /mob/camera/aiEye/pic_in_pic() aiEye.screen = src -/obj/screen/movable/pic_in_pic/ai/Destroy() +/atom/movable/screen/movable/pic_in_pic/ai/Destroy() set_ai(null) QDEL_NULL(aiEye) return ..() -/obj/screen/movable/pic_in_pic/ai/Click() +/atom/movable/screen/movable/pic_in_pic/ai/Click() ..() if(ai) ai.select_main_multicam_window(src) -/obj/screen/movable/pic_in_pic/ai/make_backgrounds() +/atom/movable/screen/movable/pic_in_pic/ai/make_backgrounds() ..() highlighted_background = new /mutable_appearance() highlighted_background.icon = 'icons/misc/pic_in_pic.dmi' highlighted_background.icon_state = "background_highlight" highlighted_background.layer = SPACE_LAYER -/obj/screen/movable/pic_in_pic/ai/add_background() +/atom/movable/screen/movable/pic_in_pic/ai/add_background() if((width > 0) && (height > 0)) var/matrix/M = matrix() M.Scale(width + 0.5, height + 0.5) @@ -37,35 +37,35 @@ standard_background.transform = M add_overlay(highlighted ? highlighted_background : standard_background) -/obj/screen/movable/pic_in_pic/ai/set_view_size(width, height, do_refresh = TRUE) +/atom/movable/screen/movable/pic_in_pic/ai/set_view_size(width, height, do_refresh = TRUE) aiEye.static_visibility_range = (round(max(width, height) / 2) + 1) if(ai) ai.camera_visibility(aiEye) ..() -/obj/screen/movable/pic_in_pic/ai/set_view_center(atom/target, do_refresh = TRUE) +/atom/movable/screen/movable/pic_in_pic/ai/set_view_center(atom/target, do_refresh = TRUE) ..() aiEye.setLoc(get_turf(target)) -/obj/screen/movable/pic_in_pic/ai/refresh_view() +/atom/movable/screen/movable/pic_in_pic/ai/refresh_view() ..() aiEye.setLoc(get_turf(center)) -/obj/screen/movable/pic_in_pic/ai/proc/highlight() +/atom/movable/screen/movable/pic_in_pic/ai/proc/highlight() if(highlighted) return highlighted = TRUE cut_overlay(standard_background) add_overlay(highlighted_background) -/obj/screen/movable/pic_in_pic/ai/proc/unhighlight() +/atom/movable/screen/movable/pic_in_pic/ai/proc/unhighlight() if(!highlighted) return highlighted = FALSE cut_overlay(highlighted_background) add_overlay(standard_background) -/obj/screen/movable/pic_in_pic/ai/proc/set_ai(mob/living/silicon/ai/new_ai) +/atom/movable/screen/movable/pic_in_pic/ai/proc/set_ai(mob/living/silicon/ai/new_ai) if(ai) ai.multicam_screens -= src ai.all_eyes -= aiEye @@ -120,7 +120,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) invisibility = INVISIBILITY_OBSERVER mouse_opacity = MOUSE_OPACITY_ICON icon_state = "ai_pip_camera" - var/obj/screen/movable/pic_in_pic/ai/screen + var/atom/movable/screen/movable/pic_in_pic/ai/screen var/list/cameras_telegraphed = list() var/telegraph_cameras = TRUE var/telegraph_range = 7 @@ -204,7 +204,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) if(!silent) to_chat(src, "Cannot place more than [max_multicams] multicamera windows.") return - var/obj/screen/movable/pic_in_pic/ai/C = new /obj/screen/movable/pic_in_pic/ai() + var/atom/movable/screen/movable/pic_in_pic/ai/C = new /atom/movable/screen/movable/pic_in_pic/ai() C.set_view_size(3, 3, FALSE) C.set_view_center(get_turf(eyeobj)) C.set_ai(src) @@ -235,7 +235,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) reset_perspective(GLOB.ai_camera_room_landmark) if(client) for(var/V in multicam_screens) - var/obj/screen/movable/pic_in_pic/P = V + var/atom/movable/screen/movable/pic_in_pic/P = V P.show_to(client) /mob/living/silicon/ai/proc/end_multicam() @@ -245,7 +245,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) select_main_multicam_window(null) if(client) for(var/V in multicam_screens) - var/obj/screen/movable/pic_in_pic/P = V + var/atom/movable/screen/movable/pic_in_pic/P = V P.unshow_to(client) reset_perspective() to_chat(src, "Multiple-camera viewing mode deactivated.") diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm index acaee05cc6..d92f4a5999 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -6,7 +6,7 @@ make_laws() /mob/living/silicon/proc/post_lawchange(announce = TRUE) - throw_alert("newlaw", /obj/screen/alert/newlaw) + throw_alert("newlaw", /atom/movable/screen/alert/newlaw) if(announce && last_lawchange_announce != world.time) to_chat(src, "Your laws have been changed.") addtimer(CALLBACK(src, .proc/show_laws), 0) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 9075af2dbd..d1eaeeacc5 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -58,15 +58,15 @@ if(0.75 to INFINITY) clear_alert("charge") if(0.5 to 0.75) - throw_alert("charge", /obj/screen/alert/lowcell, 1) + throw_alert("charge", /atom/movable/screen/alert/lowcell, 1) if(0.25 to 0.5) - throw_alert("charge", /obj/screen/alert/lowcell, 2) + throw_alert("charge", /atom/movable/screen/alert/lowcell, 2) if(0.01 to 0.25) - throw_alert("charge", /obj/screen/alert/lowcell, 3) + throw_alert("charge", /atom/movable/screen/alert/lowcell, 3) else - throw_alert("charge", /obj/screen/alert/emptycell) + throw_alert("charge", /atom/movable/screen/alert/emptycell) else - throw_alert("charge", /obj/screen/alert/nocell) + throw_alert("charge", /atom/movable/screen/alert/nocell) //Robots on fire /mob/living/silicon/robot/handle_fire() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 8a400ad02d..9658247da3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -23,9 +23,9 @@ robot_modules_background.layer = HUD_LAYER //Objects that appear on screen are on layer ABOVE_HUD_LAYER, UI should be just below it. robot_modules_background.plane = HUD_PLANE - inv1 = new /obj/screen/robot/module1() - inv2 = new /obj/screen/robot/module2() - inv3 = new /obj/screen/robot/module3() + inv1 = new /atom/movable/screen/robot/module1() + inv2 = new /atom/movable/screen/robot/module2() + inv3 = new /atom/movable/screen/robot/module3() previous_health = health @@ -598,7 +598,7 @@ if(wires.is_cut(WIRE_LOCKDOWN)) state = TRUE if(state) - throw_alert("locked", /obj/screen/alert/locked) + throw_alert("locked", /atom/movable/screen/alert/locked) else clear_alert("locked") locked_down = state @@ -611,7 +611,7 @@ module.rebuild_modules() update_icons() if(emagged) - throw_alert("hacked", /obj/screen/alert/hacked) + throw_alert("hacked", /atom/movable/screen/alert/hacked) else clear_alert("hacked") diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index bf3bdcf707..612298e526 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -26,15 +26,15 @@ var/previous_health //Hud stuff - var/obj/screen/inv1 = null - var/obj/screen/inv2 = null - var/obj/screen/inv3 = null - var/obj/screen/lamp_button = null - var/obj/screen/thruster_button = null - var/obj/screen/hands = null + var/atom/movable/screen/inv1 = null + var/atom/movable/screen/inv2 = null + var/atom/movable/screen/inv3 = null + var/atom/movable/screen/lamp_button = null + var/atom/movable/screen/thruster_button = null + var/atom/movable/screen/hands = null var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not - var/obj/screen/robot_modules_background + var/atom/movable/screen/robot_modules_background //3 Modules can be activated at any one time. var/obj/item/robot_module/module = null @@ -90,14 +90,14 @@ ///Lamp brightness. Starts at 3, but can be 1 - 5. var/lamp_intensity = 3 ///Lamp button reference - var/obj/screen/robot/lamp/lampButton + var/atom/movable/screen/robot/lamp/lampButton var/sight_mode = 0 hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD) ///The reference to the built-in tablet that borgs carry. var/obj/item/modular_computer/tablet/integrated/modularInterface - var/obj/screen/robot/modPC/interfaceButton + var/atom/movable/screen/robot/modPC/interfaceButton var/list/upgrades = list() diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index fbd4daa1d3..6c9d508fd8 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -144,6 +144,6 @@ P.on_hit(src, 0, def_zone) return BULLET_ACT_HIT -/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/static) +/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash/static) if(affect_silicon) return ..() diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 7c7ff3779c..b85c0ee643 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/cooldown = 0 var/mob/living/carbon/summoner var/range = 13 //how far from the user the spirit can be - var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses + var/toggle_button_type = /atom/movable/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" diff --git a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm index b5bb91d34f..7083f891b8 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/assassin.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/assassin.dm @@ -11,11 +11,11 @@ tech_fluff_string = "Boot sequence complete. Assassin modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space." - toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin + toggle_button_type = /atom/movable/screen/guardian/ToggleMode/Assassin var/toggle = FALSE var/stealthcooldown = 100 - var/obj/screen/alert/canstealthalert - var/obj/screen/alert/instealthalert + var/atom/movable/screen/alert/canstealthalert + var/atom/movable/screen/alert/instealthalert /mob/living/simple_animal/hostile/guardian/assassin/Initialize() . = ..() @@ -86,12 +86,12 @@ if(stealthcooldown <= world.time) if(toggle) if(!instealthalert) - instealthalert = throw_alert("instealth", /obj/screen/alert/instealth) + instealthalert = throw_alert("instealth", /atom/movable/screen/alert/instealth) clear_alert("canstealth") canstealthalert = null else if(!canstealthalert) - canstealthalert = throw_alert("canstealth", /obj/screen/alert/canstealth) + canstealthalert = throw_alert("canstealth", /atom/movable/screen/alert/canstealth) clear_alert("instealth") instealthalert = null else diff --git a/code/modules/mob/living/simple_animal/guardian/types/charger.dm b/code/modules/mob/living/simple_animal/guardian/types/charger.dm index 9060350df4..ee5a648067 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/charger.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/charger.dm @@ -12,14 +12,14 @@ tech_fluff_string = "Boot sequence complete. Charge modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs..." var/charging = 0 - var/obj/screen/alert/chargealert + var/atom/movable/screen/alert/chargealert /mob/living/simple_animal/hostile/guardian/charger/BiologicalLife(seconds, times_fired) if(!(. = ..())) return if(ranged_cooldown <= world.time) if(!chargealert) - chargealert = throw_alert("charge", /obj/screen/alert/cancharge) + chargealert = throw_alert("charge", /atom/movable/screen/alert/cancharge) else clear_alert("charge") chargealert = null diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index 99272a6d3f..b3d9f01ebb 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -8,7 +8,7 @@ magic_fluff_string = "..And draw the Guardian, a stalwart protector that never leaves the side of its charge." tech_fluff_string = "Boot sequence complete. Protector modules loaded. Holoparasite swarm online." carp_fluff_string = "CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy." - toggle_button_type = /obj/screen/guardian/ToggleMode + toggle_button_type = /atom/movable/screen/guardian/ToggleMode var/toggle = FALSE /mob/living/simple_animal/hostile/guardian/protector/ex_act(severity) diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index e2bcdd5684..5df446085a 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -23,7 +23,7 @@ carp_fluff_string = "CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean." see_invisible = SEE_INVISIBLE_LIVING see_in_dark = 8 - toggle_button_type = /obj/screen/guardian/ToggleMode + toggle_button_type = /atom/movable/screen/guardian/ToggleMode var/list/snares = list() var/toggle = FALSE diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index b51552acd2..fc2912ec2f 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -10,7 +10,7 @@ magic_fluff_string = "..And draw the CMO, a potent force of life... and death." carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!" tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online." - toggle_button_type = /obj/screen/guardian/ToggleMode + toggle_button_type = /atom/movable/screen/guardian/ToggleMode var/obj/structure/receiving_pad/beacon var/beacon_cooldown = 0 var/toggle = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm index 7565a686bf..0f25688b6a 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm @@ -69,7 +69,7 @@ status_type = STATUS_EFFECT_MULTIPLE alert_type = null tick_interval = 1 - var/obj/screen/seedling/seedling_screen_object + var/atom/movable/screen/seedling/seedling_screen_object var/atom/target @@ -81,7 +81,7 @@ /datum/status_effect/seedling_beam_indicator/on_apply() if(owner.client) - seedling_screen_object = new /obj/screen/seedling() + seedling_screen_object = new /atom/movable/screen/seedling() owner.client.screen += seedling_screen_object tick() return ..() @@ -98,7 +98,7 @@ final.Turn(target_angle) seedling_screen_object.transform = final -/obj/screen/seedling +/atom/movable/screen/seedling icon = 'icons/mob/jungle/arachnid.dmi' icon_state = "seedling_beam_indicator" screen_loc = "CENTER:-16,CENTER:-16" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index 64e1399e19..1aa0957fee 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -339,11 +339,11 @@ Difficulty: Extremely Hard id = "ice_block_talisman" duration = 25 status_type = STATUS_EFFECT_REFRESH - alert_type = /obj/screen/alert/status_effect/ice_block_talisman + alert_type = /atom/movable/screen/alert/status_effect/ice_block_talisman /// Stored icon overlay for the hit mob, removed when effect is removed var/icon/cube -/obj/screen/alert/status_effect/ice_block_talisman +/atom/movable/screen/alert/status_effect/ice_block_talisman name = "Frozen Solid" desc = "You're frozen inside an ice cube, and cannot move!" icon_state = "frozen" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index e347056924..d677f59440 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -113,7 +113,7 @@ While using this makes the system rely on OnFire, it still gives options for tim severity = 7 hud_used.healths.icon_state = "elite_health[severity]" if(severity > 0) - overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity) else clear_fullscreen("brute") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 5750d1ecb9..e2f83677d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -45,10 +45,10 @@ /mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage() if(bodytemperature < minbodytemp) adjustBruteLoss(10) - throw_alert("temp", /obj/screen/alert/cold, 2) + throw_alert("temp", /atom/movable/screen/alert/cold, 2) else if(bodytemperature > maxbodytemp) adjustBruteLoss(15) - throw_alert("temp", /obj/screen/alert/hot, 3) + throw_alert("temp", /atom/movable/screen/alert/hot, 3) else clear_alert("temp") diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 58e0483f20..65c553b11d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -554,7 +554,7 @@ var/oindex = active_hand_index active_hand_index = hand_index if(hud_used) - var/obj/screen/inventory/hand/H + var/atom/movable/screen/inventory/hand/H H = hud_used.hand_slots["[hand_index]"] if(H) H.update_icon() diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 389f5ee5b5..02e88e3741 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -599,7 +599,7 @@ /mob/living/proc/become_nearsighted(source) if(!HAS_TRAIT(src, TRAIT_NEARSIGHT)) - overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) + overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/impaired, 1) ADD_TRAIT(src, TRAIT_NEARSIGHT, source) /mob/living/proc/cure_husk(source) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9070c1e8fb..efb4512bca 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -884,7 +884,7 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /mob/proc/sync_lighting_plane_alpha() if(hud_used) - var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] + var/atom/movable/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] if (L) L.alpha = lighting_alpha diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index ba2399b831..b77b9913ba 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -142,7 +142,7 @@ var/registered_z - var/list/alerts = list() // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly + var/list/alerts = list() // contains /atom/movable/screen/alert only // On /mob so clientless mobs will throw alerts properly var/list/screens = list() var/list/client_colours = list() var/hud_type = /datum/hud diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 4b0f505067..5bfc6fe652 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -362,7 +362,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp if(flashwindow) window_flash(O.client) if(source) - var/obj/screen/alert/notify_action/A = O.throw_alert("[REF(source)]_notify_action", /obj/screen/alert/notify_action) + var/atom/movable/screen/alert/notify_action/A = O.throw_alert("[REF(source)]_notify_action", /atom/movable/screen/alert/notify_action) if(A) if(O.client.prefs && O.client.prefs.UI_style) A.icon = ui_style2icon(O.client.prefs.UI_style) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f7d8a810ce..bfd4cfcd29 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -267,7 +267,7 @@ //1: r-leg 2: groin 3: l-leg /client/proc/check_has_body_select() - return mob && mob.hud_used && mob.hud_used.zone_select && istype(mob.hud_used.zone_select, /obj/screen/zone_sel) + return mob && mob.hud_used && mob.hud_used.zone_select && istype(mob.hud_used.zone_select, /atom/movable/screen/zone_sel) /client/verb/body_toggle_head() set name = "body-toggle-head" @@ -285,7 +285,7 @@ else next_in_line = BODY_ZONE_HEAD - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(next_in_line, mob) /client/verb/body_r_arm() @@ -295,7 +295,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_R_ARM, mob) /client/verb/body_chest() @@ -305,7 +305,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_CHEST, mob) /client/verb/body_l_arm() @@ -315,7 +315,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_L_ARM, mob) /client/verb/body_r_leg() @@ -325,7 +325,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_R_LEG, mob) /client/verb/body_groin() @@ -335,7 +335,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_PRECISE_GROIN, mob) /client/verb/body_l_leg() @@ -345,7 +345,7 @@ if(!check_has_body_select()) return - var/obj/screen/zone_sel/selector = mob.hud_used.zone_select + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(BODY_ZONE_L_LEG, mob) /client/verb/toggle_walk_run() @@ -364,7 +364,7 @@ return FALSE m_intent = MOVE_INTENT_RUN if(hud_used && hud_used.static_inventory) - for(var/obj/screen/mov_intent/selector in hud_used.static_inventory) + for(var/atom/movable/screen/mov_intent/selector in hud_used.static_inventory) selector.update_icon() /mob/verb/up() diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index fbef8fd244..089484ea9f 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -52,8 +52,8 @@ /mob/proc/update_blindness() if(eye_blind) // UNCONSCIOUS or has blind trait, or has temporary blindness if(stat == CONSCIOUS || stat == SOFT_CRIT) - throw_alert("blind", /obj/screen/alert/blind) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + throw_alert("blind", /atom/movable/screen/alert/blind) + overlay_fullscreen("blind", /atom/movable/screen/fullscreen/blind) // You are blind why should you be able to make out details like color, only shapes near you // add_client_colour(/datum/client_colour/monochrome/blind) else // CONSCIOUS no blind trait, no blindness @@ -91,7 +91,7 @@ var/list/screens = list(hud_used.plane_masters["[GAME_PLANE]"], hud_used.plane_masters["[FLOOR_PLANE]"], hud_used.plane_masters["[WALL_PLANE]"], hud_used.plane_masters["[ABOVE_WALL_PLANE]"]) for(var/A in screens) - var/obj/screen/plane_master/P = A + var/atom/movable/screen/plane_master/P = A P.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3))) /mob/proc/remove_eyeblur() @@ -100,7 +100,7 @@ var/list/screens = list(hud_used.plane_masters["[GAME_PLANE]"], hud_used.plane_masters["[FLOOR_PLANE]"], hud_used.plane_masters["[WALL_PLANE]"], hud_used.plane_masters["[ABOVE_WALL_PLANE]"]) for(var/A in screens) - var/obj/screen/plane_master/P = A + var/atom/movable/screen/plane_master/P = A P.remove_filter("blurry_eyes") ///Adjust the drugginess of a mob diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 64c99e01bf..635ec2e54c 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -123,7 +123,7 @@ /obj/item/modular_computer/MouseDrop(obj/over_object, src_location, over_location) var/mob/M = usr - if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src, BE_CLOSE)) + if((!istype(over_object, /atom/movable/screen)) && usr.canUseTopic(src, BE_CLOSE)) return attack_self(M) return ..() diff --git a/code/modules/modular_computers/computers/item/laptop.dm b/code/modules/modular_computers/computers/item/laptop.dm index aee5dd4229..5686dec8d0 100644 --- a/code/modules/modular_computers/computers/item/laptop.dm +++ b/code/modules/modular_computers/computers/item/laptop.dm @@ -68,11 +68,11 @@ try_toggle_open(usr) /obj/item/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location) - if(istype(over_object, /obj/screen/inventory/hand) || over_object == usr) - var/obj/screen/inventory/hand/H = over_object + if(istype(over_object, /atom/movable/screen/inventory/hand) || over_object == usr) + var/atom/movable/screen/inventory/hand/H = over_object var/mob/M = usr - if(!istype(over_object, /obj/screen/inventory/hand)) + if(!istype(over_object, /atom/movable/screen/inventory/hand)) M.put_in_active_hand(src) return diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 78e72640ed..92275b1e8b 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -21,10 +21,10 @@ // Stuff needed to render the map var/map_name - var/obj/screen/map_view/cam_screen + var/atom/movable/screen/map_view/cam_screen /// All the plane masters that need to be applied. var/list/cam_plane_masters - var/obj/screen/background/cam_background + var/atom/movable/screen/background/cam_background /datum/computer_file/program/secureye/New() . = ..() @@ -42,8 +42,8 @@ cam_screen.del_on_map_removal = FALSE cam_screen.screen_loc = "[map_name]:1,1" cam_plane_masters = list() - for(var/plane in subtypesof(/obj/screen/plane_master)) - var/obj/screen/instance = new plane() + for(var/plane in subtypesof(/atom/movable/screen/plane_master)) + var/atom/movable/screen/instance = new plane() instance.assigned_map = map_name instance.del_on_map_removal = FALSE instance.screen_loc = "[map_name]:CENTER" diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index f5cb6e1a10..2bb743abbd 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -101,8 +101,8 @@ if(over_object == M) M.put_in_hands(src) - else if(istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + else if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(M) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 16a9ed33ed..6775532614 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -52,8 +52,8 @@ if(over_object == M) M.put_in_hands(src) - else if(istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + else if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) add_fingerprint(M) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index fdfe18d0e3..429c7557b6 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1173,8 +1173,8 @@ malf.malfhack = src malf.malfhacking = addtimer(CALLBACK(malf, /mob/living/silicon/ai/.proc/malfhacked, src), 600, TIMER_STOPPABLE) - var/obj/screen/alert/hackingapc/A - A = malf.throw_alert("hackingapc", /obj/screen/alert/hackingapc) + var/atom/movable/screen/alert/hackingapc/A + A = malf.throw_alert("hackingapc", /atom/movable/screen/alert/hackingapc) A.target = src /obj/machinery/power/apc/proc/malfoccupy(mob/living/silicon/ai/malf) diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 716cc6f31d..a0274d76d7 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -68,8 +68,8 @@ if(!M.incapacitated()) - if(istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object + if(istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object M.putItemFromInventoryInHandIfPossible(src, H.held_index) /obj/item/minigunpack/update_icon_state() diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 9d9f6aeb83..2ef974a450 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -280,7 +280,7 @@ /obj/item/gun/energy/beam_rifle/onMouseDown(object, location, params, mob/mob) if(istype(mob)) set_user(mob) - if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) + if(istype(object, /atom/movable/screen) && !istype(object, /atom/movable/screen/click_catcher)) return if((object in mob.contents) || (object == mob)) return @@ -288,7 +288,7 @@ return ..() /obj/item/gun/energy/beam_rifle/onMouseUp(object, location, params, mob/M) - if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) + if(istype(object, /atom/movable/screen) && !istype(object, /atom/movable/screen/click_catcher)) return process_aim() if(fire_check() && can_trigger_gun(M)) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 0655faa1e8..7dd8cac452 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -827,7 +827,7 @@ if(prob(33)) // 1/3rd of the time, let's make it stack with the previous matrix! Mwhahahaha! for(var/whole_screen in screens) - var/obj/screen/plane_master/PM = whole_screen + var/atom/movable/screen/plane_master/PM = whole_screen newmatrix = skew * PM.transform for(var/whole_screen in screens) diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 57900f7098..7fc57ee3a7 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -465,7 +465,7 @@ /obj/machinery/disposal/bin/get_remote_view_fullscreens(mob/user) if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS))) - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 2) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2) //Delivery Chute diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 8254e20761..0c34a251ae 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -1,4 +1,4 @@ -/obj/screen/alert/status_effect/rainbow_protection +/atom/movable/screen/alert/status_effect/rainbow_protection name = "Rainbow Protection" desc = "You are defended from harm, but so are those you might seek to injure!" icon_state = "slime_rainbowshield" @@ -6,7 +6,7 @@ /datum/status_effect/rainbow_protection id = "rainbow_protection" duration = 100 - alert_type = /obj/screen/alert/status_effect/rainbow_protection + alert_type = /atom/movable/screen/alert/status_effect/rainbow_protection var/originalcolor /datum/status_effect/rainbow_protection/on_apply() @@ -29,7 +29,7 @@ "You no longer feel protected...") return ..() -/obj/screen/alert/status_effect/slimeskin +/atom/movable/screen/alert/status_effect/slimeskin name = "Adamantine Slimeskin" desc = "You are covered in a thick, non-neutonian gel." icon_state = "slime_stoneskin" @@ -37,7 +37,7 @@ /datum/status_effect/slimeskin id = "slimeskin" duration = 300 - alert_type = /obj/screen/alert/status_effect/slimeskin + alert_type = /atom/movable/screen/alert/status_effect/slimeskin var/originalcolor /datum/status_effect/slimeskin/on_apply() @@ -91,14 +91,14 @@ owner.forceMove(target.loc) return ..() -/obj/screen/alert/status_effect/freon/stasis +/atom/movable/screen/alert/status_effect/freon/stasis desc = "You're frozen inside of a protective ice cube! While inside, you can't do anything, but are immune to harm! Resist to get out." /datum/status_effect/frozenstasis id = "slime_frozen" status_type = STATUS_EFFECT_UNIQUE duration = -1 //Will remove self when block breaks. - alert_type = /obj/screen/alert/status_effect/freon/stasis + alert_type = /atom/movable/screen/alert/status_effect/freon/stasis var/obj/structure/ice_stasis/cube /datum/status_effect/frozenstasis/on_apply() @@ -162,7 +162,7 @@ qdel(clone) return ..() -/obj/screen/alert/status_effect/clone_decay +/atom/movable/screen/alert/status_effect/clone_decay name = "Clone Decay" desc = "You are simply a construct, and cannot maintain this form forever. You will be returned to your original body if you should fall." icon_state = "slime_clonedecay" @@ -171,7 +171,7 @@ id = "slime_clonedecay" status_type = STATUS_EFFECT_UNIQUE duration = -1 - alert_type = /obj/screen/alert/status_effect/clone_decay + alert_type = /atom/movable/screen/alert/status_effect/clone_decay /datum/status_effect/slime_clone_decay/tick() owner.adjustToxLoss(1, 0) @@ -180,7 +180,7 @@ owner.adjustFireLoss(1, 0) owner.color = "#007BA7" -/obj/screen/alert/status_effect/bloodchill +/atom/movable/screen/alert/status_effect/bloodchill name = "Bloodchilled" desc = "You feel a shiver down your spine after getting hit with a glob of cold blood. You'll move slower and get frostbite for a while!" icon_state = "bloodchill" @@ -188,7 +188,7 @@ /datum/status_effect/bloodchill id = "bloodchill" duration = 100 - alert_type = /obj/screen/alert/status_effect/bloodchill + alert_type = /atom/movable/screen/alert/status_effect/bloodchill /datum/status_effect/bloodchill/on_apply() owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) @@ -202,7 +202,7 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) return ..() -/obj/screen/alert/status_effect/bloodchill +/atom/movable/screen/alert/status_effect/bloodchill name = "Bloodchilled" desc = "You feel a shiver down your spine after getting hit with a glob of cold blood. You'll move slower and get frostbite for a while!" icon_state = "bloodchill" @@ -210,7 +210,7 @@ /datum/status_effect/bonechill id = "bonechill" duration = 80 - alert_type = /obj/screen/alert/status_effect/bonechill + alert_type = /atom/movable/screen/alert/status_effect/bonechill /datum/status_effect/bonechill/on_apply() owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) @@ -226,7 +226,7 @@ owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) return ..() -/obj/screen/alert/status_effect/bonechill +/atom/movable/screen/alert/status_effect/bonechill name = "Bonechilled" desc = "You feel a shiver down your spine after hearing the haunting noise of bone rattling. You'll move slower and get frostbite for a while!" icon_state = "bloodchill" @@ -661,7 +661,7 @@ return ..() //Bluespace has an icon because it's kinda active. -/obj/screen/alert/status_effect/bluespaceslime +/atom/movable/screen/alert/status_effect/bluespaceslime name = "Stabilized Bluespace Extract" desc = "You shouldn't see this, since we set it to change automatically!" icon_state = "slime_bluespace_on" @@ -674,7 +674,7 @@ /datum/status_effect/stabilized/bluespace id = "stabilizedbluespace" colour = "bluespace" - alert_type = /obj/screen/alert/status_effect/bluespaceslime + alert_type = /atom/movable/screen/alert/status_effect/bluespaceslime var/healthcheck /datum/status_effect/stabilized/bluespace/tick() diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm index 66872ae818..7109c87999 100644 --- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -302,7 +302,7 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) user.reset_perspective(parentSphere) user.set_machine(src) var/datum/action/peepholeCancel/PHC = new - user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) + user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) PHC.Grant(user) return TRUE diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 36abcb41dc..a215b58b55 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -356,7 +356,7 @@ playsound(console, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0) remote_eye.setLoc(T) to_chat(target, "Jumped to [selected]") - C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static) + C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static) C.clear_fullscreen("flash", 3) else playsound(console, 'sound/machines/terminal_prompt_deny.ogg', 25, 0) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 88b6f0f662..6b5b4a14aa 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -237,7 +237,7 @@ C.handcuffed = null C.update_handcuffed() if(C.hud_used) - var/obj/screen/inventory/hand/R = C.hud_used.hand_slots["[held_index]"] + var/atom/movable/screen/inventory/hand/R = C.hud_used.hand_slots["[held_index]"] if(R) R.update_icon() if(C.gloves) @@ -255,7 +255,7 @@ C.handcuffed = null C.update_handcuffed() if(C.hud_used) - var/obj/screen/inventory/hand/L = C.hud_used.hand_slots["[held_index]"] + var/atom/movable/screen/inventory/hand/L = C.hud_used.hand_slots["[held_index]"] if(L) L.update_icon() if(C.gloves) @@ -340,7 +340,7 @@ if(C.dna.species.mutanthands && !is_pseudopart) C.put_in_hand(new C.dna.species.mutanthands(), held_index) if(C.hud_used) - var/obj/screen/inventory/hand/hand = C.hud_used.hand_slots["[held_index]"] + var/atom/movable/screen/inventory/hand/hand = C.hud_used.hand_slots["[held_index]"] if(hand) hand.update_icon() C.update_inv_gloves() diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 8c7553d8e3..3a08a764d3 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -90,7 +90,7 @@ if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) if(owner.hud_used) - var/obj/screen/inventory/hand/L = owner.hud_used.hand_slots["[held_index]"] + var/atom/movable/screen/inventory/hand/L = owner.hud_used.hand_slots["[held_index]"] if(L) L.update_icon() @@ -152,7 +152,7 @@ if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) if(owner.hud_used) - var/obj/screen/inventory/hand/R = owner.hud_used.hand_slots["[held_index]"] + var/atom/movable/screen/inventory/hand/R = owner.hud_used.hand_slots["[held_index]"] if(R) R.update_icon() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 09f0a901a3..9861a1b639 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -41,7 +41,7 @@ return switch(eye_damaged) if(BLURRY_VISION_ONE, BLURRY_VISION_TWO) - owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged) + owner.overlay_fullscreen("eye_damage", /atom/movable/screen/fullscreen/impaired, eye_damaged) if(BLIND_VISION_THREE) owner.become_blind(EYE_DAMAGE) if(ishuman(owner)) @@ -106,7 +106,7 @@ else if(eye_damaged == BLIND_VISION_THREE) owner.become_blind(EYE_DAMAGE) if(eye_damaged && eye_damaged != BLIND_VISION_THREE) - owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged) + owner.overlay_fullscreen("eye_damage", /atom/movable/screen/fullscreen/impaired, eye_damaged) else owner.clear_fullscreen("eye_damage") diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index defb062f1a..f436b31513 100644 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -62,13 +62,13 @@ H.clear_alert("disgust") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) - H.throw_alert("disgust", /obj/screen/alert/gross) + H.throw_alert("disgust", /atom/movable/screen/alert/gross) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/gross) if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) - H.throw_alert("disgust", /obj/screen/alert/verygross) + H.throw_alert("disgust", /atom/movable/screen/alert/verygross) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/verygross) if(DISGUST_LEVEL_DISGUSTED to INFINITY) - H.throw_alert("disgust", /obj/screen/alert/disgusted) + H.throw_alert("disgust", /atom/movable/screen/alert/disgusted) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgusted) /obj/item/organ/stomach/Remove(special = FALSE) diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index f9efd7d9c1..ca1b163968 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -13,7 +13,7 @@ Configuration: Usage: - Define mouse event procs on your (probably HUD) object and simply call the show and hide procs respectively: - /obj/screen/hud + /atom/movable/screen/hud MouseEntered(location, control, params) usr.client.tooltip.show(params, title = src.name, content = src.desc) diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm index 3a683ca2ff..bea34c27a2 100644 --- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm +++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm @@ -6,11 +6,11 @@ if(SEND_SIGNAL(src, COMSIG_COMBAT_MODE_CHECK, COMBAT_MODE_TOGGLED)) return FALSE //let's not override the main draw of the game these days voremode = !voremode - var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory + var/atom/movable/screen/voretoggle/T = locate() in hud_used?.static_inventory T?.update_icon_state() return TRUE /mob/living/carbon/proc/disable_vore_mode() voremode = FALSE - var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory + var/atom/movable/screen/voretoggle/T = locate() in hud_used?.static_inventory T?.update_icon_state() From 4b2bffdff0fd4c49a50400895f2caf0b82f1186c Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 14:06:18 +0300 Subject: [PATCH 26/98] Actually makes it work by /obj/screen --> /atom/movable/screen --- code/_onclick/hud/action_button.dm | 2 +- code/_onclick/hud/alert.dm | 2 +- code/_onclick/hud/fullscreen.dm | 2 +- code/_onclick/hud/map_popups.dm | 2 +- code/_onclick/hud/picture_in_picture.dm | 2 +- code/_onclick/hud/radial.dm | 4 ++-- code/_onclick/hud/screen_objects.dm | 8 ++------ code/datums/action.dm | 4 ++-- code/datums/components/crafting/crafting.dm | 2 +- code/modules/client/client_defines.dm | 2 +- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- code/modules/mob/living/silicon/ai/multicam.dm | 2 +- 12 files changed, 16 insertions(+), 20 deletions(-) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 735c95b28e..791cf336ac 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -235,7 +235,7 @@ return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:-6" -/datum/hud/proc/SetButtonCoords(obj/screen/button,number, supportedcolumns) +/datum/hud/proc/SetButtonCoords(atom/movable/screen/button,number, supportedcolumns) var/row = round((number-1)/supportedcolumns) var/col = ((number - 1)%(supportedcolumns)) + 1 var/x_offset = 32*(col-1) + 4 + 2*col diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index e148ae301d..ed4c91dd9b 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -69,7 +69,7 @@ thealert.timeout = world.time + thealert.timeout - world.tick_lag return thealert -/mob/proc/alert_timeout(obj/screen/alert/alert, category) +/mob/proc/alert_timeout(atom/movable/screen/alert/alert, category) if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout) clear_alert(category) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 7481baa2c0..a7247ccf09 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -31,7 +31,7 @@ client.screen -= screen qdel(screen) -/mob/proc/clear_fullscreen_after_animate(obj/screen/fullscreen/screen) +/mob/proc/clear_fullscreen_after_animate(atom/movable/screen/fullscreen/screen) if(client) client.screen -= screen qdel(screen) diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm index 72c98433a6..7c40f654ff 100644 --- a/code/_onclick/hud/map_popups.dm +++ b/code/_onclick/hud/map_popups.dm @@ -46,7 +46,7 @@ * Registers screen obj with the client, which makes it visible on the * assigned map, and becomes a part of the assigned map's lifecycle. */ -/client/proc/register_map_obj(obj/screen/screen_obj) +/client/proc/register_map_obj(atom/movable/screen/screen_obj) if(!screen_obj.assigned_map) CRASH("Can't register [screen_obj] without 'assigned_map' property.") if(!screen_maps[screen_obj.assigned_map]) diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index 847c49b0cc..6cf1bfd6a6 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -26,7 +26,7 @@ QDEL_NULL(button_expand) return ..() -/atom/movable/screen/movable/pic_in_pic/component_click(obj/screen/component_button/component, params) +/atom/movable/screen/movable/pic_in_pic/component_click(atom/movable/screen/component_button/component, params) if(component == button_x) qdel(src) else if(component == button_expand) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index f817851999..3cce288e67 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(radial_menus) else SetElement(E,page_choices[i],angle,anim = anim,anim_order = i) -/datum/radial_menu/proc/HideElement(obj/screen/radial/slice/E) +/datum/radial_menu/proc/HideElement(atom/movable/screen/radial/slice/E) E.cut_overlays() E.alpha = 0 E.name = "None" @@ -168,7 +168,7 @@ GLOBAL_LIST_EMPTY(radial_menus) E.choice = null E.next_page = FALSE -/datum/radial_menu/proc/SetElement(obj/screen/radial/slice/E,choice_id,angle,anim,anim_order) +/datum/radial_menu/proc/SetElement(atom/movable/screen/radial/slice/E,choice_id,angle,anim,anim_order) //Position var/py = round(cos(angle) * radius) + py_shift var/px = round(sin(angle) * radius) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 517ecfec48..bfbdce41fd 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -11,7 +11,6 @@ icon = 'icons/mob/screen_gen.dmi' layer = HUD_LAYER plane = HUD_PLANE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT vis_flags = VIS_INHERIT_PLANE @@ -34,9 +33,6 @@ */ var/del_on_map_removal = TRUE -/atom/movable/screen/take_damage() - return - /atom/movable/screen/Destroy() master = null hud = null @@ -48,7 +44,7 @@ /atom/movable/screen/orbit() return -/atom/movable/screen/proc/component_click(obj/screen/component_button/component, params) +/atom/movable/screen/proc/component_click(atom/movable/screen/component_button/component, params) return /atom/movable/screen/text @@ -695,7 +691,7 @@ /atom/movable/screen/component_button var/atom/movable/screen/parent -/atom/movable/screen/component_button/Initialize(mapload, obj/screen/parent) +/atom/movable/screen/component_button/Initialize(mapload, atom/movable/screen/parent) . = ..() src.parent = parent diff --git a/code/datums/action.dm b/code/datums/action.dm index 66a3530c82..1a8ea7a60f 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -159,7 +159,7 @@ button.color = rgb(255,255,255,255) return 1 -/datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) +/datum/action/proc/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force = FALSE) if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) current_button.cut_overlays() current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) @@ -821,7 +821,7 @@ icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "storage_gather_switch" -/datum/action/item_action/storage_gather_mode/ApplyIcon(obj/screen/movable/action_button/current_button) +/datum/action/item_action/storage_gather_mode/ApplyIcon(atom/movable/screen/movable/action_button/current_button) . = ..() var/old_layer = target.layer var/old_plane = target.plane diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 3f0e2c3b1c..3ed3e521e4 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -323,7 +323,7 @@ Deletion.Cut(Deletion.len) qdel(DL) -/datum/component/personal_crafting/proc/component_ui_interact(obj/screen/craft/image, location, control, params, user) +/datum/component/personal_crafting/proc/component_ui_interact(atom/movable/screen/craft/image, location, control, params, user) if(user == parent) ui_interact(user) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index f428088fe1..99f24107c7 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -88,7 +88,7 @@ var/datum/player_details/player_details //these persist between logins/logouts during the same round. - var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen. + var/list/char_render_holders //Should only be a key-value list of north/south/east/west = atom/movable/screen. /// Last time they used fix macros var/last_macro_fix = 0 diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 2f463fa8bc..7a5bcc9e3a 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -505,7 +505,7 @@ button_icon_state = "slimeeject" ..() -/datum/action/innate/integrate_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force) +/datum/action/innate/integrate_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) ..(current_button, TRUE) if(species && species.current_extract) current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) @@ -559,7 +559,7 @@ return TRUE return FALSE -/datum/action/innate/use_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force) +/datum/action/innate/use_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) ..(current_button, TRUE) if(species && species.current_extract) current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state)) diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 7e7f609169..54713acac4 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -251,7 +251,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) to_chat(src, "Multiple-camera viewing mode deactivated.") -/mob/living/silicon/ai/proc/select_main_multicam_window(obj/screen/movable/pic_in_pic/ai/P) +/mob/living/silicon/ai/proc/select_main_multicam_window(atom/movable/screen/movable/pic_in_pic/ai/P) if(master_multicam == P) return From 2fec997e1fcb62a9a434735282c19a3d75851225 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 20:12:38 +0300 Subject: [PATCH 27/98] No longer neccesary --- code/modules/reagents/chemistry/reagents/medicine_reagents.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 263bd15730..1ccda4812d 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -398,7 +398,6 @@ taste_description = "sweetness and salt" var/last_added = 0 var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active - var/extra_regen = 0.25 // in addition to acting as temporary blood, also add this much to their actual blood per tick pH = 5.5 /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) From d0a6e957939e188a095fb84a8da1a407b79cb359 Mon Sep 17 00:00:00 2001 From: Artur Date: Thu, 29 Jul 2021 20:26:04 +0300 Subject: [PATCH 28/98] gravitygenerator.dm now pretty much equal to tg's Minus toggle_machine_stat and machine_stat mostly --- code/modules/power/gravitygenerator.dm | 87 ++++++++++++++++---------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index e37ae56e71..272a9deae2 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -27,12 +27,22 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne use_power = NO_POWER_USE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/sprite_number = 0 + ///Audio for when the gravgen is on + var/datum/looping_sound/gravgen/soundloop + +/obj/machinery/gravity_generator/main/Initialize() + . = ..() + soundloop = new(list(src), TRUE) + +/obj/machinery/gravity_generator/main/Destroy() + . = ..() + QDEL_NULL(soundloop) /obj/machinery/gravity_generator/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE) return FALSE /obj/machinery/gravity_generator/ex_act(severity, target) - if(severity == 1) // Very sturdy. + if(severity >= EXPLODE_DEVASTATE) // Very sturdy. set_broken() /obj/machinery/gravity_generator/blob_act(obj/structure/blob/B) @@ -40,12 +50,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne set_broken() /obj/machinery/gravity_generator/zap_act(power, zap_flags) - ..() + . = ..() if(zap_flags & ZAP_MACHINE_EXPLOSIVE) qdel(src)//like the singulo, tesla deletes it. stops it from exploding over and over /obj/machinery/gravity_generator/update_icon_state() icon_state = "[get_status()]_[sprite_number]" + return ..() /obj/machinery/gravity_generator/proc/get_status() return "off" @@ -65,6 +76,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(main_part) qdel(main_part) set_broken() + QDEL_NULL(soundloop) return ..() // @@ -80,14 +92,19 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator/part/get_status() return main_part?.get_status() -/obj/machinery/gravity_generator/part/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - return main_part.attack_hand(user) +/obj/machinery/gravity_generator/part/attack_hand(mob/user, list/modifiers) + return main_part.attack_hand(user, modifiers) /obj/machinery/gravity_generator/part/set_broken() ..() if(main_part && !(main_part.stat & BROKEN)) main_part.set_broken() +/// Used to eat args +/obj/machinery/gravity_generator/part/proc/on_update_icon(obj/machinery/gravity_generator/source, updates, updated) + SIGNAL_HANDLER + return update_appearance(updates) + // // Generator which spawns with the station. // @@ -124,7 +141,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne var/charge_count = 100 var/current_overlay = null var/broken_state = 0 - var/setting = 1 //Gravity value when on + var/setting = 1 //Gravity value when on /obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts. investigate_log("was destroyed!", INVESTIGATE_GRAVITY) @@ -149,13 +166,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(count == 5) // Middle middle = part if(count <= 3) // Their sprite is the top part of the generator - part.density = FALSE + part.set_density(FALSE) part.layer = WALL_OBJ_LAYER part.sprite_number = count part.main_part = src parts += part - part.update_icon() - part.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /atom/proc/update_icon) + part.update_appearance() + part.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /obj/machinery/gravity_generator/part/proc/on_update_icon) /obj/machinery/gravity_generator/main/proc/connected_parts() return parts.len == 8 @@ -178,7 +195,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(M.stat & BROKEN) M.set_fix() broken_state = FALSE - update_icon() + update_appearance() set_power() // Interaction @@ -188,33 +205,33 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) if(I.tool_behaviour == TOOL_SCREWDRIVER) - to_chat(user, "You secure the screws of the framework.") + to_chat(user, span_notice("You secure the screws of the framework.")) I.play_tool_sound(src) broken_state++ - update_icon() + update_appearance() return if(GRAV_NEEDS_WELDING) if(I.tool_behaviour == TOOL_WELDER) if(I.use_tool(src, user, 0, volume=50, amount=1)) - to_chat(user, "You mend the damaged framework.") + to_chat(user, span_notice("You mend the damaged framework.")) broken_state++ - update_icon() + update_appearance() return if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) var/obj/item/stack/sheet/plasteel/PS = I if(PS.get_amount() >= 10) PS.use(10) - to_chat(user, "You add the plating to the framework.") + to_chat(user, span_notice("You add the plating to the framework.")) playsound(src.loc, 'sound/machines/click.ogg', 75, TRUE) broken_state++ - update_icon() + update_appearance() else - to_chat(user, "You need 10 sheets of plasteel!") + to_chat(user, span_warning("You need 10 sheets of plasteel!")) return if(GRAV_NEEDS_WRENCH) if(I.tool_behaviour == TOOL_WRENCH) - to_chat(user, "You secure the plating to the framework.") + to_chat(user, span_notice("You secure the plating to the framework.")) I.play_tool_sound(src) set_fix() return @@ -233,12 +250,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne data["charge_count"] = charge_count data["charging_state"] = charging_state data["on"] = on - data["operational"] = (stat & BROKEN) ? FALSE : TRUE + data["operational"] = (machine_stat & BROKEN) ? FALSE : TRUE return data /obj/machinery/gravity_generator/main/ui_act(action, params) - if(..()) + . = ..() + if(.) return switch(action) @@ -252,7 +270,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator/main/power_change() . = ..() - investigate_log("has [stat & NOPOWER ? "lost" : "regained"] power.", INVESTIGATE_GRAVITY) + investigate_log("has [machine_stat & NOPOWER ? "lost" : "regained"] power.", INVESTIGATE_GRAVITY) set_power() /obj/machinery/gravity_generator/main/get_status() @@ -270,7 +288,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation. investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", INVESTIGATE_GRAVITY) - update_icon() + update_appearance() // Set the state of the gravity. /obj/machinery/gravity_generator/main/proc/set_state(new_state) @@ -281,17 +299,19 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne var/alert = FALSE if(SSticker.IsRoundInProgress()) if(on) // If we turned on and the game is live. + soundloop.start() if(gravity_in_level() == FALSE) alert = TRUE investigate_log("was brought online and is now producing gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought online [ADMIN_VERBOSEJMP(src)]") else + soundloop.stop() if(gravity_in_level() == TRUE) alert = TRUE investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_VERBOSEJMP(src)]") - update_icon() + update_appearance() update_list() src.updateUsrDialog() if(alert) @@ -391,13 +411,16 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // Misc /obj/item/paper/guides/jobs/engi/gravity_gen - info = {" -# Gravity Generator Instructions For Dummies -Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING.

-### It blew up! -Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then please proceed to panic; otherwise follow these steps. -1. Secure the screws of the framework with a screwdriver. -2. Mend the damaged framework with a welding tool. -3. Add additional plasteel plating. -4. Secure the additional plating with a wrench. -"} + name = "paper- 'Generate your own gravity!'" + info = {"

Gravity Generator Instructions For Dummies

+

Surprisingly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of + energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator + will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR PROTECTIVE CLOTHING.

+
+

It blew up!

+

Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then + please proceed to panic; otherwise follow these steps.

    +
  1. Secure the screws of the framework with a screwdriver.
  2. +
  3. Mend the damaged framework with a welding tool.
  4. +
  5. Add additional plasteel plating.
  6. +
  7. Secure the additional plating with a wrench.
"} From 6023710c06a18147e4fbdf6a0ca8954ecbfd02b8 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 20:28:34 +0300 Subject: [PATCH 29/98] Actually we don't have looping sounds --- code/modules/power/gravitygenerator.dm | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 272a9deae2..9bb4131ff6 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -27,16 +27,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne use_power = NO_POWER_USE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/sprite_number = 0 - ///Audio for when the gravgen is on - var/datum/looping_sound/gravgen/soundloop - -/obj/machinery/gravity_generator/main/Initialize() - . = ..() - soundloop = new(list(src), TRUE) - -/obj/machinery/gravity_generator/main/Destroy() - . = ..() - QDEL_NULL(soundloop) /obj/machinery/gravity_generator/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE) return FALSE @@ -76,7 +66,6 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(main_part) qdel(main_part) set_broken() - QDEL_NULL(soundloop) return ..() // @@ -299,13 +288,11 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne var/alert = FALSE if(SSticker.IsRoundInProgress()) if(on) // If we turned on and the game is live. - soundloop.start() if(gravity_in_level() == FALSE) alert = TRUE investigate_log("was brought online and is now producing gravity for this level.", INVESTIGATE_GRAVITY) message_admins("The gravity generator was brought online [ADMIN_VERBOSEJMP(src)]") else - soundloop.stop() if(gravity_in_level() == TRUE) alert = TRUE investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY) From ec4fc3559337c686eb379a0dd9efa6912b46b810 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 20:33:16 +0300 Subject: [PATCH 30/98] Missed these.. --- code/modules/power/gravitygenerator.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 9bb4131ff6..3fe03978bd 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -155,7 +155,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne if(count == 5) // Middle middle = part if(count <= 3) // Their sprite is the top part of the generator - part.set_density(FALSE) + part.density= 0 part.layer = WALL_OBJ_LAYER part.sprite_number = count part.main_part = src @@ -239,7 +239,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne data["charge_count"] = charge_count data["charging_state"] = charging_state data["on"] = on - data["operational"] = (machine_stat & BROKEN) ? FALSE : TRUE + data["operational"] = (stat & BROKEN) ? FALSE : TRUE return data @@ -259,7 +259,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator/main/power_change() . = ..() - investigate_log("has [machine_stat & NOPOWER ? "lost" : "regained"] power.", INVESTIGATE_GRAVITY) + investigate_log("has [stat & NOPOWER ? "lost" : "regained"] power.", INVESTIGATE_GRAVITY) set_power() /obj/machinery/gravity_generator/main/get_status() From 6b5bdae1846be58b8747857f2fe72410c2525080 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Thu, 29 Jul 2021 23:55:27 +0300 Subject: [PATCH 31/98] salglu works like normal now again and adds more sanity --- .../abductor/equipment/glands/heal.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 6 +-- code/modules/mob/living/blood.dm | 48 +++++++++---------- code/modules/mob/living/carbon/carbon.dm | 3 ++ .../mob/living/carbon/human/human_helpers.dm | 5 ++ .../chemistry/reagents/medicine_reagents.dm | 12 +++-- 6 files changed, 43 insertions(+), 33 deletions(-) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 7d7cf1c0a7..1227f3bd78 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -144,7 +144,7 @@ owner.Stun(15) owner.adjustToxLoss(-15, TRUE, TRUE) - owner.AddIntegrationBlood(min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)) + owner.AddIntegrationBlood(20) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) keep_going = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 568f01ab83..6f6f43cd96 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -687,10 +687,10 @@ if(H.stat == DEAD) to_chat(user,"Only a revive rune can bring back the dead!") return - if(H.blood_volume < (BLOOD_VOLUME_SAFE*H.blood_ratio)) + if(H.functional_blood() < (BLOOD_VOLUME_SAFE*H.blood_ratio)) var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume - if(uses*2 < restore_blood) - H.blood_volume += uses*2 + if(uses * 2 < restore_blood) + H.AddIntegrationBlood(uses * 2) to_chat(user,"You use the last of your blood rites to restore what blood you could!") uses = 0 return ..() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 812cf74424..256f869198 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -40,27 +40,28 @@ if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. if(integrating_blood > 0) - integrating_blood = max(integrating_blood - 1, 0) - //Blood regeneration if there is some space - if(blood_volume < BLOOD_VOLUME_NORMAL) - var/nutrition_ratio = 0 + var/integrated_blood = max(integrating_blood - 1, 0) + integrating_blood = integrated_blood + if(blood_volume < BLOOD_VOLUME_MAXIMUM) blood_volume ++ - if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) - switch(nutrition) - if(0 to NUTRITION_LEVEL_STARVING) - nutrition_ratio = 0.2 - if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - nutrition_ratio = 0.4 - if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - nutrition_ratio = 0.6 - if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - nutrition_ratio = 0.8 - else - nutrition_ratio = 1 - if(satiety > 80) - nutrition_ratio *= 1.25 - adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) - blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) + if(blood_volume < BLOOD_VOLUME_NORMAL) + var/nutrition_ratio = 0 + if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) + switch(nutrition) + if(0 to NUTRITION_LEVEL_STARVING) + nutrition_ratio = 0.2 + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) + nutrition_ratio = 0.4 + if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) + nutrition_ratio = 0.6 + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + nutrition_ratio = 0.8 + else + nutrition_ratio = 1 + if(satiety > 80) + nutrition_ratio *= 1.25 + adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR) + blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) //Effects of bloodloss var/word = pick("dizzy","woozy","faint") @@ -390,8 +391,7 @@ H.handle_blood() /mob/living/proc/AddIntegrationBlood(value, force) - var/species_maxblood = BLOOD_VOLUME_NORMAL - if(isslimeperson(src) || isvampire(src)) - species_maxblood = BLOOD_VOLUME_MAXIMUM - if(blood_volume + integrating_blood < species_maxblood || force) + if(value < 0 && integrating_blood < value) //Remove the normal blood of the carbon if we can't afford it with integrating_blood + blood_volume = min(blood_volume, value) + if(integrating_blood < blood_volume + BLOOD_VOLUME_NORMAL || force) integrating_blood += value diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 44379660b6..bd966599c8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1273,3 +1273,6 @@ var/mob/living/carbon/C = usr if(I.can_give()) C.give(src) + +/mob/living/carbon/proc/functional_blood() + return blood_volume + integrating_blood diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 7e3b2ab015..c732a754fc 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -182,3 +182,8 @@ destination.underwear = underwear destination.undershirt = undershirt destination.socks = socks + +/mob/living/carbon/human/AddIntegrationBlood(value, force) + if(NOBLOOD in dna.species.species_traits) //Can't lose blood if your species doesn't have any + return + . = ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 1ccda4812d..d1395c7386 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -396,19 +396,21 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 taste_description = "sweetness and salt" + var/extra_regen = 0.25 // in addition to acting as temporary blood, also add this much to their actual blood per tick var/last_added = 0 var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active pH = 5.5 -/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) +/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/human/M) if((HAS_TRAIT(M, TRAIT_NOMARROW))) return if(last_added) - M.integrating_blood -= min(M.integrating_blood, last_added) + M.AddIntegrationBlood(-last_added) last_added = 0 - if(M.blood_volume < maximum_reachable) //Can only up to double your effective blood level. - last_added = volume * 5 - M.AddIntegrationBlood(last_added) + if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level. + var/new_blood_level = min(volume * 5, maximum_reachable) + last_added = new_blood_level + M.AddIntegrationBlood(new_blood_level + (extra_regen * REM)) if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) From dc40dfca81914d14624ce149a47b3d87c5137898 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Fri, 30 Jul 2021 01:24:43 +0300 Subject: [PATCH 32/98] goddamn stupid runtimes --- code/__DEFINES/dcs/signals.dm | 2 + code/controllers/subsystem/sun.dm | 2 - code/game/machinery/_machinery.dm | 5 +- code/game/machinery/lightswitch.dm | 49 ++++++++++------ code/modules/power/solar.dm | 90 ++++++++++++++++-------------- 5 files changed, 85 insertions(+), 63 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 986023e3ff..3ab70126e3 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -408,6 +408,8 @@ #define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost" ///from base power_change() when power is restored #define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" +///from /obj/machinery/obj_break(damage_flag): (damage_flag) +#define COMSIG_MACHINERY_BROKEN "machinery_broken" // /obj/item signals #define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) diff --git a/code/controllers/subsystem/sun.dm b/code/controllers/subsystem/sun.dm index 746b1be7a9..dba9adac98 100644 --- a/code/controllers/subsystem/sun.dm +++ b/code/controllers/subsystem/sun.dm @@ -59,5 +59,3 @@ SUBSYSTEM_DEF(sun) /datum/controller/subsystem/sun/proc/complete_movement() SEND_SIGNAL(src, COMSIG_SUN_MOVED, primary_sun, suns) - -#undef OCCLUSION_DISTANCE diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 4f61577eca..5b96efc83d 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -394,8 +394,11 @@ Class Procs: M.icon_state = "box_1" /obj/machinery/obj_break(damage_flag) - if(!(flags_1 & NODECONSTRUCT_1)) + . = ..() + if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) stat |= BROKEN + SEND_SIGNAL(src, COMSIG_MACHINERY_BROKEN, damage_flag) + update_appearance() return TRUE /obj/machinery/contents_explosion(severity, target) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 0b55f80c39..a4d0878f77 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -1,29 +1,47 @@ -// the light switch -// can have multiple per area -// can also operate on non-loc area through "otherarea" var +/// The light switch. Can have multiple per area. /obj/machinery/light_switch name = "light switch" icon = 'icons/obj/power.dmi' icon_state = "light1" base_icon_state = "light" - plane = ABOVE_WALL_PLANE desc = "Make dark." - var/on = TRUE var/area/area = null var/otherarea = null +/obj/machinery/light_switch/directional/north + dir = SOUTH + pixel_y = 26 + +/obj/machinery/light_switch/directional/south + dir = NORTH + pixel_y = -26 + +/obj/machinery/light_switch/directional/east + dir = WEST + pixel_x = 26 + +/obj/machinery/light_switch/directional/west + dir = EAST + pixel_x = -26 + /obj/machinery/light_switch/Initialize() . = ..() - area = get_area(src) - + if(istext(area)) + area = text2path(area) + if(ispath(area)) + area = GLOB.areas_by_type[area] if(otherarea) area = locate(text2path("/area/[otherarea]")) + if(!area) + area = get_area(src) if(!name) name = "light switch ([area.name])" + update_appearance() - on = area.lightswitch - update_icon() +/obj/machinery/light_switch/update_appearance(updates=ALL) + . = ..() + luminosity = (stat & NOPOWER) ? 0 : 1 /obj/machinery/light_switch/update_icon_state() if(stat & NOPOWER) @@ -39,18 +57,15 @@ /obj/machinery/light_switch/examine(mob/user) . = ..() - . += "It is [on? "on" : "off"]." - + . += "It is [area.lightswitch ? "on" : "off"]." /obj/machinery/light_switch/interact(mob/user) . = ..() - on = !on - area.lightswitch = on - area.update_icon() + area.lightswitch = !area.lightswitch + area.update_appearance() for(var/obj/machinery/light_switch/L in area) - L.on = on - L.update_icon() + L.update_appearance() area.power_change() @@ -62,7 +77,7 @@ else stat |= NOPOWER - update_icon() + update_appearance() /obj/machinery/light_switch/emp_act(severity) . = ..() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 9cc289b06d..907c4e7d65 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -63,7 +63,7 @@ assembly = S assembly.glass_type.on_solar_construction(src) obj_integrity = max_integrity - update_icon() + update_appearance() /obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I) playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) @@ -86,11 +86,10 @@ /obj/machinery/power/solar/obj_break(damage_flag) - if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) + . = ..() + if(.) playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) - stat |= BROKEN unset_control() - update_icon() /obj/machinery/power/solar/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) @@ -99,7 +98,7 @@ assembly.forceMove(loc) assembly.give_glass(stat & BROKEN) else - playsound(src, "shatter", 70, 1) + playsound(src, "shatter", 70, TRUE) var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard new shard(loc) new shard(loc) @@ -110,16 +109,15 @@ var/matrix/turner = matrix() turner.Turn(azimuth_current) panel.transform = turner - if(stat & BROKEN) - panel.icon_state = "solar_panel-b" - else - panel.icon_state = "solar_panel" + panel.icon_state = "solar_panel[(stat & BROKEN) ? "-b" : null]" /obj/machinery/power/solar/proc/queue_turn(azimuth) needs_to_turn = TRUE azimuth_target = azimuth /obj/machinery/power/solar/proc/queue_update_solar_exposure() + SIGNAL_HANDLER + needs_to_update_solar_exposure = TRUE //updating right away would be wasteful if we're also turning later /obj/machinery/power/solar/proc/update_turn() @@ -127,7 +125,7 @@ if(azimuth_current != azimuth_target) azimuth_current = azimuth_target occlusion_setup() - update_icon() + update_appearance() needs_to_update_solar_exposure = TRUE ///trace towards sun to see if we're in shadow @@ -173,7 +171,7 @@ control.gen += sgen //Bit of a hack but this whole type is a hack -/obj/machinery/power/solar/fake/Initialize(turf/loc, obj/item/solar_assembly/S) +/obj/machinery/power/solar/fake/Initialize(mapload, obj/item/solar_assembly/S) . = ..() UnregisterSignal(SSsun, COMSIG_SUN_MOVED) @@ -199,6 +197,16 @@ var/static/list/allowed_sheets = typecacheof(list(/obj/item/stack/sheet/glass, /obj/item/stack/sheet/rglass, /obj/item/stack/sheet/plasmaglass, /obj/item/stack/sheet/plasmarglass, /obj/item/stack/sheet/titaniumglass, /obj/item/stack/sheet/plastitaniumglass)) + var/random_offset = 6 //amount in pixels an unanchored assembly may be offset by + +/obj/item/solar_assembly/Initialize(mapload) + . = ..() + if(!anchored && !pixel_x && !pixel_y) + randomise_offset(random_offset) + +/obj/item/solar_assembly/proc/randomise_offset(amount) + pixel_x = rand(-amount, amount) + pixel_y = rand(-amount, amount) // Give back the glass type we were supplied with /obj/item/solar_assembly/proc/give_glass(device_broken) @@ -212,20 +220,21 @@ glass_type.forceMove(Tsec) glass_type = null +/obj/item/solar_assembly/set_anchored(anchorvalue) + . = ..() + if(isnull(.)) + return + randomise_offset(anchored ? 0 : random_offset) /obj/item/solar_assembly/attackby(obj/item/W, mob/user, params) if(W.tool_behaviour == TOOL_WRENCH && isturf(loc)) if(isinspace()) to_chat(user, "You can't secure [src] here.") return - anchored = !anchored - if(anchored) - user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") - W.play_tool_sound(src, 75) - else - user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") - W.play_tool_sound(src, 75) - return 1 + set_anchored(!anchored) + user.visible_message("[user] [anchored ? null : "un"]wrenches the solar assembly into place.", "You [anchored ? null : "un"]wrench the solar assembly into place.") + W.play_tool_sound(src, 75) + return TRUE if(is_type_in_typecache(W, allowed_sheets)) if(!anchored) @@ -249,16 +258,16 @@ if(istype(W, /obj/item/electronics/tracker)) if(!user.temporarilyRemoveItemFromInventory(W)) return - tracker = 1 + tracker = TRUE qdel(W) user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 else if(W.tool_behaviour == TOOL_CROWBAR) new /obj/item/electronics/tracker(src.loc) - tracker = 0 + tracker = FALSE user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") - return 1 + return TRUE return ..() // @@ -322,11 +331,12 @@ if(stat & NOPOWER) . += mutable_appearance(icon, "[icon_keyboard]_off") return + . += mutable_appearance(icon, icon_keyboard) if(stat & BROKEN) . += mutable_appearance(icon, "[icon_state]_broken") - else - . += mutable_appearance(icon, icon_screen) + return + . += mutable_appearance(icon, icon_screen) /obj/machinery/power/solar_control/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -347,7 +357,8 @@ return data /obj/machinery/power/solar_control/ui_act(action, params) - if(..()) + . = ..() + if(.) return if(action == "azimuth") var/adjust = text2num(params["adjust"]) @@ -381,10 +392,10 @@ return TRUE return FALSE -/obj/machinery/power/solar_control/attackby(obj/item/I, mob/user, params) +/obj/machinery/power/solar_control/attackby(obj/item/I, mob/living/user, params) if(I.tool_behaviour == TOOL_SCREWDRIVER) - if(I.use_tool(src, user, 20, volume = 50)) - if(src.stat & BROKEN) + if(I.use_tool(src, user, 20, volume=50)) + if (src.stat & BROKEN) to_chat(user, "The broken glass falls out.") var/obj/structure/frame/computer/A = new /obj/structure/frame/computer( src.loc ) new /obj/item/shard( src.loc ) @@ -394,7 +405,7 @@ A.circuit = M A.state = 3 A.icon_state = "3" - A.anchored = TRUE + A.set_anchored(TRUE) qdel(src) else to_chat(user, "You disconnect the monitor.") @@ -405,7 +416,7 @@ A.circuit = M A.state = 4 A.icon_state = "4" - A.anchored = TRUE + A.set_anchored(TRUE) qdel(src) else if(user.a_intent != INTENT_HARM && !(I.item_flags & NOBLUDGEON)) attack_hand(user) @@ -423,10 +434,9 @@ playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) /obj/machinery/power/solar_control/obj_break(damage_flag) - if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) + . = ..() + if(.) playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) - stat |= BROKEN - update_icon() /obj/machinery/power/solar_control/process() lastgen = gen @@ -437,6 +447,8 @@ ///Ran every time the sun updates. /obj/machinery/power/solar_control/proc/timed_track() + SIGNAL_HANDLER + if(track == SOLAR_TRACK_TIMED) azimuth_target += azimuth_rate set_panels(azimuth_target) @@ -453,20 +465,12 @@ for(var/obj/machinery/power/solar/S in connected_panels) S.queue_turn(azimuth) -/obj/machinery/power/solar_control/power_change() - ..() - update_icon() - // // MISC // /obj/item/paper/guides/jobs/engi/solars - info = {" -# Welcome! -At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array. -You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker. -Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

That's all to it, be safe, be green! -"} + name = "paper- 'Going green! Setup your own solar array instructions.'" + info = "

Welcome

At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

That's all to it, be safe, be green!

" #undef SOLAR_GEN_RATE From 2a670dcd43221f4857fb22ba33fd7bc32f2dd94f Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Fri, 30 Jul 2021 01:28:10 +0300 Subject: [PATCH 33/98] This should fix it, why does our init update icons and not TG's? --- code/game/machinery/lightswitch.dm | 3 +-- code/modules/power/solar.dm | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index a4d0878f77..6d7e0fda3f 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -25,7 +25,6 @@ pixel_x = -26 /obj/machinery/light_switch/Initialize() - . = ..() if(istext(area)) area = text2path(area) if(ispath(area)) @@ -37,7 +36,7 @@ if(!name) name = "light switch ([area.name])" - update_appearance() + . = ..() /obj/machinery/light_switch/update_appearance(updates=ALL) . = ..() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 907c4e7d65..2cfabb1b59 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -25,7 +25,6 @@ var/efficiency = 1 /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) - . = ..() panel = new() panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE vis_contents += panel @@ -35,6 +34,7 @@ Make(S) connect_to_network() RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/queue_update_solar_exposure) + . = ..() /obj/machinery/power/solar/Destroy() unset_control() //remove from control computer From 8d977e3042aa28e6174334373e719f49e5881660 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Fri, 30 Jul 2021 01:40:00 +0300 Subject: [PATCH 34/98] Fucking init --- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/lightswitch.dm | 2 +- code/modules/power/solar.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 5b96efc83d..10ab6923eb 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -148,11 +148,11 @@ Class Procs: START_PROCESSING(SSmachines, src) else START_PROCESSING(SSfastprocess, src) - power_change() RegisterSignal(src, COMSIG_ENTER_AREA, .proc/power_change) if (occupant_typecache) occupant_typecache = typecacheof(occupant_typecache) + return INITIALIZE_HINT_LATELOAD /obj/machinery/Destroy() GLOB.machines.Remove(src) diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 6d7e0fda3f..03d9dcee4b 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -25,6 +25,7 @@ pixel_x = -26 /obj/machinery/light_switch/Initialize() + . = ..() if(istext(area)) area = text2path(area) if(ispath(area)) @@ -36,7 +37,6 @@ if(!name) name = "light switch ([area.name])" - . = ..() /obj/machinery/light_switch/update_appearance(updates=ALL) . = ..() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 2cfabb1b59..907c4e7d65 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -25,6 +25,7 @@ var/efficiency = 1 /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() panel = new() panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE vis_contents += panel @@ -34,7 +35,6 @@ Make(S) connect_to_network() RegisterSignal(SSsun, COMSIG_SUN_MOVED, .proc/queue_update_solar_exposure) - . = ..() /obj/machinery/power/solar/Destroy() unset_control() //remove from control computer From 977d129de66446974fcd950e6498ab4c40c0e485 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Fri, 30 Jul 2021 23:45:55 +0300 Subject: [PATCH 35/98] Shuttle lights are back on --- code/__DEFINES/power.dm | 5 + code/game/machinery/_machinery.dm | 4 + code/game/machinery/doors/door.dm | 8 +- code/game/objects/obj_defense.dm | 2 + code/game/objects/objs.dm | 3 + code/modules/power/apc.dm | 682 +++++++++++++++++------------- 6 files changed, 406 insertions(+), 298 deletions(-) diff --git a/code/__DEFINES/power.dm b/code/__DEFINES/power.dm index 78d942d78b..8cd3e7d525 100644 --- a/code/__DEFINES/power.dm +++ b/code/__DEFINES/power.dm @@ -1,3 +1,8 @@ #define SOLAR_TRACK_OFF 0 #define SOLAR_TRACK_TIMED 1 #define SOLAR_TRACK_AUTO 2 + +///conversion ratio from joules to watts +#define WATTS / 0.002 +///conversion ratio from watts to joules +#define JOULES * 0.002 diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 10ab6923eb..133fec28b3 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -154,6 +154,10 @@ Class Procs: occupant_typecache = typecacheof(occupant_typecache) return INITIALIZE_HINT_LATELOAD +/obj/machinery/LateInitialize() + . = ..() + power_change() + /obj/machinery/Destroy() GLOB.machines.Remove(src) if(!speed_process) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index e874a2713c..9ff03cd387 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -9,6 +9,7 @@ layer = OPEN_DOOR_LAYER power_channel = ENVIRON max_integrity = 350 + damage_deflection = 10 armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70) CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = PREVENT_CLICK_UNDER_1|DEFAULT_RICOCHET_1 @@ -38,7 +39,7 @@ var/locked = FALSE //whether the door is bolted or not. var/assemblytype //the type of door frame to drop during deconstruction var/datum/effect_system/spark_spread/spark_system - var/damage_deflection = 10 + var/real_explosion_block //ignore this, just use explosion_block var/red_alert_access = FALSE //if TRUE, this door will always open on red alert var/poddoor = FALSE @@ -223,11 +224,6 @@ return 1 return ..() -/obj/machinery/door/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee" && damage_amount < damage_deflection) - return 0 - . = ..() - /obj/machinery/door/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index cc2e6412eb..78a5c9ece9 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -22,6 +22,8 @@ //returns the damage value of the attack after processing the obj's various armor protections /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) + if(damage_flag == MELEE && damage_amount < damage_deflection) + return 0 switch(damage_type) if(BRUTE) if(BURN) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ca4428db57..58c571d9e6 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -20,6 +20,9 @@ var/max_integrity = 500 var/integrity_failure = 0 //0 if we have no special broken behavior, otherwise is a percentage of at what point the obj breaks. 0.5 being 50% + ///Damage under this value will be completely ignored + var/damage_deflection = 0 + var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 429c7557b6..ace1e4d5c4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1,44 +1,101 @@ -//update_state -#define UPSTATE_CELL_IN (1<<0) -#define UPSTATE_OPENED1 (1<<1) -#define UPSTATE_OPENED2 (1<<2) -#define UPSTATE_MAINT (1<<3) -#define UPSTATE_BROKE (1<<4) -#define UPSTATE_BLUESCREEN (1<<5) -#define UPSTATE_WIREEXP (1<<6) -#define UPSTATE_ALLGOOD (1<<7) - -#define APC_RESET_EMP "emp" - -//update_overlay -#define APC_UPOVERLAY_CHARGEING0 (1<<0) -#define APC_UPOVERLAY_CHARGEING1 (1<<1) -#define APC_UPOVERLAY_CHARGEING2 (1<<2) -#define APC_UPOVERLAY_EQUIPMENT0 (1<<3) -#define APC_UPOVERLAY_EQUIPMENT1 (1<<4) -#define APC_UPOVERLAY_EQUIPMENT2 (1<<5) -#define APC_UPOVERLAY_LIGHTING0 (1<<6) -#define APC_UPOVERLAY_LIGHTING1 (1<<7) -#define APC_UPOVERLAY_LIGHTING2 (1<<8) -#define APC_UPOVERLAY_ENVIRON0 (1<<9) -#define APC_UPOVERLAY_ENVIRON1 (1<<10) -#define APC_UPOVERLAY_ENVIRON2 (1<<11) -#define APC_UPOVERLAY_LOCKED (1<<12) -#define APC_UPOVERLAY_OPERATING (1<<13) - -#define APC_ELECTRONICS_MISSING 0 // None -#define APC_ELECTRONICS_INSTALLED 1 // Installed but not secured -#define APC_ELECTRONICS_SECURED 2 // Installed and secured +// APC electronics status: +/// There are no electronics in the APC. +#define APC_ELECTRONICS_MISSING 0 +/// The electronics are installed but not secured. +#define APC_ELECTRONICS_INSTALLED 1 +/// The electronics are installed and secured. +#define APC_ELECTRONICS_SECURED 2 +// APC cover status: +/// The APCs cover is closed. #define APC_COVER_CLOSED 0 +/// The APCs cover is open. #define APC_COVER_OPENED 1 +/// The APCs cover is missing. #define APC_COVER_REMOVED 2 +// APC charging status: +/// The APC is not charging. #define APC_NOT_CHARGING 0 +/// The APC is charging. #define APC_CHARGING 1 +/// The APC is fully charged. #define APC_FULLY_CHARGED 2 #define MAXIMUM_COG_REGAIN 100 //How much charge drained by an integration cog can be priority-recharged in one processing-tick +// APC channel status: +/// The APCs power channel is manually set off. +#define APC_CHANNEL_OFF 0 +/// The APCs power channel is automatically off. +#define APC_CHANNEL_AUTO_OFF 1 +/// The APCs power channel is manually set on. +#define APC_CHANNEL_ON 2 +/// The APCs power channel is automatically on. +#define APC_CHANNEL_AUTO_ON 3 + +// APC autoset enums: +/// The APC turns automated and manual power channels off. +#define AUTOSET_FORCE_OFF 0 +/// The APC turns automated power channels off. +#define AUTOSET_OFF 2 +/// The APC turns automated power channels on. +#define AUTOSET_ON 1 + +// External power status: +/// The APC either isn't attached to a powernet or there is no power on the external powernet. +#define APC_NO_POWER 0 +/// The APCs external powernet does not have enough power to charge the APC. +#define APC_LOW_POWER 1 +/// The APCs external powernet has enough power to charge the APC. +#define APC_HAS_POWER 2 + +// Ethereals: +/// How long it takes an ethereal to drain or charge APCs. Also used as a spam limiter. +#define APC_DRAIN_TIME (7.5 SECONDS) +/// How much power ethereals gain/drain from APCs. +#define APC_POWER_GAIN 200 + +// Wires & EMPs: +/// The wire value used to reset the APCs wires after one's EMPed. +#define APC_RESET_EMP "emp" + +// update_state +// Bitshifts: (If you change the status values to be something other than an int or able to exceed 3 you will need to change these too) +/// The bit shift for the APCs cover status. +#define UPSTATE_COVER_SHIFT (0) + /// The bitflag representing the APCs cover being open for icon purposes. + #define UPSTATE_OPENED1 (APC_COVER_OPENED << UPSTATE_COVER_SHIFT) + /// The bitflag representing the APCs cover being missing for icon purposes. + #define UPSTATE_OPENED2 (APC_COVER_REMOVED << UPSTATE_COVER_SHIFT) + +// Bitflags: +/// The APC has a power cell. +#define UPSTATE_CELL_IN (1<<2) +/// The APC is broken or damaged. +#define UPSTATE_BROKE (1<<3) +/// The APC is undergoing maintenance. +#define UPSTATE_MAINT (1<<4) +/// The APC is emagged or malfed. +#define UPSTATE_BLUESCREEN (1<<5) +/// The APCs wires are exposed. +#define UPSTATE_WIREEXP (1<<6) + +// update_overlay +// Bitflags: +/// Bitflag indicating that the APCs operating status overlay should be shown. +#define UPOVERLAY_OPERATING (1<<0) +/// Bitflag indicating that the APCs locked status overlay should be shown. +#define UPOVERLAY_LOCKED (1<<1) + +// Bitshifts: (If you change the status values to be something other than an int or able to exceed 3 you will need to change these too) +/// Bit shift for the charging status of the APC. +#define UPOVERLAY_CHARGING_SHIFT (2) +/// Bit shift for the equipment status of the APC. +#define UPOVERLAY_EQUIPMENT_SHIFT (4) +/// Bit shift for the lighting channel status of the APC. +#define UPOVERLAY_LIGHTING_SHIFT (6) +/// Bit shift for the environment channel status of the APC. +#define UPOVERLAY_ENVIRON_SHIFT (8) // the Area Power Controller (APC), formerly Power Distribution Unit (PDU) // one per area, needs wire connection to power network through a terminal @@ -51,12 +108,13 @@ name = "area power controller" desc = "A control terminal for the area's electrical systems." plane = ABOVE_WALL_PLANE + icon_state = "apc0" use_power = NO_POWER_USE req_access = null max_integrity = 300 integrity_failure = 0.17 - var/damage_deflection = 10 + damage_deflection = 10 resistance_flags = FIRE_PROOF armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) req_access = list(ACCESS_ENGINE_EQUIP) @@ -66,29 +124,29 @@ var/area/area var/areastring = null var/obj/item/stock_parts/cell/cell - var/start_charge = 90 // initial cell charge % - var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs + var/start_charge = 90 // initial cell charge % + var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs var/opened = APC_COVER_CLOSED - var/shorted = 0 - var/lighting = 3 - var/equipment = 3 - var/environ = 3 + var/shorted = FALSE + var/lighting = APC_CHANNEL_AUTO_ON + var/equipment = APC_CHANNEL_AUTO_ON + var/environ = APC_CHANNEL_AUTO_ON var/operating = TRUE var/charging = APC_NOT_CHARGING var/chargemode = 1 var/chargecount = 0 var/locked = TRUE var/coverlocked = TRUE - var/aidisabled = 0 + var/aidisabled = FALSE var/tdir = null var/obj/machinery/power/terminal/terminal = null var/lastused_light = 0 var/lastused_equip = 0 var/lastused_environ = 0 var/lastused_total = 0 - var/main_status = 0 // Whether or not there's external power. 0 is "none", 1 is "insufficient", 2 is "charging". - powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( - var/malfhack = 0 //New var for my changes to AI malf. --NeoFite + var/main_status = 0 + powernet = FALSE // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :( + var/malfhack = FALSE //New var for my changes to AI malf. --NeoFite var/mob/living/silicon/ai/malfai = null //See above --NeoFite var/has_electronics = APC_ELECTRONICS_MISSING // 0 - none, 1 - plugged in, 2 - secured by screwdriver var/overload = 1 //used for the Blackout malf module @@ -98,9 +156,9 @@ var/obj/item/clockwork/integration_cog/integration_cog //Is there a cog siphoning power? var/cog_drained = 0 //How much of the cell's charge was drained by an integration cog, recovering this amount takes priority over the normal APC cell recharge calculations, but comes after powering Essentials. var/longtermpower = 10 - var/auto_name = 0 + var/auto_name = FALSE var/failure_timer = 0 - var/force_update = 0 + var/force_update = FALSE var/emergency_lights = FALSE var/nightshift_lights = FALSE var/nightshift_requires_auth = FALSE @@ -119,6 +177,9 @@ /obj/machinery/power/apc/syndicate //general syndicate access req_access = list(ACCESS_SYNDICATE) +/obj/machinery/power/apc/away //general away mission access + req_access = list(ACCESS_AWAY_GENERAL) + /obj/machinery/power/apc/highcap/five_k cell_type = /obj/item/stock_parts/cell/upgraded/plus @@ -177,7 +238,6 @@ area = A if(auto_name) name = "\improper [A.name] APC" - update_icon() make_terminal() update_nightshift_auth_requirement() @@ -188,7 +248,8 @@ operating = FALSE name = "\improper [A.name] APC" stat |= MAINT - update_icon() + + update_appearance() addtimer(CALLBACK(src, .proc/update), 5) GLOB.apcs_list += src @@ -196,21 +257,36 @@ wires = new /datum/wires/apc(src) // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area + if (building) + setDir(ndir) + tdir = dir // to fix Vars bug setDir(SOUTH) switch(tdir) if(NORTH) - pixel_x = 0 + if((pixel_y != initial(pixel_y)) && (pixel_y != 23)) + log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_y value ([pixel_y] - should be 23.)") pixel_y = 23 if(SOUTH) - pixel_x = 0 + if((pixel_y != initial(pixel_y)) && (pixel_y != -23)) + log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_y value ([pixel_y] - should be -23.)") pixel_y = -23 if(EAST) - pixel_y = 0 + if((pixel_y != initial(pixel_x)) && (pixel_x != 24)) + log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_x value ([pixel_x] - should be 24.)") pixel_x = 24 if(WEST) - pixel_y = 0 + if((pixel_y != initial(pixel_x)) && (pixel_x != -25)) + log_mapping("APC: ([src]) at [AREACOORD(src)] with dir ([tdir] | [uppertext(dir2text(tdir))]) has pixel_x value ([pixel_x] - should be -25.)") pixel_x = -25 + if (building) + area = get_area(src) + opened = APC_COVER_OPENED + operating = FALSE + name = "\improper [get_area_name(area, TRUE)] APC" + stat |= MAINT + update_appearance() + addtimer(CALLBACK(src, .proc/update), 5) /obj/machinery/power/apc/Destroy() GLOB.apcs_list -= src @@ -221,6 +297,7 @@ area.power_equip = FALSE area.power_environ = FALSE area.power_change() + area.poweralert(FALSE, src) if(occupier) malfvacate(1) qdel(wires) @@ -234,7 +311,7 @@ /obj/machinery/power/apc/handle_atom_del(atom/A) if(A == cell) cell = null - update_icon() + update_appearance() updateUsrDialog() /obj/machinery/power/apc/proc/make_terminal() @@ -345,65 +422,51 @@ . += mutable_appearance(icon, "apco2-[environ]") . += emissive_appearance(icon, "apco2-[environ]") +/// Checks for what icon updates we will need to handle /obj/machinery/power/apc/proc/check_updates() + SIGNAL_HANDLER + . = NONE var/last_update_state = update_state var/last_update_overlay = update_overlay - update_state = 0 - update_overlay = 0 - if(cell) - update_state |= UPSTATE_CELL_IN + // Handle icon status: + var/new_update_state = NONE if(stat & BROKEN) - update_state |= UPSTATE_BROKE + new_update_state |= UPSTATE_BROKE if(stat & MAINT) - update_state |= UPSTATE_MAINT + new_update_state |= UPSTATE_MAINT + if(opened) - if(opened==APC_COVER_OPENED) - update_state |= UPSTATE_OPENED1 - if(opened==APC_COVER_REMOVED) - update_state |= UPSTATE_OPENED2 + new_update_state |= (opened << UPSTATE_COVER_SHIFT) + if(cell) + new_update_state |= UPSTATE_CELL_IN + else if((obj_flags & EMAGGED) || malfai) - update_state |= UPSTATE_BLUESCREEN + new_update_state |= UPSTATE_BLUESCREEN else if(panel_open) - update_state |= UPSTATE_WIREEXP - if(update_state <= 1) - update_state |= UPSTATE_ALLGOOD + new_update_state |= UPSTATE_WIREEXP + if(new_update_state != update_state) + update_state = new_update_state + . |= UPDATE_ICON_STATE + + // Handle overlay status: + var/new_update_overlay = NONE if(operating) - update_overlay |= APC_UPOVERLAY_OPERATING + new_update_overlay |= UPOVERLAY_OPERATING - if(update_state & UPSTATE_ALLGOOD) + if(!update_state) if(locked) - update_overlay |= APC_UPOVERLAY_LOCKED + new_update_overlay |= UPOVERLAY_LOCKED - if(!charging) - update_overlay |= APC_UPOVERLAY_CHARGEING0 - else if(charging == APC_CHARGING) - update_overlay |= APC_UPOVERLAY_CHARGEING1 - else if(charging == APC_FULLY_CHARGED) - update_overlay |= APC_UPOVERLAY_CHARGEING2 - - if (!equipment) - update_overlay |= APC_UPOVERLAY_EQUIPMENT0 - else if(equipment == 1) - update_overlay |= APC_UPOVERLAY_EQUIPMENT1 - else if(equipment == 2) - update_overlay |= APC_UPOVERLAY_EQUIPMENT2 - - if(!lighting) - update_overlay |= APC_UPOVERLAY_LIGHTING0 - else if(lighting == 1) - update_overlay |= APC_UPOVERLAY_LIGHTING1 - else if(lighting == 2) - update_overlay |= APC_UPOVERLAY_LIGHTING2 - - if(!environ) - update_overlay |= APC_UPOVERLAY_ENVIRON0 - else if(environ==1) - update_overlay |= APC_UPOVERLAY_ENVIRON1 - else if(environ==2) - update_overlay |= APC_UPOVERLAY_ENVIRON2 + new_update_overlay |= (charging << UPOVERLAY_CHARGING_SHIFT) + new_update_overlay |= (equipment << UPOVERLAY_EQUIPMENT_SHIFT) + new_update_overlay |= (lighting << UPOVERLAY_LIGHTING_SHIFT) + new_update_overlay |= (environ << UPOVERLAY_ENVIRON_SHIFT) + if(new_update_overlay != update_overlay) + update_overlay = new_update_overlay + . |= UPDATE_OVERLAYS var/results = 0 var/hijackerreturn if (hijacker) @@ -475,7 +538,7 @@ else if (opened!=APC_COVER_REMOVED) opened = APC_COVER_CLOSED coverlocked = TRUE //closing cover relocks it - update_icon() + update_appearance() return else if (!(stat & BROKEN)) if(coverlocked && !(stat & MAINT)) // locked... @@ -486,7 +549,7 @@ return else opened = APC_COVER_OPENED - update_icon() + update_appearance() return /obj/machinery/power/apc/screwdriver_act(mob/living/user, obj/item/W) @@ -498,11 +561,11 @@ user.visible_message("[user] removes \the [cell] from [src]!","You remove \the [cell].") var/turf/T = get_turf(user) cell.forceMove(T) - cell.update_icon() + cell.update_appearance() cell = null cog_drained = 0 //No more cell means no more averting celldrain charging = APC_NOT_CHARGING - update_icon() + update_appearance() return else switch (has_electronics) @@ -519,7 +582,7 @@ else to_chat(user, "There is nothing to secure!") return - update_icon() + update_appearance() else if(obj_flags & EMAGGED) to_chat(user, "The interface is broken!") return @@ -529,12 +592,14 @@ update_icon() /obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/W) + . = ..() if (terminal && opened) terminal.dismantle(user, W) return TRUE /obj/machinery/power/apc/welder_act(mob/living/user, obj/item/W) + . = ..() if (opened && !has_electronics && !terminal) if(!W.tool_start_check(user, amount=3)) return @@ -560,12 +625,12 @@ if(area.hasSiliconAccessInArea(user) && get_dist(src,user)>1) return attack_hand(user) - if (istype(W, /obj/item/stock_parts/cell) && opened) + if(istype(W, /obj/item/stock_parts/cell) && opened) if(cell) to_chat(user, "There is a power cell already installed!") return else - if (stat & MAINT) + if(stat & MAINT) to_chat(user, "There is no connector for your power cell!") return if(!user.transferItemToLoc(W, src)) @@ -575,7 +640,7 @@ "[user.name] has inserted the power cell to [src.name]!",\ "You insert the power cell.") chargecount = 0 - update_icon() + update_appearance() else if (W.GetID()) togglelock(user) else if (istype(W, /obj/item/stack/cable_coil) && opened) @@ -598,16 +663,20 @@ return user.visible_message("[user.name] adds cables to the APC frame.", \ "You start adding cables to the APC frame...") - playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) - if(C.use_tool(src, user, 20, 10) && !terminal && opened && has_electronics) - var/turf/T = get_turf(src) - var/obj/structure/cable/N = T.get_cable_node() - if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) - do_sparks(5, TRUE, src) + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE) + if(do_after(user, 20, target = src)) + if (C.get_amount() < 10 || !C) return - to_chat(user, "You add cables to the APC frame.") - make_terminal() - terminal.connect_to_network() + if (C.get_amount() >= 10 && !terminal && opened && has_electronics) + var/turf/T = get_turf(src) + var/obj/structure/cable/N = T.get_cable_node() + if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) + do_sparks(5, TRUE, src) + return + C.use(10) + to_chat(user, "You add cables to the APC frame.") + make_terminal() + terminal.connect_to_network() else if (istype(W, /obj/item/electronics/apc) && opened) if (has_electronics) to_chat(user, "There is already a board inside the [src]!") @@ -618,7 +687,7 @@ user.visible_message("[user.name] inserts the power control board into [src].", \ "You start to insert the power control board into the frame...") - playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE) if(do_after(user, 10, target = src)) if(!has_electronics) has_electronics = APC_ELECTRONICS_INSTALLED @@ -649,7 +718,7 @@ chargecount = 0 user.visible_message("[user] fabricates a weak power cell and places it into [src].", \ "Your [P.name] whirrs with strain as you create a weak power cell and place it into [src]!") - update_icon() + update_appearance() else to_chat(user, "[src] has both electronics and a cell.") return @@ -664,7 +733,7 @@ to_chat(user, "You replace missing APC's cover.") qdel(W) opened = APC_COVER_OPENED - update_icon() + update_appearance() return if (has_electronics) to_chat(user, "You cannot repair this APC until you remove the electronics still inside!") @@ -678,7 +747,7 @@ obj_integrity = max_integrity if (opened==APC_COVER_REMOVED) opened = APC_COVER_OPENED - update_icon() + update_appearance() else if(istype(W, /obj/item/clockwork/integration_cog) && is_servant_of_ratvar(user)) if(integration_cog) to_chat(user, "This APC already has a cog.") @@ -742,7 +811,7 @@ return TRUE else if(!cell) if(stat & MAINT) - to_chat(user, "There's no connector for a power cell.") + to_chat(user, span_warning("There's no connector for a power cell.")) return FALSE var/obj/item/stock_parts/cell/crap/empty/C = new(src) C.forceMove(src) @@ -750,7 +819,7 @@ chargecount = 0 user.visible_message("[user] fabricates a weak power cell and places it into [src].", \ "Your [the_rcd.name] whirrs with strain as you create a weak power cell and place it into [src]!") - update_icon() + update_appearance() return TRUE else to_chat(user, "[src] has both electronics and a cell.") @@ -774,10 +843,10 @@ else if(stat & (BROKEN|MAINT)) to_chat(user, "Nothing happens!") else - if((allowed(usr) || area.hasSiliconAccessInArea(usr)) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) + if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN) && !malfhack) locked = !locked to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") - update_icon() + update_appearance() updateUsrDialog() else to_chat(user, "Access denied.") @@ -796,13 +865,9 @@ /obj/machinery/power/apc/obj_break(damage_flag) - if(!(flags_1 & NODECONSTRUCT_1)) - set_broken() - -/obj/machinery/power/apc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee" && damage_amount < damage_deflection) - return 0 . = ..() + if(.) + set_broken() /obj/machinery/power/apc/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) @@ -812,7 +877,7 @@ opened = APC_COVER_REMOVED coverlocked = FALSE visible_message("The APC cover is knocked down!") - update_icon() + update_appearance() /obj/machinery/power/apc/emag_act(mob/user) . = ..() @@ -880,10 +945,10 @@ if(cell) user.visible_message("[user] removes \the [cell] from [src]!","You remove \the [cell].") user.put_in_hands(cell) - cell.update_icon() + cell.update_appearance() src.cell = null charging = APC_NOT_CHARGING - src.update_icon() + src.update_appearance() return if((stat & MAINT) && !opened) //no board; no interface return @@ -972,19 +1037,15 @@ return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" /obj/machinery/power/apc/proc/update() - var/old_light = area.power_light - var/old_equip = area.power_equip - var/old_environ = area.power_environ if(operating && !shorted && !failure_timer) - area.power_light = (lighting > 1) - area.power_equip = (equipment > 1) - area.power_environ = (environ > 1) + area.power_light = (lighting > APC_CHANNEL_AUTO_OFF) + area.power_equip = (equipment > APC_CHANNEL_AUTO_OFF) + area.power_environ = (environ > APC_CHANNEL_AUTO_OFF) else area.power_light = FALSE area.power_equip = FALSE area.power_environ = FALSE - if(old_light != area.power_light || old_equip != area.power_equip || old_environ != area.power_environ) - area.power_change() + area.power_change() /obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(IsAdminGhost(user)) @@ -1029,7 +1090,7 @@ to_chat(usr, "The APC does not respond to the command!") else locked = !locked - update_icon() + update_appearance() . = TRUE if("cover") coverlocked = !coverlocked @@ -1044,20 +1105,20 @@ chargemode = !chargemode if(!chargemode) charging = APC_NOT_CHARGING - update_icon() + update_appearance() . = TRUE if("channel") if(params["eqp"]) equipment = setsubsystem(text2num(params["eqp"])) - update_icon() + update_appearance() update() else if(params["lgt"]) lighting = setsubsystem(text2num(params["lgt"])) - update_icon() + update_appearance() update() else if(params["env"]) environ = setsubsystem(text2num(params["env"])) - update_icon() + update_appearance() update() . = TRUE if("overload") @@ -1095,7 +1156,7 @@ malfvacate() if("reboot") failure_timer = 0 - update_icon() + update_appearance() update() if("emergency_lighting") emergency_lights = !emergency_lights @@ -1113,7 +1174,7 @@ add_hiddenprint(user) //delete when runtime log_game("[key_name(user)] turned [operating ? "on" : "off"] the [src] in [AREACOORD(src)]") update() - update_icon() + update_appearance() /obj/machinery/power/apc/proc/hijack(mob/living/L) if (!istype(L)) @@ -1204,7 +1265,6 @@ add_verb(occupier, /mob/living/silicon/ai/proc/corereturn) occupier.cancel_camera() - /obj/machinery/power/apc/proc/malfvacate(forced) if(!occupier) return @@ -1248,11 +1308,11 @@ return transfer_in_progress = TRUE user.visible_message("[user] slots [card] into [src]...", "Transfer process initiated. Sending request for AI approval...") - playsound(src, 'sound/machines/click.ogg', 50, 1) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) SEND_SOUND(occupier, sound('sound/misc/notice2.ogg')) //To alert the AI that someone's trying to card them if they're tabbed out if(alert(occupier, "[user] is attempting to transfer you to \a [card.name]. Do you consent to this?", "APC Transfer", "Yes - Transfer Me", "No - Keep Me Here") == "No - Keep Me Here") to_chat(user, "AI denied transfer request. Process terminated.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, TRUE) transfer_in_progress = FALSE return if(user.loc != T) @@ -1297,16 +1357,16 @@ /obj/machinery/power/apc/process() if(icon_update_needed) - update_icon() + update_appearance() if(stat & (BROKEN|MAINT)) return - if(!area.requires_power) + if(!area || !area.requires_power) return if(failure_timer) update() queue_icon_update() failure_timer-- - force_update = 1 + force_update = TRUE return lastused_light = area.usage(STATIC_LIGHT) @@ -1324,110 +1384,117 @@ var/last_eq = equipment var/last_en = environ var/last_ch = charging + var/excess = surplus() + if(!avail()) - main_status = 0 + main_status = APC_NO_POWER else if(excess < 0) - main_status = 1 + main_status = APC_LOW_POWER else - main_status = 2 + main_status = APC_HAS_POWER - var/cur_excess = excess - var/cur_used = lastused_total - - // first: if we have enough power, power the essentials DIRECTLY - - var/environ_satisfied = FALSE - var/equipment_satisfied = FALSE - var/lighting_satisfied = FALSE - - if(cur_excess >= lastused_environ) - autoset(environ, 1) - add_load(lastused_environ) - cur_excess -= lastused_environ - cur_used -= lastused_environ - environ_satisfied = TRUE - - if(cur_excess >= lastused_equip) - autoset(equipment, 1) - add_load(lastused_equip) - cur_excess -= lastused_equip - cur_used -= lastused_equip - equipment_satisfied = TRUE - - if(cur_excess >= lastused_light) - autoset(lighting, 1) - add_load(lastused_light) - cur_excess -= lastused_light - cur_used -= lastused_light - lighting_satisfied = TRUE - - //If drained by an integration cog: Forcefully avert as much of the powerdrain as possible, though a maximum of MAXIMUM_COG_REGAIN - if(cur_excess && cog_drained && cell) - var/cog_regain = cell.give(min(min(cog_drained, cur_excess), MAXIMUM_COG_REGAIN)) - cur_excess -= cog_regain - cog_drained = max(0, cog_drained - cog_regain) - - // next: take from or charge to the cell, depending on how much is left if(cell && !shorted) - if(cur_excess > 0) - var/charging_cell = min(min(cur_excess*GLOB.CELLRATE, cell.maxcharge * GLOB.CHARGELEVEL), cell.maxcharge - cell.charge) - cell.give(charging_cell) - add_load(charging_cell/GLOB.CELLRATE) - lastused_total += charging_cell - longtermpower = min(10,longtermpower + 1) - if(chargemode && !charging) - chargecount++ - if(chargecount == 10) + // draw power from cell as before to power the area + var/cellused = min(cell.charge, lastused_total JOULES) // clamp deduction to a max, amount left in cell + cell.use(cellused) + //If drained by an integration cog: Forcefully avert as much of the powerdrain as possible, though a maximum of MAXIMUM_COG_REGAIN + if(excess && cog_drained) + var/cog_regain = cell.give(min(min(cog_drained, excess), MAXIMUM_COG_REGAIN)) + excess -= cog_regain + cog_drained = max(0, cog_drained - cog_regain) - chargecount = 0 - charging = APC_CHARGING - else // not enough power available to run the last tick! - charging = APC_NOT_CHARGING - chargecount = 0 - longtermpower = max(-10,longtermpower - 2) - cell.use(min(GLOB.CELLRATE * cur_used, cell.charge)) + if(excess > lastused_total) // if power excess recharge the cell + // by the same amount just used + cell.give(cellused) + add_load(cellused WATTS) // add the load used to recharge the cell + else // no excess, and not enough per-apc + if((cell.charge WATTS + excess) >= lastused_total) // can we draw enough from cell+grid to cover last usage? + cell.charge = min(cell.maxcharge, cell.charge + excess JOULES) //recharge with what we can + add_load(excess) // so draw what we can from the grid + charging = APC_NOT_CHARGING - // set channels based on remaining charge + else // not enough power available to run the last tick! + charging = APC_NOT_CHARGING + chargecount = 0 + // This turns everything off in the case that there is still a charge left on the battery, just not enough to run the room. + equipment = autoset(equipment, AUTOSET_FORCE_OFF) + lighting = autoset(lighting, AUTOSET_FORCE_OFF) + environ = autoset(environ, AUTOSET_FORCE_OFF) - var/cell_percent = cell.percent() - if(cell.charge <= 0) // zero charge, turn all off - equipment = autoset(equipment, 0) - lighting = autoset(lighting, 0) - environ = autoset(environ, 0) - area.poweralert(0, src) + // set channels depending on how much charge we have left - else if(cell_percent < 15 && longtermpower < 0) // <15%, turn off lighting & equipment - equipment = autoset(equipment, 2) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - area.poweralert(0, src) - else if(cell_percent < 30 && longtermpower < 0) // <30%, turn off lighting - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 2) - environ = autoset(environ, 1) - area.poweralert(0, src) - else // otherwise all can be on - equipment = autoset(equipment, 1) - lighting = autoset(lighting, 1) - environ = autoset(environ, 1) - area.poweralert(1, src) - if(cell_percent > 75) - area.poweralert(1, src) + // Allow the APC to operate as normal if the cell can charge + if(charging && longtermpower < 10) + longtermpower += 1 + else if(longtermpower > -10) + longtermpower -= 2 + if(cell.charge <= 0) // zero charge, turn all off + equipment = autoset(equipment, AUTOSET_FORCE_OFF) + lighting = autoset(lighting, AUTOSET_FORCE_OFF) + environ = autoset(environ, AUTOSET_FORCE_OFF) + area.poweralert(TRUE, src) + else if(cell.percent() < 15 && longtermpower < 0) // <15%, turn off lighting & equipment + equipment = autoset(equipment, AUTOSET_OFF) + lighting = autoset(lighting, AUTOSET_OFF) + environ = autoset(environ, AUTOSET_ON) + area.poweralert(TRUE, src) + else if(cell.percent() < 30 && longtermpower < 0) // <30%, turn off equipment + equipment = autoset(equipment, AUTOSET_OFF) + lighting = autoset(lighting, AUTOSET_ON) + environ = autoset(environ, AUTOSET_ON) + area.poweralert(TRUE, src) + else // otherwise all can be on + equipment = autoset(equipment, AUTOSET_ON) + lighting = autoset(lighting, AUTOSET_ON) + environ = autoset(environ, AUTOSET_ON) + area.poweralert(FALSE, src) + if(cell.percent() > 75) + area.poweralert(FALSE, src) + + // now trickle-charge the cell + if(chargemode && charging == APC_CHARGING && operating) + if(excess > 0) // check to make sure we have enough to charge + // Max charge is capped to % per second constant + var/ch = min(excess JOULES, cell.maxcharge JOULES) + add_load(ch WATTS) // Removes the power we're taking from the grid + cell.give(ch) // actually recharge the cell + + else + charging = APC_NOT_CHARGING // stop charging + chargecount = 0 // show cell as fully charged if so if(cell.charge >= cell.maxcharge) cell.charge = cell.maxcharge charging = APC_FULLY_CHARGED - else // no cell, can still run but not very well + if(chargemode) + if(!charging) + if(excess > cell.maxcharge*GLOB.CHARGELEVEL) + chargecount++ + else + chargecount = 0 + + if(chargecount == 10) + + chargecount = 0 + charging = APC_CHARGING + + else // chargemode off + charging = APC_NOT_CHARGING + chargecount = 0 + + else // no cell, switch everything off + charging = APC_NOT_CHARGING chargecount = 0 - environ = autoset(environ, environ_satisfied) - equipment = autoset(equipment, equipment_satisfied) - lighting = autoset(lighting, lighting_satisfied) + equipment = autoset(equipment, AUTOSET_FORCE_OFF) + lighting = autoset(lighting, AUTOSET_FORCE_OFF) + environ = autoset(environ, AUTOSET_FORCE_OFF) + area.poweralert(TRUE, src) // update icon & area power if anything changed @@ -1438,19 +1505,54 @@ else if (last_ch != charging) queue_icon_update() -// val 0=off, 1=off(auto) 2=on 3=on(auto) -// on 0=off, 1=on, 2=autooff - +/** + * Returns the new status value for an APC channel. + * + * // val 0=off, 1=off(auto) 2=on 3=on(auto) + * // on 0=off, 1=on, 2=autooff + * TODO: Make this use bitflags instead. It should take at most three lines, but it's out of scope for now. + * + * Arguments: + * - val: The current status of the power channel. + * - [APC_CHANNEL_OFF]: The APCs channel has been manually set to off. This channel will not automatically change. + * - [APC_CHANNEL_AUTO_OFF]: The APCs channel is running on automatic and is currently off. Can be automatically set to [APC_CHANNEL_AUTO_ON]. + * - [APC_CHANNEL_ON]: The APCs channel has been manually set to on. This will be automatically changed only if the APC runs completely out of power or is disabled. + * - [APC_CHANNEL_AUTO_ON]: The APCs channel is running on automatic and is currently on. Can be automatically set to [APC_CHANNEL_AUTO_OFF]. + * - on: An enum dictating how to change the channel's status. + * - [AUTOSET_FORCE_OFF]: The APC forces the channel to turn off. This includes manually set channels. + * - [AUTOSET_ON]: The APC allows automatic channels to turn back on. + * - [AUTOSET_OFF]: The APC turns automatic channels off. + */ /obj/machinery/power/apc/proc/autoset(val, on) - if(val == 3 && (on == 2 || !on)) // if auto-on, return auto-off - return 1 - else if(val == 2 && !on) // if on, return off - return 0 - else if(on == 1 && val == 1) // if auto-off, return auto-on - return 3 - // no, i don't understand these comments either + if(on == AUTOSET_FORCE_OFF) + if(val == APC_CHANNEL_ON) // if on, return off + return APC_CHANNEL_OFF + else if(val == APC_CHANNEL_AUTO_ON) // if auto-on, return auto-off + return APC_CHANNEL_AUTO_OFF + else if(on == AUTOSET_ON) + if(val == APC_CHANNEL_AUTO_OFF) // if auto-off, return auto-on + return APC_CHANNEL_AUTO_ON + else if(on == AUTOSET_OFF) + if(val == APC_CHANNEL_AUTO_ON) // if auto-on, return auto-off + return APC_CHANNEL_AUTO_OFF return val +/** + * Used by external forces to set the APCs channel status's. + * + * Arguments: + * - val: The desired value of the subsystem: + * - 1: Manually sets the APCs channel to be [APC_CHANNEL_OFF]. + * - 2: Manually sets the APCs channel to be [APC_CHANNEL_AUTO_ON]. If the APC doesn't have any power this defaults to [APC_CHANNEL_OFF] instead. + * - 3: Sets the APCs channel to be [APC_CHANNEL_AUTO_ON]. If the APC doesn't have enough power this defaults to [APC_CHANNEL_AUTO_OFF] instead. + */ +/obj/machinery/power/apc/proc/setsubsystem(val) + if(cell && cell.charge > 0) + return (val == 1) ? APC_CHANNEL_OFF : val + if(val == 3) + return APC_CHANNEL_AUTO_OFF + return APC_CHANNEL_OFF + /obj/machinery/power/apc/proc/reset(wire) switch(wire) if(WIRE_IDSCAN) @@ -1458,14 +1560,13 @@ if(WIRE_POWER1, WIRE_POWER2) if(!wires.is_cut(WIRE_POWER1) && !wires.is_cut(WIRE_POWER2)) shorted = FALSE - update() if(WIRE_AI) if(!wires.is_cut(WIRE_AI)) aidisabled = FALSE if(APC_RESET_EMP) - equipment = 3 - environ = 3 - update_icon() + equipment = APC_CHANNEL_AUTO_ON + environ = APC_CHANNEL_AUTO_ON + update_appearance() update() // damage and destruction acts @@ -1478,12 +1579,12 @@ occupier.emp_act(severity) if(. & EMP_PROTECT_SELF) return - lighting = 0 - equipment = 0 - environ = 0 - update_icon() + lighting = APC_CHANNEL_OFF + equipment = APC_CHANNEL_OFF + environ = APC_CHANNEL_OFF + update_appearance() update() - addtimer(CALLBACK(src, .proc/reset, APC_RESET_EMP), severity*8) + addtimer(CALLBACK(src, .proc/reset, APC_RESET_EMP), 600) /obj/machinery/power/apc/blob_act(obj/structure/blob/B) set_broken() @@ -1496,11 +1597,10 @@ /obj/machinery/power/apc/proc/set_broken() if(malfai && operating) malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) - stat |= BROKEN operating = FALSE + obj_break() if(occupier) malfvacate(1) - update_icon() update() // overload all the lights in this APC area @@ -1521,23 +1621,14 @@ /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) - return 0 + return FALSE do_sparks(5, TRUE, src) if(isalien(user)) - return 0 + return FALSE if(electrocute_mob(user, src, src, 1, TRUE)) - return 1 + return TRUE else - return 0 - -/obj/machinery/power/apc/proc/setsubsystem(val) - if(cell && cell.charge > 0) - return (val==1) ? 0 : val - else if(val == 3) - return 1 - else - return 0 - + return FALSE /obj/machinery/power/apc/proc/energy_fail(duration) for(var/obj/machinery/M in area.contents) @@ -1584,16 +1675,19 @@ var/normal_requires_auth = CONFIG_GET(flag/nightshift_toggle_requires_auth) return (configured_level && our_level && ((our_level <= configured_level)? public_requires_auth : normal_requires_auth)) -#undef UPSTATE_CELL_IN -#undef UPSTATE_OPENED1 -#undef UPSTATE_OPENED2 -#undef UPSTATE_MAINT -#undef UPSTATE_BROKE -#undef UPSTATE_BLUESCREEN -#undef UPSTATE_WIREEXP -#undef UPSTATE_ALLGOOD -#undef APC_RESET_EMP +#undef APC_CHANNEL_OFF +#undef APC_CHANNEL_AUTO_OFF +#undef APC_CHANNEL_ON +#undef APC_CHANNEL_AUTO_ON + +#undef AUTOSET_FORCE_OFF +#undef AUTOSET_OFF +#undef AUTOSET_ON + +#undef APC_NO_POWER +#undef APC_LOW_POWER +#undef APC_HAS_POWER #undef APC_ELECTRONICS_MISSING #undef APC_ELECTRONICS_INSTALLED @@ -1607,22 +1701,26 @@ #undef APC_CHARGING #undef APC_FULLY_CHARGED -//update_overlay -#undef APC_UPOVERLAY_CHARGEING0 -#undef APC_UPOVERLAY_CHARGEING1 -#undef APC_UPOVERLAY_CHARGEING2 -#undef APC_UPOVERLAY_EQUIPMENT0 -#undef APC_UPOVERLAY_EQUIPMENT1 -#undef APC_UPOVERLAY_EQUIPMENT2 -#undef APC_UPOVERLAY_LIGHTING0 -#undef APC_UPOVERLAY_LIGHTING1 -#undef APC_UPOVERLAY_LIGHTING2 -#undef APC_UPOVERLAY_ENVIRON0 -#undef APC_UPOVERLAY_ENVIRON1 -#undef APC_UPOVERLAY_ENVIRON2 -#undef APC_UPOVERLAY_LOCKED -#undef APC_UPOVERLAY_OPERATING +#undef APC_DRAIN_TIME +#undef APC_POWER_GAIN +#undef APC_RESET_EMP + +// update_state +#undef UPSTATE_CELL_IN +#undef UPSTATE_COVER_SHIFT +#undef UPSTATE_BROKE +#undef UPSTATE_MAINT +#undef UPSTATE_BLUESCREEN +#undef UPSTATE_WIREEXP + +//update_overlay +#undef UPOVERLAY_OPERATING +#undef UPOVERLAY_LOCKED +#undef UPOVERLAY_CHARGING_SHIFT +#undef UPOVERLAY_EQUIPMENT_SHIFT +#undef UPOVERLAY_LIGHTING_SHIFT +#undef UPOVERLAY_ENVIRON_SHIFT #undef MAXIMUM_COG_REGAIN /*Power module, used for APC construction*/ From feac8568b630694fd66a621ce8a7e09102a26aae Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Sat, 31 Jul 2021 01:23:49 +0300 Subject: [PATCH 36/98] shit fucking works now --- code/game/atoms_movable.dm | 4 ++- code/modules/power/apc.dm | 57 +++++++++++++++----------------------- 2 files changed, 26 insertions(+), 35 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a582419ee2..391d3b467d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -129,7 +129,9 @@ /atom/movable/update_overlays() . = ..() - . += update_emissive_block() + var/emissive_block = update_emissive_block() + if(emissive_block) + . += emissive_block /atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction) if(!direction) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index ace1e4d5c4..515349d666 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -33,6 +33,7 @@ /// The APCs power channel is automatically on. #define APC_CHANNEL_AUTO_ON 3 + // APC autoset enums: /// The APC turns automated and manual power channels off. #define AUTOSET_FORCE_OFF 0 @@ -96,6 +97,8 @@ #define UPOVERLAY_LIGHTING_SHIFT (6) /// Bit shift for the environment channel status of the APC. #define UPOVERLAY_ENVIRON_SHIFT (8) +///Update for hijack overlays +#define UPOVERLAY_HIJACKED (10) // the Area Power Controller (APC), formerly Power Distribution Unit (PDU) // one per area, needs wire connection to power network through a terminal @@ -247,7 +250,7 @@ opened = APC_COVER_OPENED operating = FALSE name = "\improper [A.name] APC" - stat |= MAINT + set_machine_stat(stat | MAINT) update_appearance() addtimer(CALLBACK(src, .proc/update), 5) @@ -284,7 +287,7 @@ opened = APC_COVER_OPENED operating = FALSE name = "\improper [get_area_name(area, TRUE)] APC" - stat |= MAINT + set_machine_stat(stat | MAINT) update_appearance() addtimer(CALLBACK(src, .proc/update), 5) @@ -410,8 +413,8 @@ . += mutable_appearance(icon, "apcox-[locked]") . += emissive_appearance(icon, "apcox-[locked]") - . += mutable_appearance(icon, "apco3-[charging]") - . += emissive_appearance(icon, "apco3-[charging]") + . += mutable_appearance(icon, "apco3-[hijackerreturn() ? "3" : charging]") + . += emissive_appearance(icon, "apco3-[hijackerreturn() ? "3" : charging]") if(!operating) return @@ -426,8 +429,6 @@ /obj/machinery/power/apc/proc/check_updates() SIGNAL_HANDLER . = NONE - var/last_update_state = update_state - var/last_update_overlay = update_overlay // Handle icon status: var/new_update_state = NONE @@ -454,7 +455,6 @@ var/new_update_overlay = NONE if(operating) new_update_overlay |= UPOVERLAY_OPERATING - if(!update_state) if(locked) new_update_overlay |= UPOVERLAY_LOCKED @@ -463,29 +463,22 @@ new_update_overlay |= (equipment << UPOVERLAY_EQUIPMENT_SHIFT) new_update_overlay |= (lighting << UPOVERLAY_LIGHTING_SHIFT) new_update_overlay |= (environ << UPOVERLAY_ENVIRON_SHIFT) + new_update_overlay |= (hijackerreturn() << UPOVERLAY_HIJACKED) if(new_update_overlay != update_overlay) update_overlay = new_update_overlay . |= UPDATE_OVERLAYS - var/results = 0 - var/hijackerreturn - if (hijacker) - var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack) - hijackerreturn = H && !H.stealthmode - if(last_update_state == update_state && last_update_overlay == update_overlay && hijackerreturn == hijackerlast) - return 0 - if(last_update_state != update_state) - results += 1 - if(last_update_overlay != update_overlay || hijackerreturn != hijackerlast) - results += 2 - if (hijackerreturn != hijackerlast) - hijackerlast = hijackerreturn - return results // Used in process so it doesn't update the icon too much /obj/machinery/power/apc/proc/queue_icon_update() icon_update_needed = TRUE +/obj/machinery/power/apc/proc/hijackerreturn() + if(!hijacker) + return FALSE + var/obj/item/implant/hijack/implant = hijacker.getImplant(/obj/item/implant/hijack) + if(implant && !implant.stealthmode) + return TRUE //attack with an item - open/close cover, insert cell, or (un)lock interface /obj/machinery/power/apc/crowbar_act(mob/user, obj/item/W) @@ -576,7 +569,7 @@ to_chat(user, "You screw the circuit electronics into place.") if (APC_ELECTRONICS_SECURED) has_electronics = APC_ELECTRONICS_INSTALLED - stat |= MAINT + set_machine_stat(stat | MAINT) W.play_tool_sound(src) to_chat(user, "You unfasten the electronics.") else @@ -589,7 +582,7 @@ else panel_open = !panel_open to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]") - update_icon() + update_appearance() /obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/W) . = ..() @@ -756,7 +749,7 @@ user.visible_message("[user] slices [src]'s cover lock, and it swings wide open!", \ "You slice [src]'s cover lock apart with [W], and the cover swings open.") opened = APC_COVER_OPENED - update_icon() + update_appearance() else user.visible_message("[user] presses [W] into [src]!", \ "You hold [W] in place within [src], and it slowly begins to warm up...") @@ -773,7 +766,7 @@ playsound(src, 'sound/machines/clockcult/steam_whoosh.ogg', 50, FALSE) opened = APC_COVER_CLOSED locked = TRUE //Clockies get full APC access on cogged APCs, but they can't lock or unlock em unless they steal some ID to give all of them APC access, soo this is pretty much just QoL for them and makes cogs a tiny bit more stealthy - update_icon() + update_appearance() return else if(panel_open && !opened && is_wire_tool(W)) wires.interact(user) @@ -895,7 +888,7 @@ obj_flags |= EMAGGED locked = FALSE to_chat(user, "You emag the APC interface.") - update_icon() + update_appearance() return TRUE // attack with hand - remove cell (if cover open) or interact with the APC @@ -1133,7 +1126,7 @@ hijacker.toggleSiliconAccessArea(area) hijacker = null set_hijacked_lighting() - update_icon() + update_appearance() var/obj/item/implant/hijack/H = usr.getImplant(/obj/item/implant/hijack) H.stealthcooldown = world.time + 2 MINUTES energy_fail(30 SECONDS * (cell.charge / cell.maxcharge)) @@ -1191,7 +1184,7 @@ hijacker.toggleSiliconAccessArea(area) if (L.toggleSiliconAccessArea(area)) hijacker = L - update_icon() + update_appearance() set_hijacked_lighting() H.hijacking = FALSE being_hijacked = FALSE @@ -1208,7 +1201,7 @@ if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src)) if (L.toggleSiliconAccessArea(area)) hijacker = L - update_icon() + update_appearance() set_hijacked_lighting() H.hijacking = FALSE being_hijacked = FALSE @@ -1654,12 +1647,8 @@ /obj/machinery/power/apc/proc/set_hijacked_lighting() set waitfor = FALSE - var/hijackerreturn - if (hijacker) - var/obj/item/implant/hijack/H = hijacker.getImplant(/obj/item/implant/hijack) - hijackerreturn = H && !H.stealthmode for(var/obj/machinery/light/L in area) - L.hijacked = hijackerreturn + L.hijacked = hijackerreturn() L.update(FALSE) CHECK_TICK From ef413f5d2b824c3ca6e96fc5de5312553ebbdfc4 Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sat, 31 Jul 2021 05:15:46 -0700 Subject: [PATCH 37/98] fix miscellaneous female fittings --- code/modules/clothing/under/miscellaneous.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index e01ceba0bf..7cb533e84c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -322,12 +322,14 @@ desc = "A small black dress" icon_state = "littleblackdress_s" item_state = "littleblackdress_s" + fitted = FEMALE_UNIFORM_TOP /obj/item/clothing/under/misc/pinktutu name = "pink tutu" desc = "A pink tutu" icon_state = "pinktutu_s" item_state = "pinktutu_s" + fitted = FEMALE_UNIFORM_TOP /obj/item/clothing/under/misc/bathrobe name = "bathrobe" From 698969933ee4ae197669009ccd7165356e747178 Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sat, 31 Jul 2021 05:18:50 -0700 Subject: [PATCH 38/98] fixing qipao women fitted states --- code/modules/clothing/under/costume.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 60d82292ef..e521199872 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -280,23 +280,21 @@ item_state = "qipao" body_parts_covered = CHEST|GROIN can_adjust = FALSE + fitted = FEMALE_UNIFORM_TOP mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON + /obj/item/clothing/under/costume/qipao/white name = "White Qipao" desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is white." icon_state = "qipao_white" item_state = "qipao_white" - body_parts_covered = CHEST|GROIN - can_adjust = FALSE /obj/item/clothing/under/costume/qipao/red name = "Red Qipao" desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is red." icon_state = "qipao_red" item_state = "qipao_red" - body_parts_covered = CHEST|GROIN - can_adjust = FALSE /obj/item/clothing/under/costume/cheongsam name = "Black Cheongsam" From 1b31e4d626e3ff5af36d29e77d69a021a2000cd0 Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sat, 31 Jul 2021 05:31:21 -0700 Subject: [PATCH 39/98] let's fix some grammar while we're here. --- code/modules/clothing/under/miscellaneous.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 7cb533e84c..914cc65f50 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -319,14 +319,14 @@ /obj/item/clothing/under/misc/black_dress name = "little black dress" - desc = "A small black dress" + desc = "A small black dress." icon_state = "littleblackdress_s" item_state = "littleblackdress_s" fitted = FEMALE_UNIFORM_TOP /obj/item/clothing/under/misc/pinktutu name = "pink tutu" - desc = "A pink tutu" + desc = "A pink tutu." icon_state = "pinktutu_s" item_state = "pinktutu_s" fitted = FEMALE_UNIFORM_TOP From 0735ec66b3fa605138220de00e3b0ce1a5d6fa2f Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sun, 1 Aug 2021 06:33:08 -0700 Subject: [PATCH 40/98] Fixes brainless sprite being an error sprite --- code/modules/mob/living/carbon/human/species.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b3e2169b12..8405a89ce2 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -680,7 +680,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER) if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain if(!(NOBLOOD in species_traits)) - hair_overlay.icon = 'icons/mob/hair.dmi' + hair_overlay.icon = 'icons/mob/human_parts.dmi' hair_overlay.icon_state = "debrained" else if(H.hair_style && (HAIR in species_traits)) From fb886778b236bd19b1db6a6a73e92df325058e08 Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sun, 1 Aug 2021 07:17:29 -0700 Subject: [PATCH 41/98] fix bathrobe --- code/modules/clothing/under/miscellaneous.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 914cc65f50..2291d58dab 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -336,6 +336,7 @@ desc = "A blue bathrobe." icon_state = "bathrobe" item_state = "bathrobe" + fitted = FEMALE_UNIFORM_TOP /obj/item/clothing/under/misc/mechsuitred name = "red mech suit" From f747f76bd407b97f1462ac032543cb3db52759de Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sun, 1 Aug 2021 07:18:45 -0700 Subject: [PATCH 42/98] fix kimonos --- code/modules/clothing/under/costume.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index e521199872..4e5be1306c 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -330,9 +330,11 @@ /obj/item/clothing/under/costume/kimono name = "Kimono" - desc = "A traditional piece of clothing from japan" + desc = "A traditional piece of clothing from Japan." icon_state = "kimono" item_state = "kimono" + fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE /obj/item/clothing/under/costume/kimono/black name = "Black Kimono" From cfc3a12a268c716b617a9b66da9cdc49aeec4baf Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Sun, 1 Aug 2021 07:24:36 -0700 Subject: [PATCH 43/98] these don't have alternate sprites so therefore... --- code/modules/clothing/under/miscellaneous.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 2291d58dab..4dac5f1961 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -323,6 +323,7 @@ icon_state = "littleblackdress_s" item_state = "littleblackdress_s" fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE /obj/item/clothing/under/misc/pinktutu name = "pink tutu" @@ -330,6 +331,7 @@ icon_state = "pinktutu_s" item_state = "pinktutu_s" fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE /obj/item/clothing/under/misc/bathrobe name = "bathrobe" @@ -337,22 +339,26 @@ icon_state = "bathrobe" item_state = "bathrobe" fitted = FEMALE_UNIFORM_TOP + can_adjust = FALSE /obj/item/clothing/under/misc/mechsuitred name = "red mech suit" desc = "What are you, stupid?" icon_state = "red_mech_suit" item_state = "red_mech_suit" + can_adjust = FALSE /obj/item/clothing/under/misc/mechsuitwhite name = "white mech suit" desc = "...Mom?" icon_state = "white_mech_suit" item_state = "white_mech_suit" + can_adjust = FALSE /obj/item/clothing/under/misc/mechsuitblue name = "blue mech suit" desc = "Get in the damn robot already!" icon_state = "blue_mech_suit" item_state = "blue_mech_suit" + can_adjust = FALSE From a88e83e579aa14169ce5bf7f28726a2c6de2763e Mon Sep 17 00:00:00 2001 From: Jay Date: Sun, 1 Aug 2021 18:42:43 -0500 Subject: [PATCH 44/98] Adds military gas mask for donator --- icons/mob/clothing/custom_w.dmi | Bin 49587 -> 50017 bytes icons/obj/custom.dmi | Bin 31123 -> 31555 bytes .../code/modules/client/loadout/__donator.dm | 6 ++++++ .../modules/custom_loadout/custom_items.dm | 8 ++++++++ 4 files changed, 14 insertions(+) diff --git a/icons/mob/clothing/custom_w.dmi b/icons/mob/clothing/custom_w.dmi index 1a4acbc2422edd35f84518545cb2c2399749dd1a..199232d73b9ed66f1190e346d683158674ccf695 100644 GIT binary patch delta 10402 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 delta 9951 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 Mmnt&FQpSP*2Q$AaRsaA1 diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index 7b00d52f8ff5e72807588bff5317fc735a3e5226..89da4b43a0d0e98ebb778c0d409de689b6283960 100644 GIT binary patch delta 12408 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 peim+LIjk Date: Mon, 2 Aug 2021 21:54:47 +0300 Subject: [PATCH 45/98] makes salglu not deadly --- .../diseases/advance/symptoms/oxygen.dm | 2 +- code/game/objects/items/devices/scanners.dm | 17 +++++----- .../abductor/equipment/glands/heal.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 2 +- .../antagonists/cult/cult_structures.dm | 2 +- .../eldritch_cult/eldritch_magic.dm | 2 +- code/modules/mob/living/blood.dm | 11 ++++--- .../modules/mob/living/carbon/alien/organs.dm | 2 +- .../mob/living/carbon/human/human_helpers.dm | 2 +- .../mob/living/carbon/human/species.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 8 ++--- code/modules/mob/living/living_defines.dm | 2 +- .../simple_animal/hostile/cat_butcher.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 4 +-- .../chemistry/reagents/medicine_reagents.dm | 31 ++++++++++++------- .../chemistry/reagents/other_reagents.dm | 12 +++---- .../nanites/nanite_programs/healing.dm | 2 +- .../xenobiology/crossbreeding/consuming.dm | 2 +- .../research/xenobiology/xenobiology.dm | 2 +- code/modules/surgery/organs/lungs.dm | 2 +- .../reagents/chemistry/reagents/SDGF.dm | 6 ++-- 21 files changed, 64 insertions(+), 53 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index d00761dbf9..67e2a8c588 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -47,7 +47,7 @@ Bonus M.adjustOxyLoss(-7, 0) M.losebreath = max(0, M.losebreath - 4) if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio)) - M.AddIntegrationBlood(1) + M.adjust_integration_blood(1) else if(prob(base_message_chance)) to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]") diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9a477a8122..0bf7b13646 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -426,20 +426,21 @@ GENETICS SCANNER if(ishuman(C)) if(H.is_bleeding()) msg += "Subject is bleeding!\n" - var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) + var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) + var/integrated_blood_percent = round((C.integrating_blood / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) var/blood_type = C.dna.blood_type if(!(blood_typepath in GLOB.blood_reagent_types)) var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath] if(R) blood_type = R.name - if(C.integrating_blood) - msg += "[C.integrating_blood] cl of blood is being integrated into their bloodstream\n" - if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio)) - msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" - else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio)) - msg += "CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" + + if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio)) + msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]\n" + else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio)) + msg += "CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]\n" else - msg += "Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" + msg += "Blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]\n" + var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in C.internal_organs) diff --git a/code/modules/antagonists/abductor/equipment/glands/heal.dm b/code/modules/antagonists/abductor/equipment/glands/heal.dm index 1227f3bd78..8917e1661e 100644 --- a/code/modules/antagonists/abductor/equipment/glands/heal.dm +++ b/code/modules/antagonists/abductor/equipment/glands/heal.dm @@ -144,7 +144,7 @@ owner.Stun(15) owner.adjustToxLoss(-15, TRUE, TRUE) - owner.AddIntegrationBlood(20) + owner.adjust_integration_blood(20) if(owner.blood_volume < BLOOD_VOLUME_NORMAL) keep_going = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 6f6f43cd96..9bd1030685 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -690,7 +690,7 @@ if(H.functional_blood() < (BLOOD_VOLUME_SAFE*H.blood_ratio)) var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume if(uses * 2 < restore_blood) - H.AddIntegrationBlood(uses * 2) + H.adjust_integration_blood(uses * 2) to_chat(user,"You use the last of your blood rites to restore what blood you could!") uses = 0 return ..() diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index baf62fe6ad..a2f283ec67 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -219,7 +219,7 @@ if(M.health < M.maxHealth) M.adjustHealth(-3) if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio)) - L.AddIntegrationBlood(1.0) + L.adjust_integration_blood(1.0) CHECK_TICK diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index 00d43888a5..158acc0071 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -147,7 +147,7 @@ carbon_target.blood_volume -= 20 if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all - carbon_user.AddIntegrationBlood(20) + carbon_user.adjust_integration_blood(20) return /obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 256f869198..c9dc42835b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -390,8 +390,9 @@ var/mob/living/carbon/human/H = src H.handle_blood() -/mob/living/proc/AddIntegrationBlood(value, force) - if(value < 0 && integrating_blood < value) //Remove the normal blood of the carbon if we can't afford it with integrating_blood - blood_volume = min(blood_volume, value) - if(integrating_blood < blood_volume + BLOOD_VOLUME_NORMAL || force) - integrating_blood += value +/mob/living/proc/adjust_integration_blood(value, remove_actual_blood, force) + if(integrating_blood + value < 0 && remove_actual_blood) + blood_volume += value + integrating_blood + blood_volume = max(blood_volume, 0) + integrating_blood += value + integrating_blood = clamp(integrating_blood, 0, force ? INFINITY : (BLOOD_VOLUME_MAXIMUM - (integrating_blood + blood_volume))) diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index f8d9abd75b..4c897d5096 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -85,7 +85,7 @@ owner.adjustOxyLoss(-heal_amt) owner.adjustCloneLoss(-heal_amt) if(owner.blood_volume && (owner.blood_volume < BLOOD_VOLUME_NORMAL)) - owner.AddIntegrationBlood(5) + owner.adjust_integration_blood(5) else owner.adjustPlasma(plasma_rate * 0.1) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index c732a754fc..2e530226c8 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -183,7 +183,7 @@ destination.undershirt = undershirt destination.socks = socks -/mob/living/carbon/human/AddIntegrationBlood(value, force) +/mob/living/carbon/human/adjust_integration_blood(value, force) if(NOBLOOD in dna.species.species_traits) //Can't lose blood if your species doesn't have any return . = ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 69c232e210..190fae6952 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1364,7 +1364,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood)) - H.AddIntegrationBlood(round(chem.volume, 0.1)) + H.adjust_integration_blood(round(chem.volume, 0.1)) H.reagents.del_reagent(chem.type) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index e12e3d7760..f353bfd675 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -56,13 +56,13 @@ if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers return if(!H.blood_volume) - H.AddIntegrationBlood(5) + H.adjust_integration_blood(5) H.adjustBruteLoss(5) to_chat(H, "You feel empty!") if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio)) if(H.nutrition >= NUTRITION_LEVEL_STARVING) - H.AddIntegrationBlood(3) + H.adjust_integration_blood(3) H.nutrition -= 2.5 if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio)) if(prob(5)) @@ -82,7 +82,7 @@ consumed_limb.drop_limb() to_chat(H, "Your [consumed_limb] is drawn back into your body, unable to maintain its shape!") qdel(consumed_limb) - H.AddIntegrationBlood(20) + H.adjust_integration_blood(20) ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// @@ -151,7 +151,7 @@ if(prob(5)) to_chat(H, "You feel very bloated!") else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) - H.AddIntegrationBlood(3) + H.adjust_integration_blood(3) H.nutrition -= 2.5 ..() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 52e29ab3ec..7b07dfb487 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -112,7 +112,7 @@ var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added var/blood_volume = 0 //how much blood the mob has - var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use AddIntegrationBlood() instead of modifying directly + var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use adjust_integration_blood() instead of modifying directly var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood. var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm index f9072f3934..78697cb4fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm @@ -94,7 +94,7 @@ L.SetUnconscious(0, FALSE) L.adjustOxyLoss(-50)// do CPR first if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding - L.AddIntegrationBlood(30) + L.adjust_integration_blood(30) L.bleedsuppress = 0 if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that var/healing = min(L.getBruteLoss(), 120) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 56d0306eab..12c91e145a 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -586,7 +586,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(AmBloodsucker(C)) disgust_bloodsucker(FALSE, 1) //Bloodsuckers get SOME blood from it, for style reasons. if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.AddIntegrationBlood(3) //Bloody Mary quickly restores blood loss. + C.adjust_integration_blood(3) //Bloody Mary quickly restores blood loss. ..() /datum/reagent/consumable/ethanol/brave_bull @@ -2593,7 +2593,7 @@ All effects don't start immediately, but rather get worse over time; the rate is alcohol_description = "sweet" else alcohol_description = "watery" //How the hell did you get negative boozepwr? - + var/list/fruits = list() if(names_in_order.len <= 3) fruits = names_in_order diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index d1395c7386..a07c5f7a2a 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -402,19 +402,28 @@ pH = 5.5 /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/human/M) - if((HAS_TRAIT(M, TRAIT_NOMARROW))) - return - if(last_added) - M.AddIntegrationBlood(-last_added) - last_added = 0 - if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level. - var/new_blood_level = min(volume * 5, maximum_reachable) - last_added = new_blood_level - M.AddIntegrationBlood(new_blood_level + (extra_regen * REM)) if(prob(33)) M.adjustBruteLoss(-0.5*REM, 0) M.adjustFireLoss(-0.5*REM, 0) . = TRUE + if((HAS_TRAIT(M, TRAIT_NOMARROW))) + return ..() + if(last_added) + M.adjust_integration_blood(-last_added, TRUE) + last_added = 0 + if(M.functional_blood() < maximum_reachable) //Can only up to double your effective blood level. + var/new_blood_level = min(volume * 5, maximum_reachable) + last_added = new_blood_level + M.adjust_integration_blood(new_blood_level + (extra_regen * REM)) + if(prob(33)) + M.adjustBruteLoss(-0.5*REM, 0) + M.adjustFireLoss(-0.5*REM, 0) + . = TRUE + ..() + +/datum/reagent/medicine/salglu_solution/on_mob_delete(mob/living/carbon/human/M) + if(last_added) + M.adjust_integration_blood(-last_added, TRUE) ..() /datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M) @@ -1294,7 +1303,7 @@ M.adjustCloneLoss(-3*REM, FALSE) M.adjustStaminaLoss(-25*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.AddIntegrationBlood(40) // blood fall out man bad + M.adjust_integration_blood(40) // blood fall out man bad ..() . = 1 @@ -1315,7 +1324,7 @@ M.adjustCloneLoss(-1.25*REM, FALSE) M.adjustStaminaLoss(-4*REM,FALSE) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.AddIntegrationBlood(3) + M.adjust_integration_blood(3) ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index f202d10377..bf93c933de 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -48,7 +48,7 @@ var/mob/living/carbon/C = L var/blood_id = C.get_blood_id() if((HAS_TRAIT(C, TRAIT_NOMARROW) || blood_id == /datum/reagent/blood || blood_id == /datum/reagent/blood/jellyblood) && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits)))) - C.AddIntegrationBlood(round(reac_volume, 0.1)) + C.adjust_integration_blood(round(reac_volume, 0.1)) // we don't care about bloodtype here, we're just refilling the mob if(reac_volume >= 10 && istype(L) && method != INJECT) @@ -253,7 +253,7 @@ /datum/reagent/water/on_mob_life(mob/living/carbon/M) . = ..() if(M.blood_volume) - M.AddIntegrationBlood(0.1) // water is good for you! + M.adjust_integration_blood(0.1) // water is good for you! /* * Water reaction to turf @@ -370,7 +370,7 @@ /datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) if(M.blood_volume) - M.AddIntegrationBlood(0.1) // water is good for you! + M.adjust_integration_blood(0.1) // water is good for you! if(!data) data = list("misc" = 1) data["misc"]++ @@ -456,7 +456,7 @@ M.adjustBruteLoss(-2, FALSE) M.adjustFireLoss(-2, FALSE) if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.AddIntegrationBlood(3) + M.adjust_integration_blood(3) else // Will deal about 90 damage when 50 units are thrown M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) @@ -1146,7 +1146,7 @@ if((HAS_TRAIT(C, TRAIT_NOMARROW))) return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.AddIntegrationBlood(0.25) + C.adjust_integration_blood(0.25) ..() /datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -2552,7 +2552,7 @@ M.adjustBruteLoss(-3, FALSE) M.adjustFireLoss(-3, FALSE) if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL) - M.AddIntegrationBlood(3) + M.adjust_integration_blood(3) else M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) M.adjustToxLoss(2, FALSE) diff --git a/code/modules/research/nanites/nanite_programs/healing.dm b/code/modules/research/nanites/nanite_programs/healing.dm index 286c4bfdae..81a837504a 100644 --- a/code/modules/research/nanites/nanite_programs/healing.dm +++ b/code/modules/research/nanites/nanite_programs/healing.dm @@ -109,7 +109,7 @@ /datum/nanite_program/blood_restoring/active_effect() if(iscarbon(host_mob)) var/mob/living/carbon/C = host_mob - C.AddIntegrationBlood(2) + C.adjust_integration_blood(2) /datum/nanite_program/repairing name = "Mechanical Repair" diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index 26e2a63634..8d80613be4 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -322,7 +322,7 @@ Consuming extracts: playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1) if(iscarbon(M)) var/mob/living/carbon/C = M - C.AddIntegrationBlood(25) //Half a vampire drain. + C.adjust_integration_blood(25) //Half a vampire drain. /obj/item/slimecross/consuming/green colour = "green" diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 2340946c46..70cd28718c 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -187,7 +187,7 @@ switch(activation_type) if(SLIME_ACTIVATE_MINOR) user.adjust_nutrition(50) - user.AddIntegrationBlood(50) + user.adjust_integration_blood(50) to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!") return 150 diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 00f154739c..93f88192e5 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -533,7 +533,7 @@ var/total_moles = breath.total_moles() var/pressure = breath.return_pressure() var/plasma_pp = PP(breath, GAS_PLASMA) - owner.AddIntegrationBlood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. + owner.adjust_integration_blood(0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. /obj/item/organ/lungs/yamerol name = "Yamerol lungs" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 922285d6f9..3725e46b38 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -226,7 +226,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.adjustCloneLoss(-10, 0) //I don't want to make Rezadone obsolete. M.adjustBruteLoss(-25, 0)// Note that this takes a long time to apply and makes you fat and useless when it's in you, I don't think this small burst of healing will be useful considering how long it takes to get there. M.adjustFireLoss(-25, 0) - M.AddIntegrationBlood(250) + M.adjust_integration_blood(250) M.heal_bodypart_damage(1,1) M.action_cooldown_mod = 1 if (M.nutrition < 1500) @@ -236,7 +236,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING to_chat(M, "the cells fail to hold enough mass to generate a clone, instead diffusing into your system.") M.adjustBruteLoss(-10, 0) M.adjustFireLoss(-10, 0) - M.AddIntegrationBlood(100) + M.adjust_integration_blood(100) M.action_cooldown_mod = 1 if (M.nutrition < 1500) M.adjust_nutrition(500) @@ -309,7 +309,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING /datum/reagent/fermi/SDGFheal/on_mob_life(mob/living/carbon/M)//Used to heal the clone after splitting, the clone spawns damaged. (i.e. insentivies players to make more than required, so their clone doesn't have to be treated) if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio)) - M.AddIntegrationBlood(10) + M.adjust_integration_blood(10) M.adjustCloneLoss(-2, 0) M.setOrganLoss(ORGAN_SLOT_BRAIN, -1) M.adjust_nutrition(10) From 772bfaba75b4378c1a2f382c96869ca91ddd1a44 Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 3 Aug 2021 00:59:48 +0300 Subject: [PATCH 46/98] line ending fuckery --- .../LavaRuins/lavaland_surface_bathhouse.dmm | 350 +- .../lavaland_surface_engioutpost.dmm | 4126 ++++++++--------- .../LavaRuins/lavaland_surface_hotsprings.dmm | 322 +- .../LavaRuins/lavaland_surface_library.dmm | 1468 +++--- .../LavaRuins/lavaland_surface_lust.dmm | 340 +- .../lavaland_surface_mining_site.dmm | 1762 +++---- .../LavaRuins/lavaland_surface_wrath.dmm | 540 +-- 7 files changed, 4454 insertions(+), 4454 deletions(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm index d50f448afc..a4b572a2ee 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_bathhouse.dmm @@ -1,175 +1,175 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/closed/wall/mineral/silver, -/area/ruin/powered/bathhouse) -"c" = ( -/obj/machinery/shower{ - pixel_y = 16 - }, -/obj/structure/curtain, -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"e" = ( -/obj/structure/mirror{ - pixel_y = 28 - }, -/obj/structure/sink{ - pixel_y = 20 - }, -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"f" = ( -/obj/structure/table/greyscale, -/obj/item/bikehorn/rubberducky, -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"g" = ( -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"h" = ( -/obj/item/soap, -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"i" = ( -/obj/machinery/door/airlock/freezer{ - name = "bath house airlock" - }, -/turf/open/floor/plasteel/white, -/area/ruin/powered/bathhouse) -"j" = ( -/turf/closed/wall/mineral/wood, -/area/ruin/powered/bathhouse) -"k" = ( -/turf/open/floor/wood, -/area/ruin/powered/bathhouse) -"l" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meatballspaghetti, -/turf/open/floor/wood, -/area/ruin/powered/bathhouse) -"m" = ( -/obj/structure/bookcase/random, -/turf/open/floor/wood, -/area/ruin/powered/bathhouse) -"n" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"o" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/turf/open/floor/wood, -/area/ruin/powered/bathhouse) - -(1,1,1) = {" -b -b -b -b -b -n -a -a -"} -(2,1,1) = {" -b -c -g -g -b -j -j -j -"} -(3,1,1) = {" -b -b -g -g -i -k -k -j -"} -(4,1,1) = {" -b -c -g -g -b -l -k -j -"} -(5,1,1) = {" -b -b -g -g -b -m -o -j -"} -(6,1,1) = {" -b -c -g -g -b -j -j -j -"} -(7,1,1) = {" -b -b -g -h -b -n -n -n -"} -(8,1,1) = {" -b -e -g -g -b -n -n -n -"} -(9,1,1) = {" -b -e -g -g -i -n -n -n -"} -(10,1,1) = {" -b -f -g -g -b -n -n -a -"} -(11,1,1) = {" -b -b -b -b -b -n -a -a -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/closed/wall/mineral/silver, +/area/ruin/powered/bathhouse) +"c" = ( +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/curtain, +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"e" = ( +/obj/structure/mirror{ + pixel_y = 28 + }, +/obj/structure/sink{ + pixel_y = 20 + }, +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"f" = ( +/obj/structure/table/greyscale, +/obj/item/bikehorn/rubberducky, +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"g" = ( +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"h" = ( +/obj/item/soap, +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"i" = ( +/obj/machinery/door/airlock/freezer{ + name = "bath house airlock" + }, +/turf/open/floor/plasteel/white, +/area/ruin/powered/bathhouse) +"j" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/powered/bathhouse) +"k" = ( +/turf/open/floor/wood, +/area/ruin/powered/bathhouse) +"l" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/meatballspaghetti, +/turf/open/floor/wood, +/area/ruin/powered/bathhouse) +"m" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood, +/area/ruin/powered/bathhouse) +"n" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"o" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/turf/open/floor/wood, +/area/ruin/powered/bathhouse) + +(1,1,1) = {" +b +b +b +b +b +n +a +a +"} +(2,1,1) = {" +b +c +g +g +b +j +j +j +"} +(3,1,1) = {" +b +b +g +g +i +k +k +j +"} +(4,1,1) = {" +b +c +g +g +b +l +k +j +"} +(5,1,1) = {" +b +b +g +g +b +m +o +j +"} +(6,1,1) = {" +b +c +g +g +b +j +j +j +"} +(7,1,1) = {" +b +b +g +h +b +n +n +n +"} +(8,1,1) = {" +b +e +g +g +b +n +n +n +"} +(9,1,1) = {" +b +e +g +g +i +n +n +n +"} +(10,1,1) = {" +b +f +g +g +b +n +n +a +"} +(11,1,1) = {" +b +b +b +b +b +n +a +a +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm index 3c7f5603b4..ef07fa1303 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_engioutpost.dmm @@ -1,2063 +1,2063 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"ab" = ( -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ad" = ( -/obj/machinery/power/floodlight, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ae" = ( -/turf/closed/wall/r_wall, -/area/lavaland/surface/outdoors) -"af" = ( -/obj/structure/lattice, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"ag" = ( -/obj/structure/cable, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"ah" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"ai" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"aj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"al" = ( -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"am" = ( -/obj/machinery/power/emitter, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"an" = ( -/turf/closed/wall/mineral/iron, -/area/lavaland/surface/outdoors) -"ao" = ( -/obj/item/clothing/under/rank/engineering/chief_engineer, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ap" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"aq" = ( -/obj/machinery/field/generator, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"ar" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"as" = ( -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"at" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"au" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"av" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ax" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber, -/turf/open/floor/engine/o2, -/area/lavaland/surface/outdoors) -"ay" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume, -/turf/open/floor/engine/o2, -/area/lavaland/surface/outdoors) -"az" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber, -/turf/open/floor/engine/n2, -/area/lavaland/surface/outdoors) -"aA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume, -/turf/open/floor/engine/n2, -/area/lavaland/surface/outdoors) -"aB" = ( -/turf/closed/wall, -/area/lavaland/surface/outdoors) -"aC" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/machinery/light/small/broken{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aD" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/engine/o2, -/area/lavaland/surface/outdoors) -"aE" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/engine/o2, -/area/lavaland/surface/outdoors) -"aF" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/engine/n2, -/area/lavaland/surface/outdoors) -"aG" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/engine/n2, -/area/lavaland/surface/outdoors) -"aH" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aI" = ( -/obj/effect/turf_decal/stripes/line, -/obj/item/clothing/suit/space/hardsuit/engine, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"aK" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aL" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aM" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/engine/airless, -/area/lavaland/surface/outdoors) -"aN" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/engine/airless, -/area/lavaland/surface/outdoors) -"aO" = ( -/turf/closed/wall/r_wall/rust, -/area/lavaland/surface/outdoors) -"aP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aQ" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aU" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aV" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aW" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aX" = ( -/obj/machinery/atmospherics/components/trinary/mixer/flipped{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aY" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"aZ" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ba" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 10 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bb" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"bd" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bf" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/gibs/core, -/obj/item/clothing/suit/space/hardsuit/engine, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"bi" = ( -/obj/machinery/door/airlock/engineering{ - name = "The Singularity Engine" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"bj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bk" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engine Entry"; - req_access_txt = "204" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bm" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bo" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bp" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"br" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bt" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bu" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bv" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bw" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bx" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 1 - }, -/obj/machinery/power/apc/unlocked{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"by" = ( -/obj/item/stack/rods{ - amount = 2 - }, -/obj/item/shard/plasma, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bA" = ( -/obj/item/flashlight/flare, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"bD" = ( -/obj/effect/decal/cleanable/robot_debris, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/book/manual/wiki/engineering_singulo_tesla, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bI" = ( -/obj/item/pda/clear{ - note = "Chief's asked me to check on the machinery inside PDA. He's also worried about Build, but i'm sure Harry'll handle the construction. I just need to work on Internals. Fuck i'm hungry" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bK" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/visible, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bM" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bN" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bO" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 10 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bP" = ( -/obj/machinery/atmospherics/components/binary/pump, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bQ" = ( -/obj/effect/spawner/structure/window/plasma, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bR" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bS" = ( -/obj/structure/sign/poster/official/build{ - pixel_x = -32 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bT" = ( -/obj/item/pipe_dispenser, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bU" = ( -/obj/effect/mob_spawn/human/corpse/assistant, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bY" = ( -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = 32 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"bZ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ca" = ( -/obj/item/flashlight, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cb" = ( -/obj/item/book/manual/wiki/atmospherics, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cc" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cd" = ( -/obj/machinery/atmospherics/pipe/manifold/dark/visible{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ce" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cf" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cg" = ( -/obj/item/wallframe/apc, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"ch" = ( -/obj/machinery/light/broken, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ci" = ( -/obj/structure/sign/poster/official/pda_ad{ - pixel_y = -32 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ck" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible{ - dir = 5 - }, -/obj/structure/sign/poster/contraband/atmosia_independence{ - pixel_x = -32 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cl" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/visible, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cm" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cn" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"co" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cp" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cq" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 1 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cr" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/door_assembly/door_assembly_eng, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cs" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"ct" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cv" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cw" = ( -/obj/machinery/atmospherics/pipe/manifold4w/green/visible, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cx" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cy" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cz" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cA" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cB" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cC" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"cD" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"cE" = ( -/obj/machinery/computer/rdconsole/production, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"cG" = ( -/obj/machinery/field/generator, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"cH" = ( -/obj/item/construction/rcd, -/obj/structure/rack, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_upgrade/frames, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cI" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cJ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/visible{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cL" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/space_heater, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cM" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cN" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cO" = ( -/obj/machinery/light/small, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cP" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cQ" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 9 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cR" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/space_heater, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cS" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cT" = ( -/obj/machinery/power/emitter{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/end, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"cV" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cW" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 4 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cY" = ( -/obj/machinery/light/small/broken, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"cZ" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/visible, -/turf/open/floor/engine/airless, -/area/lavaland/surface/outdoors) -"da" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/brown/visible, -/turf/open/floor/engine/airless, -/area/lavaland/surface/outdoors) -"db" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/dark/visible, -/turf/open/floor/engine/airless, -/area/lavaland/surface/outdoors) -"dc" = ( -/obj/machinery/power/rad_collector, -/obj/structure/cable, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"dd" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"de" = ( -/obj/machinery/autolathe, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"df" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dg" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dh" = ( -/obj/structure/sign/poster/contraband/grey_tide, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/lavaland/surface/outdoors) -"di" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dj" = ( -/turf/closed/wall/rust, -/area/lavaland/surface/outdoors) -"dk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible, -/turf/open/floor/engine/air, -/area/lavaland/surface/outdoors) -"dl" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/engine/air, -/area/lavaland/surface/outdoors) -"dm" = ( -/obj/machinery/atmospherics/pipe/simple/brown/visible, -/turf/open/floor/engine/vacuum, -/area/lavaland/surface/outdoors) -"dn" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible, -/turf/open/floor/engine/vacuum, -/area/lavaland/surface/outdoors) -"do" = ( -/obj/machinery/power/port_gen/pacman, -/obj/effect/decal/cleanable/oil/streak, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"dp" = ( -/obj/machinery/light/built, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"dq" = ( -/obj/item/tank/internals/plasma, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"dr" = ( -/obj/machinery/power/floodlight, -/obj/structure/cable, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"ds" = ( -/obj/structure/tank_dispenser, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"dt" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"du" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dv" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dw" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 1 - }, -/turf/open/floor/engine/air, -/area/lavaland/surface/outdoors) -"dx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ - dir = 1 - }, -/turf/open/floor/engine/air, -/area/lavaland/surface/outdoors) -"dy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/lavaland/surface/outdoors) -"dz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ - dir = 1 - }, -/turf/open/floor/engine/vacuum, -/area/lavaland/surface/outdoors) -"dA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"dB" = ( -/obj/structure/girder, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"dC" = ( -/obj/structure/door_assembly/door_assembly_eng, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"gA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"gD" = ( -/obj/machinery/power/emitter{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/end, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"mO" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"oi" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating/rust, -/area/lavaland/surface/outdoors) -"tY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"CR" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"DM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"Ee" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) -"Wr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating/icemoon, -/area/lavaland/surface/outdoors) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aB -an -aB -aB -an -ab -aa -by -bQ -bQ -aO -ae -ae -ae -ae -aO -aa -"} -(3,1,1) = {" -aa -aa -aa -aj -ab -al -al -ab -ab -ab -ab -ab -ab -al -al -al -do -ae -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aj -al -al -al -al -al -al -al -al -al -al -gA -ae -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aw -aK -bc -bc -bR -bc -bc -cC -cT -ai -Ee -aO -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -al -cD -gA -al -al -aO -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -bd -aa -aa -aa -af -cA -DM -dc -al -ae -aa -"} -(8,1,1) = {" -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -af -af -DM -ag -al -ae -aa -"} -(9,1,1) = {" -ab -ab -al -ap -aa -aa -aa -aa -bf -aa -aa -aa -af -af -DM -dc -dp -ae -aa -"} -(10,1,1) = {" -ab -ab -dd -ap -al -aa -aa -aa -aa -aa -bT -aa -af -ab -DM -dc -dq -ae -aa -"} -(11,1,1) = {" -ad -ai -mO -aq -ab -aa -aa -aa -aa -bA -aa -aa -af -aI -DM -dc -al -ae -aa -"} -(12,1,1) = {" -ab -ab -gA -ap -al -ab -aJ -aa -aa -aa -aa -ab -ab -cF -gA -al -al -aO -aa -"} -(13,1,1) = {" -ab -ab -am -ar -at -at -at -at -Wr -bB -bB -bB -tY -cG -gD -ai -dr -ae -aa -"} -(14,1,1) = {" -ab -ah -al -as -au -as -as -as -bg -al -al -cg -gA -al -al -al -al -ae -aa -"} -(15,1,1) = {" -ab -al -al -al -al -al -al -al -bh -bC -al -al -CR -al -al -al -ds -aO -aa -"} -(16,1,1) = {" -aO -aO -ae -ae -ae -aO -ae -aO -bi -ae -aO -ae -ae -aO -ae -aO -ae -aO -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -aL -bb -bD -aO -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -oi -bj -ab -ae -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -af -aa -aa -aB -an -dj -ae -aP -bk -aP -ae -aB -aB -dj -aB -aB -aB -aa -aa -"} -(20,1,1) = {" -af -af -ab -aa -aa -af -aC -aQ -bl -bE -bS -cf -cr -cB -cI -ab -aB -aa -aa -"} -(21,1,1) = {" -af -ab -ab -af -af -ab -ab -ab -bj -ab -bU -ch -aB -cE -ab -cY -dj -aa -aa -"} -(22,1,1) = {" -aa -aa -af -ab -ab -ab -ab -ab -bj -ab -bV -ab -aP -cH -ab -de -dj -aa -aa -"} -(23,1,1) = {" -ab -aa -af -ab -ao -ab -ab -aR -bm -ab -bH -ci -aB -aB -aP -aB -aB -ab -aa -"} -(24,1,1) = {" -aa -af -ab -al -ab -ab -ab -aS -bn -ab -bH -ab -ab -cI -cR -aB -dj -aB -aB -"} -(25,1,1) = {" -aa -af -ab -ab -ab -ab -ab -aT -bo -ab -bW -cj -cj -cj -cS -dh -dg -du -aB -"} -(26,1,1) = {" -aa -af -af -an -an -ab -ab -ab -bp -bF -bX -bF -bF -cJ -cV -df -di -dv -dB -"} -(27,1,1) = {" -aa -aa -aa -aa -an -av -aH -av -bj -bG -bY -av -av -cK -cW -aB -dt -dA -dC -"} -(28,1,1) = {" -aa -aa -aa -aa -an -an -dj -ae -bj -bH -ae -aB -dB -dB -aB -dj -aB -aB -dj -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ae -bj -bI -ae -aa -aa -aa -aa -aa -aa -aa -aB -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ae -bq -bH -aO -aa -aa -aa -aa -aa -aa -aa -aB -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ae -bq -bJ -ae -ae -aO -ae -aO -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -ae -ae -ae -ae -ae -br -bK -bZ -ck -cs -cL -aO -ae -ae -aO -aa -"} -(33,1,1) = {" -aa -aa -aa -ae -ax -aD -aM -aU -bs -bL -bZ -cl -ct -cM -cZ -dk -dw -ae -aa -"} -(34,1,1) = {" -aa -aa -aa -ae -ay -aE -aN -aV -bt -bM -ab -cm -co -cN -aN -dl -dx -ae -aa -"} -(35,1,1) = {" -aa -aa -aa -ae -ae -ae -aO -aW -bu -bN -ca -cn -cv -cO -ae -aO -aO -aO -aa -"} -(36,1,1) = {" -aa -aa -aa -ae -az -aF -aM -aX -bv -bN -cb -co -cw -cM -da -dm -dy -ae -aa -"} -(37,1,1) = {" -aa -aa -aa -ae -aA -aG -aN -aY -bw -bM -cc -cp -cx -cP -db -dn -dz -ae -aa -"} -(38,1,1) = {" -aa -aa -aa -ae -aO -aO -ae -aZ -bu -bO -cd -cd -cy -cQ -ae -aO -aO -aO -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -ba -bx -bP -ce -cq -cz -ab -ae -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -ae -aO -aO -ae -ae -ae -aO -ae -aO -aa -aa -aa -aa -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ab" = ( +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ad" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ae" = ( +/turf/closed/wall/r_wall, +/area/lavaland/surface/outdoors) +"af" = ( +/obj/structure/lattice, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ag" = ( +/obj/structure/cable, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"ah" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"ai" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"aj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"al" = ( +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"am" = ( +/obj/machinery/power/emitter, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"an" = ( +/turf/closed/wall/mineral/iron, +/area/lavaland/surface/outdoors) +"ao" = ( +/obj/item/clothing/under/rank/engineering/chief_engineer, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ap" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"aq" = ( +/obj/machinery/field/generator, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"ar" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"as" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"at" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"au" = ( +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"av" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ax" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/engine/o2, +/area/lavaland/surface/outdoors) +"ay" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume, +/turf/open/floor/engine/o2, +/area/lavaland/surface/outdoors) +"az" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber, +/turf/open/floor/engine/n2, +/area/lavaland/surface/outdoors) +"aA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume, +/turf/open/floor/engine/n2, +/area/lavaland/surface/outdoors) +"aB" = ( +/turf/closed/wall, +/area/lavaland/surface/outdoors) +"aC" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/machinery/light/small/broken{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aD" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine/o2, +/area/lavaland/surface/outdoors) +"aE" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine/o2, +/area/lavaland/surface/outdoors) +"aF" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine/n2, +/area/lavaland/surface/outdoors) +"aG" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine/n2, +/area/lavaland/surface/outdoors) +"aH" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aI" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/clothing/suit/space/hardsuit/engine, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"aK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aL" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aM" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/engine/airless, +/area/lavaland/surface/outdoors) +"aN" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine/airless, +/area/lavaland/surface/outdoors) +"aO" = ( +/turf/closed/wall/r_wall/rust, +/area/lavaland/surface/outdoors) +"aP" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aQ" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aU" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aV" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aW" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aX" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aY" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"aZ" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ba" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bb" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"bd" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bf" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/item/clothing/suit/space/hardsuit/engine, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"bh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"bi" = ( +/obj/machinery/door/airlock/engineering{ + name = "The Singularity Engine" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"bj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bk" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Entry"; + req_access_txt = "204" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bo" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bp" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"br" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bt" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bu" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bv" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bw" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bx" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 1 + }, +/obj/machinery/power/apc/unlocked{ + dir = 4; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"by" = ( +/obj/item/stack/rods{ + amount = 2 + }, +/obj/item/shard/plasma, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bA" = ( +/obj/item/flashlight/flare, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"bD" = ( +/obj/effect/decal/cleanable/robot_debris, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/book/manual/wiki/engineering_singulo_tesla, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bE" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bI" = ( +/obj/item/pda/clear{ + note = "Chief's asked me to check on the machinery inside PDA. He's also worried about Build, but i'm sure Harry'll handle the construction. I just need to work on Internals. Fuck i'm hungry" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bK" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bM" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bN" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bO" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 10 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bP" = ( +/obj/machinery/atmospherics/components/binary/pump, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bQ" = ( +/obj/effect/spawner/structure/window/plasma, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bS" = ( +/obj/structure/sign/poster/official/build{ + pixel_x = -32 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bT" = ( +/obj/item/pipe_dispenser, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bU" = ( +/obj/effect/mob_spawn/human/corpse/assistant, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bW" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bY" = ( +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = 32 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"bZ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ca" = ( +/obj/item/flashlight, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cb" = ( +/obj/item/book/manual/wiki/atmospherics, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cc" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cd" = ( +/obj/machinery/atmospherics/pipe/manifold/dark/visible{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ce" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cf" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cg" = ( +/obj/item/wallframe/apc, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"ch" = ( +/obj/machinery/light/broken, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ci" = ( +/obj/structure/sign/poster/official/pda_ad{ + pixel_y = -32 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ck" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 5 + }, +/obj/structure/sign/poster/contraband/atmosia_independence{ + pixel_x = -32 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cl" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/visible, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cm" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cn" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"co" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cp" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cq" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 1 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cr" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/door_assembly/door_assembly_eng, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cs" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"ct" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cv" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cw" = ( +/obj/machinery/atmospherics/pipe/manifold4w/green/visible, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cx" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cy" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cz" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cA" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cC" = ( +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"cD" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"cE" = ( +/obj/machinery/computer/rdconsole/production, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"cG" = ( +/obj/machinery/field/generator, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"cH" = ( +/obj/item/construction/rcd, +/obj/structure/rack, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_upgrade/frames, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cI" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cJ" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cL" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/space_heater, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cM" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cN" = ( +/obj/machinery/atmospherics/components/binary/pump, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cO" = ( +/obj/machinery/light/small, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cP" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cQ" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 9 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cR" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/space_heater, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cS" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cT" = ( +/obj/machinery/power/emitter{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/end, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"cV" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cW" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/yellow/filled/corner{ + dir = 4 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cY" = ( +/obj/machinery/light/small/broken, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"cZ" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/turf/open/floor/engine/airless, +/area/lavaland/surface/outdoors) +"da" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/turf/open/floor/engine/airless, +/area/lavaland/surface/outdoors) +"db" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/floor/engine/airless, +/area/lavaland/surface/outdoors) +"dc" = ( +/obj/machinery/power/rad_collector, +/obj/structure/cable, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"dd" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"de" = ( +/obj/machinery/autolathe, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"df" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dg" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dh" = ( +/obj/structure/sign/poster/contraband/grey_tide, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/lavaland/surface/outdoors) +"di" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dj" = ( +/turf/closed/wall/rust, +/area/lavaland/surface/outdoors) +"dk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/turf/open/floor/engine/air, +/area/lavaland/surface/outdoors) +"dl" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine/air, +/area/lavaland/surface/outdoors) +"dm" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/turf/open/floor/engine/vacuum, +/area/lavaland/surface/outdoors) +"dn" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/floor/engine/vacuum, +/area/lavaland/surface/outdoors) +"do" = ( +/obj/machinery/power/port_gen/pacman, +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"dp" = ( +/obj/machinery/light/built, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"dq" = ( +/obj/item/tank/internals/plasma, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"dr" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"ds" = ( +/obj/structure/tank_dispenser, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"dt" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"du" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dv" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dw" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/engine/air, +/area/lavaland/surface/outdoors) +"dx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/open/floor/engine/air, +/area/lavaland/surface/outdoors) +"dy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/lavaland/surface/outdoors) +"dz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ + dir = 1 + }, +/turf/open/floor/engine/vacuum, +/area/lavaland/surface/outdoors) +"dA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"dB" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"dC" = ( +/obj/structure/door_assembly/door_assembly_eng, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"gA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"gD" = ( +/obj/machinery/power/emitter{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/end, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"mO" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"oi" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating/rust, +/area/lavaland/surface/outdoors) +"tY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"CR" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"DM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"Ee" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) +"Wr" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating/icemoon, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aB +an +aB +aB +an +ab +aa +by +bQ +bQ +aO +ae +ae +ae +ae +aO +aa +"} +(3,1,1) = {" +aa +aa +aa +aj +ab +al +al +ab +ab +ab +ab +ab +ab +al +al +al +do +ae +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aj +al +al +al +al +al +al +al +al +al +al +gA +ae +aa +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +aa +aw +aK +bc +bc +bR +bc +bc +cC +cT +ai +Ee +aO +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +al +cD +gA +al +al +aO +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +bd +aa +aa +aa +af +cA +DM +dc +al +ae +aa +"} +(8,1,1) = {" +ab +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +DM +ag +al +ae +aa +"} +(9,1,1) = {" +ab +ab +al +ap +aa +aa +aa +aa +bf +aa +aa +aa +af +af +DM +dc +dp +ae +aa +"} +(10,1,1) = {" +ab +ab +dd +ap +al +aa +aa +aa +aa +aa +bT +aa +af +ab +DM +dc +dq +ae +aa +"} +(11,1,1) = {" +ad +ai +mO +aq +ab +aa +aa +aa +aa +bA +aa +aa +af +aI +DM +dc +al +ae +aa +"} +(12,1,1) = {" +ab +ab +gA +ap +al +ab +aJ +aa +aa +aa +aa +ab +ab +cF +gA +al +al +aO +aa +"} +(13,1,1) = {" +ab +ab +am +ar +at +at +at +at +Wr +bB +bB +bB +tY +cG +gD +ai +dr +ae +aa +"} +(14,1,1) = {" +ab +ah +al +as +au +as +as +as +bg +al +al +cg +gA +al +al +al +al +ae +aa +"} +(15,1,1) = {" +ab +al +al +al +al +al +al +al +bh +bC +al +al +CR +al +al +al +ds +aO +aa +"} +(16,1,1) = {" +aO +aO +ae +ae +ae +aO +ae +aO +bi +ae +aO +ae +ae +aO +ae +aO +ae +aO +aa +"} +(17,1,1) = {" +aa +aa +aa +aa +aa +aa +ae +aL +bb +bD +aO +aa +aa +aa +aa +aa +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +aa +aa +ae +oi +bj +ab +ae +aa +aa +aa +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +af +aa +aa +aB +an +dj +ae +aP +bk +aP +ae +aB +aB +dj +aB +aB +aB +aa +aa +"} +(20,1,1) = {" +af +af +ab +aa +aa +af +aC +aQ +bl +bE +bS +cf +cr +cB +cI +ab +aB +aa +aa +"} +(21,1,1) = {" +af +ab +ab +af +af +ab +ab +ab +bj +ab +bU +ch +aB +cE +ab +cY +dj +aa +aa +"} +(22,1,1) = {" +aa +aa +af +ab +ab +ab +ab +ab +bj +ab +bV +ab +aP +cH +ab +de +dj +aa +aa +"} +(23,1,1) = {" +ab +aa +af +ab +ao +ab +ab +aR +bm +ab +bH +ci +aB +aB +aP +aB +aB +ab +aa +"} +(24,1,1) = {" +aa +af +ab +al +ab +ab +ab +aS +bn +ab +bH +ab +ab +cI +cR +aB +dj +aB +aB +"} +(25,1,1) = {" +aa +af +ab +ab +ab +ab +ab +aT +bo +ab +bW +cj +cj +cj +cS +dh +dg +du +aB +"} +(26,1,1) = {" +aa +af +af +an +an +ab +ab +ab +bp +bF +bX +bF +bF +cJ +cV +df +di +dv +dB +"} +(27,1,1) = {" +aa +aa +aa +aa +an +av +aH +av +bj +bG +bY +av +av +cK +cW +aB +dt +dA +dC +"} +(28,1,1) = {" +aa +aa +aa +aa +an +an +dj +ae +bj +bH +ae +aB +dB +dB +aB +dj +aB +aB +dj +"} +(29,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ae +bj +bI +ae +aa +aa +aa +aa +aa +aa +aa +aB +"} +(30,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ae +bq +bH +aO +aa +aa +aa +aa +aa +aa +aa +aB +"} +(31,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ae +bq +bJ +ae +ae +aO +ae +aO +aa +aa +aa +aa +"} +(32,1,1) = {" +aa +aa +aa +ae +ae +ae +ae +ae +br +bK +bZ +ck +cs +cL +aO +ae +ae +aO +aa +"} +(33,1,1) = {" +aa +aa +aa +ae +ax +aD +aM +aU +bs +bL +bZ +cl +ct +cM +cZ +dk +dw +ae +aa +"} +(34,1,1) = {" +aa +aa +aa +ae +ay +aE +aN +aV +bt +bM +ab +cm +co +cN +aN +dl +dx +ae +aa +"} +(35,1,1) = {" +aa +aa +aa +ae +ae +ae +aO +aW +bu +bN +ca +cn +cv +cO +ae +aO +aO +aO +aa +"} +(36,1,1) = {" +aa +aa +aa +ae +az +aF +aM +aX +bv +bN +cb +co +cw +cM +da +dm +dy +ae +aa +"} +(37,1,1) = {" +aa +aa +aa +ae +aA +aG +aN +aY +bw +bM +cc +cp +cx +cP +db +dn +dz +ae +aa +"} +(38,1,1) = {" +aa +aa +aa +ae +aO +aO +ae +aZ +bu +bO +cd +cd +cy +cQ +ae +aO +aO +aO +aa +"} +(39,1,1) = {" +aa +aa +aa +aa +aa +aa +ae +ba +bx +bP +ce +cq +cz +ab +ae +aa +aa +aa +aa +"} +(40,1,1) = {" +aa +aa +aa +aa +aa +aa +ae +aO +aO +ae +ae +ae +aO +ae +aO +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm index f026d8ca96..ae80410427 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hotsprings.dmm @@ -1,161 +1,161 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/indestructible/sandstone, -/area/lavaland/surface/outdoors) -"c" = ( -/turf/open/water, -/area/lavaland/surface/outdoors) -"I" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"L" = ( -/obj/structure/fluff/beach_umbrella, -/turf/open/floor/plating/beach/sand, -/area/lavaland/surface/outdoors) -"U" = ( -/turf/open/floor/plating/beach/sand, -/area/lavaland/surface/outdoors) - -(1,1,1) = {" -I -I -I -I -I -I -I -I -I -I -I -"} -(2,1,1) = {" -I -I -I -a -a -I -a -a -I -I -I -"} -(3,1,1) = {" -I -I -a -U -U -U -U -U -a -I -I -"} -(4,1,1) = {" -I -a -U -L -c -c -c -L -U -a -I -"} -(5,1,1) = {" -I -a -U -c -c -c -c -c -U -a -I -"} -(6,1,1) = {" -I -I -U -c -c -c -c -c -U -I -I -"} -(7,1,1) = {" -I -a -U -c -c -c -c -c -U -a -I -"} -(8,1,1) = {" -I -a -U -L -c -c -c -L -U -a -I -"} -(9,1,1) = {" -I -I -a -U -U -U -U -U -a -I -I -"} -(10,1,1) = {" -I -I -I -a -a -I -a -a -I -I -I -"} -(11,1,1) = {" -I -I -I -I -I -I -I -I -I -I -I -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/sandstone, +/area/lavaland/surface/outdoors) +"c" = ( +/turf/open/water, +/area/lavaland/surface/outdoors) +"I" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"L" = ( +/obj/structure/fluff/beach_umbrella, +/turf/open/floor/plating/beach/sand, +/area/lavaland/surface/outdoors) +"U" = ( +/turf/open/floor/plating/beach/sand, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +I +I +I +I +I +I +I +I +I +I +I +"} +(2,1,1) = {" +I +I +I +a +a +I +a +a +I +I +I +"} +(3,1,1) = {" +I +I +a +U +U +U +U +U +a +I +I +"} +(4,1,1) = {" +I +a +U +L +c +c +c +L +U +a +I +"} +(5,1,1) = {" +I +a +U +c +c +c +c +c +U +a +I +"} +(6,1,1) = {" +I +I +U +c +c +c +c +c +U +I +I +"} +(7,1,1) = {" +I +a +U +c +c +c +c +c +U +a +I +"} +(8,1,1) = {" +I +a +U +L +c +c +c +L +U +a +I +"} +(9,1,1) = {" +I +I +a +U +U +U +U +U +a +I +I +"} +(10,1,1) = {" +I +I +I +a +a +I +a +a +I +I +I +"} +(11,1,1) = {" +I +I +I +I +I +I +I +I +I +I +I +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm index 0360a9ebb5..d1dcf9f11d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_library.dmm @@ -1,734 +1,734 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/documents/syndicate/mining, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"ac" = ( -/turf/closed/wall/mineral/wood, -/area/ruin/unpowered/buried_library) -"ad" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"ae" = ( -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"af" = ( -/obj/item/stack/sheet/mineral/wood, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"ag" = ( -/obj/item/feather, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"ah" = ( -/obj/structure/bookcase/random, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"ai" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary2, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"al" = ( -/turf/closed/wall/mineral/iron, -/area/ruin/unpowered/buried_library) -"am" = ( -/obj/structure/table/wood/fancy/black, -/obj/item/book_of_babel, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"ao" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"ap" = ( -/obj/item/stack/sheet/mineral/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aq" = ( -/obj/structure/bookcase/random, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"ar" = ( -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"as" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/oldstation/protosing, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"av" = ( -/obj/structure/bookcase/random, -/turf/open/space/basic, -/area/ruin/unpowered/buried_library) -"aw" = ( -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"ay" = ( -/obj/machinery/door/keycard/library, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"az" = ( -/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aA" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"aC" = ( -/obj/item/feather, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"aD" = ( -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) -"aE" = ( -/obj/item/stack/sheet/mineral/wood, -/obj/item/book/manual/random, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aF" = ( -/obj/item/book/manual/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"aG" = ( -/obj/structure/table/bronze, -/obj/item/stack/ore/slag, -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) -"aH" = ( -/obj/structure/table/bronze, -/obj/item/statuebust, -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) -"aI" = ( -/obj/effect/mob_spawn/human/skeleton, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"aJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"aK" = ( -/obj/item/feather, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"aL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fluff/paper/stack, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aM" = ( -/obj/item/stack/sheet/mineral/wood, -/obj/item/book/manual/random, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"aN" = ( -/obj/structure/statue/sandstone/venus, -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) -"aP" = ( -/obj/item/keycard/library, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"aQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aR" = ( -/obj/structure/fluff/paper/stack, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aS" = ( -/obj/structure/table/wood/fancy/black, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/secretrecipe, -/obj/item/flashlight/lantern/jade{ - on = 1 - }, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"aV" = ( -/obj/item/stack/sheet/mineral/wood, -/obj/structure/fluff/paper/stack, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"aW" = ( -/obj/structure/fluff/paper/stack, -/turf/open/floor/plasteel/cult, -/area/ruin/unpowered/buried_library) -"aX" = ( -/obj/structure/table/bronze, -/obj/item/statuebust, -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"aY" = ( -/obj/structure/table_frame/wood, -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"ba" = ( -/obj/structure/barricade/wooden/crude, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bg" = ( -/obj/item/paper/fluff/ruins/oldstation/protogun, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bh" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/pet/fox, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"bi" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bj" = ( -/obj/item/book/manual/random, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bl" = ( -/obj/item/storage/box/fountainpens, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bm" = ( -/obj/structure/fluff/paper/stack, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bn" = ( -/obj/item/book/manual/random, -/obj/item/stack/sheet/mineral/wood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bo" = ( -/obj/item/stack/sheet/mineral/wood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bq" = ( -/obj/structure/mineral_door/wood, -/obj/structure/barricade/wooden/crude/snow, -/turf/open/floor/wood, -/area/ruin/unpowered/buried_library) -"br" = ( -/obj/structure/girder, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/buried_library) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/template_noop, -/area/template_noop) -"bu" = ( -/obj/item/stack/sheet/mineral/wood, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"bw" = ( -/turf/open/floor/wood, -/area/lavaland/surface/outdoors) -"by" = ( -/obj/item/statuebust, -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) -"bz" = ( -/obj/item/flashlight/lantern/jade{ - on = 1 - }, -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"bA" = ( -/obj/structure/fluff/paper/stack, -/turf/open/floor/plating, -/area/ruin/unpowered/buried_library) -"bB" = ( -/obj/structure/fluff/paper/stack, -/turf/open/floor/carpet/black, -/area/ruin/unpowered/buried_library) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -ad -bt -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bi -bi -bi -bi -bi -ac -ba -ac -ac -ac -ad -ad -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -bi -bi -bi -bi -bo -bi -bi -bi -bm -ae -af -ae -ac -ad -ad -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -bi -bi -aR -bi -bi -ae -bj -aq -bi -ah -aL -ah -ao -ac -ad -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -bi -bi -bi -aC -ae -aQ -aq -bi -aq -bg -ah -ao -ah -bi -ac -ad -ad -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ad -ac -bi -ae -bi -aM -ae -aq -bm -aq -aA -ah -ao -ah -ae -ac -ad -ad -ad -"} -(7,1,1) = {" -aa -aa -aa -aa -ad -ac -bi -bm -bi -ao -aR -ao -aA -ao -ag -ah -aR -ah -bh -ac -ad -ad -ad -"} -(8,1,1) = {" -aa -aa -aa -aa -ad -bi -bi -av -aA -bi -aG -aD -aX -bi -ao -ae -ao -ah -ae -ac -br -ad -ad -"} -(9,1,1) = {" -aa -aa -aa -aa -ad -ac -as -av -aF -aD -aD -bz -aD -bB -bi -ae -ao -ae -ao -ac -bp -bw -ad -"} -(10,1,1) = {" -aa -aa -aa -ad -ad -ac -ap -bp -bi -aD -aD -aN -bi -aw -bi -ao -af -aR -ae -bq -ae -bu -ad -"} -(11,1,1) = {" -aa -al -al -al -al -al -ae -ah -aR -aD -bi -aD -aD -by -ao -aw -ao -ae -bm -ac -ae -ad -ad -"} -(12,1,1) = {" -ad -al -ab -aI -ar -al -aR -aE -af -aD -aH -bA -aY -aD -bi -ae -bm -ah -ag -br -ac -ad -ad -"} -(13,1,1) = {" -ad -al -am -aJ -aW -ay -ae -ah -ao -ae -ao -ae -af -bp -bi -ah -bi -ah -bp -ac -ad -ad -ad -"} -(14,1,1) = {" -ad -al -aS -aW -aK -al -ae -ah -bi -ah -ao -ah -az -ah -bi -ah -bi -bn -ao -ac -ad -aa -aa -"} -(15,1,1) = {" -ad -al -al -ai -ar -al -ag -ah -aL -ah -aA -ah -ao -ah -bi -bi -bl -bi -bi -bi -ad -aa -aa -"} -(16,1,1) = {" -ad -ad -al -al -al -al -ao -ah -ao -ah -ao -aV -bi -ah -bp -bi -bm -bo -bi -br -bu -aa -aa -"} -(17,1,1) = {" -aa -ad -ad -ad -ad -ac -ae -ao -ae -aP -ae -aR -ae -bp -bi -bj -bi -ad -ad -ad -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -ad -ac -ac -ac -ac -ac -ac -ba -ac -ac -br -ad -aa -ad -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -ad -ad -ad -ad -ad -ad -aa -ad -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/documents/syndicate/mining, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"ac" = ( +/turf/closed/wall/mineral/wood, +/area/ruin/unpowered/buried_library) +"ad" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ae" = ( +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"af" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"ag" = ( +/obj/item/feather, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"ah" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"ai" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary2, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"al" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/unpowered/buried_library) +"am" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/book_of_babel, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"ao" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"ap" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aq" = ( +/obj/structure/bookcase/random, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"ar" = ( +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"as" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/ruins/oldstation/protosing, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"av" = ( +/obj/structure/bookcase/random, +/turf/open/space/basic, +/area/ruin/unpowered/buried_library) +"aw" = ( +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"ay" = ( +/obj/machinery/door/keycard/library, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"az" = ( +/obj/item/paper/crumpled/fluff/stations/lavaland/library/diary, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aA" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"aC" = ( +/obj/item/feather, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"aD" = ( +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) +"aE" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/item/book/manual/random, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aF" = ( +/obj/item/book/manual/random, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"aG" = ( +/obj/structure/table/bronze, +/obj/item/stack/ore/slag, +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) +"aH" = ( +/obj/structure/table/bronze, +/obj/item/statuebust, +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) +"aI" = ( +/obj/effect/mob_spawn/human/skeleton, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"aJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"aK" = ( +/obj/item/feather, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"aL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/paper/stack, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aM" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/item/book/manual/random, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"aN" = ( +/obj/structure/statue/sandstone/venus, +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) +"aP" = ( +/obj/item/keycard/library, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"aQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aR" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aS" = ( +/obj/structure/table/wood/fancy/black, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/secretrecipe, +/obj/item/flashlight/lantern/jade{ + on = 1 + }, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"aV" = ( +/obj/item/stack/sheet/mineral/wood, +/obj/structure/fluff/paper/stack, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"aW" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/plasteel/cult, +/area/ruin/unpowered/buried_library) +"aX" = ( +/obj/structure/table/bronze, +/obj/item/statuebust, +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"aY" = ( +/obj/structure/table_frame/wood, +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"ba" = ( +/obj/structure/barricade/wooden/crude, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bg" = ( +/obj/item/paper/fluff/ruins/oldstation/protogun, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bh" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/pet/fox, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"bi" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bj" = ( +/obj/item/book/manual/random, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bl" = ( +/obj/item/storage/box/fountainpens, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bm" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bn" = ( +/obj/item/book/manual/random, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bo" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bq" = ( +/obj/structure/mineral_door/wood, +/obj/structure/barricade/wooden/crude/snow, +/turf/open/floor/wood, +/area/ruin/unpowered/buried_library) +"br" = ( +/obj/structure/girder, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/buried_library) +"bt" = ( +/obj/effect/decal/cleanable/dirt, +/turf/template_noop, +/area/template_noop) +"bu" = ( +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"bw" = ( +/turf/open/floor/wood, +/area/lavaland/surface/outdoors) +"by" = ( +/obj/item/statuebust, +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) +"bz" = ( +/obj/item/flashlight/lantern/jade{ + on = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"bA" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/plating, +/area/ruin/unpowered/buried_library) +"bB" = ( +/obj/structure/fluff/paper/stack, +/turf/open/floor/carpet/black, +/area/ruin/unpowered/buried_library) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +ad +ad +bt +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +bi +bi +bi +bi +bi +ac +ba +ac +ac +ac +ad +ad +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +bi +bi +bi +bi +bo +bi +bi +bi +bm +ae +af +ae +ac +ad +ad +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aa +bi +bi +aR +bi +bi +ae +bj +aq +bi +ah +aL +ah +ao +ac +ad +aa +aa +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +bi +bi +bi +aC +ae +aQ +aq +bi +aq +bg +ah +ao +ah +bi +ac +ad +ad +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +ad +ac +bi +ae +bi +aM +ae +aq +bm +aq +aA +ah +ao +ah +ae +ac +ad +ad +ad +"} +(7,1,1) = {" +aa +aa +aa +aa +ad +ac +bi +bm +bi +ao +aR +ao +aA +ao +ag +ah +aR +ah +bh +ac +ad +ad +ad +"} +(8,1,1) = {" +aa +aa +aa +aa +ad +bi +bi +av +aA +bi +aG +aD +aX +bi +ao +ae +ao +ah +ae +ac +br +ad +ad +"} +(9,1,1) = {" +aa +aa +aa +aa +ad +ac +as +av +aF +aD +aD +bz +aD +bB +bi +ae +ao +ae +ao +ac +bp +bw +ad +"} +(10,1,1) = {" +aa +aa +aa +ad +ad +ac +ap +bp +bi +aD +aD +aN +bi +aw +bi +ao +af +aR +ae +bq +ae +bu +ad +"} +(11,1,1) = {" +aa +al +al +al +al +al +ae +ah +aR +aD +bi +aD +aD +by +ao +aw +ao +ae +bm +ac +ae +ad +ad +"} +(12,1,1) = {" +ad +al +ab +aI +ar +al +aR +aE +af +aD +aH +bA +aY +aD +bi +ae +bm +ah +ag +br +ac +ad +ad +"} +(13,1,1) = {" +ad +al +am +aJ +aW +ay +ae +ah +ao +ae +ao +ae +af +bp +bi +ah +bi +ah +bp +ac +ad +ad +ad +"} +(14,1,1) = {" +ad +al +aS +aW +aK +al +ae +ah +bi +ah +ao +ah +az +ah +bi +ah +bi +bn +ao +ac +ad +aa +aa +"} +(15,1,1) = {" +ad +al +al +ai +ar +al +ag +ah +aL +ah +aA +ah +ao +ah +bi +bi +bl +bi +bi +bi +ad +aa +aa +"} +(16,1,1) = {" +ad +ad +al +al +al +al +ao +ah +ao +ah +ao +aV +bi +ah +bp +bi +bm +bo +bi +br +bu +aa +aa +"} +(17,1,1) = {" +aa +ad +ad +ad +ad +ac +ae +ao +ae +aP +ae +aR +ae +bp +bi +bj +bi +ad +ad +ad +aa +aa +aa +"} +(18,1,1) = {" +aa +aa +aa +aa +ad +ac +ac +ac +ac +ac +ac +ba +ac +ac +br +ad +aa +ad +aa +aa +aa +aa +aa +"} +(19,1,1) = {" +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +ad +aa +ad +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm index 8faf14c141..d341e39c29 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lust.dmm @@ -1,170 +1,170 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"b" = ( -/obj/structure/sign/poster/contraband/lusty_xenomorph, -/turf/closed/wall/mineral/abductor, -/area/lavaland/surface) -"c" = ( -/turf/open/floor/mineral/diamond, -/area/lavaland/surface) -"d" = ( -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, -/turf/open/floor/mineral/diamond, -/area/lavaland/surface) -"e" = ( -/obj/item/greentext{ - light_color = "#64C864"; - light_range = 1 - }, -/turf/open/floor/mineral/diamond, -/area/lavaland/surface) -"f" = ( -/obj/item/tcg_card/special/xenomaid, -/turf/open/floor/mineral/diamond, -/area/lavaland/surface) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -b -b -b -a -a -a -a -"} -(4,1,1) = {" -a -a -a -b -f -c -c -b -a -a -a -"} -(5,1,1) = {" -a -a -b -c -c -d -c -c -b -a -a -"} -(6,1,1) = {" -a -a -b -c -d -e -d -c -b -a -a -"} -(7,1,1) = {" -a -a -b -c -c -d -c -c -b -a -a -"} -(8,1,1) = {" -a -a -a -b -c -c -c -b -a -a -a -"} -(9,1,1) = {" -a -a -a -a -b -b -b -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"b" = ( +/obj/structure/sign/poster/contraband/lusty_xenomorph, +/turf/closed/wall/mineral/abductor, +/area/lavaland/surface) +"c" = ( +/turf/open/floor/mineral/diamond, +/area/lavaland/surface) +"d" = ( +/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/turf/open/floor/mineral/diamond, +/area/lavaland/surface) +"e" = ( +/obj/item/greentext{ + light_color = "#64C864"; + light_range = 1 + }, +/turf/open/floor/mineral/diamond, +/area/lavaland/surface) +"f" = ( +/obj/item/tcg_card/special/xenomaid, +/turf/open/floor/mineral/diamond, +/area/lavaland/surface) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +b +b +b +a +a +a +a +"} +(4,1,1) = {" +a +a +a +b +f +c +c +b +a +a +a +"} +(5,1,1) = {" +a +a +b +c +c +d +c +c +b +a +a +"} +(6,1,1) = {" +a +a +b +c +d +e +d +c +b +a +a +"} +(7,1,1) = {" +a +a +b +c +c +d +c +c +b +a +a +"} +(8,1,1) = {" +a +a +a +b +c +c +c +b +a +a +a +"} +(9,1,1) = {" +a +a +a +a +b +b +b +a +a +a +a +"} +(10,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} +(11,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm index ec334820af..b4f7fec16f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_mining_site.dmm @@ -1,881 +1,881 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"b" = ( -/turf/closed/wall/mineral/wood/nonmetal, -/area/ruin/unpowered) -"c" = ( -/obj/structure/closet/toolcloset, -/obj/item/wrench, -/obj/item/screwdriver, -/obj/item/crowbar, -/obj/item/weldingtool/largetank, -/obj/item/wirecutters, -/obj/item/radio/off, -/turf/open/floor/wood, -/area/ruin/unpowered) -"d" = ( -/turf/open/openspace/icemoon, -/area/template_noop) -"e" = ( -/obj/item/clothing/suit/hooded/explorer, -/obj/item/clothing/mask/gas/explorer, -/obj/item/clothing/gloves/color/black, -/obj/item/storage/backpack/explorer, -/obj/item/flashlight/lantern, -/obj/item/storage/bag/ore, -/obj/structure/closet, -/obj/item/clothing/shoes/jackboots, -/turf/open/floor/wood, -/area/ruin/unpowered) -"f" = ( -/turf/open/floor/wood, -/area/ruin/unpowered) -"g" = ( -/obj/structure/fireplace, -/turf/open/floor/wood, -/area/ruin/unpowered) -"h" = ( -/obj/structure/flora/ash/cacti, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"i" = ( -/turf/template_noop, -/area/template_noop) -"j" = ( -/obj/structure/sink/kitchen, -/turf/open/floor/wood, -/area/ruin/unpowered) -"k" = ( -/obj/structure/closet/crate/freezer, -/turf/open/floor/wood, -/area/ruin/unpowered) -"l" = ( -/obj/machinery/vending/dinnerware, -/turf/open/floor/wood, -/area/ruin/unpowered) -"m" = ( -/obj/structure/barricade/wooden/crude/snow, -/obj/structure/mineral_door/wood, -/turf/open/floor/wood, -/area/ruin/unpowered) -"n" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"o" = ( -/obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/wood, -/area/ruin/unpowered) -"p" = ( -/obj/machinery/light/broken{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ruin/unpowered) -"q" = ( -/obj/structure/table/wood, -/obj/item/pen, -/obj/machinery/light/broken{ - dir = 8 - }, -/obj/item/paper/crumpled/bloody{ - info = "help..."; - text = "" - }, -/turf/open/floor/wood, -/area/ruin/unpowered) -"r" = ( -/obj/item/chair/wood, -/obj/effect/decal/cleanable/blood/splatter, -/obj/effect/decal/cleanable/blood/drip, -/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/unpowered) -"s" = ( -/obj/effect/decal/cleanable/trail_holder, -/turf/open/floor/wood, -/area/ruin/unpowered) - -(1,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(2,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(3,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(4,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(5,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(6,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(7,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(8,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -i -"} -(9,1,1) = {" -i -i -i -i -i -i -i -i -d -b -b -b -b -b -b -b -i -i -i -i -i -i -i -i -i -"} -(10,1,1) = {" -i -i -i -i -i -i -i -i -b -b -b -b -b -b -b -b -b -i -i -i -i -i -i -i -i -"} -(11,1,1) = {" -i -i -i -i -i -i -i -i -b -b -c -f -f -o -q -b -b -i -i -i -i -i -i -i -i -"} -(12,1,1) = {" -i -i -i -i -i -i -i -i -b -b -e -f -f -f -r -b -b -i -i -i -i -i -i -i -i -"} -(13,1,1) = {" -i -i -i -i -i -i -i -i -b -b -f -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(14,1,1) = {" -i -i -i -i -i -i -i -i -b -b -g -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(15,1,1) = {" -i -i -i -i -i -i -i -i -b -b -f -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(16,1,1) = {" -i -i -i -i -i -i -i -i -b -b -j -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(17,1,1) = {" -i -i -i -i -i -i -i -i -b -b -k -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(18,1,1) = {" -i -i -i -i -i -i -i -i -b -b -l -f -f -f -s -b -b -i -i -i -i -i -i -i -i -"} -(19,1,1) = {" -i -i -i -i -i -i -i -i -b -b -b -f -f -p -b -b -b -i -i -i -i -i -i -i -i -"} -(20,1,1) = {" -i -i -i -i -i -i -i -i -i -b -b -b -f -b -b -b -i -i -i -i -i -i -i -i -i -"} -(21,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -b -f -b -i -i -i -i -i -i -i -i -i -i -i -"} -(22,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -b -f -b -i -i -i -i -i -i -i -i -i -i -i -"} -(23,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -b -f -b -i -i -i -i -i -i -i -i -i -i -i -"} -(24,1,1) = {" -i -i -i -i -i -i -i -i -i -i -i -b -m -b -i -i -i -i -i -i -i -i -i -i -i -"} -(25,1,1) = {" -i -i -i -i -i -i -i -i -i -i -n -h -n -h -n -i -i -i -i -i -i -i -i -i -i -"} -(26,1,1) = {" -i -i -i -i -i -i -i -i -i -n -n -n -h -n -n -n -i -i -i -i -i -i -i -i -i -"} -(27,1,1) = {" -i -i -i -i -i -i -i -i -n -n -n -n -n -n -n -n -n -i -i -i -i -i -i -i -i -"} -(28,1,1) = {" -i -i -i -i -i -i -i -n -n -n -n -n -n -n -n -n -n -n -i -i -i -i -i -i -i -"} -(29,1,1) = {" -i -i -i -i -i -i -i -n -n -n -n -n -n -n -n -n -n -n -i -i -i -i -i -i -i -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"b" = ( +/turf/closed/wall/mineral/wood/nonmetal, +/area/ruin/unpowered) +"c" = ( +/obj/structure/closet/toolcloset, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/item/crowbar, +/obj/item/weldingtool/largetank, +/obj/item/wirecutters, +/obj/item/radio/off, +/turf/open/floor/wood, +/area/ruin/unpowered) +"d" = ( +/turf/open/openspace/icemoon, +/area/template_noop) +"e" = ( +/obj/item/clothing/suit/hooded/explorer, +/obj/item/clothing/mask/gas/explorer, +/obj/item/clothing/gloves/color/black, +/obj/item/storage/backpack/explorer, +/obj/item/flashlight/lantern, +/obj/item/storage/bag/ore, +/obj/structure/closet, +/obj/item/clothing/shoes/jackboots, +/turf/open/floor/wood, +/area/ruin/unpowered) +"f" = ( +/turf/open/floor/wood, +/area/ruin/unpowered) +"g" = ( +/obj/structure/fireplace, +/turf/open/floor/wood, +/area/ruin/unpowered) +"h" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"i" = ( +/turf/template_noop, +/area/template_noop) +"j" = ( +/obj/structure/sink/kitchen, +/turf/open/floor/wood, +/area/ruin/unpowered) +"k" = ( +/obj/structure/closet/crate/freezer, +/turf/open/floor/wood, +/area/ruin/unpowered) +"l" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/wood, +/area/ruin/unpowered) +"m" = ( +/obj/structure/barricade/wooden/crude/snow, +/obj/structure/mineral_door/wood, +/turf/open/floor/wood, +/area/ruin/unpowered) +"n" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"o" = ( +/obj/item/reagent_containers/food/drinks/beer, +/turf/open/floor/wood, +/area/ruin/unpowered) +"p" = ( +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/unpowered) +"q" = ( +/obj/structure/table/wood, +/obj/item/pen, +/obj/machinery/light/broken{ + dir = 8 + }, +/obj/item/paper/crumpled/bloody{ + info = "help..."; + text = "" + }, +/turf/open/floor/wood, +/area/ruin/unpowered) +"r" = ( +/obj/item/chair/wood, +/obj/effect/decal/cleanable/blood/splatter, +/obj/effect/decal/cleanable/blood/drip, +/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/unpowered) +"s" = ( +/obj/effect/decal/cleanable/trail_holder, +/turf/open/floor/wood, +/area/ruin/unpowered) + +(1,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(2,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(3,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(4,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(5,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(6,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(7,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(8,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +i +"} +(9,1,1) = {" +i +i +i +i +i +i +i +i +d +b +b +b +b +b +b +b +i +i +i +i +i +i +i +i +i +"} +(10,1,1) = {" +i +i +i +i +i +i +i +i +b +b +b +b +b +b +b +b +b +i +i +i +i +i +i +i +i +"} +(11,1,1) = {" +i +i +i +i +i +i +i +i +b +b +c +f +f +o +q +b +b +i +i +i +i +i +i +i +i +"} +(12,1,1) = {" +i +i +i +i +i +i +i +i +b +b +e +f +f +f +r +b +b +i +i +i +i +i +i +i +i +"} +(13,1,1) = {" +i +i +i +i +i +i +i +i +b +b +f +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(14,1,1) = {" +i +i +i +i +i +i +i +i +b +b +g +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(15,1,1) = {" +i +i +i +i +i +i +i +i +b +b +f +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(16,1,1) = {" +i +i +i +i +i +i +i +i +b +b +j +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(17,1,1) = {" +i +i +i +i +i +i +i +i +b +b +k +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(18,1,1) = {" +i +i +i +i +i +i +i +i +b +b +l +f +f +f +s +b +b +i +i +i +i +i +i +i +i +"} +(19,1,1) = {" +i +i +i +i +i +i +i +i +b +b +b +f +f +p +b +b +b +i +i +i +i +i +i +i +i +"} +(20,1,1) = {" +i +i +i +i +i +i +i +i +i +b +b +b +f +b +b +b +i +i +i +i +i +i +i +i +i +"} +(21,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +b +f +b +i +i +i +i +i +i +i +i +i +i +i +"} +(22,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +b +f +b +i +i +i +i +i +i +i +i +i +i +i +"} +(23,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +b +f +b +i +i +i +i +i +i +i +i +i +i +i +"} +(24,1,1) = {" +i +i +i +i +i +i +i +i +i +i +i +b +m +b +i +i +i +i +i +i +i +i +i +i +i +"} +(25,1,1) = {" +i +i +i +i +i +i +i +i +i +i +n +h +n +h +n +i +i +i +i +i +i +i +i +i +i +"} +(26,1,1) = {" +i +i +i +i +i +i +i +i +i +n +n +n +h +n +n +n +i +i +i +i +i +i +i +i +i +"} +(27,1,1) = {" +i +i +i +i +i +i +i +i +n +n +n +n +n +n +n +n +n +i +i +i +i +i +i +i +i +"} +(28,1,1) = {" +i +i +i +i +i +i +i +n +n +n +n +n +n +n +n +n +n +n +i +i +i +i +i +i +i +"} +(29,1,1) = {" +i +i +i +i +i +i +i +n +n +n +n +n +n +n +n +n +n +n +i +i +i +i +i +i +i +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm index 0494353243..506e689372 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrath.dmm @@ -1,270 +1,270 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface) -"b" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/surface/outdoors) -"e" = ( -/obj/structure/spawner/nether, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface) -"q" = ( -/turf/closed/mineral/strong/wasteland, -/area/lavaland/surface/outdoors) - -(1,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} -(2,1,1) = {" -b -b -b -b -q -q -q -q -q -q -q -b -b -b -b -"} -(3,1,1) = {" -b -b -q -q -q -a -a -a -a -a -q -q -q -b -b -"} -(4,1,1) = {" -b -b -q -a -a -a -a -a -a -a -a -a -q -b -b -"} -(5,1,1) = {" -b -q -q -a -a -a -a -a -a -a -a -a -q -q -b -"} -(6,1,1) = {" -b -q -a -a -a -a -a -a -a -a -a -a -a -q -b -"} -(7,1,1) = {" -b -q -a -a -a -a -a -a -a -a -a -a -a -q -b -"} -(8,1,1) = {" -b -q -a -a -a -a -a -e -a -a -a -a -a -q -b -"} -(9,1,1) = {" -b -q -a -a -a -a -a -a -a -a -a -a -a -q -b -"} -(10,1,1) = {" -b -q -a -a -a -a -a -a -a -a -a -a -a -q -b -"} -(11,1,1) = {" -b -q -q -a -a -a -a -a -a -a -a -a -q -q -b -"} -(12,1,1) = {" -b -b -q -a -a -a -a -a -a -a -a -a -q -b -b -"} -(13,1,1) = {" -b -b -q -q -q -a -a -a -a -a -q -q -q -b -b -"} -(14,1,1) = {" -b -b -b -b -q -q -q -q -q -q -q -b -b -b -b -"} -(15,1,1) = {" -b -b -b -b -b -b -b -b -b -b -b -b -b -b -b -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface) +"b" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) +"e" = ( +/obj/structure/spawner/nether, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface) +"q" = ( +/turf/closed/mineral/strong/wasteland, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +"} +(2,1,1) = {" +b +b +b +b +q +q +q +q +q +q +q +b +b +b +b +"} +(3,1,1) = {" +b +b +q +q +q +a +a +a +a +a +q +q +q +b +b +"} +(4,1,1) = {" +b +b +q +a +a +a +a +a +a +a +a +a +q +b +b +"} +(5,1,1) = {" +b +q +q +a +a +a +a +a +a +a +a +a +q +q +b +"} +(6,1,1) = {" +b +q +a +a +a +a +a +a +a +a +a +a +a +q +b +"} +(7,1,1) = {" +b +q +a +a +a +a +a +a +a +a +a +a +a +q +b +"} +(8,1,1) = {" +b +q +a +a +a +a +a +e +a +a +a +a +a +q +b +"} +(9,1,1) = {" +b +q +a +a +a +a +a +a +a +a +a +a +a +q +b +"} +(10,1,1) = {" +b +q +a +a +a +a +a +a +a +a +a +a +a +q +b +"} +(11,1,1) = {" +b +q +q +a +a +a +a +a +a +a +a +a +q +q +b +"} +(12,1,1) = {" +b +b +q +a +a +a +a +a +a +a +a +a +q +b +b +"} +(13,1,1) = {" +b +b +q +q +q +a +a +a +a +a +q +q +q +b +b +"} +(14,1,1) = {" +b +b +b +b +q +q +q +q +q +q +q +b +b +b +b +"} +(15,1,1) = {" +b +b +b +b +b +b +b +b +b +b +b +b +b +b +b +"} From ab8b7cd57f6ee5ab152cca8e0d25c269fbd2634e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Aug 2021 12:15:46 -0500 Subject: [PATCH 47/98] Automatic changelog generation for PR #14977 [ci skip] --- html/changelogs/AutoChangeLog-pr-14977.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14977.yml diff --git a/html/changelogs/AutoChangeLog-pr-14977.yml b/html/changelogs/AutoChangeLog-pr-14977.yml new file mode 100644 index 0000000000..2c2b3f9563 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14977.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - bugfix: "The debrained overlay actually shows for brainless corpses now instead of showing a blue error." From e3d7b3adc5cd97ec00c0d712eb09a025faca6069 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 3 Aug 2021 15:10:09 -0500 Subject: [PATCH 48/98] Automatic changelog generation for PR #14951 [ci skip] --- html/changelogs/AutoChangeLog-pr-14951.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14951.yml diff --git a/html/changelogs/AutoChangeLog-pr-14951.yml b/html/changelogs/AutoChangeLog-pr-14951.yml new file mode 100644 index 0000000000..aec4109c94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14951.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "legs are no longer awful" From d4dc10b29baaaef126a3a8d5c72dbf54911f998a Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Tue, 3 Aug 2021 16:29:08 -0700 Subject: [PATCH 49/98] error fixin' --- code/modules/power/supermatter/supermatter.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index aebe68a794..59e42c250a 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -446,7 +446,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Prevents huge bursts of gas/heat when a large amount of something is introduced //They range between 0 and 1 for(var/gasID in gases_we_care_about) - if(!(gas_id in gas_comp)) + if(!(gasID in gas_comp)) gas_comp[gasID] = 0 gas_comp[gasID] += clamp(max(removed.get_moles(gasID)/combined_gas, 0) - gas_comp[gasID], -1, gas_change_rate) @@ -474,7 +474,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Effects the damage heat does to the crystal. dynamic_heat_resistance = 0 //We multiply this with power to find the rads. - power_transmission_bonus = 0 + var/power_transmission_bonus = 0 var/powerloss_inhibition_gas = 0 var/radioactivity_modifier = 0 for(var/gasID in gas_comp) From ac577c769997844759f9e01d1ce084751c63902a Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Tue, 3 Aug 2021 17:19:02 -0700 Subject: [PATCH 50/98] adds powermix to the list of accepted SM properties, whoops --- code/modules/power/supermatter/supermatter.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 59e42c250a..37d96b65ea 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -15,7 +15,7 @@ /datum/auxgm/proc/add_supermatter_properties(datum/gas/gas) var/g = gas.id var/list/props = src.supermatter - if(gas.heat_penalty || gas.transmit_modifier || gas.radioactivity_modifier || gas.heat_resistance || gas.powerloss_inhibition) + if(gas.powermix || gas.heat_penalty || gas.transmit_modifier || gas.radioactivity_modifier || gas.heat_resistance || gas.powerloss_inhibition) props[HEAT_PENALTY][g] = gas.heat_penalty props[TRANSMIT_MODIFIER][g] = gas.transmit_modifier props[RADIOACTIVITY_MODIFIER][g] = gas.radioactivity_modifier From d0d1b05298dc4eb1250ac9b779b56e0bde8d7c34 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 4 Aug 2021 00:22:20 +0000 Subject: [PATCH 51/98] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 6 ++++++ html/changelogs/AutoChangeLog-pr-14951.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14977.yml | 4 ---- 4 files changed, 16 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14951.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14977.yml diff --git a/html/changelog.html b/html/changelog.html index 4dcf10a8bd..acc7e53615 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,16 @@ -->
GoonStation 13 Development Team From bf5cd292b55acee8efcb35e499c6018bd69161ea Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 5 Aug 2021 20:02:41 -0500 Subject: [PATCH 62/98] Automatic changelog generation for PR #14983 [ci skip] --- html/changelogs/AutoChangeLog-pr-14983.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14983.yml diff --git a/html/changelogs/AutoChangeLog-pr-14983.yml b/html/changelogs/AutoChangeLog-pr-14983.yml new file mode 100644 index 0000000000..84867f45af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14983.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Monstermos is back" From 24bf742298bfade9f0319dce94e75f2bdb94f65e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 5 Aug 2021 22:42:24 -0500 Subject: [PATCH 63/98] Automatic changelog generation for PR #14975 [ci skip] --- html/changelogs/AutoChangeLog-pr-14975.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14975.yml diff --git a/html/changelogs/AutoChangeLog-pr-14975.yml b/html/changelogs/AutoChangeLog-pr-14975.yml new file mode 100644 index 0000000000..b493f6a9a4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14975.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - bugfix: "The black dress, pink tutu, the bathrobe, the kimonos, and the qipaos no longer have a missing pixel when wearing them with the feminine bodytype. They're also no longer adjustable (they have no sprite for the adjusted variant and therefore it would just make an error if someone did that.)" From efa7c068b51d67eb9e6bdc8c77075940d28a5dc8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 6 Aug 2021 18:20:49 -0500 Subject: [PATCH 64/98] Automatic changelog generation for PR #14984 [ci skip] --- html/changelogs/AutoChangeLog-pr-14984.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14984.yml diff --git a/html/changelogs/AutoChangeLog-pr-14984.yml b/html/changelogs/AutoChangeLog-pr-14984.yml new file mode 100644 index 0000000000..e679d08172 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14984.yml @@ -0,0 +1,6 @@ +author: "Putnam3145" +delete-after: True +changes: + - balance: "Supernova rad storms are now half as likely per tick +tweak: Supernovae don't announce they're ending if they never announced they're starting +tweak: Supernovae say explicitly no rad storms can happen if they can't" From b93e3f68b2dbd5c983ca01cef4bb7ad990df1f47 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 7 Aug 2021 00:22:33 +0000 Subject: [PATCH 65/98] Automatic changelog compile [ci skip] --- html/changelog.html | 25 ++++++++++------------ html/changelogs/.all_changelog.yml | 11 ++++++++++ html/changelogs/AutoChangeLog-pr-14975.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14983.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14984.yml | 6 ------ 5 files changed, 22 insertions(+), 28 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14975.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14983.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14984.yml diff --git a/html/changelog.html b/html/changelog.html index 0a3990b3ba..914c10c8a3 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,17 @@ -->
+

07 August 2021

+

BlueWildrose updated:

+
    +
  • The black dress, pink tutu, the bathrobe, the kimonos, and the qipaos no longer have a missing pixel when wearing them with the feminine bodytype. They're also no longer adjustable (they have no sprite for the adjusted variant and therefore it would just make an error if someone did that.)
  • +
+

Putnam3145 updated:

+
    +
  • Supernova rad storms are now half as likely per tick tweak: Supernovae don't announce they're ending if they never announced they're starting tweak: Supernovae say explicitly no rad storms can happen if they can't
  • +
  • Monstermos is back
  • +
+

05 August 2021

Putnam3145 updated:

    @@ -583,20 +594,6 @@
    • Pools are capable of mist at lower temperatures
    - -

    05 June 2021

    -

    Arturlang updated:

    -
      -
    • float sanity now makes it not actually run if it's actively being thrown
    • -
    -

    coderbus13 updated:

    -
      -
    • Pubby's toxins injector now starts at 200L, like it does on other maps
    • -
    -

    zeroisthebiggay updated:

    -
      -
    • light floppy dog ears
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 5be8df32c0..afdc1928f8 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29773,3 +29773,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2021-08-05: Putnam3145: - bugfix: organs decay again +2021-08-07: + BlueWildrose: + - bugfix: The black dress, pink tutu, the bathrobe, the kimonos, and the qipaos + no longer have a missing pixel when wearing them with the feminine bodytype. + They're also no longer adjustable (they have no sprite for the adjusted variant + and therefore it would just make an error if someone did that.) + Putnam3145: + - balance: 'Supernova rad storms are now half as likely per tick tweak: Supernovae + don''t announce they''re ending if they never announced they''re starting tweak: + Supernovae say explicitly no rad storms can happen if they can''t' + - rscadd: Monstermos is back diff --git a/html/changelogs/AutoChangeLog-pr-14975.yml b/html/changelogs/AutoChangeLog-pr-14975.yml deleted file mode 100644 index b493f6a9a4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14975.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BlueWildrose" -delete-after: True -changes: - - bugfix: "The black dress, pink tutu, the bathrobe, the kimonos, and the qipaos no longer have a missing pixel when wearing them with the feminine bodytype. They're also no longer adjustable (they have no sprite for the adjusted variant and therefore it would just make an error if someone did that.)" diff --git a/html/changelogs/AutoChangeLog-pr-14983.yml b/html/changelogs/AutoChangeLog-pr-14983.yml deleted file mode 100644 index 84867f45af..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14983.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - rscadd: "Monstermos is back" diff --git a/html/changelogs/AutoChangeLog-pr-14984.yml b/html/changelogs/AutoChangeLog-pr-14984.yml deleted file mode 100644 index e679d08172..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14984.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - balance: "Supernova rad storms are now half as likely per tick -tweak: Supernovae don't announce they're ending if they never announced they're starting -tweak: Supernovae say explicitly no rad storms can happen if they can't" From 7b9a6611270e86a9bb2ae7dfcde846f7a6ed35bc Mon Sep 17 00:00:00 2001 From: Cognition Date: Sat, 7 Aug 2021 05:38:28 -0700 Subject: [PATCH 66/98] Old Gateway animation return --- code/modules/awaymissions/gateway.dm | 6 ++++++ icons/obj/machines/gateway.dmi | Bin 11967 -> 21318 bytes 2 files changed, 6 insertions(+) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 551c1c5536..c67bbb8a4d 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -205,6 +205,12 @@ GLOBAL_LIST_EMPTY(gateway_destinations) deactivate() return +/obj/machinery/gateway/update_icon_state() + if(target) + icon_state = "on_old" + else + icon_state = "portal_frame" + /obj/machinery/gateway/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE) return diff --git a/icons/obj/machines/gateway.dmi b/icons/obj/machines/gateway.dmi index 5ba943bb896bb68ae831e43a5286d9254e6c39c5..99a74a68bc96227ee38af4dc22d027ecaa4b04a4 100644 GIT binary patch literal 21318 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 b42f2|Q)V?g_Qe3mNC&B_Xen1ITEG8a;Enoc From 9b3a3d81d33ad2f786e875e385b6b0047401311b Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 7 Aug 2021 22:18:06 +0100 Subject: [PATCH 67/98] yes --- code/modules/mob/living/carbon/human/species_types/felinid.dm | 2 +- code/modules/mob/living/carbon/human/species_types/humans.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 6327375bb5..eee5757b46 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -4,7 +4,7 @@ id = SPECIES_FELINID limbs_id = SPECIES_HUMAN - mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None") + mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None", "mam_body_markings" = list()) mutantears = /obj/item/organ/ears/cat mutanttail = /obj/item/organ/tail/cat diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index d0f6c64550..e0558e6533 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -4,7 +4,7 @@ default_color = "FFFFFF" species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS_PARTSONLY,WINGCOLOR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade") + mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade", "mam_body_markings" = list()) use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM skinned_type = /obj/item/stack/sheet/animalhide/human disliked_food = GROSS | RAW From 33e1ac1308ec67909cc64e722b58e42e394a9849 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 7 Aug 2021 22:30:43 +0100 Subject: [PATCH 68/98] Update bugmen.dm --- code/modules/mob/living/carbon/human/species_types/bugmen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm index c649339fe3..f87f425b5f 100644 --- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm @@ -6,7 +6,7 @@ species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None", - "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None") + "insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None", "mam_body_markings" = list()) attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' From 9457b6b3e2a08e173348e8e0511dbbdbae4a4bc3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 8 Aug 2021 00:25:04 +0000 Subject: [PATCH 69/98] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 914c10c8a3..a295e5279c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -588,12 +588,6 @@
  • Fixed an exploit allowing you to grab people from anywhere with a clowncar.
  • revenant essence objective reduced
  • - -

    06 June 2021

    -

    bunny232 updated:

    -
      -
    • Pools are capable of mist at lower temperatures
    • -
    GoonStation 13 Development Team From 9207b108043f6dedff18f15705d15a1f0b63fa3f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Aug 2021 06:06:21 -0500 Subject: [PATCH 70/98] Automatic changelog generation for PR #14971 [ci skip] --- html/changelogs/AutoChangeLog-pr-14971.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14971.yml diff --git a/html/changelogs/AutoChangeLog-pr-14971.yml b/html/changelogs/AutoChangeLog-pr-14971.yml new file mode 100644 index 0000000000..02388f97d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14971.yml @@ -0,0 +1,6 @@ +author: "Arturlang" +delete-after: True +changes: + - bugfix: "Nanite machinery overlays should now work properly" + - code_imp: "screen objects are now atom/movables instead" + - code_imp: "Update appearance is used for updating atoms now instead of update_icon and such" From f3363c7b4e8106eceb07ec0961e27e69945638ac Mon Sep 17 00:00:00 2001 From: bunny232 Date: Sun, 8 Aug 2021 09:05:47 -0400 Subject: [PATCH 71/98] Update skin.dm --- code/datums/diseases/advance/symptoms/skin.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/datums/diseases/advance/symptoms/skin.dm b/code/datums/diseases/advance/symptoms/skin.dm index d7a457aec1..1593d108a6 100644 --- a/code/datums/diseases/advance/symptoms/skin.dm +++ b/code/datums/diseases/advance/symptoms/skin.dm @@ -32,10 +32,8 @@ BONUS var/mob/living/M = A.affected_mob switch(A.stage) if(5) - var/static/list/banned_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/invisible, /datum/reagent/colorful_reagent/crayonpowder/white) - var/color = pick(subtypesof(/datum/reagent/colorful_reagent/crayonpowder) - banned_reagents) if(M.reagents.total_volume <= (M.reagents.maximum_volume/10)) // no flooding humans with 1000 units of colorful reagent - M.reagents.add_reagent(color, 5) + M.reagents.add_reagent(/datum/reagent/colorful_reagent, 5) else if (prob(50)) // spam M.visible_message("[M] looks rather vibrant...", "The colors, man, the colors...") From 1d0f1a56ddd2fb5414b36d144c0b805294a385ec Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 8 Aug 2021 13:00:44 -0300 Subject: [PATCH 72/98] Upload files --- .../antagonists/changeling/changeling.dm | 18 +++++++--- .../changeling/powers/tiny_prick.dm | 2 +- .../changeling/powers/transform.dm | 33 ++++++++++++++---- icons/mob/radial.dmi | Bin 18359 -> 18236 bytes 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 843e5c6db2..9df2bef563 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -297,9 +297,15 @@ prof.socks = H.socks prof.socks_color = H.socks_color - var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") - for(var/slot in slots) - if(slot in H.vars) + var/datum/icon_snapshot/entry = new + entry.name = H.name + entry.icon = H.icon + entry.icon_state = H.icon_state + entry.overlays = H.get_overlays_copy(list(HANDS_LAYER, HANDCUFF_LAYER, LEGCUFF_LAYER)) + prof.profile_snapshot = entry + + for(var/slot in GLOB.slots) + if(istype(user.vars[slot], GLOB.slot2type[slot])) var/obj/item/I = H.vars[slot] if(!I) continue @@ -518,6 +524,9 @@ var/socks var/socks_color + /// Icon snapshot of the profile + var/datum/icon_snapshot/profile_snapshot + /datum/changelingprofile/Destroy() qdel(dna) . = ..() @@ -535,13 +544,14 @@ newprofile.underwear = underwear newprofile.undershirt = undershirt newprofile.socks = socks - + newprofile.profile_snapshot = profile_snapshot /datum/antagonist/changeling/xenobio name = "Xenobio Changeling" give_objectives = FALSE show_in_roundend = FALSE //These are here for admin tracking purposes only you_are_greet = FALSE + antag_moodlet = FALSE /datum/antagonist/changeling/roundend_report() var/list/parts = list() diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index a8fe56aae7..9bda1bf5b9 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -78,7 +78,7 @@ if(changeling.chosen_sting) unset_sting(user) return - selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") + selected_dna = changeling.select_dna() if(!selected_dna) return if(NOTRANSSTING in selected_dna.dna.species.species_traits) diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 8e3a36740b..cfd42f05cf 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -134,7 +134,7 @@ //Change our DNA to that of somebody we've absorbed. /obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA") + var/datum/changelingprofile/chosen_prof = changeling.select_dna() if(!chosen_prof) return @@ -142,15 +142,21 @@ changeling_transform(user, chosen_prof) return TRUE -/datum/antagonist/changeling/proc/select_dna(var/prompt, var/title) +/** + * Gives a changeling a list of all possible dnas in their profiles to choose from and returns profile containing their chosen dna + */ +/datum/antagonist/changeling/proc/select_dna() var/mob/living/carbon/user = owner.current if(!istype(user)) return - var/list/names = list("Drop Flesh Disguise") - for(var/datum/changelingprofile/prof in stored_profiles) - names += "[prof.name]" + var/list/disguises = list("Drop Flesh Disguise" = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_drop")) + for(var/datum/changelingprofile/current_profile in stored_profiles) + var/datum/icon_snapshot/snap = current_profile.profile_snapshot + var/image/disguise_image = image(icon = snap.icon, icon_state = snap.icon_state) + disguise_image.overlays = snap.overlays + disguises[current_profile.name] = disguise_image - var/chosen_name = input(prompt, title, null) as null|anything in names + var/chosen_name = show_radial_menu(user, user, disguises, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 40, require_near = TRUE, tooltips = TRUE) if(!chosen_name) return @@ -158,6 +164,21 @@ for(var/slot in GLOB.slots) if(istype(user.vars[slot], GLOB.slot2type[slot])) qdel(user.vars[slot]) + return var/datum/changelingprofile/prof = get_dna(chosen_name) return prof + +/** + * Checks if we are allowed to interact with a radial menu + * + * Arguments: + * * user The carbon mob interacting with the menu + */ +/datum/antagonist/changeling/proc/check_menu(mob/living/carbon/user) + if(!istype(user)) + return FALSE + var/datum/antagonist/changeling/changeling_datum = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling_datum) + return FALSE + return TRUE diff --git a/icons/mob/radial.dmi b/icons/mob/radial.dmi index e6810691315f5a763558e17e904681da6ecb75b9..27b268eea0adbea27e56269db15cdb4cd885c8d6 100644 GIT binary patch literal 18236 zcma%j2T&Bz^X8C2at4VKL?ug>upm)Hf=H0G1SLnwX?Fq1QIMQLL_l(sEE!3Hh7wTshNE<@6Ei|{dM;@-9&0@s*>Kje-8iv(idtt|VrJ;b?e z>sotiYkl&2FvHCgmRtHtP`D&yV#+!~^!WTH*Hr?ymg|hN zTh2Wo2J-zmn|^%FP)wqZN~X^2F;J_ovdc=DOTT5VKg@VJK%ddmT@3AZkW8i+#a%F= zS{z{R>25|2;)ltCKWv4h0UfV%1gnq?y_b)WKV*c`lT4zv)kjGMKAwoi>13_z1+YzX zXi%97ZE?)huA7J}^|?MFN0-~*<_skoa8f+`R6U@UCN%PLbN2jo+@C9oT7D~y66BL~ z8agG%_ewFhk_QbSQH_*hw5GVwT-RT+hnGUvQN?w5I>+F@Uu1R+jJosfCEt*Sm#%7y zF_(rZPWgNjb8HVAnW?(IFAnbBbXW|)F}62n_MVcEnHl5r95rMRsl;-FKBPW(Q()?VvLjU$bFs^(NQDpvm5DeFZPi;ionHdZkS3$9>E+T0TsCl!=JepR-M!0NxaR07D&S;r z&cCuPw|>S9(U^NKASNyz%pNiM*ATv~+ExcuP`RWwn(2xZ>?;*N_T2mb#3 z%WQ8a zm1UIBQ^c&Vqj9t(*51E=HLgq-tM!2#Qj!qlw;3GSblGXzH-{5fRogj5i_^CigCy^`g>`ue%jW9#7jcCH}G zDO2CziEk)UuE>dd0B6#oDn5P3$J0BvzNjE)jv%H!;go-AQd@p|)tg-V?DpTT#7s&` zihcy*ykUx+TsxN@ff!?Zx^f-)9miZXHIx3(&!@bk{ZmJ&k?(fS29w#B+qh*;vN@c| zUEz_B^~4~5n0oJYO^q_`&lM#;!wa7n@8TJ_7U>BwV@!f0US{n+uGl7Ns8&!u>EX0Wo;*)Tqewt(O4|A z0ixmaKb3x~IaJ>Ni*+9+Bi|)38MYtUjacMJmyxdqgWbO^xtiwQHFlD_ohUL#tg6=d zzyg-oPLZ(u@dxkUM?d*KiIYfR3!DH%Eh{z^tB?7ZL4Cx6LT_c{H&MrH{S9wr?-nA| z=zo0{3r|1wKVGOk8?9gDGDi_TO20>ZuE%j`Y}_f0A&lQys~#De&rx%c{|5eIQAM)* z1*n@E`%roaTHl@ma|5JBbEZCrl~R+es4=DAQ9Np_d2*Lt-np@HxWek}LTlAOb0ald z{SGk;8FII_1>^0oOFp>k@qbqK)kP$((4Y9RXtz=ui|sW-$C*af^10Sd1UnZ zgk%tBGH7bhkder8OIwni!_h?s{qZZ|$tlZ(w&Zj24qw>!v>|%$-jwA6bA>m!Z&hul zCA(x4#^a0}gnePps`71@mTcH?@^*_u-cP^o5Ah#QpAdVO?o>RmPi6 zFmUns9A(8Zpq19CmGh)v+8{wjp5@;zG@D;TwMe>kWOV175<(@ck#uXPiqQW!lVG3^ zUGuE7udmMt5=O6sd;Q||oE)XuBjvj_e(|8XZFIx|A)~&o=WE;E{ zG?z5YH>^{eg`M~0e)`pC%rc8lHrxN!7#R$Q%gD30R|k&(-3{sC1FZ_<#BYKz?fO0V zbfqpDn#fJ8(g&l!i2p}>Qa1ao(;lLg!6X)X>H4Qx%Tcbd>J-hg-%+l(l+kRm^4vb; zap#x1_E!`w1CO%D6p0I|zvhJwhST@osQ5Pv-QY1UaL!uA*mFzTH<;H zeXpV6H!`%HWrCyZSX_zZ)naKqf>JL$$%QJ&64+zpgC%6tQl7~dvy&&VM||cU*(IdF zRq(+hVppJeO#GjHv^A$1MnCVhhl_#ENzj=f0oH{EJI|siF=<`KlnXx8EYf<-@0&Ve zn~}mRPqa9P7MXP^ikFaUkFT9mq-U4IUvBkL*l_+7eJ%RFBl+TSC=X$6l}t~=bwJ-C z^=ZL`6hv7UxSnH}yub^gF1$C^&fw_!6gtf36&T2%vTjklq|_duzB7!TS+MCB0jOS* zOXtcS;b`|x7HDS&Ok@02=-TmA8+ui-zb;hdQ65n+DozBCTJrAM$kaEKDuNgC+ z)B+|?a;F;@I^Lap{QUbDxb@-ONNs+~v`TKy7fyzU_G^NgUSqA7JPmRS?{&+=gNzpIWaP`-gp%kd9p^qhG-FS(zj{r;rfJtP zMFle~cmf6+6wWY(qAMGm-l-6& zw=+F6+}Mg>a8V$irX!d`d=A+VV2x|!{Cef5 z?b_=51kzQBbZe&#^WpRe)pQPN;LJ?f}#?R9&*z>|P@y+ykE`U)?H5yjmyhYZF2 z7c=njI)ZO{a^7XdE%Rzv5{~|M@W^I?!YWn(Ig^V%X_5UE6dzCT=GuMN&u8;XBO1QW zKV@{P`!#0dj_|u~f`6)Y=t=*1UM?_6#*`u>U$4(zyxP%Z*+w9}`GsetKCoV2>bP;~ zsC+D7Je*&3dm44>wz|Hq$NYJ(WgJ`Z;198bs!ZA+PQPT0kA@jlbydAp=DB13tppi_ zVa45+;GjD%Y1h7S`g_@uk#2i?#Y2Xy2y@qh!t@G^8;0is{_g$vvbL&wP_D4Ly1D_g zr4&h_`{Sf6QkU3ru^5$qVjubbEb%9>Jk8r)iWuvRm8?25k9J>h%De=WU8({CO-Xaf zj4bve2u^Q5R}4=4-O-EYjSj|h;FVqjPr8PcmJ4ynyaW3TA`jfK3tQh(SuUz>@wtf@Q^ z%8C)I%`^fd2#RK~g1q$s)|)3G(MRbM2R9Vlh`n9|D(+$#`O5uTL0)uMZPU?mI5jH; zxUpwt|1N3>==ujrKH~C9GLRV|B?3@T&@EI^GcX8g>A{{()(RLvplrOrn&+BXTo$S}+&nE>*c9qt~ zCA8DAl0H~1E}M8ywGyTx8J$?={?RFV8K#R0`aJyv zD{DV~D>)D%OHuSp4U*a0TjF!%wzB)Kr#(nB8pwU9xm*k0Z;4I2TpIP3|C0M)$bC3v zn=+%`#g0!%@I&hi0ZC+mX>HfHUd6>N>(FZYi{5ne9uh*y%uP#XLs@d^hojo-eWyo$ zTxw6&`V7s*T8ub#3?FwoGV@`4(Pe^#+NgtA#D@~`}1@_UXn zmc+~pTHtqEnC6Fsl~oHkV%#wG$+iU!9Qo^W-7g;nlqhglpMLGb=2hrYrBJG|^x+dy zpy+W8!M!u9I0X*+UXG4P>F2g>VuzT^7g{KAyY^5aL3ggje)FI#+2=QE^p(2F^n z4HV+i>gH_c>S{e+$7?J5(IY-wppFd`cVhtV-5V0@hXx#BIse$8YenB8qAV&}Pt^C8 zTIm0Lebt>K>#uEU>NE-QLEoYt9Ui3EtHe-L^3QbKlzKp21WRvjs=Us&7MBbSZOnXmw`AaAmP%($)p zP36e1F0F|_POqRmC*VJ9%YBDTu}dI;?``wsbbMc}mTZx&u^zCW18+QrZ{tC?3_~gWibh8FM{_~(pVHI6?$M7lvnDw=;}kxB@b~YA zg_2|pWI!!-;`fX{ovCRyAsrn@OB;@ql+?h$fIP#~3HDW_JgB)@lS85s;MB@iIf$TC zV-vy0!}}#7#rxB&{rh)56aW2sNslWbGPfPK{rZ`{k2Ck&dy7)nl28a?_e~Ami=md5 zqD6UNsM}&C*`T0b1t)YU=%NID;X-xrLp24)n>uuYi2ydV*k7muGFftPGt~Yl)U)ic8!3J8Q$6G&mCy7E9E!F|6S4?im2`0XJ3xt<$v65`3VK+74T7;P z4e|)q43w=9S5?R#k&7?}`r8akna|Uz_3D0p&-&iktZR5TS~tm?KVmdCHg@awoO$3q z%pji#J3CY2fTjP`i1`f5(qT+s$C@ydZwGv@ueY}u!mIdJ)l})p*hp8y-lFk<-!r-7 zQX<5;(B)uRmM!-BMh8f_a#Y6&?Ld0^!02cnMyd)BHltaQA~vJna*AnKfz9FckenRW z?hABDvFben?18bt&Wma4anvc#Mt)&gB@58rgoZ3Drm+_nZP3S%#>_AK6&PTDB?V45 zwU{q+f5gT<1tj?)eqERPD3xxrys0zvwhLNZ06EfeP3nwa#c7^jWuthDmi1|3Gym2|P-mG(Yc-VHf-eKmK|Ha@n-?dAEG0_o9NitHSLGRiZ%Dzz9QGQGj@o5 zeas9w_p{QOj*Fg#wzPo&wU^O#l;@Y1OwS-Iomh*{pmHj)_wgR{lYWqNobxiUp;s3W z?241kO;$_i6y}g-Vyubzlijbb@-F`8&S{_;Q*vn1zN$JlXD!9RsEXgAlm{#5b?_PR zY%E7HgE?%`zeb7m6XSZ({Rbcr+vT!T z$DG3FTcDX5LA1}A?T+fwQt@;g>yjW={4c6oUg>B~|aI;muaHnH4+q+7fm-m1n_x2Cmr+a|EH^KIHy_X!egWRIaV9iT3DBi@1 z>IV?A^5tmtocv4=FR$lh;cn+s23G9MD(w8EJ3BimM(OwN-Ae##!&=?e6U5dSM#H)X zq`jHhI%;Wu{P-c9UeeLQmYtm~DQmcsm6;hmClNqvQxh!deM8gtE?xniKDO7Q6aDUS z>lb}NygUMVJQx@tR7{cJkZq$&3;^U~Y&D+Ah&vYFq|?f=ikRgs4I_>eyDg|kpdEqh zMGVKMBF(IMDXGO0S$z%M3q3s`po%93;9UWVVx#-23d(mC}J$s|ZoD2Mj$X(Bz}UZ>rWkIB#wa=?KVKdp-{) z311gP13*v=iF_hER!a0w3}Pp65d{TDd#}yrQ|S-qG2w``^L^YcqcP7XyP0~RXmC>UXrbMW{@`4#%4 z{`k-1izr>9D+@_xR;(3$Le`aQ$`1zkK-pUH!+;qRs-5Mo9-s$15QquptR;{PyPkfV-aeMm;kW5cOwI= z`r~5fobBgnmqvdv1j(}lL{Bs1u5^iD+t(^mGF8-_GwT=c^B);y1zvBYTKz-UjS9b1 z)uF!^8n~})S`#2j{UZp53&0%?5}-1EqPm}rr3Lnzb!4`-ue1+)zm}KLdmgrWs$DUB z-zM(y3(~mqiSY|k`IB3TMpPglYTnxlFo00EoH^@b)m|U=+K5~Bc|vhWHbIoN*YU^Q zY!x*gIXa?c-;hs7n(2=dxFTt*MX&d2$6PU9h}B82zL|(8c7l+zqj+B|F(;?L=qMdc zp6$(hNzZ?8-s}N+O+K2UBG{cJy2VF32Wq?dpHsr>C<_xLATpyF+XRxH&TM@q6mWvw z`D<#|8-|&C2u&_Nt6@CqDzAN`A5BdR!0*Y)j|&F(wiwJuojQwFH3Qi9z(QYjoo}uk zc6^NwQ{PLOMEEghx-)SByI<;piUoHLNtPPC_G6^nH<2NHL%bOo87KEc`kz6_%@;GH zi*u1G=Vr1C_Fer-arAOxg4#6gCkRWYZQmg43FxRq*om#q6@xSN1aw!gALe2L0Fotk zVss+^eQE~(c{UMMU&r@rfF>&{1VqJ9gG!FErn*FbJkQL^?`<@o_VyfsPbp?%mu(n3 z0)||3KLiH|-}!Vc8mf$h4MYMYe)h^*K<lLiu7`Z?dG^Z~H4uTb8q) zdH$1s@nY~VT+ncV4Deek<_d`Ih-Kz&lbWv8J;mOId=&`b&&A;fldyP~k_ic*2;^!4 z_&Kiy|6QXh9yDtW;?yOg<5*>bL2c-Uol~FNfAhw|kXFBN`)=$36{{*bgCf0jLk6B1 z{PSP!RJnl{jLywF4~H|vc#Za6y?m)C$*h90l-NN4=C2C}N2ujO9SjB4JXOu#j!Kul z+=m-r>|J!u`h(tQplZ#{__6Xix!)j|$750hGg+Ih3PFffDccG?DdWH>YxtaZ&jF}P zjA4fIGCC|~`*3g14H#Wr`5Cgky)BR7Vuz)mftA9DmImzobsovN| zOE~f0<#$FDSCz>t+>HN%s2i0+$24w0o@+OEgFEJd#8C!oIoneBNo=rcBz^g*?f`V{ z{QCvYFsn4(7MtzQy)fl*OOK((EuJK??51nPZN z87x`foPDh(et4j_x(%T|(X{(`>Kd!s^XXeg&H@3b|Bwwg><7f~6Nh1d1Dv}t6r)I~ zbZ*Kk6l9L1*Z`!-h0QA^r7zbCrbc;XZbI4gw>0EYnmZPkd}0vK@jcdbcczT@QUSHN zb{9n_`S7-7p2nAn9;@V+`z@z!OfHK*M@RfmZ?X^er z&oq%5w!h=NPf6JW^|c(()#zClNxFS`x*Y3Fhp`Lq(Xv3;1XOXwz;@J1*?gVqTPphM z8HimD9mzF8?)u9C+^-6sXRcj})YS0Z-vtWdXA=kRN9o;tuP}GzhziCt=dC5cu$B&8 zHG!D;xPl0ur{L}@QMOsy%ti8S2NV<~&?fpMEDgn?yI}i9>RAgin zl^xREB=BP&dtvWINC+|3M{d9+&|kFuR$XGbRfL!Q#l!*tIoSfCuOll1_Z`4X>Di{W zmq}U`=3DlW@F<@9MX~WIzxcb-J`u1+5;7g4utGco1c4$6Y`w9H&J%8?LbH5hWmERV z+s1PHo@p2I*f&&v*bLG;D$H)Fcafh@aCa^^_-K+1NtQXF=@N_3mk#*j+B>~OSOZgnJ3pA}@|J~S74sVWq zX9|8NHLuFgH^fl&oAhg28%yDW^lx`RkDjEYFxI5k*=$<6e+1sWkLjGfAbVH9R;-na z&E;O36F8m_l(QI;#!sUFheL4RW*_r6e`i=s@~3c^MoQjv!QJ{p=8xBz=#^Aqz^5~pWxtN$IPix|VT92&W(niNH$bO2 z>{E|_$W2swZ?#bCd_c(nowMHm-2P?!gtP5+_U|HuHtH)?FAp(OD3DPAby9S}KMZ_) zUTwuXk73vh=N>&DWC=~QgNv2bt zonoKNDkUq6ndIYp8jW^G9-+y2`{fDJ)1ZOW6!_*YE*87Z@6${<_i0VWO@xK%XERG% zaKYBMPw*^i9`@^zsO3E^eDv6u%P5NeWgi9Q_mpl*N(?INBkx0rC)+5D`}_Z08(k$0o9v2wppP8{M_Q34 zsZ)5^^Gk1yN(&{t{8q1dZT~ za5(6itNmhvv#HXD^+-G{&dyv7xTd62KX({bwCa5`ZD=tQK~lLF-o2WJAG^G4_VM|H zfXfzmEHUqk*I%}o=H&g1jNWlYC}YV8zLcB`B;$OlYVk(pq2}e+)zS_`_`vK?g#d0y z=z!dKkg(Kx0wp24Rn>#97^mH7|H0pQmPk%jY1fhAm#(XL3TGMH;dlVXZWy+Bm6Nc4 zHS8@Er^JSB|IoJ%!GcYZh*AHKT!0W&|Kpzp%1?zvnTFZzfUc*mLm3AL@LNo*5<`fq znG1rp({;jY<7)vw&{ysi};S-~iK=&oB2Krs{*o&kQmMu^80R z{&79troz~{Xvq0?+tp9^%JtIr_JK#m3X?gGY_OnPtS1Oulx4jmD5?I>e3 z#Zqc&DnaW-bbesv#+ql3e2%S zcfIX>iFjM6qP&HJ+%AlFJ$)r%G5Jkr{DJfL4GCs4)sKR*EKey)$eEF~96^PuxJTEw zbXk)0FlJVO0>5cA%jyf3$JyD6hZeaZzm*Xe4Li%QGW; zjKbV~rXOsq!H#I?daAX1M^m#Ifla&r{oAvTJnw4fdcnZJAitHjoh27|A7iGQnwuo8 z0}cm!?_{h4-d~JfdL8f$4vlpm$mSOCTqS4Q zUJt(kb+-9mT4H!Uz*1IHR#@77Gsg1Dw8hI}zRoUee8HYKl})XHrBRZU;5~*P_9b{e&;M12wJ6_ri(azqsLs z^}oG3grX5PIndi{$3i#r?EJQG>$M`N^sDq2P~e;Im8NlVUCqRQBuuCBKxFS{45I`_ zq;lPGjwmfJA~mwU?W3?@?>s(Y!%IuWsc>AKX~Hru489vu>e{1Dh6LUIO+GdW)N?E@ zMFwMgq`B_L3Phb@aCv|rPPzTUvArJKxm~R2diE?1Jw>Z~wC@64NI>;Q(+^=7wVqoP z!fmaG2u1y7U}z}X_c})4SD_V%x>HK2$4SgZGx5vLs%w*c;+Gk$cUv19ZO4&DD z1vA{H(aB@dj8?JvV>Bt0em%!l`#(W?px-Jbp{SYZB>0>lWV$j-}C0LF}kNo#R z>cV#(^PbzBr4}qe#Ac*sshyQS7s^blz|+cH`3Fv@fi#jsGw2GmO&knScYnm(=!@Z$ zG2UZ`jQ4>FIGKUO!-Um~X* z@c}j^!;qH|zmwLfkbaZT|1c zsqmq*nPz%3Bqnwn&6Y0q%ib|CDcTvN?oN6~0g_h*t~q8Ssd?6;tcIm^=ErhV2ciS2 zHlnxDzmM0O_D*)>RsB6cYyyUc5x*~-Fx-0|i$rvyL}AasC(c5Srj?76rgi#Pt-n7| zPL`c*MX#uDwWIn3kKY?Jsl+kc*;X@2+*cw*C-AKi*b=TNQw#RQvA8T)zFTfJ=Fjz) z@!-1w2?~<0G%%uYaK`srTV-GiUKtp|9v2&nS;iIc2VGM@9cSvmOT;M_U5=)T&Y)B_pzI-`WI}k zkygerd$aj$VZ~)-#0zGXiW`a0zGW@BH{@4PGh86Rv*ISW7&G7ZFm2J_UH(z6pAc6a z3i{LTa>cH_zljzaTPTme_bH1j^9l?9zJj4cvED=QhsYiG4<9~Mtz3L)#k{o}Mn2wI zTR#blzBkPFS+>Z1Yczl3G`LK%4XyTDuO`+_(n)}=K`l%`gvo9d>GI!CplzAq^7m}WyuBN5c|4pY*BO7|LH)q=_)~1%kP%?HO zGa-YzUpbm~aX#MG(06G5{z|_?&i=1=G{>EktRWzO7wdkx1a}zy;1dWe=o96bp<01q?ONmw|90FTwE%P z)FMepNYXB>@$vB;t4VvjROi}k1lv!uTMC!tF+83nT~MTPk9Ae$8b+s&{i83IG@;^M z)^PAe9}D8Ec_GGUOA`En3%?#+nr-8ulA~>vzgXipX`;~6)2oPgT>&FQiRrP08jv2k zx=H-UG@7`=1!XtN8Q^e z>-C!%7#m?G6v=sgDG2>t+yh*n8{gUDHT-A%vkS*(3_upF1fOuAsDAy zO|P|HeM^1Orh&#BS&SVl-6^6ZX0>z)uBLtp-F<SJHFnVQs#Dz^zCgVfgrNR;nJl4zdTmKFSUoL6yrCId+6Px`;Mt3+$y)P^%g&2uu52?pKoNXsfHI-v= z(3rn?c?0&k_PCRA4A4c`;pGGja)Go1eES&x<-6;ZG&RT;-ODVkA%?$)Q7BY!9qc_ly7J|F?MpT zp9y09vS)9bE`Jj1ZMklZX~^LS`w_b#xQkLQIK&q|u(7M+1> zt}14I$qBZU0*+SMdc)pcdMws|&l96dU)uGA1`@*zj}bp>W(%ajTn`C(gn5Ibu&?%X zwO*Kws_oSWhFz^Kdmc_OXt^Hpu=Qz(<~| zGo>8pgqrxx{%9~?Ku+>YT~ApzFp#bKC)gLl0LJ8uT-d&?V#XKZ z$_nW1pvBUEiB{z2Z}Ry?gGv6yf^8p07i&ZkJBXotv8<vfdB<*>tS%On#rEVsYV4;Wng93Oi}ec8cZCusd}J=GKM*+i?V`Xz%9TQRW5 z(CEl=Kx8pgc)VG@UK}tx1DbA*y{V|=L#}j?SE-<6Wr_%X(ru44Pkv3agm3iUrtpPK zl;Xp2e*=)RJ=*o3QNi6#&XQ$UtBk%cILypTi%eg8e!Rf0?5!**d12X0Cf~LkdLBPX ztV#mi{=pQEtBq6H8~?NCl_0B1H)S_lrD`}A@f%$IpMq=sLiY(kJ;_I`|9I_4P5|1Y z%qz-|w68t)S{c;tHXvf!hI>-y@u%zffa#iHt ztVbK%9V0I!9j9?EBHJ(?NnJxjsUKLgl6c4;I@lCeI^SG{N&AU@>$o@)leKLLFNv68 z1J}P!fKR^{=Z8W3fBLTCSQ=DZ3g|B{G)5V~$^wjgaS4UjkAzHXzP-lS_H8b-M z7UwLk&DAf5i!oV@m0(v8uyb{3frYWN`PJ;q!8` zd4Zm1YTek|{q&2NHD2$Rlp4HKXMW>`0q0hazj*(W_SlFT;cS0UKpW&IYPNqg-t7am z7u-1_DYGGw^1gxj_^U}DD~_4QMK zBqMyrPtEpjyVEe{1!$UA)%t?5HC{K0gY+RwK7*4t8Q9f!2db23U0;noyS&V2an3?6 z39h_j3XR<+c5l~}*<{%{8i?ryVooKqI!7$43_HqFHU}4v%q0dVDGKKZ6aOV6Al+)1 z6d3m{^*5Bx4*R(P1_r4<3lB zy17-G=;>|zBHsRZ^!Pzkene_PKZE94KRcykLaHG6V4yA2j3%;v0$8q)+q79UdaU{C zD$A%%OG_JBWxwJ|4Pu96!`}qLvkdWmPd0Y~MEQ(aS@jIAT33ldt4|;?Z|D>n?&VRx zJk6k!4@;rI<_h!T6c+%v0%BGL{?l4q#Rntdet>J)OTn%n8a;~~E9NJHQ!yj;N-7MZ|FMEWP9wH09=jXrid zdQ46jmXa(_|2_})OCA`m7ICo*DCIV!yrLbGDnmHmUG008TZ61)kZcQ=+l8uzGpl8aQSaocb|B#cQ@;cNtWB=nST?2+y#zC78$&09=z!q&6Myud4Eq!04p$8H7OJs^W+TKR_|hP;~$7tIm!meQisRX!ZcQRwy*si;0I@yH@D|U?kWAz4Q|GT!H zCZ^bMvw+F9PBsy%etYJ<8mDQMf^WU!gFf3u(V2GaeZ6I8-tXQHD;@g{cHHG&-{pZX ziUTmXL1Sra4JM%_7!Jl9B|6o@F}cXUW@e^7C-YB?z>H>i`T1kb4D2#{b&>piZFO}t zv9YmXc)`879WF(P_4S_fYyC>hAcw4@@o&O+}QE>Sf4<-rQ`|C-MNUd z7du9LkTtoYrX!2wlN=o;%M8XB1VxDHn)1)8$$L*sb?eGKOplH1uVEn7{kKnwLNUH- zM8ustx9b_S=g@wbgJK1GyX-pA0&)ap+JY$|ru!^Za%} zArQ4`v{_^)OI_A5HLB}hu_jmOCX_*NR#EOLTOX*>>Q;{Yeu0eb)7r^Uw>Y0LI82+a zee(;^PA6|}`@~sd{Kj6`jY?L4J#oN~HIcH#9tAr1lD#JfTom_&5DzX0qAk zIH25tDKgqZL#}5a?%BhX)9woAee%y7@j`J z>8j!4ekocviXg;ysK80Og5Q}}7Aos9qK>@FE>+*+-B2#S5i4wn^?BpBljp@!e`Q-# zxm+LHr~I89mj<^ALorzUSBXuZhY^O+_nMbiR!tbZSnP*74f`k|f7pBV?(R-if1A=v ze?`o#72m5P<7`7*Wh67XX5HKHx_Nhw>hhSid0s?x9V=?=?M}dQ_hgO5G|nXNH5Zi% zzntH-;SkOne{@WbawAg=Tl1GYFT#0YtBq-M_ch&4$keqg|p)A3v6k{RR3 z(VDORT0R}yMpKVv<0VgDH_?Jhr3=0NvBwium5JUFQ3_1u#0}Fwf`RF#bNhT3LEPUi z7^yEM3{4>{@P@CT=`AntL&o%5mo?!TRVY>;g@WL;{n8Hrk>Y>7m z673QT%wFkPJ=5e?`6TN}gAys{d8JcO=M0;Y)O-&)w1*^uWbR@m1@LH->bS zzm+6r154O)3#_$)^xc>YK6T`W&AFA{#y5^Fm>IOx<1_e?X-{ zJlJmg2UAK0zuS9?B(kV0mRL-E35+)NgA054R79rOUfi?ce&QZRy?J!(C~~#et%_k(U6(Fd=P)D5>r??Vfrp<+ z*Ss**z!j;s^n5N=Hr+Y#>8&}U*xSnCwqc(jZ!ncAcLk`ivmgOs|5l!U{{Tk}RQ}c4 zzxpjk#h6ZcuUH95}nU$ZKr8*Vd*tZgqa1>2N)M z&nr%Tbv-XU`@f!O``^E=m{3}#t9U^0nWKMSR}`tKsi{{c0mbpf6-dt1XZSCcBKAO3 zp4m!~Q`iK(;TNgNILw#VG@gWSZ4VAYUU#bsT{*tTD4x^ZCUnJT!0e~6D&r1TF1n(@ zBR)DS?M>!m;b0x8O|I^8=-}yEV3m4`Nn}MFexcvKI5ns_)VmSEaLmj^4m8UPR?C&! z$+gek_RGi%8hBk!h@U?Fr=QH*j>~s?3f@v;c!tL7@pB(uH)i}Z!hPbuoi_0!(hs%= z#UR-H$!@WlV$RI3rql#q4zJFIgZ=%;12(CXKei4Mhu6ZDotlCJ`&)t-vRh=>$5Yb> zhDnt+pIaAGkG1eD`^EeAK4V)&1#m)2VYXW2)Tf<2M8Vg6nhuY1s~Rq|f^O{g7Y3lN zY?(hl@!{O6667QXdBiF`>G#!&zT^vYJjod#4)NMQ4)$4~Bp2fN*VZP|`A=e3pCwj5 zSfsL(NN~7(tMXkY%3B)6h{+SZ@_4zgE-QHThrgaT`v~wAG%0xyRn#&UQ1KXM*4TcN ze>D^_`GX`-j}x3#C@dKCT9WtZoN4c6KlJ)@E7K;?<4~?ZD%Z%y`7^4E?o z6(@3E*d-BEaR-bMN-Nq%J&el#I7cQsV#x29Sf&}-JKpFLa{Z-%P&|D8cv%qkMBw-ZoX9P1zDei#ETgb|>Rw75GrKnAAFRIoLx%?Mx5M%Ad^?q5t=_Qe9=+=} z_ezI~{)#NfOV(`Q^BU(ZewfkLl>^rrQB9@b>GL$6t~JE(n}6Sm?Hacp%*XBhx79Lw zmCiZyxpn&u(I^%67>Yv#>b)i7ktFX@6 zx9^o<+NK<9hTHxcqypx=H8ELQ|rfD zg}Rg-fumz7>yIqox;6CM>>nRpY&7ah*bemX@L2L=;g!{~*-siRUU%Q}U~Q8v{#t1% zcm4Io1I~p7&wfg8Uw@`RZt@z_%R;xe6~)G{<9c4+mX_AZW52oh+f-0!XT?33uzm5q zRnvlw2OI;g6S}NpX!hXAXZ1U+EEklV=N<5hK0aTovXRG@UvFYDXR*cCKb+-?j6MwM z>5YME6Su~m^xi1GJiSqIPCIxnkm}Rt%qiUM!YmW3RLijI-$!e6riHBq+Vkn# zk?c>0qPMTIIi|g&jlW6ZO28c6W1UlJ`&m4V3PIDS%;)O{ zhIG*MCG+@B_n9&RyQQ%?l3d%9jwbhSvbSEB&Qdq`g3Gl%svJtCz%G%ve%*(Qz$Lq9 zA|f^}1kUhvi`&0g!2vqp;KS?ZpI$d@O7^>@&XM#Z!IPn~Ute9F9bBydYmS)jd)>`| zM^D_4J+86n`f=xbz>V8!hPn-VjvwD+x6R8YTJfHye!!PsKav-jdkC;BY}aHIv9-JR z`ZuVADm$a8KjHhYBU|%-=1To@6KE0i;Z*qir(&Zfmzc}z|1->QT)moF?b5jLqT1Po z-&W-Qs|Ria1Qn(ynN>IraV*<)Fr%^zSlr#%QFvFF^SDPdaP#~vP-@ND!l{1*sO3e5 zpwu_8xz!D8_VpjU{&y$1HF{C_iLJemeUm~@k{843)$=Qxu6{RdzjaY2tN+^H&~W?5 zE50AUeB(yM>9kc3ZS7z2_zJX0>hQJ-M_1kj_Oq~%wY%SY zyZdTutLE0sy|?XjAM0PAGvO*qGUzC8Q2+oymy?xL0{|Gxe-{!0004O3t3lA44X-a+ zE|TAzO`I$pTrBPF0Kg+NIYrFAfE_D%a$8di?5X)7m{Dl2UcTvf-ZQGj0-DEL6Pnee z>&-K&U$&ZlZ2{L8W*Y-EA?7#7;JZT!vQ6cA!eQFJitko_b`|6Ae4CGQ^^dGfzDj4* z@GyNgb5&7}_o7;)V+hG9S7iH8_I+mFER6Hw<}t^C=S>6cHTHn8vrm*?r8tE~Z2f3d zf~s_e>e2TXwd^bXvJ~&|i8nWo{jw%zmxsA3po-Zua^&t@*&AWSV z0`UWkuv#`-?Gw?^9ph7*AbVP(Zp4B71UhTbC1;Fk=B~OA#RByw96k1Z>cxg#U2e&r z4(~8utE^tKM-wz@u=wNaMr2dj#})oA-KfRP-eWben0zYpN&19>O5OaCTH2q~eU;)Z z{phSe14*ilkrQH~cdF0O=as}%$#Z51xk@(_u6htjtg>H~RJf^%=V4F>*N zFZrNn)EHfH*>wl7aMczeG|%<^c)O;C%CpiR-Rw}nvT=aH+Vg$%?EKPO%Oy6loBF`F zFXqbz?5RJJ8!-Z64a;|251sKh1wRug+7!}0K9OMaedr$K;M=0{DPS^(B`AcvlgWM= z7OrTCE#U9YDeqBmM<~-w|Kk7vlz^P1*cXpXaF(yfm-()<9)UDDah%k+Ptu;4Z!rR; zRes`@S7mu5eV^0#-BwI3Lt_7ZN*+Fz5bt_K4l{6()IL(%?!$HJio(3dDL#Ijc#WJv zO#0hu@p7h+6abk`0v4HyYVX_avq?R@^}>lz!(H|>_pe7mqBI|x{;izwo;3Zl|gMH;uqbgUILDj zFY3>KWz3egiQuqvocER7VMXmuTc-g+Di$p;j1*GbG&SYjC2mKotF1JFKroopI|`{ZTmqekoJ{3J9ANE6V*6`AAPzkvB#v+1B7b zE_Z8>jAFha5#abJEoDn{eAG_L-vXsV;UWUC_P^NuraI}rTXO8$G)cVSfH`7z`*mb= zb91u;2H@xSGSRDt0Z3z#%n!2DJ-}>!ohPo8ZkXFps=F`%`zM!Y39qGnH2YRW(|X?~ zw3rX7WYyKxqwSnYI1o@hxp;d?EYF;iai0)n#&XKm&CAOME{Y(<4|L%A;L_h0+IRU+ z>F0JIa5$o-y;oMOdp)_^ZzRgin4-VBT~O+N-8SWNeX85Bk|yF^kSLA<`p7$FD15~Y zgM+j5#V5GMX0t(2iR%98N#hqpq#z5Yp^s9@ocOYIbDjwUQEPZ2w z|6Y{i>Aza<6{3vMpW?W)baEb!Zth3j`Ol0Rg|aVGp^<{)xXH@CN%*~75f1(9m6F=j zto1*XvN&Ld;bK+})66$1MaFqj?UJj!(O6B{%7fCL7e6KM$g7r3{6uutZ;sh@F?*x+ z>NUH^8VnyZZ#6pvIlNkZ?CiqX6W=`xo z@oO&`pLYlh|21xckNEi&$Cn&{v6pz#e!=kKXd%&4DGae4QOr#TGbia-O2k0#-Atgqr39&BpVazv4G|56HR(-Yd z+Yoj2)t2c+b#>d#VmiaYmq7JN^|-SR|J!RdK&$qs4ds#JSpc$nnj_T3nav*cMRq0e znr1SokVnp>%;bsKAqhtv^z=fIWK)UOwUvA<{{vR^*U#T5w;aAvx-#9?LudB!O(f$X z`nNJ4X~BoDb=e)*o*<6S@OPr*lWzbCIvr?fm0!|+1tO!*ixG3ag*I_B$w@P`nb-DK z(>u>n5|+HzjU=&)d3$Nn0>#4|z>Wf@P>#^?G6@-Z*Hw--#0+~DF8`HTh~71ZVB}_S zs6=7bVmnvCEN4S`CJ|iM zt&4bjF@ft2zh%5Ax42FMyR*#*~dU#~PPzbTOP)!<@}k-kY0F-lgwC6~XIZUf zlcKjlC4>0uM2O~ZozD^Y++XvDa(ozGi#l1MKd1Y2xHqd{wi; zJ~AY8>R#5kV7&Pr&r{S!0F`MOkNAI)UWh}5;{_=NfzLv!;2zw{0MjY-zb+UxXp}l01 z93twmu8XNtNmx>>DQm5hs?RMKF87Lvr8$}UMIbER7TrY$hkY-a@ut6Nh4wYs<3-v_ zv{7iquX3}fQ?uz{9+yy&!i^Y6&X(}Qd(e7uBoK7Ny}ZF)a2fC=Gb*ZN zt!vz7q)DQ{v2jI;^Gr8drcxfX)J}WhH@8MZZX7K@HGFb@9zrAC=vpc^!CZUfX?@{< z`^&F!pRA(fMLU)$W{rpj(QaiN+2RxAT5L9|qi&rm7Da#Ut z9nEZxTO8g&r%E`dX70=$c_=NWWBQ_HML280DJL2f!;$s6)M@VWB&W4>u7!=j2k~0T z6QV5JXt5YRG?|XW%iY}^NVW{dE1sJAoL*<{s;U~+_B8d*uXZNZ^wCpqU?gmj^zyQrMXj3gp z@}c45K{f(Os$J|hs6Ah_r(BJ?cI}IN`APR0zF^WC+B_;CV@0bzD8D0h*&g-d=70V( zBYt*&ysbKfA`=8mANNiTFSqlc>aeAJB$zxgU3fM#0v~;)C|>M0GVrDPcr4t!_!HLW$94(9NTcT<5fxi+f^ck+4rGfELO@{N%_$W{d3m!v4fvBNH ze5eI?hbn_nhz=ev9{GmWdsz6?Z8LR^inBL9>H*DvlO41k!Q5EC}Sqr2;OOgatc(4)) zu?2ynslq82WlJ?DMH}^znzapG?2)|3#t`j;eck9gb=flGjf}hlvYEOVzA)BvT#u(` z$O<#8MA{SLp<;DOzzY$|mJ5NTYJPaO6N;82h7m~gW?OI3e}vl52b(Wvnw9KW-fF{9 zXmBzjoSvef>#-$^13rnYW+pBKEEx=H3 z*ajmJl4CG9ZtHM3^OBBk!47Uay#J1h6*^Fd#wtpRG5oO=aQr`C&{*+w5<_4ec{8_1 zQI#Jg0j(>a=skzDRDpt{IyRNg_^s5@bS~?`&Q8Jc#T-FT93dg0*0XNNmJ5G8Ez(kx zHDR`1kN$LOmG@bfW+udaQ_Q;J={KTXi_ZL6D5g)4`=+mE{IjOMr<9G2&0rKUhr{`n z7~ZBk#ade%09tU~SGl=eP4!)Oz27a#*{SY0?PtjGq4u1J=Gh1f2|@Uj!Hs@%bFCB`1w;h$;A~JpNZ+DYpA?sli_jO&7eUD*2i zb=i)k@X91ST4?Jn0*_ABoRU5>v$G%EPjxeSJ#iRHuTurw?Uo*skQ5RrMwEOl5jk#R!-|~q zVdJZLmp(j1eg##gpq`c zhiA9B#uxo-fec(AK+7wDlKCI-W**G}u5HTM9p zn@^CsxVtkqzbdb&O@|1Ef0Lx`nL7Z1i-0T8DY1!Ir|C zG{7tZ$n%OJ>Upv<{Vg^SMUbP_-%xP`FUKYuk7&BrEvm-7d=p&YX)NE#$pRUgwWgdF z0Ld4@lbDrpMj$@=sadl82|kj#`!hN+G7|Sx)xvYIoVe-j<>k;_h2D~qB#QNhmX0p3 zrban&-KCDOY)8sxny=_~EuIZk&qR7x&77g0L0@Op?Wv+a^Tfu*#f8#b%@5r6mm~PJ zvhF@M_9Y@y?xD$+0fR7xoCAT7O|QSjE=#WiQZR|qP+yO?N`NTDO-+A{SP|3V2F58s zR{V6?O!aik1yu9jYGgrbBHg{_@_0xp!;_U?}P@%do7pw;`uC+aO1intoipr~jAIOY}uPd_EL>&5^d zrOZ>N} zl5?KQCpq-1nWVVH#P6ZxUW`^5<9hDv!M>2&ZKz_1xQ`~NYHsFMZ-z1a-OBmtd5A54 znb1EWo=R|a-nH&MO@RTBjRXHg=p=S=3nm1fmS3+Ziaf~Yd(auv&-WBDU+nogUHoRL zEZJlm5GBu)-X806)#}6BO4!MK;p?~vlA5RpHw$gbYeB>V_hb@U5rDy9EI61opQ~{q zq&Hi#^5RZT^~K8*b}b})c0BdNF;ZT?zv^PViSzwKigCIcURhbm{^9WKOvc+=fFF@0 z3%Y9Tkmj0QwRS{Jel}y5zZTbekMccXROs16Xap?S(CtK9UQAj>Ic{y{Dvu{K!{5hL&mA)etj)=!X zYBsgB6h;?G2nP%Xz+A)0D#-^jMohCMzeVvN9g0|Pu#AuTe%zyWrq z%BRk5%CHV62bX`=7oToFQ618z%Zd~TgnB!% zOk^|C&Ubn;^NeqHc!J4m+%b-hZbQ2bIz2vILvorcHxrW+(fyqX&G5#`*Dv-5f}Q4N zS)dw$Mo5T^kB_f?{WBFckk{2i@fBm3tt3hT*Rl1u1oqsN5=$1wfrkjQlt=2s0e0%0 zuv5SDC|BR9E4A=+=>yr63l5_v?+mJ17vig}FDC*XI1I1OJo-<+ z5+hD}ULKE)-4~4BzfLIkPrMF!PevSqAM(y@Aj*~2#!XDvF)RkGW`4UUPAQ!PZr%Qn z0l1Wx)OSeVsjqA_HMbauiD40X%>AB!gWF#3S11mxm24pTk9#vMN$!2<{V15&X^>NL z9C9X$57hk0BCot#_({5`ZY#mxzkf^C zETRIX6%_+r)@jyw?EB#*xce3_QvPPv;(f0CD%=g#eV0sa#EVqiR zA6K96l9I1&C05)mw&Sk?_ku!2 zHzn$T_&P>Oj{`DfZkyGw7fU~@@K4&u2Cz8gyDjn{h6rFD!lqGXs7S^CcnBG z1FEN`RKkog555GjyX{{B0Fw9&-_bpXG37%V0Q<}N@7Mzc&FDg7JucLv6n7hQdi^cX;KIK)qL4ndL;il`i2d=l**j!s!% zLA^PNBSRjk8|Jn{2g_Q`ZR~NHO?=>(g=;MEW$J!BVqS9`CQIeA)+k*`PD%oMtPp=rTEKX{e=~vHv2dIP*RmS@ftAo{ zjc??)(-4^^ANlgZK*h0Df6V;i;=uk@p4)PLttGJ+C7O~Q@l%xE=4fxr#!(<63Wn%C z0K8nL^a#F=+xuM|H;w*K=j7xxO|UKqpG@Dk4k}I*o6hyT4(Gz&z{J8U^Y?sr-}aQu zrPZ|qe^2nHhldRLMgJ-^_rB7zTRIMxLNpjr@h87m1tDdL|@@zf9M{=Gk)c)vYEfeirI_a$Nyh$5>jComuh1NXLt8Uz3M z`q#FPkz(mF@T=bBzSIZPvdEb0KP4m?I57@nRXhOC*ifmuf0QLx7rM~1A!DOg*O zGi1l5k;jn^`wDj8K|6vKoSv(cl0O z(p}PFQ}2{Z>^}>Oh;`{R;@+-^1n7Rxo{S3o+C;rqk~s2#sZC|N&Z8!tX1|ts2Y!O@ z{o(lY>elN6UueUNRN{vqZ?SHHfuWMW?xKIJw`~Orvq}zCYTs!*Xsh@bdkVgfa0=br z3>k=Z$_&fNbe2fCAxz6qC5;|>NMLt6J z*TV~90wSokE!6A6agqVNRhy0{V_{566$r&O$fOhO^u^h#jjbkwA>%L{FKSNqD5lRjME_DHy`` zYDzj+yq|^U`5g1n886$2jIDQ&)IFUrCU+k~Pj^=FK9MJY$KRe9<;)hc{#GgLOmc;Yu)6zqft3&?U}0@7@%3w(mWBpB2~1mfDImURl@^8q3@hK|TK&SQ zgI)`MI6zph-lUuBHq`vfy7KZ7ya ztbqQ(JO4I%gQ&29UF?NH>$SG#rHCQd69;_s!MD9*r_XA}IUXRAW^g4CBG|iaDB?R; zI^`vrpV7ywk@FyACTmR9cMK>6UZzB~4fk$a7>gwTUB#Nvv0l<$%R{ z8!DM&9qhYf+1Y5fJOeeGRg~np`bKsA-IPc~L`0&HErreHW#p3C@QkjF+6O($va$p4 zvBadI3Fk$6=64}OZLdBc*Irc8+5cTPpR>GeaYK*8%zT@Lz5Q?$iP_@I;chHSO%^9P z{4R&XI(mbZ$YWvidF3mtnJxzghkdFZ#L?E)$W4hGW6nR^ZW6u8;!%E{Hy4V5jHP~n z1Ns-P!s+N!SoIPF{a;_6Q@L%^jUmaz#EgeWu>2q$1kJ2BfEf!V3?R9s1anUY>anyw zdro)1K9EN0Cjr)M!M>BxFh7{NqjGEG#KJ+2{Svi*blLejrhoQfVUCruGd3y59Fk#h zfEB8cpI;znCe!Xck%zM-i4dA$uyh|f4`aKzqGEJ;n_=7LJ@?O!j}GlkWJ;lM*(dKC zo6)N<4szeNbUZ$OaDAHRbv`A1Lxl`0c^%pNjdtMACvh1Az~WxH()R?hd@%?i+Qzu@1-Oc$MWszSaqQHFyt!gJ>;JJN1 z<0+P;V;Lh-GLYS2cDxV^vlTBx-gbRdQDY`el(+?T42<<1^y`eE7LY|$L(H4si6#JM zR~jak7Gk|niCn>z#pev&SL+Xs^Q_~!>Bp=_bK|R%6v19Yec5oCNrW!M`i^?`$KV z7?#-^SeO<{q%+u&v55&k`>Vg>{v~uLb#4t)kwMs${jzD1-!vhlG1;`4Py{Y>8*Y<0 zd0<-$;lH1aIl$~V@c!t74}-o4`C*&EOZxe1ozu5Ln;1=Qdu|sW`TY1&%R%@s6Kjo1 zT_#qDs>4l1B8xcyB+~0f<1=eUgr5hd!N}3@`;Itvlwj8cI@&0^-A)<%HK3Roo^4>V zbNT-;Efbm1s>{uGEc!oU0i23>x%>%kPoDv3v7ne)OEWzE8qLb;>X>6rDo&5Q(=G1Piowc4xK)n4HIZ${o(BFqyHaDT!x@SigQTo)=Op0=fm6Sd>6Nk!UB%G9RCXHAy6haqEi?qEhzlZu3`vIN;!T zG9WcQhDIj+ye2kzD^zDg>NulE#h#*fp-P8SPe!ZxM8;8%ExBxLXSpf1pQp-V-dn+3R^wu`~c)v)5C3{Kb|Yw2{3Gc%+c9q6fCau&COcn>u|o ziv1f~r*?K7cpd)y#$SevwZ0UWW>?OSw9`S+g%5Z2-N)4(wSJqzNkuZJ-pY{+QFj}k z$!h<9;$JeU_rTF@a6PIE{?^k2D)u~#8ovTrNloOw6u)q*?D<8p$$5@I=;7ixu%az7 ze0U|;)^>ijjIL~FH+W_h|8BfURzU$Zd@9gef!Z&JbK7cMow8ykry5pX57Ot|)1UT( zps=WjN!w;K3c<1}^;Tm7a>6mR-@b0Q*SbDJE6e%-d>Ta^l67HRr|N z<9!y*ejz7Guh{z5`_3+>5=MP0H3=w|6JUHrFkQ~V#QV{hnMxORv z6v)Iw(Y~alq$xYf@CcUmz=Z`3&a6w5;#K5OEZvpE&+yNVWjVg9z5Cq3hL_jXMW$TM++x#-dKi@!rysf&=l|yZA9?&s^dmT4eXo>YCfznCctsfuvS^u{)e?yv=n3Y%R`UDB;VO^YZ33^+oV~S`*8l_J&?7N8dr%9aWOR?A8~zfLg zb3aZ9p~7LyFk6!mAaOT7Ob`E^uBi6iGexVtUumC#f_?t~tK8)eb(L5s?8)0Nb z1m_Lj@dm=)jhCvXW@y>xlK$fxSh(`$5)2bccF@EvYHu=mV{`M)U}y>T1hS_vg+^$M zoTsSOZ7_AFurG@L3vGAENKckG&(G*cdr=c@ZS9fcFY@m0JYHU2JM{`spHW3G9TN@h zz?cN-3`0a^69hT)r<_AyUtcGq$H0zk#f(ue7jXc37A-bUt{G^?FrS;Kc6hux9#2p0 zuJ7(lese8uy+9~>10J^?!uR0iQ2y@#i=D8)^?|dQ8U2+1|AnwnEbR16abcDrX&Ly7 z%zT!idVLIBk%$iccZ@LQJHfX8cc2mZSuP)4_Lw(!?1RY^!~)k$lMPvYH@&+9wV@(q z>nb1I>X?N~XrC4eg?$=ZT0)l}E)|Bn`=p9$YB0OHy2@+hOb>7}tNOov>!{n?o?m*= z=9_42d~=l*u*CKJ?@Z(-2wCg$+=|qmk3naitDoc@8{6>Fd_|qfa7^ndZV?K>@~X?Y zke^GoD+bvTV&&Ki<29Fv1A#S!;te3^d4Of*D{SNR^ft6X4*yfz8&~LQ$#`0D19~V* zVnU)sQ6_X#j5#zSkb;SZm=#gHaxtXRpJ}X-AJ7H;7 z>xx-fl^2t7hc80azyaK&@j49`m-=TKKS5hc2Azo@{Zit^PQXIT{UiYXW^$qs`yfY^hwRH;5R9kFFdJc~xAM=wT;KK8G_!ardNF zydd4l)-V@-xBFhhw;OmyH2M({5kZ%ihWk+qM}%1B_$Tqv!fOrH2m(DR*!&s>2ADaM zq1qp#B_!6?|2xK_+r5PUs8~K8YKwc>k{QFGjXmeb33GpdjkmE9_#x*MzLrqV9UsxZ zvx3ONUdGS>A3!6Eg_}WFDyA9yPQJc%!Ch<>0OlI~9b+>fFy}x?EAC>CzmDK?P=kIy zzUmD^SAN%Q8+!c;{q1nj{cyhbSH2mhZfBra8S-HG6iX(Y+jbrcZ|nxtKTBM?)G z2&MSHfhX#hnzncwZ{HhPi=>14b@pL^pC=XlLplf|{_TW_JhxQPWekp4gwmOK*|(s8`?Z>2fsGJob7e zH-i&ipeg|7)qsTE{w1(hzm{oHw?NhhG~&`oQhyAiD9`%ECF-v~@}`E%CuG(XR5%#y zQ>Iz#0K*#b(s4vFWkjSHROnt1TfV!&f(&ubscmY0KB~IfEQ+Fs>-yn(EbV@;Kre6d zkcTdqj6%eZS(i11K7%u6&vehLdgjT1+4S0OqlxF|jm)M3bH`?t>-N|2M# zt~j-1>(oL-*Z0rjp!*fk{Gzjmt9{3pCr^o)oS@~zjL0r;x6tUY7&>8e10OS;KBKxn zvKD}B2og4^=TLieBV_L(;I^6UrsVT3r^3xkEjjH@*1`cd|(SsF4Whu8T<~&V2hrDAHH8q*-MP;EN z3Oi3io|~J#ZBnZ@DHUcnFhmCwqV*;gN^$9qqMT>lSEIFOcYb$>c_z!t%e?|Ur2Mx^ z1RL;tuPGjPSz8anG4P{7p5fU$&|@2%s*H#4DKu(6bmUtUTp69Nc1CGQwZ|MrDzyg zbn*3FO@(9xsF*}e%cY^zs&&ko)j<>JSv9Jlk7}g6GfP1RKZMBBwd5m} z-&29UU9UtRlyrn=_N zfBzj1OlH3PYMayB%^OLfP5c*`%je>&){WAsl;&#Od&1YM2D3cB<((;%IOdTHmPt6I zm`x_A+97(H*!ZkS^tSu{lLoJ4tQB-WCvGVwNFjiV5m^XuadH~|jM{pv|6GFcKwQ^O zZT@=OvVHuD7BTs^krNt8!E)W3G{r-iABdCV5nd80c;`RfugTU8lca<}wz|3)ioDwr zcsro2{ettv?re7MPb#EbW3%!8(i9{`_^6hdA3*P3?5Xr?x(YSg0q0) z?a0aV!PwUdD~MD62k!~+z0WI!_-2O}Y~JJ`Gc_CKI!3+*us7rHq))Cy$_x7C>6vFj zMn=XvJ%=awQ_z{^Q29;VwSK%6V>ktwIY4!hCbaLSSJIUlPzWeO2mL8%gmLQh^mK|( zUM2+RB2QEPi}=v)-C=uS$PY)+66G8ePcDNzat`wi0)B4)zqY;mNCH1U8U=ctg?_uu zT-|LKCci%Do_C6kiHTv4j}LrOLZtiVtdd|fKCU+;Y9y^s10!b+s2@;gNT7s+Lz z%?FWJnVV6pnmf2R9Df1@-fPPd;bF6yQOzAe-CXuDw=gf=HN$4NFM*ooZ)x zX{mJdZTmo0em->`^e{m;NE$&GgccMT%iW3;P1*_&zah-I-=fBgfwq!d_Yp zYo`EHHz+Xf36GiV;0mXxD;_m&!r@{%C7xBBRs?%*CP2u3rO^_ZN?aG@0&VO=lnb`8 z(QE*Ij$|NeoRY)Ehad6p#9duo`=RmkG%<-Takx2>ze1sfL6Nb14%jH6jd!)QYQj+p zpicdorL{GiuhNusAa$c$1xjY}_GBUQ@$vC|{M)bC^=e^bjcg3!@55<@MM(t;5`qj` z9jJbfj!H4>3txJk_c8uPg7(uMlsN8THrxZH|Jti7ua*eEhH*bwuOP*j4i6t6*(J}U z+1EJH2O25QP4|i!5ohDAoF9&9xLcKGqN=YSGhgu?5`c>-i7X{0)gJPFDVx_Zzxqzy zN=L4&H01KqNoxNetDAOocIw`_M8jVMUdQxk<1}3?vRddTbwfMV?egNPw1MPy5LY$Y ztCxM&(_>MB#zu)wp>ocm*7Ac7*|oNPakoEkoG~AQKMDwb4~{kSb_7S{$pE|;5DLO22 z!p8p%Kzj#s>D85=Y#lXdvKgk@t5Jd&slPp)u3=UZx<0cxvE+*P6m||8IrpOZ$ow_Y zvsIM7c7f<2{Y+dsZ<#ZMB z$HxN(H%n5ULS3O=DU(-KMeX@R`ahwAvJ5w=8GXCnOpu}E+ApDsiVCT=s*I|U12^Bc zeD$y6?+Z`Tg*lNs=v}C3tCxwoWQ3HRJ;M%8mg?Z3LQp?H0BvPpK&+F3<|>e!6ueVrTb0eSeZy>z%EeSK{kLF-RjkMu+9TxxZNL|M`%yWtwOR) zAQ|~~_0%v(sKeOR2fQ?4Jj~8ScWUS17KKF2q!@`k?m$@V;XSz5$xx>MLvqwcyKWcN ztO-lrXqbISyv0$}WzPgnYj(7dC43PzL4n7~zM~VQVHip{W+yJoF7U|fO)@a-; z%Ir%ne=!=4s%r+LV&gbEeNXx+ z%#U3GHg#k1q5C4w;Xht&7({(ele*8_)Q`3vlnspkh^!)G^>PI0Llrf`r2k_s?d!4{ z2*^g>3650uIkzp@k+6Jer~+Va_04+!X>&yFpjIqP8jY8RCIH6A@^cmRS!kbYY#WxP z=r1)Y?8uqpru7j0bNG#UqajvgC)qzml6tt|8?Q0zVH~Qvrg&DDhC#qDu!59E8^h-K zr)v)$2uZjW_<4kdG3Nl%??|Ntoq;}MY$~1a%*I$pglwxa9fY)HT!=RW z36ul-l)Ic!2yN-B7_;LHhDytafkvu+d1fa|&;AUu$&d3R*?Zu~HFQ!o*w9fAGAo*5?=XfUVPcbMI{>{g`4R<@0J`)7-sIpXop2Op z@oRhCxDZ6OeiKbLhPUltRB11fv2*$Kj10Nt$+?tYcHcQosG6Pvrso5Wj;tJ^a0fdx zTNLMB(D01thtgkg?H;0)js>`bCswJM8K{(Vvqr;5G5Ex@W88i5lGL7pR#r^yr%^{x zhKHJ^*|+OsjNg{AyVM*js;dbQhb5P1a6gh{lRw5Ik;mcsy zr6Uwp2+^Q-Cq)RyJ;_{d4Tj@>yUHa~y?kl|e&xDJ+Eaf+$Xl|#hMfhND|F`kZ|C2O)!lf)KFwDrvKwoy9IlhU| zVBJrbEdb#%RZ6ob?Ap&k7($s~B|}n}(^|d_*7~+7UXF1UAjO^O`Jh>Vq;7_?f$j;b_S9Ouz__TrL#!Pv`Favsm zXaruQ?SZ_}{A+2}R5I&Powouu{oI*@h+B}T>5kVJ$*9xTa0SqqewoMus_hL1%z&Z~ z5{+IElG#Z=_55FBS1*!>H7;ZoYFlh$f&q2tyRShb+#KJJIY_J`PpFiMDqp_-*pRjl zt=0k+-e&*p$2Dz@#5AIfjQd*qVBT8NQVG;mQ+8|%5oS};NckY?28{*Veg9}pqr?%8 zMcM2HPrDIvXJ!<1Kh;e!q~JaaxE5(kFqwOHrJa2P%42$`(fu@Fv=TU1YF?4klI%HYv8oHgGnBc=t4qWpW)hb-H)ANj z|0Q;rgRgfkz4}+ZmS{=O2Xr1{T~T4?r8!)P(EGFBF8by|bYG;xt01~@Tqu{3Ht=4y z&r4FHGsw$B+~q8BW*)szLs|95Tl7Gc+4FR;u@~tQS zr$DG+ugmyoN6$N|LH(LqZ8Co@E#d{JftvnwvHM@~{+fONGVT69c}f41`!rGwO||VT zO!BENU+In(l8$K@-t%L)3kzO**3waH{_6cN=V!T=8C|CGd?YyFMKPMJ%4lk|S)1g7 znoyc%0GnBF>=PXKdp9}%f`R^(WIW1$sc_IhoWMs6AU9UMn)&O|)r0)u?!RokgtI+p z>RDhybTU4)Sz|Mh#T_&bArB(&%dl-K(qIHl1S%~nQ+*0dIG?@v5kWzQk-%+rQi={2 zj{BVUqKK|`II*EK5tDwkbY2l%vG$?OIcdezw&6n6NpaKgmaIy!N#LG$u`a`AWF zr@hlMdINcsxM2<$pcZ1T9BL;n+%Wu~^rIueSaaBj$dsf6Z>GN8H0U@YZ~gBkv-RKI zq%|v3XyVfIZ^-wHh3a4mW+Ug$rYkYrE;HhL-@drCD-`K9nhyvwlzGRW*9{l;i{~&W z-zBXW&VG{PmmLyFw=ENV_f7LCyVAA{Qh%2)ig?ZCG^u8(9k+Q18Hy0d*e}RZpn)E8 zM*n)%8kPl?ue6k@2>kpNQh(2u%h}X!=MIQYl!(l_9q!5-?T&2lEcgqR{#zOkrs?c( zja8?`UqYIC1+-E6umUW!~~xB+R}h&jjGF@5Ui}+AH4g zmbJcOvqY(Jeb;gXj6Fov$`uC#Zg^#BO+1mN!_*(8I(qa3DRIo2+>%1Rce8mCRN6MF zi?o^3-sm2_1CDR%?x@+wo&^ujru(UrCl5>-6``T=!%4!C77uB@FKUOqEAf|O2j0?= zJl?*I-pt66ZznUmL+3j1#fSKiOnJ*ZPi@vY< z?)Brc_?oQiSZZmpNyTVg#5c$+>KhM*V$H)PybCV;k|rcwQS~+!)U7eW>iw$adSY?& zg>F#IjcHPLlAOKGVI){F(zeVc_FJTow0Eh~q)Ig6ps;z_u_Y#RI(ic{<#JLa+Zoyk zGlk3*Xm3M=&M2PxhYTT$!N~lVy_4UpveGH1g`6ecZhL+uXJX!H@vcJhL?X=9BPT`wn_r4SuqR=c}HQ-w2={*ek>yFpKv|D z;71(@3f{jq)fSLXGAl%%i$g`ZyL2U0MTt0?@#2rId?bc%rd`g5k2YqwRi++Rc;prA<9x#Bs;AQ|@y9QmY8b^?YDz*%I@e@WjAmk4m z(*fr+j=xl*s!%p^LK-Fj&71s}wwG^e@-29nLoCIUw$Iz9Jj}+zPwS64XpJG;k+0Bv zyS9hxMC&|Tl9K0;!2j*XbivKtpCS16MgtKoaX)Si8I{j4S7C# zk3nNuv*wwn$RC|1B>rkpBtS~WQRI8vSg`833U+*q7KZH6o(%2rknd}k2LI%KAG$|8 zBa{99mQdA$yaaxK3xd@{62^z&_pi_;{!+F9pr@xBJw4^<=_wEWR#mlq8$DWA&k@*k z7-FI4^Ov%3Rr(V;Iyx|OVd*AXgz1-_e4n|nbW=x1hu-D^1ic;lk4_gFBk}-Y*|Hx$ zMbd)A_2XZ?xc0EW6(9fV#kCzB9U-qs35q=+wgh51>~BTB#|=^v#zXk^4@0Vb$K!cr zX-!SdwwjunZ641nlso>K#C7qN3d93>Y2C7=Bpre!@GDEhg-`#In6{mkmLBmN`ER5b zWcKryvTs%T6V#OKYP|p@(B2O5{#dV+w8fA$+3`b`^JrtODHRP{k<2aOT92W|MR0CV^8d5Tl^M~#c zPoo^|Y0xF>kWIQIer?dMKBW+CJLmxgMYX4ACP@2M<+{_MMo3aB8sUYQ_57u5lmBL? zKY^6;vAjUy3Fr;&g-Ue9mf{J@OEE7td zrvs<n+a07*qoM6N<$f Date: Sun, 8 Aug 2021 13:09:52 -0300 Subject: [PATCH 73/98] Update changeling.dm Web change because angry i didn't notice. --- code/modules/antagonists/changeling/changeling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 9df2bef563..965839c327 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -305,7 +305,7 @@ prof.profile_snapshot = entry for(var/slot in GLOB.slots) - if(istype(user.vars[slot], GLOB.slot2type[slot])) + if(istype(H.vars[slot], GLOB.slot2type[slot])) var/obj/item/I = H.vars[slot] if(!I) continue From f2948de0d14ea1d7bda0fdf55e1d4b754631dc3f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Aug 2021 13:58:15 -0500 Subject: [PATCH 74/98] Automatic changelog generation for PR #14988 [ci skip] --- html/changelogs/AutoChangeLog-pr-14988.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14988.yml diff --git a/html/changelogs/AutoChangeLog-pr-14988.yml b/html/changelogs/AutoChangeLog-pr-14988.yml new file mode 100644 index 0000000000..43344b5a8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14988.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - bugfix: "Old gateway animation is back. Feedback is given that the gateway is open again." From 8a35cd255229d2ec80646efe6d9fed70854c414a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 8 Aug 2021 13:58:59 -0500 Subject: [PATCH 75/98] Automatic changelog generation for PR #14981 [ci skip] --- html/changelogs/AutoChangeLog-pr-14981.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14981.yml diff --git a/html/changelogs/AutoChangeLog-pr-14981.yml b/html/changelogs/AutoChangeLog-pr-14981.yml new file mode 100644 index 0000000000..76e1392b8c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14981.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - balance: "Rod of asclepius can now be used for revival surgery" From 10cf097f422b3cc424dd17906d5be6a1ecdd633b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 9 Aug 2021 00:25:57 +0000 Subject: [PATCH 76/98] Automatic changelog compile [ci skip] --- html/changelog.html | 16 ++++++++++++++++ html/changelogs/.all_changelog.yml | 11 +++++++++++ html/changelogs/AutoChangeLog-pr-14971.yml | 6 ------ html/changelogs/AutoChangeLog-pr-14981.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14988.yml | 4 ---- 5 files changed, 27 insertions(+), 14 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14971.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14981.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14988.yml diff --git a/html/changelog.html b/html/changelog.html index a295e5279c..ee788152f0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,22 @@ -->
    +

    09 August 2021

    +

    Arturlang updated:

    +
      +
    • Nanite machinery overlays should now work properly
    • +
    • screen objects are now atom/movables instead
    • +
    • Update appearance is used for updating atoms now instead of update_icon and such
    • +
    +

    BlueWildrose updated:

    +
      +
    • Old gateway animation is back. Feedback is given that the gateway is open again.
    • +
    +

    Putnam3145 updated:

    +
      +
    • Rod of asclepius can now be used for revival surgery
    • +
    +

    07 August 2021

    BlueWildrose updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index afdc1928f8..81ac5d0d4c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29784,3 +29784,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. don''t announce they''re ending if they never announced they''re starting tweak: Supernovae say explicitly no rad storms can happen if they can''t' - rscadd: Monstermos is back +2021-08-09: + Arturlang: + - bugfix: Nanite machinery overlays should now work properly + - code_imp: screen objects are now atom/movables instead + - code_imp: Update appearance is used for updating atoms now instead of update_icon + and such + BlueWildrose: + - bugfix: Old gateway animation is back. Feedback is given that the gateway is open + again. + Putnam3145: + - balance: Rod of asclepius can now be used for revival surgery diff --git a/html/changelogs/AutoChangeLog-pr-14971.yml b/html/changelogs/AutoChangeLog-pr-14971.yml deleted file mode 100644 index 02388f97d9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14971.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - bugfix: "Nanite machinery overlays should now work properly" - - code_imp: "screen objects are now atom/movables instead" - - code_imp: "Update appearance is used for updating atoms now instead of update_icon and such" diff --git a/html/changelogs/AutoChangeLog-pr-14981.yml b/html/changelogs/AutoChangeLog-pr-14981.yml deleted file mode 100644 index 76e1392b8c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14981.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - balance: "Rod of asclepius can now be used for revival surgery" diff --git a/html/changelogs/AutoChangeLog-pr-14988.yml b/html/changelogs/AutoChangeLog-pr-14988.yml deleted file mode 100644 index 43344b5a8e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14988.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "BlueWildrose" -delete-after: True -changes: - - bugfix: "Old gateway animation is back. Feedback is given that the gateway is open again." From 6c338c6479384b05c50e9e7dd0bd198b1052a181 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Mon, 9 Aug 2021 11:03:51 -0300 Subject: [PATCH 77/98] forget it, this one works good enough already --- code/modules/antagonists/changeling/changeling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 965839c327..8e6b5c9060 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -305,7 +305,7 @@ prof.profile_snapshot = entry for(var/slot in GLOB.slots) - if(istype(H.vars[slot], GLOB.slot2type[slot])) + if(slot in H.vars) var/obj/item/I = H.vars[slot] if(!I) continue From c453d2230d81f1271d350f86f97c83d758ae22f9 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Mon, 9 Aug 2021 11:31:33 -0300 Subject: [PATCH 78/98] perhaps this one as well? --- code/modules/antagonists/changeling/powers/humanform.dm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/code/modules/antagonists/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm index c38bfe3b5b..c9edc12eeb 100644 --- a/code/modules/antagonists/changeling/powers/humanform.dm +++ b/code/modules/antagonists/changeling/powers/humanform.dm @@ -10,15 +10,8 @@ //Transform into a human. /obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - var/list/names = list() - for(var/datum/changelingprofile/prof in changeling.stored_profiles) - names += "[prof.name]" - var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names - if(!chosen_name) - return - - var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name) + var/datum/changelingprofile/chosen_prof = changeling.select_dna() if(!chosen_prof) return if(!user || user.mob_transforming) From c0f47862585301b60f1875562ad0dbd17bb81c29 Mon Sep 17 00:00:00 2001 From: Cadyn Bombaci Date: Mon, 9 Aug 2021 12:54:22 -0700 Subject: [PATCH 79/98] Update linux scripts and dependencies for new auxmos version --- dependencies.sh | 2 +- tools/build/build.sh | 2 +- tools/tgs4_scripts/PreCompile.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencies.sh b/dependencies.sh index d7b56ae5b9..cdbdcd98df 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -11,7 +11,7 @@ export BYOND_MINOR=1556 export RUST_G_VERSION=0.4.8 #auxmos git tag -export AUXMOS_VERSION=v0.2.2 +export AUXMOS_VERSION=v0.2.3 #node version export NODE_VERSION=12 diff --git a/tools/build/build.sh b/tools/build/build.sh index 5d050764d1..62372eff2d 100755 --- a/tools/build/build.sh +++ b/tools/build/build.sh @@ -58,7 +58,7 @@ fi #Compile and move auxmos binary to repo root echo "Deploying auxmos..." git checkout "$AUXMOS_VERSION" -env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks" -- -C target-cpu=native +env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native mv target/i686-unknown-linux-gnu/release/libauxmos.so ../../../../libauxmos.so cd ../.. diff --git a/tools/tgs4_scripts/PreCompile.sh b/tools/tgs4_scripts/PreCompile.sh index 6463b1a0d6..6130736b4e 100755 --- a/tools/tgs4_scripts/PreCompile.sh +++ b/tools/tgs4_scripts/PreCompile.sh @@ -84,7 +84,7 @@ fi echo "Deploying auxmos..." git checkout "$AUXMOS_VERSION" -env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks" -- -C target-cpu=native +env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native mv -f target/i686-unknown-linux-gnu/release/libauxmos.so "$1/libauxmos.so" cd .. From 68c3618ebe130cd88577e023233256d363eeb4f0 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Mon, 9 Aug 2021 19:14:01 -0700 Subject: [PATCH 80/98] Update check_grep.sh --- tools/ci/check_grep.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 9638215bb8..079f79704d 100755 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -6,6 +6,10 @@ shopt -s globstar st=0 +if git grep -P "\r\n"; then + echo "ERROR: CRLF line endings detected. Please stop using the webeditor, and fix it using a desktop Git client." + st = 1 +fi; if grep -El '^\".+\" = \(.+\)' _maps/**/*.dmm; then echo "ERROR: Non-TGM formatted map detected. Please convert it using Map Merger!" st=1 From 0ff2e0cee508041a435e770ab8dadfc750b5f137 Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 10 Aug 2021 15:00:12 +0300 Subject: [PATCH 81/98] makes the amount of integrated_blood lost equal to the blood_volume gained --- code/modules/mob/living/blood.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index c9dc42835b..6c1346ddeb 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -41,9 +41,10 @@ if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. if(integrating_blood > 0) var/integrated_blood = max(integrating_blood - 1, 0) + var/blood_diff = integrating_blood - integrated_blood integrating_blood = integrated_blood if(blood_volume < BLOOD_VOLUME_MAXIMUM) - blood_volume ++ + blood_volume += blood_diff if(blood_volume < BLOOD_VOLUME_NORMAL) var/nutrition_ratio = 0 if(!HAS_TRAIT(src, TRAIT_NOHUNGER)) From 09227544bed0645e830d57a9f83be1e03ec769a0 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Tue, 10 Aug 2021 15:00:54 +0300 Subject: [PATCH 82/98] Name's too similar --- code/modules/mob/living/blood.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 6c1346ddeb..de9c5fac67 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -40,7 +40,7 @@ if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. if(integrating_blood > 0) - var/integrated_blood = max(integrating_blood - 1, 0) + var/blood_integrated = max(integrating_blood - 1, 0) var/blood_diff = integrating_blood - integrated_blood integrating_blood = integrated_blood if(blood_volume < BLOOD_VOLUME_MAXIMUM) From c7a17b0e842e4cffd9de42a026065ead2aed1082 Mon Sep 17 00:00:00 2001 From: Artur <24881678+Arturlang@users.noreply.github.com> Date: Tue, 10 Aug 2021 20:15:07 +0300 Subject: [PATCH 83/98] Didn't properly renamy my var --- code/modules/mob/living/blood.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index de9c5fac67..7615792028 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -41,8 +41,8 @@ if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood. if(integrating_blood > 0) var/blood_integrated = max(integrating_blood - 1, 0) - var/blood_diff = integrating_blood - integrated_blood - integrating_blood = integrated_blood + var/blood_diff = integrating_blood - blood_integrated + integrating_blood = blood_integrated if(blood_volume < BLOOD_VOLUME_MAXIMUM) blood_volume += blood_diff if(blood_volume < BLOOD_VOLUME_NORMAL) From ac508a56336085c04241dc8ebef7351724345fde Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 10 Aug 2021 13:37:20 -0500 Subject: [PATCH 84/98] Automatic changelog generation for PR #14989 [ci skip] --- html/changelogs/AutoChangeLog-pr-14989.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14989.yml diff --git a/html/changelogs/AutoChangeLog-pr-14989.yml b/html/changelogs/AutoChangeLog-pr-14989.yml new file mode 100644 index 0000000000..b52f03def5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14989.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "lets felinids, humans and moths have markings" From d3ce7f5435780edc7b1936a4694dc806ec8f3af1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 11 Aug 2021 00:30:29 +0000 Subject: [PATCH 85/98] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-14989.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14989.yml diff --git a/html/changelog.html b/html/changelog.html index ee788152f0..eba8d84ba7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,12 @@ -->
      +

      11 August 2021

      +

      timothyteakettle updated:

      +
        +
      • lets felinids, humans and moths have markings
      • +
      +

      09 August 2021

      Arturlang updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 81ac5d0d4c..faa5fd7d22 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29795,3 +29795,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. again. Putnam3145: - balance: Rod of asclepius can now be used for revival surgery +2021-08-11: + timothyteakettle: + - rscadd: lets felinids, humans and moths have markings diff --git a/html/changelogs/AutoChangeLog-pr-14989.yml b/html/changelogs/AutoChangeLog-pr-14989.yml deleted file mode 100644 index b52f03def5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14989.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - rscadd: "lets felinids, humans and moths have markings" From 8eead5ef8d1ea110e7d435c8e5cb38feba575e5f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Aug 2021 04:01:08 -0500 Subject: [PATCH 86/98] Automatic changelog generation for PR #14961 [ci skip] --- html/changelogs/AutoChangeLog-pr-14961.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14961.yml diff --git a/html/changelogs/AutoChangeLog-pr-14961.yml b/html/changelogs/AutoChangeLog-pr-14961.yml new file mode 100644 index 0000000000..186bf8ab31 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14961.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - refactor: "Supermatter values use auxgm" From ca76d1b7338c1ca799f2274e15eb1e3a43277bc1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Aug 2021 04:44:54 -0500 Subject: [PATCH 87/98] Automatic changelog generation for PR #14995 [ci skip] --- html/changelogs/AutoChangeLog-pr-14995.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14995.yml diff --git a/html/changelogs/AutoChangeLog-pr-14995.yml b/html/changelogs/AutoChangeLog-pr-14995.yml new file mode 100644 index 0000000000..eef150cf9c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14995.yml @@ -0,0 +1,4 @@ +author: "cadyn" +delete-after: True +changes: + - server: "precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh" From f35e9ed5e080e1e5e2423549a5b4c8b9b2ff528c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 11 Aug 2021 04:54:52 -0500 Subject: [PATCH 88/98] Automatic changelog generation for PR #14685 [ci skip] --- html/changelogs/AutoChangeLog-pr-14685.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14685.yml diff --git a/html/changelogs/AutoChangeLog-pr-14685.yml b/html/changelogs/AutoChangeLog-pr-14685.yml new file mode 100644 index 0000000000..6a4ca88b05 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14685.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscdel: "Nonslimes and nonvampires will no longer be able to increase their blood to stupid heights" From 72c5878c98b6e8bb429408397d99267ddaa81716 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 12 Aug 2021 00:25:38 +0000 Subject: [PATCH 89/98] Automatic changelog compile [ci skip] --- html/changelog.html | 78 ++++------------------ html/changelogs/.all_changelog.yml | 8 +++ html/changelogs/AutoChangeLog-pr-14685.yml | 4 -- html/changelogs/AutoChangeLog-pr-14961.yml | 4 -- html/changelogs/AutoChangeLog-pr-14995.yml | 4 -- 5 files changed, 22 insertions(+), 76 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14685.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14961.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14995.yml diff --git a/html/changelog.html b/html/changelog.html index eba8d84ba7..428195f04a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,20 @@ -->
        +

        12 August 2021

        +

        Arturlang updated:

        +
          +
        • Nonslimes and nonvampires will no longer be able to increase their blood to stupid heights
        • +
        +

        Putnam3145 updated:

        +
          +
        • Supermatter values use auxgm
        • +
        +

        cadyn updated:

        +
          +
        • precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh
        • +
        +

        11 August 2021

        timothyteakettle updated:

          @@ -546,70 +560,6 @@
          • xenos are now truly immune to stamina damage.
          - -

          10 June 2021

          -

          Arturlang updated:

          -
            -
          • Holoparasites for traitors now cost 12 crystals, for operatives 8, the ricochet eyepath traitor item now 4.
          • -
          -

          DrPainis updated:

          -
            -
          • goliath calamari
          • -
          • cat meteors
          • -
          -

          Linzolle updated:

          -
            -
          • cults can build in maintenance (and other small areas) again.
          • -
          • centcom can no longer be selected as the target area for narsie to be summoned??????
          • -
          -

          MrJWhit updated:

          -
            -
          • Moves medical holodeck to the restricted category
          • -
          -

          SandPoot updated:

          -
            -
          • Uses some of the existing images for the typing indicators.
          • -
          • Fixes soulstone shard not working for non-cultists.
          • -
          -

          WanderingFox95 updated:

          -
            -
          • A random event for the cat surgeon to invade the station. Listen for scary noises!
          • -
          • Screaming Cat SFX, you know, for the mood.
          • -
          -

          bunny232 updated:

          -
            -
          • Atmos resin now properly prevents all atmos from moving
          • -
          • Air tanks now properly have a 21/79 o2/n2 mix
          • -
          • Hydroponics can now make 5u of slimejelly by injecting 3 oil, 2 radium and 1 tinea luxor into a glowshroom
          • -
          -

          keronshb updated:

          -
            -
          • Made it so Off Balance only disarms if they're shoved into a wall or person.
          • -
          • Reduced Off Balance time to 2 seconds.
          • -
          • Pierced Realities despawn after 3 minutes and 15 seconds, new unresearched realities spawn in after that time elsewhere to help other heretics get back into the game.
          • -
          • A required sacrifice amount for heretic's second to last and last powers are added to discourage only rushing for holes.
          • -
          • An announcement automatically plays to everyone that there's a heretic gunning for ascension upon learning the 2nd to last power
          • -
          • Blade Shatters are now used in hand other than with a HUD icon tweak: Adjusted some TGUI menus for the book to reflect how many sacrifices a heretic has and how many are required for certain powers
          • -
          • Fixes sprite issue for Void Cloak for people who have digigrade legs.
          • -
          • Fixes the Raw Prophet recipe to match the description
          • -
          • Lets the Cargo Shuttle use Disposal Pipes again
          • -
          • Adds motivation and adds it to the uplink
          • -
          • Adds Judgement Cut projectiles
          • -
          • Adds Judgement Cut hit effects and firing effects.
          • -
          • added sounds for the firing and hit sounds of Judgement Cuts, created by @dzahlus
          • -
          • Adds Floor Cluwnes and event for midround
          • -
          • Adds Cluwne mutation
          • -
          • Adds Cluwne spell
          • -
          • Adds Cluwnes
          • -
          • Adds Cluwne Mask + shoes
          • -
          • Adds Floor Cluwne spawn button
          • -
          • Adds Cluwne smite button
          • -
          -

          zeroisthebiggay updated:

          -
            -
          • Fixed an exploit allowing you to grab people from anywhere with a clowncar.
          • -
          • revenant essence objective reduced
          • -
        GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index faa5fd7d22..6676909b66 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29798,3 +29798,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2021-08-11: timothyteakettle: - rscadd: lets felinids, humans and moths have markings +2021-08-12: + Arturlang: + - rscdel: Nonslimes and nonvampires will no longer be able to increase their blood + to stupid heights + Putnam3145: + - refactor: Supermatter values use auxgm + cadyn: + - server: precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh diff --git a/html/changelogs/AutoChangeLog-pr-14685.yml b/html/changelogs/AutoChangeLog-pr-14685.yml deleted file mode 100644 index 6a4ca88b05..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14685.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - rscdel: "Nonslimes and nonvampires will no longer be able to increase their blood to stupid heights" diff --git a/html/changelogs/AutoChangeLog-pr-14961.yml b/html/changelogs/AutoChangeLog-pr-14961.yml deleted file mode 100644 index 186bf8ab31..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14961.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - refactor: "Supermatter values use auxgm" diff --git a/html/changelogs/AutoChangeLog-pr-14995.yml b/html/changelogs/AutoChangeLog-pr-14995.yml deleted file mode 100644 index eef150cf9c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14995.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "cadyn" -delete-after: True -changes: - - server: "precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh" From 86e053afd26e8326dc7e4eb63477af793cf24f7c Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Wed, 11 Aug 2021 21:03:02 -0700 Subject: [PATCH 90/98] Fixes circular reference in genits --- code/modules/arousal/genitals.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index ed41cae8ce..bf6e42b33d 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -27,6 +27,12 @@ if(do_update) update() +/obj/item/organ/genital/Destroy() + if(linked_organ.linked_organ == src) + linked_organ.linked_organ = null + linked_organ = null + . = ..() + /obj/item/organ/genital/proc/set_aroused_state(new_state,cause = "manual toggle") if(!(genital_flags & GENITAL_CAN_AROUSE)) return FALSE From 370f7ea9f845a95daf9e3edce3277d928e6d9a24 Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Wed, 11 Aug 2021 21:04:18 -0700 Subject: [PATCH 91/98] this can be null, so --- code/modules/arousal/genitals.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index bf6e42b33d..bfcaff7d56 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -28,7 +28,7 @@ update() /obj/item/organ/genital/Destroy() - if(linked_organ.linked_organ == src) + if(linked_organ?.linked_organ == src) linked_organ.linked_organ = null linked_organ = null . = ..() From a60d11d355857b93a00687e3183fd7f7f4ab4a1d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 12 Aug 2021 18:51:45 -0500 Subject: [PATCH 92/98] Automatic changelog generation for PR #15001 [ci skip] --- html/changelogs/AutoChangeLog-pr-15001.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15001.yml diff --git a/html/changelogs/AutoChangeLog-pr-15001.yml b/html/changelogs/AutoChangeLog-pr-15001.yml new file mode 100644 index 0000000000..40466881ee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15001.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "makes certain organs no longer have circular references" From b4bcfc3ffb5678b90dbf11cb54be9400b8c418f8 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Thu, 12 Aug 2021 17:06:08 -0700 Subject: [PATCH 93/98] Update repair.dm --- code/modules/procedural_mapping/mapGenerators/repair.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index d9380a40dd..a36ac88d6c 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -41,6 +41,7 @@ set waitfor = FALSE var/turf/B = L atoms += B + B.assemble_baseturfs(B.type) for(var/A in B) atoms += A if(istype(A,/obj/structure/cable)) From 394ce03f09289a6980c894614a64511805e24822 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 13 Aug 2021 00:25:06 +0000 Subject: [PATCH 94/98] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-15001.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-15001.yml diff --git a/html/changelog.html b/html/changelog.html index 428195f04a..ef06a94a8e 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,12 @@ -->
        +

        13 August 2021

        +

        Putnam3145 updated:

        +
          +
        • makes certain organs no longer have circular references
        • +
        +

        12 August 2021

        Arturlang updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 6676909b66..cc2e2b3b9f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29806,3 +29806,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - refactor: Supermatter values use auxgm cadyn: - server: precompile.sh and build.sh updated, auxmos set to 0.2.3 in dependencies.sh +2021-08-13: + Putnam3145: + - bugfix: makes certain organs no longer have circular references diff --git a/html/changelogs/AutoChangeLog-pr-15001.yml b/html/changelogs/AutoChangeLog-pr-15001.yml deleted file mode 100644 index 40466881ee..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15001.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Putnam3145" -delete-after: True -changes: - - bugfix: "makes certain organs no longer have circular references" From d1a1c737d4d1722b8a940f56f5d4ac81aec1b7be Mon Sep 17 00:00:00 2001 From: BlueWildrose <57083662+BlueWildrose@users.noreply.github.com> Date: Fri, 13 Aug 2021 11:29:54 -0700 Subject: [PATCH 95/98] Blacklists incapacitated mobs from being sentience event candidates --- code/modules/events/sentience.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index ba14a5307f..d90792c88f 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -37,7 +37,7 @@ continue if(L.mob_biotypes & blacklisted_biotypes) //hey can you don't continue - if(!(L in GLOB.player_list) && !L.mind) + if(!(L in GLOB.player_list) && !L.mind && !L.incapacitated()) potential += L if(!potential.len) From 11d70fe7d93aade2e649c43f606cf5058ff4b95d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 14 Aug 2021 00:22:55 +0000 Subject: [PATCH 96/98] Automatic changelog compile [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index ef06a94a8e..b8db04a0e4 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -560,12 +560,6 @@
        • unused goon coffin sprite
        • new water cooler sprite
        - -

        12 June 2021

        -

        silicons updated:

        -
          -
        • xenos are now truly immune to stamina damage.
        • -
        GoonStation 13 Development Team From 82e50c82cc08c0e2550c39fe9ae51e9aa18b191f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 15 Aug 2021 02:20:14 -0500 Subject: [PATCH 97/98] Automatic changelog generation for PR #15005 [ci skip] --- html/changelogs/AutoChangeLog-pr-15005.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-15005.yml diff --git a/html/changelogs/AutoChangeLog-pr-15005.yml b/html/changelogs/AutoChangeLog-pr-15005.yml new file mode 100644 index 0000000000..2c26c56975 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15005.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - bugfix: "Incapacitated mobs are blacklisted from being human-level intelligence sentience event candidates. This is particularly important due to slimes in BZ stasis on the station." From 8b532b8a214b395e1f0b6096e2deba2066e78f52 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sun, 15 Aug 2021 02:20:37 -0500 Subject: [PATCH 98/98] Automatic changelog generation for PR #14991 [ci skip] --- html/changelogs/AutoChangeLog-pr-14991.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14991.yml diff --git a/html/changelogs/AutoChangeLog-pr-14991.yml b/html/changelogs/AutoChangeLog-pr-14991.yml new file mode 100644 index 0000000000..db9ef4fe87 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14991.yml @@ -0,0 +1,4 @@ +author: "bunny232" +delete-after: True +changes: + - bugfix: "Polyvitiligo actually changes your color now"
    +

    04 August 2021

    +

    BlueWildrose updated:

    +
      +
    • The debrained overlay actually shows for brainless corpses now instead of showing a blue error.
    • +
    +

    timothyteakettle updated:

    +
      +
    • legs are no longer awful
    • +
    +

    03 August 2021

    zeroisthebiggay updated: