From fe755a14249a8e23f6d0a1a5b65af74d3f971ce8 Mon Sep 17 00:00:00 2001 From: Artur Date: Thu, 9 Apr 2020 21:42:00 +0300 Subject: [PATCH 01/82] Tackling Working so far, working on the lunge now --- .../LavaRuins/lavaland_surface_alien_nest.dmm | 2 +- .../lavaland_surface_syndicate_base1.dmm | 6 +- _maps/RandomRuins/SpaceRuins/advancedlab.dmm | 4 +- _maps/RandomRuins/SpaceRuins/deepstorage.dmm | 4 +- _maps/RandomZLevels/Academy.dmm | 2 +- _maps/RandomZLevels/spacebattle.dmm | 2 +- _maps/map_files/generic/CentCom.dmm | 2 +- code/__DEFINES/dcs/signals.dm | 5 +- code/__DEFINES/traits.dm | 2 + code/_globalvars/lists/maintenance_loot.dm | 1 + code/_onclick/click.dm | 3 + code/datums/components/crafting/recipes.dm | 9 + code/datums/components/tackle.dm | 492 ++++++++++++++++++ code/datums/elements/squish.dm | 28 + code/datums/mutations/body.dm | 4 + code/game/atoms_movable.dm | 9 +- code/game/gamemodes/clown_ops/clown_ops.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 3 +- .../game/objects/effects/spawners/lootdrop.dm | 2 +- code/game/objects/items/storage/toolbox.dm | 4 +- .../crates_lockers/closets/gimmick.dm | 4 +- .../objects/structures/ghost_role_spawners.dm | 2 +- .../bloodsucker/powers/fortitude.dm | 32 +- .../antagonists/bloodsucker/powers/lunge.dm | 98 +--- code/modules/awaymissions/capture_the_flag.dm | 3 +- code/modules/awaymissions/corpse.dm | 4 +- code/modules/cargo/exports/gear.dm | 4 +- code/modules/cargo/packs/armory.dm | 6 +- code/modules/cargo/packs/security.dm | 6 +- code/modules/clothing/gloves/miscellaneous.dm | 4 +- code/modules/clothing/gloves/tacklers.dm | 100 ++++ code/modules/clothing/outfits/ert.dm | 4 +- code/modules/clothing/outfits/standard.dm | 10 +- code/modules/clothing/outfits/vr.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../carbon/human/species_types/dwarves.dm | 3 +- .../mob/living/simple_animal/corpse.dm | 10 +- .../hostile/mining_mobs/hivelord.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- code/modules/research/designs/misc_designs.dm | 24 + code/modules/ruins/lavaland_ruin_code.dm | 2 +- code/modules/vending/security.dm | 1 + icons/mob/clothing/hands.dmi | Bin 0 -> 11008 bytes tgstation.dme | 2 + 44 files changed, 760 insertions(+), 153 deletions(-) create mode 100644 code/datums/components/tackle.dm create mode 100644 code/datums/elements/squish.dm create mode 100644 code/modules/clothing/gloves/tacklers.dm create mode 100644 icons/mob/clothing/hands.dmi diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm index 1ea3f19c62..862c745f81 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm @@ -70,7 +70,7 @@ /obj/structure/alien/weeds, /obj/item/clothing/mask/facehugger/impregnated, /obj/item/clothing/glasses/night, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/effect/decal/cleanable/blood/old, /obj/item/clothing/under/syndicate/tacticool, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 2ec5b88792..b22c9787ba 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -526,8 +526,8 @@ /obj/structure/closet/crate/secure/gear{ req_access_txt = "150" }, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/under/syndicate/combat, /obj/item/clothing/under/syndicate/combat, /obj/item/storage/belt/military, @@ -4197,7 +4197,7 @@ "kw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_y = -6 }, /obj/item/tank/internals/emergency_oxygen{ diff --git a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm index 66a3d4e55d..b553bb5c97 100644 --- a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm +++ b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm @@ -185,7 +185,7 @@ name = "Clothes" }, /obj/item/clothing/head/chameleon, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/suit/chameleon, /obj/item/clothing/under/chameleon, /obj/item/clothing/shoes/chameleon, @@ -221,7 +221,7 @@ }, /obj/item/clothing/under/rank/centcom/commander, /obj/item/clothing/head/centhat, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/shoes/sneakers/brown, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index bf4f0dbfa6..a4c60023e8 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -2202,11 +2202,11 @@ /area/ruin/space/has_grav/deepstorage/armory) "eO" = ( /obj/structure/table, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_x = -3; pixel_y = 4 }, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_x = 3; pixel_y = -2 }, diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm index 97ebb80101..de0b7cc430 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/Academy.dmm @@ -4322,7 +4322,7 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/academy/academycellar) "mV" = ( -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /turf/open/floor/plating/asteroid/snow, /area/awaymission/academy/academycellar) "mW" = ( diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 66d7f556b4..ca44e7d7b7 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -243,7 +243,7 @@ /area/awaymission/spacebattle/syndicate1) "bg" = ( /obj/structure/table/reinforced, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /turf/open/floor/mineral/plastitanium/red, /area/awaymission/spacebattle/syndicate1) "bh" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index c9b81cefd9..5c054c0bb4 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -7639,7 +7639,7 @@ /obj/item/clothing/suit/space/hardsuit/deathsquad{ pixel_y = 5 }, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/shoes/combat/swat, /obj/item/clothing/mask/gas/sechailer/swat, /obj/effect/turf_decal/stripes/line, diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index e75f832df3..70c2425f48 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -119,6 +119,8 @@ #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) + #define COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH 1 ///if true, flip if the impact will push what it hits + #define COMPONENT_MOVABLE_IMPACT_NEVERMIND 2 ///return true if you destroyed whatever it was you're impacting and there won't be anything for hitby() to run on #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) @@ -138,7 +140,6 @@ #define HEARING_SOURCE 8*/ #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) - // /mind signals #define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character) #define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening. @@ -148,6 +149,8 @@ #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A) #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat. +#define COMSIG_MOB_CLICKON "mob_clickon" //from base of mob/clickon(): (atom/A, params) + #define COMSIG_MOB_CANCEL_CLICKON 1 #define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize) #define COMPONENT_BLOCK_GHOSTING (1<<0) #define COMPONENT_DO_NOT_PENALIZE_GHOSTING (1<<1) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 476d99fd9b..9fc4847751 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -148,6 +148,8 @@ #define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events" #define TRAIT_NO_MIDROUND_ANTAG "no-midround-antag" //can't be turned into an antag by random events #define TRAIT_PASSTABLE "passtable" +#define TRAIT_GIANT "giant" +#define TRAIT_DWARF "dwarf" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index e825233bca..7ad7d154d4 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -116,5 +116,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/autosurgeon/penis = 1, /obj/item/autosurgeon/testicles = 1, /obj/item/storage/box/marshmallow = 2, + /obj/item/clothing/gloves/tackler/offbrand = 1, "" = 3 )) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 46c2c919f4..9ce96585d3 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -75,6 +75,9 @@ if(notransform) return + if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON) + return + var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["middle"]) ShiftMiddleClickOn(A) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 2b6f1a5b81..a87496a212 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -23,3 +23,12 @@ */ /datum/crafting_recipe/proc/check_requirements(mob/user, list/collected_requirements) return TRUE + +/datum/crafting_recipe/gripperoffbrand + name = "Improvised Gripper Gloves" + reqs = list( + /obj/item/clothing/gloves/fingerless = 1 + // /obj/item/stack/sticky_tape = 1 + ) + result = /obj/item/clothing/gloves/tackler/offbrand + category = CAT_CLOTHING diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm new file mode 100644 index 0000000000..28dd469041 --- /dev/null +++ b/code/datums/components/tackle.dm @@ -0,0 +1,492 @@ +#define MAX_TABLE_MESSES 8 // how many things can we knock off a table at once? + +/** + *#tackle.dm + * + * For when you want to throw a person at something and have fun stuff happen + * + * This component is made for carbon mobs (really, humans), and allows its parent to throw themselves and perform tackles. This is done by enabling throw mode, then clicking on your + * intended target with an empty hand. You will then launch toward your target. If you hit a carbon, you'll roll to see how hard you hit them. If you hit a solid non-mob, you'll + * roll to see how badly you just messed yourself up. If, along your journey, you hit a table, you'll slam onto it and send up to MAX_TABLE_MESSES (8) /obj/items on the table flying, + * and take a bit of extra damage and stun for each thing launched. + * + * There are 2 """skill rolls""" involved here, which are handled and explained in sack() and rollTackle() (for roll 1, carbons), and splat() (for roll 2, walls and solid objects) +*/ +/datum/component/tackler + dupe_mode = COMPONENT_DUPE_UNIQUE + + ///If we're currently tackling or are on cooldown. Actually, shit, if I use this to handle cooldowns, then getting thrown by something while on cooldown will count as a tackle..... whatever, i'll fix that next commit + var/tackling = TRUE + ///How much stamina it takes to launch a tackle + var/stamina_cost + ///Launching a tackle calls Knockdown on you for this long, so this is your cooldown. Once you stand back up, you can tackle again. + var/base_knockdown + ///Your max range for how far you can tackle. + var/range + ///How fast you sail through the air. Standard tackles are 1 speed, but gloves that throw you faster come at a cost: higher speeds make it more likely you'll be badly injured if you fly into a non-mob obstacle. + var/speed + ///A flat modifier to your roll against your target, as described in [rollTackle()][/datum/component/tackler/proc/rollTackle]. Slightly misleading, skills aren't relevant here, this is a matter of what type of gloves (or whatever) is granting you the ability to tackle. + var/skill_mod + ///Some gloves, generally ones that increase mobility, may have a minimum distance to fly. Rocket gloves are especially dangerous with this, be sure you'll hit your target or have a clear background if you miss, or else! + var/min_distance + ///The throwdatum we're currently dealing with, if we need it + var/datum/thrownthing/tackle + +/datum/component/tackler/Initialize(stamina_cost = 25, base_knockdown = 1 SECONDS, range = 4, speed = 1, skill_mod = 0, min_distance = min_distance) + if(!iscarbon(parent)) + return COMPONENT_INCOMPATIBLE + + src.stamina_cost = stamina_cost + src.base_knockdown = base_knockdown + src.range = range + src.speed = speed + src.skill_mod = skill_mod + src.min_distance = min_distance + + var/mob/P = parent + to_chat(P, "You are now able to launch tackles! You can do so by activating throw intent, and clicking on your target with an empty hand.") + + addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE) + +/datum/component/tackler/Destroy() + var/mob/P = parent + to_chat(P, "You can no longer tackle.") + ..() + +/datum/component/tackler/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_CLICKON, .proc/checkTackle) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/sack) + RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, .proc/registerTackle) + +/datum/component/tackler/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOB_CLICKON, COMSIG_MOVABLE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_POST_THROW)) + +///Store the thrownthing datum for later use +/datum/component/tackler/proc/registerTackle(mob/living/carbon/user, datum/thrownthing/TT) + tackle = TT + +///See if we can tackle or not. If we can, leap! +/datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/A, params) + if(!user.in_throw_mode || user.get_active_held_item() || user.pulling || user.buckling) + return + + if(HAS_TRAIT(user, TRAIT_HULK)) + to_chat(user, "You're too angry to remember how to tackle!") + return + + if(user.restrained()) + to_chat(user, "You need free use of your hands to tackle!") + return + + if(!(user.mobility_flags & MOBILITY_STAND)) + to_chat(user, "You must be standing to tackle!") + return + + if(tackling) + to_chat(user, "You're not ready to tackle!") + return + + if(user.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) // can't tackle if you just got shoved + to_chat(user, "You're too off balance to tackle!") + return + + user.face_atom(A) + + var/list/modifiers = params2list(params) + if(modifiers["alt"] || modifiers["shift"] || modifiers["ctrl"] || modifiers["middle"]) + return + + tackling = TRUE + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle) + playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) + + if(can_see(user, A, 7)) + user.visible_message("[user] leaps at [A]!", "You leap at [A]!") + else + user.visible_message("[user] leaps!", "You leap!") + + if(get_dist(user, A) < min_distance) + A = get_ranged_target_turf(user, get_dir(user, A), min_distance) //TODO: this only works in cardinals/diagonals, make it work with in-betweens too! + + user.Knockdown(base_knockdown, TRUE, TRUE) + user.adjustStaminaLoss(stamina_cost) + user.throw_at(A, range, speed, user, FALSE) + user.toggle_throw_mode() + addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE) + return(COMSIG_MOB_CANCEL_CLICKON) + +/** + * sack() + * + * sack() is called when you actually smack into something, assuming we're mid-tackle. First it deals with smacking into non-carbons, in two cases: + * * If it's a non-carbon mob, we don't care, get out of here and do normal thrown-into-mob stuff + * * Else, if it's something dense (walls, machinery, structures, most things other than the floor), go to splat() and get ready for some high grade shit + * + * If it's a carbon we hit, we'll call rollTackle() which rolls a die and calculates modifiers for both the tackler and target, then gives us a number. Negatives favor the target, while positives favor the tackler. + * Check [rollTackle()][/datum/component/tackler/proc/rollTackle] for a more thorough explanation on the modifiers at play. + * + * Then, we figure out what effect we want, and we get to work! Note that with standard gripper gloves and no modifiers, the range of rolls is (-3, 3). The results are as follows, based on what we rolled: + * * -inf to -5: Seriously botched tackle, tackler suffers a concussion, brute damage, and a 3 second paralyze, target suffers nothing + * * -4 to -2: weak tackle, tackler gets 3 second knockdown, target gets shove slowdown but is otherwise fine + * * -1 to 0: decent tackle, tackler gets up a bit quicker than the target + * * 1: solid tackle, tackler has more of an advantage getting up quicker + * * 2 to 4: expert tackle, tackler has sizeable advantage and lands on their feet with a free passive grab + * * 5 to inf: MONSTER tackle, tackler gets up immediately and gets a free aggressive grab, target takes sizeable stamina damage from the hit and is paralyzed for one and a half seconds and knocked down for three seconds + * + * Finally, we return a bitflag to [COMSIG_MOVABLE_IMPACT] that forces the hitpush to false so that we don't knock them away. +*/ +/datum/component/tackler/proc/sack(mob/living/carbon/user, atom/hit) + if(!tackling || !tackle) + return + + if(!iscarbon(hit)) + if(hit.density) + return splat(user, hit) + return + + var/mob/living/carbon/target = hit + var/mob/living/carbon/human/T = target + var/mob/living/carbon/human/S = user + + var/roll = rollTackle(target) + tackling = FALSE + + switch(roll) + if(-INFINITY to -5) + user.visible_message("[user] botches [user.p_their()] tackle and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your tackle and slam your head into [target], knocking yourself silly!", target) + to_chat(target, "[user] botches [user.p_their()] tackle and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!") + + user.Paralyze(30) + var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD) + if(hed) + hed.receive_damage(brute=20, updating_health=TRUE) + user.gain_trauma(/datum/brain_trauma/mild/concussion) + + if(-4 to -2) // glancing blow at best + user.visible_message("[user] lands a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", target) + to_chat(target, "[user] lands a weak tackle on you, briefly knocking you off-balance!") + + user.Knockdown(30) + if(ishuman(target) && !T.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) + T.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH) // maybe define a slightly more severe/longer slowdown for this + addtimer(CALLBACK(T, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH) + + if(-1 to 0) // decent hit, both parties are about equally inconvenienced + user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target) + to_chat(target, "[user] lands a passable tackle on you, sending you both tumbling!") + + target.adjustStaminaLoss(stamina_cost) + target.Paralyze(5) + user.Knockdown(20) + target.Knockdown(25) + + if(1 to 2) // solid hit, tackler has a slight advantage + user.visible_message("[user] lands a solid tackle on [target], knocking them both down hard!", "You land a solid tackle on [target], knocking you both down hard!", target) + to_chat(target, "[user] lands a solid tackle on you, knocking you both down hard!") + + target.adjustStaminaLoss(30) + target.Paralyze(5) + user.Knockdown(10) + target.Knockdown(20) + + if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land + user.visible_message("[user] lands an expert tackle on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert tackle on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target) + to_chat(target, "[user] lands an expert tackle on you, knocking you down hard and maintaining a passive grab!") + + user.SetKnockdown(0) + user.forceMove(get_turf(target)) + target.adjustStaminaLoss(40) + target.Paralyze(5) + target.Knockdown(30) + if(ishuman(target) && ishuman(user)) + S.dna.species.grab(S, T) + S.setGrabState(GRAB_PASSIVE) + + if(5 to INFINITY) // absolutely BODIED + user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) + to_chat(target, "[user] lands a monster tackle on you, knocking you senseless and aggressively pinning you!") + + user.SetKnockdown(0) + user.forceMove(get_turf(target)) + target.adjustStaminaLoss(40) + target.Paralyze(5) + target.Knockdown(30) + if(ishuman(target) && ishuman(user)) + S.dna.species.grab(S, T) + S.setGrabState(GRAB_AGGRESSIVE) + + + return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH + +/** + * rollTackle() + * + * This handles all of the modifiers for the actual carbon-on-carbon tackling, and gets its own proc because of how many there are (with plenty more in mind!) + * + * The base roll is between (-3, 3), with negative numbers favoring the target, and positive numbers favoring the tackler. The target and the tackler are both assessed for + * how easy they are to knock over, with clumsiness and dwarfiness being strong maluses for each, and gigantism giving a bonus for each. These numbers and ideas + * are absolutely subject to change. + + * In addition, after subtracting the defender's mod and adding the attacker's mod to the roll, the component's base (skill) mod is added as well. Some sources of tackles + * are better at taking people down, like the bruiser and rocket gloves, while the dolphin gloves have a malus in exchange for better mobility. +*/ +/datum/component/tackler/proc/rollTackle(mob/living/carbon/target) + var/defense_mod = 0 + var/attack_mod = 0 + + // DE-FENSE + if(target.drunkenness > 60) // drunks are easier to knock off balance + defense_mod -= 3 + else if(target.drunkenness > 30) + defense_mod -= 1 + if(HAS_TRAIT(target, TRAIT_CLUMSY)) + defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_FAT)) // chonkers are harder to knock over + defense_mod += 1 + //if(HAS_TRAIT(target, TRAIT_GRABWEAKNESS)) Todo, port the pushover trait + //defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_DWARF)) + defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_GIANT)) + defense_mod += 2 + + if(ishuman(target)) + var/mob/living/carbon/human/T = target + var/suit_slot = T.get_item_by_slot(ITEM_SLOT_OCLOTHING) + + if(isnull(T.wear_suit) && isnull(T.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? + defense_mod += 2 + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/space/hardsuit))) + defense_mod += 1 + if(T.is_shove_knockdown_blocked()) // riot armor and such + defense_mod += 5 + if(T.is_holding_item_of_type(/obj/item/shield)) + defense_mod += 2 + + if(islizard(T)) + if(!T.getorganslot(ORGAN_SLOT_TAIL)) // lizards without tails are off-balance + defense_mod -= 1 + else if(T.dna.species.is_wagging_tail()) // lizard tail wagging is robust and can swat away assailants! + defense_mod += 1 + + // OF-FENSE + var/mob/living/carbon/sacker = parent + + if(sacker.drunkenness > 60) // you're far too drunk to hold back! + attack_mod += 1 + else if(sacker.drunkenness > 30) // if you're only a bit drunk though, you're just sloppy + attack_mod -= 1 + if(HAS_TRAIT(sacker, TRAIT_CLUMSY)) + attack_mod -= 2 + if(HAS_TRAIT(sacker, TRAIT_DWARF)) + attack_mod -= 2 + if(HAS_TRAIT(sacker, TRAIT_GIANT)) + attack_mod += 2 + + if(ishuman(target)) + var/mob/living/carbon/human/S = sacker + + var/suit_slot = S.get_item_by_slot(ITEM_SLOT_OCLOTHING) + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/armor/riot))) // tackling in riot armor is more effective, but tiring + attack_mod += 2 + sacker.adjustStaminaLoss(20) + + var/r = rand(-3, 3) - defense_mod + attack_mod + skill_mod + return r + + +/** + * splat() + * + * This is where we handle diving into dense atoms, generally with effects ranging from bad to REALLY bad. This works as a percentile roll that is modified in two steps as detailed below. The higher + * the roll, the more severe the result. + * + * Mod 1: Speed + * * Base tackle speed is 1, which is what normal gripper gloves use. For other sources with higher speed tackles, like dolphin and ESPECIALLY rocket gloves, we obey Newton's laws and hit things harder. + * * For every unit of speed above 1, move the lower bound of the roll up by 15. Unlike Mod 2, this only serves to raise the lower bound, so it can't be directly counteracted by anything you can control. + * + * Mod 2: Misc + * -Flat modifiers, these take whatever you rolled and add/subtract to it, with the end result capped between the minimum from Mod 1 and 100. Note that since we can't roll higher than 100 to start with, + * wearing a helmet should be enough to remove any chance of permanently paralyzing yourself and dramatically lessen knocking yourself unconscious, even with rocket gloves. Will expand on maybe + * * Wearing a helmet: -6 + * * Wearing armor: -6 + * * Clumsy: +6 + * + * Effects: Below are the outcomes based off your roll, in order of increasing severity + * * 1-63: Knocked down for a few seconds and a bit of brute and stamina damage + * * 64-83: Knocked silly, gain some confusion as well as the above + * * 84-93: Cranial trauma, get a concussion and more confusion, plus more damage + * * 94-98: Knocked unconscious, significant chance to get a random mild brain trauma, as well as a fair amount of damage + * * 99-100: Break your spinal cord, get paralyzed, take a bunch of damage too. Very unlucky! +*/ +/datum/component/tackler/proc/splat(mob/living/carbon/user, atom/hit) + if(istype(hit, /obj/structure/window)) + var/obj/structure/window/W = hit + splatWindow(user, W) + if(QDELETED(W)) + return COMPONENT_MOVABLE_IMPACT_NEVERMIND + return + + var/oopsie_mod = 0 + var/danger_zone = (speed - 1) * 15 // for every extra speed we have over 1, take away 15 of the safest chance + danger_zone = max(min(danger_zone, 100), 1) + + if(ishuman(user)) + var/mob/living/carbon/human/S = user + var/head_slot = S.get_item_by_slot(ITEM_SLOT_HEAD) + var/suit_slot = S.get_item_by_slot(ITEM_SLOT_OCLOTHING) + if(head_slot && (istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) + oopsie_mod -= 6 + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/armor/))) + oopsie_mod -= 6 + + if(HAS_TRAIT(user, TRAIT_CLUMSY)) + oopsie_mod += 6 //honk! + + var/oopsie = rand(danger_zone, 100) + if(oopsie >= 94 && oopsie_mod < 0) // good job avoiding getting paralyzed! gold star! + to_chat(user, "You're really glad you're wearing protection!") + oopsie += oopsie_mod + + switch(oopsie) + if(99 to INFINITY) + // can you imagine standing around minding your own business when all of the sudden some guy fucking launches himself into a wall at full speed and irreparably paralyzes himself? + user.visible_message("[user] slams face-first into [hit] at an awkward angle, severing [user.p_their()] spinal column with a sickening crack! Holy shit!", "You slam face-first into [hit] at an awkward angle, severing your spinal column with a sickening crack! Holy shit!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(30) + playsound(user, 'sound/effects/blobattack.ogg', 60, TRUE) + playsound(user, 'sound/effects/splat.ogg', 70, TRUE) + user.emote("scream") + user.gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic) // oopsie indeed! + shake_camera(user, 7, 7) + user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.clear_fullscreen("flash", 4.5) + + if(94 to 98) + user.visible_message("[user] slams face-first into [hit] with a concerning squish, immediately going limp!", "You slam face-first into [hit], and immediately lose consciousness!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(30) + user.Unconscious(100) + 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.clear_fullscreen("flash", 3.5) + + if(84 to 93) + user.visible_message("[user] slams head-first into [hit], suffering major cranial trauma!", "You slam head-first into [hit], and the world explodes around you!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(30) + user.confused += 15 + if(prob(80)) + user.gain_trauma(/datum/brain_trauma/mild/concussion) + user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) + user.Knockdown(40) + shake_camera(user, 5, 5) + user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.clear_fullscreen("flash", 2.5) + + if(64 to 83) + user.visible_message("[user] slams hard into [hit], knocking [user.p_them()] senseless!", "You slam hard into [hit], knocking yourself senseless!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(10) + user.confused += 10 + user.Knockdown(30) + shake_camera(user, 3, 4) + + if(1 to 63) + user.visible_message("[user] slams into [hit]!", "You slam into [hit]!") + user.adjustStaminaLoss(20) + user.adjustBruteLoss(10) + user.Knockdown(30) + shake_camera(user, 2, 2) + + playsound(user, 'sound/weapons/smash.ogg', 70, TRUE) + + +/datum/component/tackler/proc/resetTackle() + tackling = FALSE + QDEL_NULL(tackle) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + +///A special case for splatting for handling windows +/datum/component/tackler/proc/splatWindow(mob/living/carbon/user, obj/structure/window/W) + playsound(user, "sound/effects/Glasshit.ogg", 140, TRUE) + + if(W.type in list(/obj/structure/window, /obj/structure/window/fulltile, /obj/structure/window/unanchored, /obj/structure/window/fulltile/unanchored)) // boring unreinforced windows + for(var/i = 0, i < speed, i++) + var/obj/item/shard/shard = new /obj/item/shard(get_turf(user)) + //shard.embedding = list(embed_chance = 100, ignore_throwspeed_threshold = TRUE, impact_pain_mult=3, pain_chance=5) + //shard.AddElement(/datum/element/embed, shard.embedding) + user.hitby(shard, skipcatch = TRUE, hitpush = FALSE) + //shard.embedding = list() + //shard.AddElement(/datum/element/embed, shard.embedding) + W.obj_destruction() + user.adjustStaminaLoss(10 * speed) + user.Paralyze(30) + user.visible_message("[user] slams into [W] and shatters it, shredding [user.p_them()]self with glass!", "You slam into [W] and shatter it, shredding yourself with glass!") + + else + user.visible_message("[user] slams into [W] like a bug, then slowly slides off it!", "You slam into [W] like a bug, then slowly slide off it!") + user.Paralyze(10) + user.Knockdown(30) + W.take_damage(20 * speed) + user.adjustStaminaLoss(10 * speed) + user.adjustBruteLoss(5 * speed) + +/datum/component/tackler/proc/delayedSmash(obj/structure/window/W) + if(W) + W.obj_destruction() + playsound(W, "shatter", 70, TRUE) + +///Check to see if we hit a table, and if so, make a big mess! +/datum/component/tackler/proc/checkObstacle(mob/living/carbon/owner) + if(!tackling) + return + + var/turf/T = get_turf(owner) + var/obj/structure/table/kevved = locate(/obj/structure/table) in T.contents + if(!kevved) + return + + var/list/messes = list() + + // we split the mess-making into two parts (check what we're gonna send flying, intermission for dealing with the tackler, then actually send stuff flying) for the benefit of making sure the face-slam text + // comes before the list of stuff that goes flying, but can still adjust text + damage to how much of a mess it made + for(var/obj/item/I in T.contents) + if(!I.anchored) + messes += I + if(messes.len >= MAX_TABLE_MESSES) + break + + /// for telling HOW big of a mess we just made + var/HOW_big_of_a_miss_did_we_just_make = "" + if(messes.len) + if(messes.len < MAX_TABLE_MESSES / 4) + HOW_big_of_a_miss_did_we_just_make = ", making a mess" + else if(messes.len < MAX_TABLE_MESSES / 2) + HOW_big_of_a_miss_did_we_just_make = ", making a big mess" + else if(messes.len < MAX_TABLE_MESSES) + HOW_big_of_a_miss_did_we_just_make = ", making a giant mess" + else + HOW_big_of_a_miss_did_we_just_make = ", making a ginormous mess!" // an extra exclamation point!! for emphasis!!! + + owner.visible_message("[owner] trips over [kevved] and slams into it face-first[HOW_big_of_a_miss_did_we_just_make]!", "You trip over [kevved] and slam into it face-first[HOW_big_of_a_miss_did_we_just_make]!") + owner.adjustStaminaLoss(20 + messes.len * 2) + owner.adjustBruteLoss(10 + messes.len) + owner.Paralyze(5 * messes.len) // half a second of paralyze for each thing you knock around + owner.Knockdown(20 + 5 * messes.len) // 2 seconds of knockdown after the paralyze + + for(var/obj/item/I in messes) + var/dist = rand(1, 3) + var/sp = 2 + if(prob(25 * (src.speed - 1))) // if our tackle speed is higher than 1, with chance (speed - 1 * 25%), throw the thing at our tackle speed + 1 + sp = speed + 1 + I.throw_at(get_ranged_target_turf(I, pick(GLOB.alldirs), range = dist), range = dist, speed = sp) + I.visible_message("[I] goes flying[sp > 3 ? " dangerously fast" : ""]!") // standard embed speed + + playsound(owner, 'sound/weapons/smash.ogg', 70, TRUE) + tackle.finalize(hit=TRUE) + resetTackle() + +#undef MAX_TABLE_MESSES diff --git a/code/datums/elements/squish.dm b/code/datums/elements/squish.dm new file mode 100644 index 0000000000..823d391e14 --- /dev/null +++ b/code/datums/elements/squish.dm @@ -0,0 +1,28 @@ +#define SHORT 5/7 +#define TALL 7/5 + +/datum/element/squish + element_flags = ELEMENT_DETACH + +/datum/element/squish/Attach(datum/target, duration) + . = ..() + if(!iscarbon(target)) + return ELEMENT_INCOMPATIBLE + + var/mob/living/carbon/C = target + var/was_lying = (C.lying != 0) + addtimer(CALLBACK(src, .proc/Detach, C, was_lying), duration) + + C.transform = C.transform.Scale(TALL, SHORT) + +/datum/element/squish/Detach(mob/living/carbon/C, was_lying) + . = ..() + if(istype(C)) + var/is_lying = (C.lying != 0) + if(was_lying == is_lying) + C.transform = C.transform.Scale(SHORT, TALL) + else + C.transform = C.transform.Scale(TALL, SHORT) + +#undef SHORT +#undef TALL diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ab7fe986fb..9f8c74e2db 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -81,6 +81,7 @@ /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) if(..()) return + ADD_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.transform = owner.transform.Scale(1, 0.8) passtable_on(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") @@ -88,6 +89,7 @@ /datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner) if(..()) return + REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.transform = owner.transform.Scale(1, 1.25) passtable_off(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") @@ -339,6 +341,7 @@ /datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner) if(..()) return + ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) owner.resize = 1.25 owner.update_transform() owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") @@ -346,6 +349,7 @@ /datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) if(..()) return + REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) owner.resize = 0.8 owner.update_transform() owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6089d11d6c..cc6f84a18f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -251,8 +251,13 @@ /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) set waitfor = 0 - SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) - return hit_atom.hitby(src, throwingdatum=throwingdatum) + var/hitpush = TRUE + var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) + if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) + hitpush = FALSE // hacky, tie this to something else or a proper workaround later + + if(impact_signal & ~COMPONENT_MOVABLE_IMPACT_NEVERMIND) // in case a signal interceptor broke or deleted the thing before we could process our hit + return hit_atom.hitby(src, throwingdatum = throwingdatum, hitpush = hitpush) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO)))) diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 11898701fa..d0914b8d8f 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -37,7 +37,7 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/clown_shoes/combat mask = /obj/item/clothing/mask/gas/clown_hat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated back = /obj/item/storage/backpack/clown ears = /obj/item/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/nuke/syndicate diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 48a298984c..5da95bbd3a 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -120,8 +120,7 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/nuke/syndicate id = /obj/item/card/id/syndicate diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index d79fba7172..8aa2627825 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -518,6 +518,6 @@ /obj/item/gun/ballistic/automatic/toy/pistol = 5, /obj/item/firing_pin = 5, /obj/item/grenade/empgrenade = 15, - /obj/item/clothing/gloves/combat = 10, + /obj/item/clothing/gloves/tackler/combat/insulated = 10, /obj/item/clothing/shoes/sneakers/noslip = 10 ) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 50620b90fe..64e0a6b492 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -138,7 +138,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons) new /obj/item/crowbar/red(src) new /obj/item/wirecutters(src, "red") new /obj/item/multitool(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat/insulated(src) /obj/item/storage/toolbox/drone name = "mechanical toolbox" @@ -311,7 +311,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons) new /obj/item/crowbar/red(src) new /obj/item/wirecutters(src, "red") new /obj/item/multitool/ai_detect(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat/insulated(src) /obj/item/storage/toolbox/gold_real/ComponentInitialize() . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 83827b56b6..0da502283b 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -37,8 +37,8 @@ ..() new /obj/item/clothing/glasses/eyepatch(src) new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index c918e7b867..e794e12ad7 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -453,7 +453,7 @@ name = "Syndicate Operative Empty" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack implants = list(/obj/item/implant/weapons_auth) diff --git a/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm index f0724f8204..d1df049dd1 100644 --- a/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -3,7 +3,7 @@ /datum/action/bloodsucker/fortitude - name = "Fortitude"//"Cellular Emporium" + name = "Fortitude" desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active." button_icon_state = "power_fortitude" bloodcost = 30 @@ -12,43 +12,39 @@ amToggle = TRUE warn_constant_cost = TRUE - var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS. + var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS. /datum/action/bloodsucker/fortitude/ActivatePower() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/datum/antagonist/bloodsucker/B = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner to_chat(user, "Your flesh, skin, and muscles become as steel.") // Traits & Effects ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") ADD_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") - ADD_TRAIT(user, TRAIT_NORUNNING, "fortitude") if(ishuman(owner)) var/mob/living/carbon/human/H = owner - this_resist = max(0.3, 0.7 - level_current * 0.1) - H.physiology.brute_mod *= this_resist//0.5 - H.physiology.burn_mod *= this_resist//0.5 - // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm) + fortitude_resist = max(0.3, 0.7 - level_current * 0.1) + H.physiology.brute_mod *= fortitude_resist + H.physiology.burn_mod *= fortitude_resist var/was_running = (user.m_intent == MOVE_INTENT_RUN) if(was_running) user.toggle_move_intent() - while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) + while(B && ContinueActive(user) && !(user.m_intent == MOVE_INTENT_RUN)) // Pay Blood Toll (if awake) if(user.stat == CONSCIOUS) - bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on. + B.AddBloodVolume(-0.5) sleep(20) // Check every few ticks that we haven't disabled this power // Return to Running (if you were before) - if(was_running && user.m_intent != MOVE_INTENT_RUN) - user.toggle_move_intent() - + /datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target) ..() // Restore Traits & Effects REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") - REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude") - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.brute_mod /= this_resist//0.5 - H.physiology.burn_mod /= this_resist//0.5 + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + H.physiology.brute_mod /= fortitude_resist + H.physiology.burn_mod /= fortitude_resist diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index f6dfc8ba72..e1e8f4363a 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -1,88 +1,28 @@ -// Level 1: Grapple level 2 -// Level 2: Grapple 3 from Behind -// Level 3: Grapple 3 from Shadows -/datum/action/bloodsucker/targeted/lunge + + +/datum/action/bloodsucker/lunge name = "Predatory Lunge" desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down." button_icon_state = "power_lunge" bloodcost = 10 - cooldown = 120 - target_range = 3 - power_activates_immediately = TRUE - message_Trigger = "Whom will you ensnare within your grasp?" - must_be_capacitated = TRUE + cooldown = 30 bloodsucker_can_buy = TRUE + warn_constant_cost = TRUE + amToggle = TRUE -/datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE - // Being Grabbed - if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) - if(display_error) - to_chat(owner, "You're being grabbed!") - return FALSE - if(!owner.has_gravity(owner.loc))//TODO figure out how to check if theyre able to move while in nograv - if(display_error) - to_chat(owner, "You cant lunge while floating!") - return FALSE - return TRUE +/datum/action/bloodsucker/lunge/ActivatePower() + var/mob/living/user = owner + var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + user.LoadComponent(/datum/component/tackler, stamina_cost = 50, base_knockdown = 3 SECONDS, range = 4, speed = 0.8, skill_mod = 5, min_distance = 2) + active = TRUE + while(B && ContinueActive(user) && CHECK_MOBILITY(user, MOBILITY_STAND)) + B.AddBloodVolume(-0.1) + sleep(5) -/datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) - return iscarbon(A) +/datum/action/bloodsucker/lunge/ContinueActive(mob/living/user) + return ..() -/datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) - // Check: Self - if(target == owner) - return FALSE - // Check: Range - //if (!(target in view(target_range, get_turf(owner)))) - // if (display_error) - // to_chat(owner, "Your victim is too far away.") - // return FALSE - // DEFAULT CHECKS (Distance) - if(!..()) - return FALSE - // Check: Turf - var/mob/living/L = A - if(!isturf(L.loc)) - return FALSE - return TRUE - -/datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) - // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/carbon/target = A - var/turf/T = get_turf(target) - var/mob/living/L = owner - // Clear Vars - owner.pulling = null - // Will we Knock them Down? - var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet) - // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet - // Step One: Heatseek toward Target's Turf - addtimer(CALLBACK(GLOBAL_PROC, .proc/_walk, owner, 0), 2 SECONDS) - target.playsound_local(get_turf(owner), 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // target-only telegraphing - owner.playsound_local(owner, 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // audio feedback to the user - if(do_mob(owner, owner, 7, TRUE, TRUE)) - walk_towards(owner, T, 0.1, 10) // yes i know i shouldn't use this but i don't know how to work in anything better - if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && !CHECK_MOBILITY(L, MOBILITY_STAND)) - var/send_dir = get_dir(owner, T) - new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) - owner.spin(10) - // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) - for(var/i in 1 to 6) - if (target.Adjacent(owner)) - // LEVEL 2: If behind target, mute or unconscious! - if(do_knockdown) // && level_current >= 1) - target.Knockdown(15 + 10 * level_current,1) - target.adjustStaminaLoss(40 + 10 * level_current) - // Cancel Walk (we were close enough to contact them) - walk(owner, 0) - target.Stun(10,1) //Without this the victim can just walk away - target.grabbedby(owner) // Taken from mutations.dm under changelings - target.grippedby(owner, instant = TRUE) //instant aggro grab - break - sleep(3) - -/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target) +/datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner) ..() // activate = FALSE - user.update_mobility() + var/datum/component/tackler + tackler.RemoveComponent() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 0d96c125a1..f841ae20ca 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -487,8 +487,7 @@ suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf toggle_helmet = FALSE // see the whites of their eyes shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - id = /obj/item/card/id/syndicate + gloves = /obj/item/clothing/gloves/tackler/combat belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf l_pocket = /obj/item/ammo_box/magazine/recharge/ctf r_pocket = /obj/item/ammo_box/magazine/recharge/ctf diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 50dd1e5608..ab0c9eb691 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -488,7 +488,7 @@ glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba head = /obj/item/clothing/head/centhat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat shoes = /obj/item/clothing/shoes/combat/swat r_pocket = /obj/item/lighter id = /obj/item/card/id @@ -505,7 +505,7 @@ uniform = /obj/item/clothing/under/rank/security/officer suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat mask = /obj/item/clothing/mask/gas/sechailer/swat head = /obj/item/clothing/head/helmet/swat/nanotrasen back = /obj/item/storage/backpack/security diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 10b3d4f707..cefa705b0d 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -309,7 +309,7 @@ /datum/export/gear/combatgloves cost = 80 unit_name = "combat gloves" - export_types = list(/obj/item/clothing/gloves/combat, /obj/item/clothing/gloves/rapid, /obj/item/clothing/gloves/krav_maga) + export_types = list(/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/gloves/rapid, /obj/item/clothing/gloves/krav_maga) include_subtypes = TRUE /datum/export/gear/bonegloves @@ -797,4 +797,4 @@ datum/export/gear/glasses //glasses are not worth selling export_types = list(/obj/item/clothing/head/chameleon, /obj/item/clothing/mask/chameleon, /obj/item/clothing/under/chameleon, /obj/item/clothing/suit/chameleon, /obj/item/clothing/glasses/chameleon,\ /obj/item/clothing/gloves/chameleon, /obj/item/clothing/head/chameleon, /obj/item/clothing/shoes/chameleon, /obj/item/storage/backpack/chameleon, \ /obj/item/storage/belt/chameleon, /obj/item/radio/headset/chameleon, /obj/item/pda/chameleon, /obj/item/stamp/chameleon, /obj/item/clothing/neck/cloak/chameleon) - include_subtypes = TRUE \ No newline at end of file + include_subtypes = TRUE diff --git a/code/modules/cargo/packs/armory.dm b/code/modules/cargo/packs/armory.dm index d832200201..501b1426ae 100644 --- a/code/modules/cargo/packs/armory.dm +++ b/code/modules/cargo/packs/armory.dm @@ -175,7 +175,7 @@ /obj/item/clothing/suit/armor/vest/russian, /obj/item/clothing/head/helmet/rus_helmet, /obj/item/clothing/shoes/russian, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/under/syndicate/rus_army, /obj/item/clothing/under/costume/soviet, /obj/item/clothing/mask/russian_balaclava, @@ -201,8 +201,8 @@ /obj/item/clothing/mask/gas/sechailer/swat, /obj/item/storage/belt/military/assault, /obj/item/storage/belt/military/assault, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat) + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/clothing/gloves/tackler/combat/insulated) crate_name = "swat crate" /datum/supply_pack/security/armory/wt550 diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index aea7b95742..ee750b8df7 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -91,8 +91,8 @@ /obj/item/clothing/suit/armor/bulletproof, /obj/item/clothing/head/helmet/alt, /obj/item/clothing/head/helmet/alt, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas) crate_name = "surplus russian clothing" @@ -109,7 +109,7 @@ /obj/item/clothing/head/ushanka, /obj/item/clothing/suit/armor/bulletproof, /obj/item/clothing/head/helmet/alt, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/mask/gas, /obj/item/gun/ballistic/shotgun/boltaction, /obj/item/ammo_box/a762) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 9f4b89f607..eb53beb139 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -26,7 +26,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) strip_mod = 0.9 -/obj/item/clothing/gloves/combat +/obj/item/clothing/gloves/tackler/combat/insulated name = "combat gloves" desc = "These tactical gloves are fireproof and shock resistant." icon_state = "combat" @@ -117,4 +117,4 @@ strip_delay = 80 transfer_prints = FALSE strip_mod = 5 - strip_silence = TRUE \ No newline at end of file + strip_silence = TRUE diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm new file mode 100644 index 0000000000..95c7739bd8 --- /dev/null +++ b/code/modules/clothing/gloves/tacklers.dm @@ -0,0 +1,100 @@ +/obj/item/clothing/gloves/tackler + name = "gripper gloves" + desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls." + icon_state = "tackle" + item_state = "tackle" + transfer_prints = TRUE + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + resistance_flags = NONE + //custom_premium_price = 350 + /// For storing our tackler datum so we can remove it after + var/datum/component/tackler + /// See: [/datum/component/tackler/var/stamina_cost] + var/tackle_stam_cost = 25 + /// See: [/datum/component/tackler/var/base_knockdown] + var/base_knockdown = 1 SECONDS + /// See: [/datum/component/tackler/var/range] + var/tackle_range = 4 + /// See: [/datum/component/tackler/var/min_distance] + var/min_distance = 0 + /// See: [/datum/component/tackler/var/speed] + var/tackle_speed = 1 + /// See: [/datum/component/tackler/var/skill_mod] + var/skill_mod = 0 + +/obj/item/clothing/gloves/tackler/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + if(slot == ITEM_SLOT_GLOVES) + var/mob/living/carbon/human/H = user + tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance) + +/obj/item/clothing/gloves/tackler/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) + qdel(tackler) + +/obj/item/clothing/gloves/tackler/dolphin + name = "dolphin gloves" + desc = "Sleek, aerodynamic gripper gloves that are less effective at actually performing takedowns, but more effective at letting the user sail through the hallways and cause accidents." + icon_state = "tackledolphin" + item_state = "tackledolphin" + + tackle_stam_cost = 15 + base_knockdown = 0.5 SECONDS + tackle_range = 5 + tackle_speed = 2 + min_distance = 2 + skill_mod = -2 + +/obj/item/clothing/gloves/tackler/combat + name = "gorilla gloves" + desc = "Premium quality combative gloves, heavily reinforced to give the user an edge in close combat tackles, though they are more taxing to use than normal gripper gloves. Fireproof to boot!" + icon_state = "black" + item_state = "blackgloves" + + tackle_stam_cost = 35 + base_knockdown = 1.5 SECONDS + tackle_range = 5 + skill_mod = 2 + + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + +/obj/item/clothing/gloves/tackler/combat/insulated + name = "guerilla gloves" + desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks." + siemens_coefficient = 0 + permeability_coefficient = 0.05 + +/obj/item/clothing/gloves/tackler/rocket + name = "rocket gloves" + desc = "The ultimate in high risk, high reward, perfect for when you need to stop a criminal from fifty feet away or die trying. Banned in most Spinward gridiron football and rugby leagues." + icon_state = "tacklerocket" + item_state = "tacklerocket" + + tackle_stam_cost = 50 + base_knockdown = 2 SECONDS + tackle_range = 10 + min_distance = 7 + tackle_speed = 6 + skill_mod = 7 + +/obj/item/clothing/gloves/tackler/offbrand + name = "improvised gripper gloves" + desc = "Ratty looking fingerless gloves wrapped with sticky tape. Beware anyone wearing these, for they clearly have no shame and nothing to lose." + icon_state = "fingerless" + item_state = "fingerless" + + tackle_stam_cost = 30 + base_knockdown = 1.75 SECONDS + min_distance = 2 + skill_mod = -1 diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 48cc92db61..43df2eec2f 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -3,7 +3,7 @@ uniform = /obj/item/clothing/under/rank/centcom/officer shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent/alt /datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) @@ -69,7 +69,7 @@ id = /obj/item/card/id/ert/Security suit = /obj/item/clothing/suit/space/hardsuit/ert/sec glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/security + gloves = /obj/item/clothing/gloves/tackler/combat/insulated belt = /obj/item/storage/belt/security/full backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index b1f6e7696d..d692f9c3fb 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -205,7 +205,7 @@ uniform = /obj/item/clothing/under/rank/centcom/commander suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent/commander glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba @@ -234,7 +234,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/officer shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated glasses = /obj/item/clothing/glasses/thermal/eyepatch ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/cigarette/cigar/havana @@ -316,7 +316,7 @@ uniform = /obj/item/clothing/under/costume/soviet head = /obj/item/clothing/head/pirate/captain shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent glasses = /obj/item/clothing/glasses/thermal/eyepatch suit = /obj/item/clothing/suit/pirate/captain @@ -372,7 +372,7 @@ uniform = /obj/item/clothing/under/color/green suit = /obj/item/clothing/suit/space/hardsuit/deathsquad shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated mask = /obj/item/clothing/mask/gas/sechailer/swat glasses = /obj/item/clothing/glasses/hud/toggle/thermal back = /obj/item/storage/backpack/security @@ -431,7 +431,7 @@ glasses = /obj/item/clothing/glasses/debug ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/gas/welding/up - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated belt = /obj/item/storage/belt/utility/chief/full l_pocket = /obj/item/gun/magic/wand/resurrection/debug r_pocket = /obj/item/gun/magic/wand/death/debug diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index ee350e3891..7a057eda41 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -17,7 +17,7 @@ name = "Syndicate VR Operative - Basic" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated back = /obj/item/storage/backpack id = /obj/item/card/id/syndicate belt = /obj/item/gun/ballistic/automatic/pistol diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index fc85fc25c4..cb3833b7f6 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -110,7 +110,7 @@ var/mob/living/carbon/victim = hit_atom if(victim.movement_type & FLYING) return - if(hurt) + if(hurt && !GetComponent(/datum/component/tackler)) victim.take_bodypart_damage(10) take_bodypart_damage(10) victim.DefaultCombatKnockdown(20) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index bb2c08aa9b..112962f7e6 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // name = "Dwarf" id = "dwarf" //Also called Homo sapiens pumilionis default_color = "FFFFFF" - species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,NO_UNDERWEAR) + species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,NO_UNDERWEAR,TRAIT_DWARF) inherent_traits = list() limbs_id = "human" use_skintones = 1 @@ -36,7 +36,6 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // H.transform = H.transform.Scale(1, 0.8) //We use scale, and yeah. Dwarves can become gnomes with DWARFISM. RegisterSignal(C, COMSIG_MOB_SAY, .proc/handle_speech) //We register handle_speech is being used. - /datum/species/dwarf/on_species_loss(mob/living/carbon/H, datum/species/new_species) . = ..() H.transform = H.transform.Scale(1, 1.25) //And we undo it. diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 2e0e9dadb4..585bf58d95 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -20,7 +20,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas head = /obj/item/clothing/head/helmet/swat @@ -39,7 +39,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/tank/jetpack/oxygen @@ -59,7 +59,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/tank/jetpack/oxygen/harness @@ -130,7 +130,7 @@ uniform = /obj/item/clothing/under/syndicate/camo suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset head = /obj/item/clothing/head/helmet/alt mask = /obj/item/clothing/mask/balaclava @@ -177,7 +177,7 @@ uniform = /obj/item/clothing/under/rank/security/officer suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/sechailer/swat head = /obj/item/clothing/head/helmet/swat/nanotrasen diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 89d9919981..8487564c98 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -200,7 +200,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H) visible_message("[name] burrows into the flesh of [H]!") var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L - if(H.dna.check_mutation(DWARFISM)) //dwarf legions aren't just fluff! + if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff! L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) else L = new(H.loc) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index b7f32421aa..5f3c06642f 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -728,7 +728,7 @@ All effects don't start immediately, but rather get worse over time; the rate is var/real_dorf = isdwarf(M) //_species(H, /datum/species/dwarf) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.dna.check_mutation(DWARFISM) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE) || real_dorf) + if(HAS_TRAIT(H, TRAIT_DWARF) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE || real_dorf)) to_chat(H, "Now THAT is MANLY!") if(real_dorf) boozepwr = 100 // Don't want dwarves to die because of a low booze power diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index c18c33b04b..b734931de2 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -614,3 +614,27 @@ build_path = /obj/item/circuitboard/computer/sat_control category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + + + +///////////////////////////////////////// +////////////Tackle Gloves//////////////// +///////////////////////////////////////// + +/datum/design/tackle_dolphin + name = "Dolphin Gloves" + id = "tackle_dolphin" + build_type = PROTOLATHE + materials = list(/datum/material/plastic = 2500) + build_path = /obj/item/clothing/gloves/tackler/dolphin + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/tackle_rocket + name = "Rocket Gloves" + id = "tackle_rocket" + build_type = PROTOLATHE + materials = list(/datum/material/plasma = 1000, /datum/material/plastic = 2000) + build_path = /obj/item/clothing/gloves/tackler/rocket + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index d09c1ce86f..2192b2fddb 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -142,7 +142,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/toggle/labcoat shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack r_pocket = /obj/item/gun/ballistic/automatic/pistol diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 09681def64..ec741ef574 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -21,6 +21,7 @@ /obj/item/clothing/head/helmet/blueshirt = 1, /obj/item/clothing/suit/armor/vest/blueshirt = 1, /obj/item/clothing/under/rank/security/officer/blueshirt = 1, + /obj/item/clothing/gloves/tackler = 5, /obj/item/ssword_kit = 1) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cb4251fd3c6240b89b7d7340c5c03331577990d9 GIT binary patch literal 11008 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 literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index d56d8489cc..b557a75627 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -415,6 +415,7 @@ #include "code\datums\components\stationloving.dm" #include "code\datums\components\summoning.dm" #include "code\datums\components\swarming.dm" +#include "code\datums\components\tackle.dm" #include "code\datums\components\tactical.dm" #include "code\datums\components\thermite.dm" #include "code\datums\components\uplink.dm" @@ -1722,6 +1723,7 @@ #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" #include "code\modules\clothing\gloves\ring.dm" +#include "code\modules\clothing\gloves\tacklers.dm" #include "code\modules\clothing\head\_head.dm" #include "code\modules\clothing\head\beanie.dm" #include "code\modules\clothing\head\cit_hats.dm" From f481be14968a80330ea50debef067a91563d369e Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 10 Apr 2020 20:53:28 +0300 Subject: [PATCH 02/82] Makin stuff nice and dandy --- code/__DEFINES/dcs/signals.dm | 2 +- code/datums/components/tackle.dm | 40 ++++++++----------- .../antagonists/bloodsucker/powers/lunge.dm | 28 ++++++++----- code/modules/mob/living/carbon/carbon.dm | 4 +- .../mob/living/carbon/carbon_defines.dm | 1 + 5 files changed, 41 insertions(+), 34 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 70c2425f48..5f08bd21a1 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -214,7 +214,7 @@ // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) #define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE) - +#define COMSIG_CARBON_TACKLED "carbon_tackled" //sends from tackle.dm on tackle completion // /mob/living/simple_animal/hostile signals #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" #define COMPONENT_HOSTILE_NO_ATTACK 1 diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 28dd469041..17d2773b60 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -14,9 +14,6 @@ */ /datum/component/tackler dupe_mode = COMPONENT_DUPE_UNIQUE - - ///If we're currently tackling or are on cooldown. Actually, shit, if I use this to handle cooldowns, then getting thrown by something while on cooldown will count as a tackle..... whatever, i'll fix that next commit - var/tackling = TRUE ///How much stamina it takes to launch a tackle var/stamina_cost ///Launching a tackle calls Knockdown on you for this long, so this is your cooldown. Once you stand back up, you can tackle again. @@ -43,14 +40,15 @@ src.skill_mod = skill_mod src.min_distance = min_distance - var/mob/P = parent + var/mob/living/carbon/P = parent to_chat(P, "You are now able to launch tackles! You can do so by activating throw intent, and clicking on your target with an empty hand.") - + P.tackling = TRUE addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE) /datum/component/tackler/Destroy() - var/mob/P = parent + var/mob/living/carbon/P = parent to_chat(P, "You can no longer tackle.") + P.tackling = FALSE ..() /datum/component/tackler/RegisterWithParent() @@ -82,12 +80,12 @@ to_chat(user, "You must be standing to tackle!") return - if(tackling) + if(user.tackling) to_chat(user, "You're not ready to tackle!") return - if(user.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) // can't tackle if you just got shoved - to_chat(user, "You're too off balance to tackle!") + if(user.has_status_effect(STATUS_EFFECT_TASED)) // can't tackle if you just got shoved + to_chat(user, "You cant tackle while you are tased!") return user.face_atom(A) @@ -96,7 +94,7 @@ if(modifiers["alt"] || modifiers["shift"] || modifiers["ctrl"] || modifiers["middle"]) return - tackling = TRUE + user.tackling = TRUE RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle) playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) @@ -136,7 +134,7 @@ * Finally, we return a bitflag to [COMSIG_MOVABLE_IMPACT] that forces the hitpush to false so that we don't knock them away. */ /datum/component/tackler/proc/sack(mob/living/carbon/user, atom/hit) - if(!tackling || !tackle) + if(!user.tackling || !tackle) return if(!iscarbon(hit)) @@ -149,13 +147,12 @@ var/mob/living/carbon/human/S = user var/roll = rollTackle(target) - tackling = FALSE + user.tackling = FALSE switch(roll) if(-INFINITY to -5) user.visible_message("[user] botches [user.p_their()] tackle and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your tackle and slam your head into [target], knocking yourself silly!", target) to_chat(target, "[user] botches [user.p_their()] tackle and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!") - user.Paralyze(30) var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD) if(hed) @@ -165,11 +162,8 @@ if(-4 to -2) // glancing blow at best user.visible_message("[user] lands a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", target) to_chat(target, "[user] lands a weak tackle on you, briefly knocking you off-balance!") - user.Knockdown(30) - if(ishuman(target) && !T.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) - T.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH) // maybe define a slightly more severe/longer slowdown for this - addtimer(CALLBACK(T, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH) + target.apply_status_effect(STATUS_EFFECT_TASED_WEAK, 6 SECONDS) if(-1 to 0) // decent hit, both parties are about equally inconvenienced user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target) @@ -183,7 +177,6 @@ if(1 to 2) // solid hit, tackler has a slight advantage user.visible_message("[user] lands a solid tackle on [target], knocking them both down hard!", "You land a solid tackle on [target], knocking you both down hard!", target) to_chat(target, "[user] lands a solid tackle on you, knocking you both down hard!") - target.adjustStaminaLoss(30) target.Paralyze(5) user.Knockdown(10) @@ -192,8 +185,8 @@ if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land user.visible_message("[user] lands an expert tackle on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert tackle on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target) to_chat(target, "[user] lands an expert tackle on you, knocking you down hard and maintaining a passive grab!") - user.SetKnockdown(0) + user.set_resting(FALSE, TRUE, FALSE) user.forceMove(get_turf(target)) target.adjustStaminaLoss(40) target.Paralyze(5) @@ -205,8 +198,8 @@ if(5 to INFINITY) // absolutely BODIED user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) to_chat(target, "[user] lands a monster tackle on you, knocking you senseless and aggressively pinning you!") - user.SetKnockdown(0) + user.set_resting(FALSE, TRUE, FALSE) user.forceMove(get_turf(target)) target.adjustStaminaLoss(40) target.Paralyze(5) @@ -215,7 +208,7 @@ S.dna.species.grab(S, T) S.setGrabState(GRAB_AGGRESSIVE) - + SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed") return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH /** @@ -405,7 +398,8 @@ /datum/component/tackler/proc/resetTackle() - tackling = FALSE + var/mob/living/carbon/P = parent + P.tackling = FALSE QDEL_NULL(tackle) UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) @@ -441,7 +435,7 @@ ///Check to see if we hit a table, and if so, make a big mess! /datum/component/tackler/proc/checkObstacle(mob/living/carbon/owner) - if(!tackling) + if(!owner.tackling) return var/turf/T = get_turf(owner) diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index e1e8f4363a..d40627f493 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -2,27 +2,37 @@ /datum/action/bloodsucker/lunge name = "Predatory Lunge" - desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down." + desc = "Prepare the strenght to grapple your prey." button_icon_state = "power_lunge" bloodcost = 10 cooldown = 30 bloodsucker_can_buy = TRUE warn_constant_cost = TRUE amToggle = TRUE + var/leap_skill_mod = 5 + +/datum/action/bloodsucker/lunge/New() + . = ..() + RegisterSignal(owner, COMSIG_CARBON_TACKLED, .proc/Delayed_DeactivatePower) /datum/action/bloodsucker/lunge/ActivatePower() var/mob/living/user = owner var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - user.LoadComponent(/datum/component/tackler, stamina_cost = 50, base_knockdown = 3 SECONDS, range = 4, speed = 0.8, skill_mod = 5, min_distance = 2) + var/datum/component/tackler/T = user.LoadComponent(/datum/component/tackler) + T.stamina_cost = 50 + T.base_knockdown = 3 SECONDS + T.range = 4 + T.speed = 0.8 + T.skill_mod = 5 + T.min_distance = 2 active = TRUE - while(B && ContinueActive(user) && CHECK_MOBILITY(user, MOBILITY_STAND)) + while(B && ContinueActive(user)) B.AddBloodVolume(-0.1) sleep(5) - -/datum/action/bloodsucker/lunge/ContinueActive(mob/living/user) - return ..() + +/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower() + addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE) /datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner) - ..() // activate = FALSE - var/datum/component/tackler - tackler.RemoveComponent() + . = ..() + qdel(user.GetComponent(/datum/component/tackler)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index cb3833b7f6..dcaa1e5b8c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -98,6 +98,8 @@ /mob/living/carbon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() var/hurt = TRUE + if(src.GetComponent(/datum/component/tackler)) + return if(throwingdatum?.thrower && iscyborg(throwingdatum.thrower)) var/mob/living/silicon/robot/R = throwingdatum.thrower if(!R.emagged) @@ -110,7 +112,7 @@ var/mob/living/carbon/victim = hit_atom if(victim.movement_type & FLYING) return - if(hurt && !GetComponent(/datum/component/tackler)) + if(hurt) victim.take_bodypart_damage(10) take_bodypart_damage(10) victim.DefaultCombatKnockdown(20) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 689ab56842..15413f76d4 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -63,3 +63,4 @@ var/damageoverlaytemp = 0 var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects + var/tackling = FALSE //Whether or not we are tackling, this will prevent the knock into effects for carbons From 38d1634e13905096dac34764da7026822901c286 Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 10 Apr 2020 21:07:15 +0300 Subject: [PATCH 03/82] Weh --- code/datums/components/tackle.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 17d2773b60..0af2d8f78c 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -168,7 +168,6 @@ if(-1 to 0) // decent hit, both parties are about equally inconvenienced user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target) to_chat(target, "[user] lands a passable tackle on you, sending you both tumbling!") - target.adjustStaminaLoss(stamina_cost) target.Paralyze(5) user.Knockdown(20) @@ -205,8 +204,8 @@ target.Paralyze(5) target.Knockdown(30) if(ishuman(target) && ishuman(user)) - S.dna.species.grab(S, T) - S.setGrabState(GRAB_AGGRESSIVE) + target.grabbedby(user) + target.grippedby(user, instant = TRUE) //instant aggro grab SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed") return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH From 1b7f34d230722a2b355b92f952d73d9a8d439e2c Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sun, 12 Apr 2020 16:43:54 +0800 Subject: [PATCH 04/82] yeet --- code/datums/components/storage/storage.dm | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index ea72a8a6dd..efbdd2447b 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -15,6 +15,7 @@ var/datum/component/storage/concrete/master //If not null, all actions act on master and this is just an access point. var/list/can_hold //if this is set, only things in this typecache will fit. + var/list/can_hold_extra //if this is set, it will also be able to hold these. var/list/cant_hold //if this is set, anything in this typecache will not be able to fit. var/list/mob/is_using //lazy list of mobs looking at the contents of this storage. @@ -591,19 +592,20 @@ if(!stop_messages) to_chat(M, "[host] is full, make some space!") return FALSE //Storage item is full - if(length(can_hold)) - if(!is_type_in_typecache(I, can_hold)) + if(!length(can_hold_extra) || !is_type_in_typecache(I, can_hold_extra)) + if(length(can_hold)) + if(!is_type_in_typecache(I, can_hold)) + if(!stop_messages) + to_chat(M, "[host] cannot hold [I]!") + return FALSE + if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. if(!stop_messages) to_chat(M, "[host] cannot hold [I]!") return FALSE - if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. - if(!stop_messages) - to_chat(M, "[host] cannot hold [I]!") - return FALSE - if(I.w_class > max_w_class) - if(!stop_messages) - to_chat(M, "[I] is too big for [host]!") - return FALSE + if(I.w_class > max_w_class) + if(!stop_messages) + to_chat(M, "[I] is too big for [host]!") + return FALSE var/sum_w_class = I.w_class for(var/obj/item/_I in real_location) sum_w_class += _I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it. From dabe56fea1012f9d815ee4f0c550e4920b56e3a0 Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 13 Apr 2020 17:30:49 -0700 Subject: [PATCH 05/82] Experimental major optimization --- code/controllers/subsystem/icon_smooth.dm | 1 - code/controllers/subsystem/lighting.dm | 3 +-- code/controllers/subsystem/processing/flightpacks.dm | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 6f4040299a..bd676bacec 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -3,7 +3,6 @@ SUBSYSTEM_DEF(icon_smooth) init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 priority = FIRE_PRIOTITY_SMOOTHING - flags = SS_TICKER var/list/smooth_queue = list() var/list/deferred = list() diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 12b467b624..c6e6a84bcf 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -6,7 +6,6 @@ SUBSYSTEM_DEF(lighting) name = "Lighting" wait = 2 init_order = INIT_ORDER_LIGHTING - flags = SS_TICKER /datum/controller/subsystem/lighting/stat_entry() ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") @@ -85,4 +84,4 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/lighting/Recover() initialized = SSlighting.initialized - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index a462e2b645..fc994d5061 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -3,7 +3,7 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks) priority = FIRE_PRIORITY_FLIGHTPACKS wait = 2 stat_tag = "FM" - flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING + flags = SS_NO_INIT|SS_KEEP_TIMING var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL From 3543da036b8f963a7e9b70509e8c2ff23bbb1a56 Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 13 Apr 2020 17:37:03 -0700 Subject: [PATCH 06/82] actually i don't know what this does --- code/controllers/subsystem/icon_smooth.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index bd676bacec..6f4040299a 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(icon_smooth) init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 priority = FIRE_PRIOTITY_SMOOTHING + flags = SS_TICKER var/list/smooth_queue = list() var/list/deferred = list() From 325c011142eee40dcafd914d006974731106910a Mon Sep 17 00:00:00 2001 From: Artur Date: Tue, 14 Apr 2020 09:07:37 +0300 Subject: [PATCH 07/82] Comsigs are hard... --- code/datums/components/tackle.dm | 14 ++++++-------- .../antagonists/bloodsucker/powers/lunge.dm | 12 +++++++++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 0af2d8f78c..754be9d817 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -143,8 +143,6 @@ return var/mob/living/carbon/target = hit - var/mob/living/carbon/human/T = target - var/mob/living/carbon/human/S = user var/roll = rollTackle(target) user.tackling = FALSE @@ -190,9 +188,9 @@ target.adjustStaminaLoss(40) target.Paralyze(5) target.Knockdown(30) - if(ishuman(target) && ishuman(user)) - S.dna.species.grab(S, T) - S.setGrabState(GRAB_PASSIVE) + if(ishuman(target) && iscarbon(user)) + target.grabbedby(user) + target.grippedby(user, instant = TRUE) if(5 to INFINITY) // absolutely BODIED user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) @@ -203,11 +201,11 @@ target.adjustStaminaLoss(40) target.Paralyze(5) target.Knockdown(30) - if(ishuman(target) && ishuman(user)) + if(ishuman(target) && iscarbon(user)) target.grabbedby(user) - target.grippedby(user, instant = TRUE) //instant aggro grab + target.grippedby(user, instant = TRUE) - SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed") + SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, roll) return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH /** diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index d40627f493..b8dcc29022 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -13,7 +13,11 @@ /datum/action/bloodsucker/lunge/New() . = ..() - RegisterSignal(owner, COMSIG_CARBON_TACKLED, .proc/Delayed_DeactivatePower) + + +/datum/action/bloodsucker/lunge/Destroy() + . = ..() + UnregisterSignal(owner, COMSIG_CARBON_TACKLED) /datum/action/bloodsucker/lunge/ActivatePower() var/mob/living/user = owner @@ -26,13 +30,15 @@ T.skill_mod = 5 T.min_distance = 2 active = TRUE + RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DeactivatePower) while(B && ContinueActive(user)) B.AddBloodVolume(-0.1) sleep(5) -/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower() +/*/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower() addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE) - +*/ /datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner) . = ..() qdel(user.GetComponent(/datum/component/tackler)) + UnregisterSignal(user, COMSIG_CARBON_TACKLED) From 4703af111dd88aab40622ce4dabf2ad7f2e04f19 Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 14 Apr 2020 10:12:17 -0700 Subject: [PATCH 08/82] actually let's just delete this file --- .../subsystem/processing/flightpacks.dm | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 code/controllers/subsystem/processing/flightpacks.dm diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm deleted file mode 100644 index fc994d5061..0000000000 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ /dev/null @@ -1,25 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(flightpacks) - name = "Flightpack Movement" - priority = FIRE_PRIORITY_FLIGHTPACKS - wait = 2 - stat_tag = "FM" - flags = SS_NO_INIT|SS_KEEP_TIMING - - var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL - -/datum/controller/subsystem/processing/flightpacks/Initialize() - sync_flightsuit_processing() - -/datum/controller/subsystem/processing/flightpacks/vv_edit_var(var_name, var_value) - ..() - switch(var_name) - if("flightsuit_processing") - sync_flightsuit_processing() - -/datum/controller/subsystem/processing/flightpacks/proc/sync_flightsuit_processing() - for(var/obj/item/flightpack/FP in processing) - FP.sync_processing(src) - if(flightsuit_processing == FLIGHTSUIT_PROCESSING_NONE) //Don't even bother firing. - can_fire = FALSE - else - can_fire = TRUE From 6c977f347d634034d29ffcb45098d8ded0a6b635 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Tue, 14 Apr 2020 20:40:59 +0200 Subject: [PATCH 09/82] Update game_options.dm --- code/controllers/configuration/entries/game_options.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index f11093cba7..85aec2e67b 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -455,10 +455,12 @@ config_entry_value = RESIZE_DEFAULT_SIZE min_val = 0.1 //to avoid issues with zeros and negative values. max_val = RESIZE_DEFAULT_SIZE + integer = FALSE /datum/config_entry/number/body_size_max config_entry_value = RESIZE_DEFAULT_SIZE min_val = RESIZE_DEFAULT_SIZE + integer = FALSE //Pun-Pun movement slowdown given to characters with a body size smaller than this value, //to compensate for their smaller hitbox. @@ -467,9 +469,11 @@ config_entry_value = RESIZE_DEFAULT_SIZE * 0.85 min_val = 0 max_val = RESIZE_DEFAULT_SIZE + integer = FALSE //multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation. //doesn't apply to floating or crawling mobs /datum/config_entry/number/body_size_slowdown_multiplier config_entry_value = 0.25 min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead. + integer = FALSE From 375c62175f6ec75c4f2da473fea1c7101e6220c2 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 15 Apr 2020 12:04:25 +0300 Subject: [PATCH 10/82] Finishing touches, fixes icons --- code/datums/components/tackle.dm | 1 - .../antagonists/bloodsucker/powers/lunge.dm | 12 +++++++----- code/modules/clothing/gloves/tacklers.dm | 4 ++-- icons/mob/clothing/hands.dmi | Bin 11008 -> 11611 bytes icons/obj/clothing/gloves.dmi | Bin 15403 -> 16341 bytes 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 754be9d817..8ffa6c5452 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -190,7 +190,6 @@ target.Knockdown(30) if(ishuman(target) && iscarbon(user)) target.grabbedby(user) - target.grippedby(user, instant = TRUE) if(5 to INFINITY) // absolutely BODIED user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index b8dcc29022..88e39920d4 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -20,7 +20,7 @@ UnregisterSignal(owner, COMSIG_CARBON_TACKLED) /datum/action/bloodsucker/lunge/ActivatePower() - var/mob/living/user = owner + var/mob/living/carbon/user = owner var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/datum/component/tackler/T = user.LoadComponent(/datum/component/tackler) T.stamina_cost = 50 @@ -30,14 +30,16 @@ T.skill_mod = 5 T.min_distance = 2 active = TRUE - RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DeactivatePower) + user.toggle_throw_mode() + RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DelayedDeactivatePower) while(B && ContinueActive(user)) B.AddBloodVolume(-0.1) sleep(5) - -/*/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower() + +//Without this, the leap component would get removed too early, causing the normal crash into effects. +/datum/action/bloodsucker/lunge/proc/DelayedDeactivatePower() addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE) -*/ + /datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner) . = ..() qdel(user.GetComponent(/datum/component/tackler)) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 95c7739bd8..f11c7ccd6b 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -21,7 +21,7 @@ /// See: [/datum/component/tackler/var/speed] var/tackle_speed = 1 /// See: [/datum/component/tackler/var/skill_mod] - var/skill_mod = 0 + var/skill_mod = 1 /obj/item/clothing/gloves/tackler/equipped(mob/user, slot) . = ..() @@ -61,7 +61,7 @@ tackle_stam_cost = 35 base_knockdown = 1.5 SECONDS tackle_range = 5 - skill_mod = 2 + skill_mod = 3 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index cb4251fd3c6240b89b7d7340c5c03331577990d9..f1ae2afed728e482394121a41faf6a3c66ac7679 100644 GIT binary patch literal 11611 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QU8F8|9&OUOfp9_@1Xi!M%!tmiCTQq5 z3lbFIId<$doxEOa7>@Bv!5{CB;!f9y{c0KrM3HT!w0FkAq5WAZ$APOv6sBP6)wvHd zW1k(1$HK#JQf*Y=g)walqZZim0=*XzXZ zVVK!Mqe~E9rV<9k(E(y2Ia?vxm#xHKEcGi7(tKV0NDmjnM7E23nmV%E!hiPSVoJ0K zj9Cv?*ROcOUh)z6!Wx(DT}+lzvM_-=36scUm)2(oyunu5m;2X)uwbYHE>`evZy3Rm zG0>Tt1PCrFtWMGud~Oj4g|0jcd7QOKfb9~v>bCM>TRiK_9l40KH4e9xq$`mfXw_BH zOn+OUiqdcx?0Q-d;y1kX!BFpoO!HA^DkfujYgp~sz-L7)tBq6C3JC%a40C!jK+bXL zh^@~Am|zL7#Hn2H^C7ZS3=jA>+N-zKT+_}CRazZ&DRC^jBH(=j!gHg`dNE<>{iqfa zm-c(aspGTwbLXCyl{wBD8Xmp`du#Gsar+AK^DMr^nSYTL*^ffZbo9nV=*a7T6KanI z_ruBZ1=&> ziXayC^IB0CBSg9`N1EXn0L~C<0&@?~*H_Si2B&X-N$8OiKXZ+V^@>P_* zhkJmKp$FV@PqFFYy&ZfYU~r=Cd2XQ{w|`;LphfC<8Kx5WphYUQ+cc8z&m$?J1Vj4Z zS7^RIede4J!-OgTVn|r$gK8}oM_id0g*4v|=YvNH7QI6$gwZ8x1bwZRTt^PGp?($F z;0}(fXzzL?Bemn+57p*PTXVz!6r9P*vh)YApYnyeKDU&W>v8ZWcJE9H8s4v^3$+za zxI(J81R>fs3Wrh_uaApX^C{*X8NpdhC7MHHIty&?P+rD7=|TDd_(?wol64mhV-C0rmgp+xt-y_a2lf_Ai)Ty|wfFIx zFnSo0P>iTp-YX1YAfLn1p|3D9pfIX#e+%&h> zL=*UD@1tKSsSF33w9vFS%cdba+{r0g>7zlP%GQ<%_Rw zdZy=L6c)?w?W^s_IYolQsRg;y!PqwrK7L<-R#RJ1%*^BiagZYTH%*hFUBCz2$ldrj z^~Ms6{)#MSg5`g?e|m&yShtIzzaaN!c60NtFs@gGwQc9~7lcpP&^&pEoIC8wyTM(a zTVF*6R{0^IXY=uPx&Lt_>1XD5X@;-6$mRtuepLe4S1QONftsDDzU|kFJtv%3OK{cd z4@fs?w}oNWPOgK)=ZY1M*=)0K^Va*@>Z8FyzLh}V-r+OEXp~nuGH?&)4P0;q6&lv$ z+oOxG{nQ>ive(FW!VFK`_lVhfqVnOc8>ZJ z0}tRxzsg17`YU3pqb7In0?Ww}q@xs%tcz@w#S?O#&0H`YL1_z0sGs_OmtOy5m=RRo>Cmpq9pne&+t#@aP{>`sl#%-7@d%B^ic>D=dNrLD<4=71 z0CHd7^NM;dcPceY!LYT#1Phwhu8m(CxN#>2*lRW+R>K!tfpLu=1J5qC4MtSbBbn

rp%FWRCykb()%{-* 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 diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index e937842275bc88367426079b90389858133d04e6..166da38adc5ea097eb5d0f7716e3931b1afa9490 100644 GIT binary patch literal 16341 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 literal 15403 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 Date: Wed, 15 Apr 2020 12:12:06 +0300 Subject: [PATCH 11/82] Comment because why the heck not --- code/modules/antagonists/bloodsucker/powers/lunge.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index 88e39920d4..db7868fa8a 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -27,7 +27,7 @@ T.base_knockdown = 3 SECONDS T.range = 4 T.speed = 0.8 - T.skill_mod = 5 + T.skill_mod = 5 //Monstrous tackling T.min_distance = 2 active = TRUE user.toggle_throw_mode() From ddcfcb5cd8fe7bbb8361c2a541cd1908add46296 Mon Sep 17 00:00:00 2001 From: Artur Date: Wed, 15 Apr 2020 12:33:59 +0300 Subject: [PATCH 12/82] Conflicts sure are !!FUN!! Also adds dolphin gloves to the glove crate, and fixes fortitude --- .../bloodsucker/powers/fortitude.dm | 9 +++++++-- code/modules/cargo/exports/gear.dm | 2 +- icons/mob/clothing/hands.dmi | Bin 10110 -> 10734 bytes icons/obj/clothing/gloves.dmi | Bin 16697 -> 17824 bytes 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm index 9a31258d9d..bae802c176 100644 --- a/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -11,6 +11,7 @@ bloodsucker_can_buy = TRUE amToggle = TRUE warn_constant_cost = TRUE + var/was_running var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS. @@ -27,10 +28,11 @@ fortitude_resist = max(0.3, 0.7 - level_current * 0.1) H.physiology.brute_mod *= fortitude_resist H.physiology.burn_mod *= fortitude_resist - var/was_running = (user.m_intent == MOVE_INTENT_RUN) + was_running = (user.m_intent == MOVE_INTENT_RUN) if(was_running) user.toggle_move_intent() - while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) + was_running = TRUE + while(B && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) if(istype(user.buckled, /obj/vehicle)) //We dont want people using fortitude being able to use vehicles var/obj/vehicle/V = user.buckled var/datum/component/riding/VRD = V.GetComponent(/datum/component/riding) @@ -57,3 +59,6 @@ var/mob/living/carbon/human/H = owner H.physiology.brute_mod /= fortitude_resist H.physiology.burn_mod /= fortitude_resist + if(was_running && user.m_intent == MOVE_INTENT_WALK) + user.toggle_move_intent() + diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 3ad1756346..8dba7f69da 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -309,7 +309,7 @@ /datum/export/gear/combatgloves cost = 80 unit_name = "combat gloves" - export_types = list(/obj/item/clothing/gloves/combat, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/clothing/gloves/krav_maga) + export_types = list(/obj/item/clothing/gloves/tackler/combat, /obj/item/clothing/gloves/tackler/dolphin, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/clothing/gloves/krav_maga) include_subtypes = TRUE /datum/export/gear/bonegloves diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 74aabf6021997fb06b02afbf89f03b8861865232..3860fa4b7eac912bee2713ae969ad9b993a3f28e 100644 GIT binary patch literal 10734 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 diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index d53f53c0292a70b8f8344c1f36a31ff6b4b5baf6..2a6ce77f38b9613fcb3aa28d5d5edded152b710a 100644 GIT binary patch literal 17824 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 Date: Thu, 16 Apr 2020 15:53:15 +0200 Subject: [PATCH 13/82] Update sanitize_values.dm --- code/__HELPERS/sanitize_values.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index faa8c22f38..e494468fe7 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -6,6 +6,13 @@ return number return default +/proc/sanitize_num_clamp(number, min=0, max=1, default=0, quantize=0) + if(!isnum(number)) + return default + . = CLAMP(number, min, max) + if(quantize) + . = round(number, quantize) + /proc/sanitize_text(text, default="") if(istext(text)) return text From b7b9fc55f5ed75533901c9c8a247bb5a8868c438 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Thu, 16 Apr 2020 15:54:59 +0200 Subject: [PATCH 14/82] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 7da9d5a1dc..10e351cba5 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -575,7 +575,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/static/size_max if(!size_max) size_max = CONFIG_GET(number/body_size_max) - features["body_size"] = sanitize_integer(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE) + features["body_size"] = sanitize_num_clamp(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE, 0.01) var/static/list/B_sizes if(!B_sizes) From eafc69aa6513ad135aee36f8120d8b13e0789bca Mon Sep 17 00:00:00 2001 From: Artur Date: Fri, 17 Apr 2020 16:22:15 +0300 Subject: [PATCH 15/82] Reviewer suggestion, reduces paralyze And ports that commit that ghommie said --- code/datums/components/crafting/recipes.dm | 8 ------- .../crafting/recipes/recipes_clothing.dm | 13 +++++++++++ code/datums/components/tackle.dm | 23 ++++++++++--------- code/game/gamemodes/clown_ops/clown_ops.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 2 +- .../bloodsucker/powers/fortitude.dm | 1 - code/modules/clothing/gloves/miscellaneous.dm | 2 +- code/modules/clothing/gloves/tacklers.dm | 2 +- code/modules/clothing/outfits/ert.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 2 +- .../uplink/uplink_items/uplink_clothing.dm | 9 +++++++- 11 files changed, 39 insertions(+), 27 deletions(-) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index a87496a212..bc76082f0a 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -24,11 +24,3 @@ /datum/crafting_recipe/proc/check_requirements(mob/user, list/collected_requirements) return TRUE -/datum/crafting_recipe/gripperoffbrand - name = "Improvised Gripper Gloves" - reqs = list( - /obj/item/clothing/gloves/fingerless = 1 - // /obj/item/stack/sticky_tape = 1 - ) - result = /obj/item/clothing/gloves/tackler/offbrand - category = CAT_CLOTHING diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index b9e3c379b4..b065ce2f25 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -303,3 +303,16 @@ /obj/item/stack/cable_coil = 10) time = 100 //Takes awhile to put all the garlics on the coil and knot it. category = CAT_CLOTHING + +/datum/crafting_recipe/gripperoffbrand + name = "Improvised Gripper Gloves" + reqs = list( + /obj/item/clothing/gloves/fingerless = 1, + // /obj/item/stack/sticky_tape = 1 + /obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/cloth = 2, + ) + result = /obj/item/clothing/gloves/tackler/offbrand + category = CAT_CLOTHING + tools = list(TOOL_WIRECUTTER) + time = 20 diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 8ffa6c5452..1134f310aa 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -84,8 +84,8 @@ to_chat(user, "You're not ready to tackle!") return - if(user.has_status_effect(STATUS_EFFECT_TASED)) // can't tackle if you just got shoved - to_chat(user, "You cant tackle while you are tased!") + if(user.has_status_effect(STATUS_EFFECT_TASED)) // can't tackle if you just got tased + to_chat(user, "You can't tackle while tased!") return user.face_atom(A) @@ -353,7 +353,7 @@ if(94 to 98) user.visible_message("[user] slams face-first into [hit] with a concerning squish, immediately going limp!", "You slam face-first into [hit], and immediately lose consciousness!") - user.adjustStaminaLoss(30) + user.adjustStaminaLoss(100) user.adjustBruteLoss(30) user.Unconscious(100) user.gain_trauma_type(BRAIN_TRAUMA_MILD) @@ -370,7 +370,7 @@ if(prob(80)) user.gain_trauma(/datum/brain_trauma/mild/concussion) user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) - user.Knockdown(40) + user.DefaultCombatKnockdown(40) shake_camera(user, 5, 5) user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) user.clear_fullscreen("flash", 2.5) @@ -380,14 +380,14 @@ user.adjustStaminaLoss(30) user.adjustBruteLoss(10) user.confused += 10 - user.Knockdown(30) + user.DefaultCombatKnockdown(30) shake_camera(user, 3, 4) if(1 to 63) user.visible_message("[user] slams into [hit]!", "You slam into [hit]!") user.adjustStaminaLoss(20) user.adjustBruteLoss(10) - user.Knockdown(30) + user.DefaultCombatKnockdown(30) shake_camera(user, 2, 2) playsound(user, 'sound/weapons/smash.ogg', 70, TRUE) @@ -413,13 +413,14 @@ //shard.AddElement(/datum/element/embed, shard.embedding) W.obj_destruction() user.adjustStaminaLoss(10 * speed) - user.Paralyze(30) + user.DefaultCombatKnockdown(40) + user.Paralyze(5) user.visible_message("[user] slams into [W] and shatters it, shredding [user.p_them()]self with glass!", "You slam into [W] and shatter it, shredding yourself with glass!") else user.visible_message("[user] slams into [W] like a bug, then slowly slides off it!", "You slam into [W] like a bug, then slowly slide off it!") - user.Paralyze(10) - user.Knockdown(30) + user.Paralyze(2) + user.DefaultCombatKnockdown(20) W.take_damage(20 * speed) user.adjustStaminaLoss(10 * speed) user.adjustBruteLoss(5 * speed) @@ -464,8 +465,8 @@ owner.visible_message("[owner] trips over [kevved] and slams into it face-first[HOW_big_of_a_miss_did_we_just_make]!", "You trip over [kevved] and slam into it face-first[HOW_big_of_a_miss_did_we_just_make]!") owner.adjustStaminaLoss(20 + messes.len * 2) owner.adjustBruteLoss(10 + messes.len) - owner.Paralyze(5 * messes.len) // half a second of paralyze for each thing you knock around - owner.Knockdown(20 + 5 * messes.len) // 2 seconds of knockdown after the paralyze + owner.Paralyze(2 * messes.len) + owner.DefaultCombatKnockdown(20 + 5 * messes.len) // 2 seconds of knockdown after the paralyze for(var/obj/item/I in messes) var/dist = rand(1, 3) diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index d0914b8d8f..11898701fa 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -37,7 +37,7 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/clown_shoes/combat mask = /obj/item/clothing/mask/gas/clown_hat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated + gloves = /obj/item/clothing/gloves/combat back = /obj/item/storage/backpack/clown ears = /obj/item/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/nuke/syndicate diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 5da95bbd3a..93852e917c 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -120,7 +120,7 @@ uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/tackler/combat/insulated + gloves = /obj/item/clothing/gloves/combat ears = /obj/item/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/nuke/syndicate id = /obj/item/card/id/syndicate diff --git a/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm index bae802c176..76f3cc77a4 100644 --- a/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -31,7 +31,6 @@ was_running = (user.m_intent == MOVE_INTENT_RUN) if(was_running) user.toggle_move_intent() - was_running = TRUE while(B && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) if(istype(user.buckled, /obj/vehicle)) //We dont want people using fortitude being able to use vehicles var/obj/vehicle/V = user.buckled diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 8bdaeefb8b..a37dc8b638 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -154,7 +154,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) strip_mod = 0.9 -/obj/item/clothing/gloves/tackler/combat/insulated +/obj/item/clothing/gloves/combat name = "combat gloves" desc = "These tactical gloves are fireproof and shock resistant." icon_state = "combat" diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index f11c7ccd6b..54a7b28d5f 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -70,7 +70,7 @@ resistance_flags = NONE /obj/item/clothing/gloves/tackler/combat/insulated - name = "guerilla gloves" + name = "guerrilla gloves" desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks." siemens_coefficient = 0 permeability_coefficient = 0.05 diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 43df2eec2f..7cd2e9b394 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -69,8 +69,8 @@ id = /obj/item/card/id/ert/Security suit = /obj/item/clothing/suit/space/hardsuit/ert/sec glasses = /obj/item/clothing/glasses/hud/security/sunglasses - gloves = /obj/item/clothing/gloves/tackler/combat/insulated belt = /obj/item/storage/belt/security/full + back = /obj/item/storage/backpack/security backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ /obj/item/clothing/mask/gas/sechailer=1,\ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a1fc5edcd3..75908888f2 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -98,7 +98,7 @@ /mob/living/carbon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() var/hurt = TRUE - if(src.GetComponent(/datum/component/tackler)) + if(GetComponent(/datum/component/tackler)) return if(throwingdatum?.thrower && iscyborg(throwingdatum.thrower)) var/mob/living/silicon/robot/R = throwingdatum.thrower diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm index d6336bd982..014e0452b5 100644 --- a/code/modules/uplink/uplink_items/uplink_clothing.dm +++ b/code/modules/uplink/uplink_items/uplink_clothing.dm @@ -89,4 +89,11 @@ name = "Wall Walking Boots" desc = "Through bluespace magic stolen from an organisation that hoards technology, these boots simply allow you to slip through the atoms that make up anything, but only while walking, for safety reasons. As well as this, they unfortunately cause minor breath loss as the majority of atoms in your lungs are sucked out into any solid object you walk through." item = /obj/item/clothing/shoes/wallwalkers - cost = 6 \ No newline at end of file + cost = 6 + +/datum/uplink_item/device_tools/guerillagloves + name = "Guerilla Gloves" + desc = "A pair of highly robust combat gripper gloves that excels at performing takedowns at close range, with an added lining of insulation. Careful not to hit a wall!" + item = /obj/item/clothing/gloves/tackler/combat/insulated + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + cost = 2 From cc82f08ebcf59f9c6e98567767aab3938fbb6d49 Mon Sep 17 00:00:00 2001 From: Seris02 Date: Sat, 18 Apr 2020 18:28:35 +0800 Subject: [PATCH 16/82] weh --- code/datums/components/storage/ui.dm | 2 +- code/modules/client/preferences.dm | 3 +++ code/modules/client/preferences_savefile.dm | 7 +++++-- modular_citadel/code/modules/client/preferences.dm | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm index c1c049dfd3..d1df47390e 100644 --- a/code/datums/components/storage/ui.dm +++ b/code/datums/components/storage/ui.dm @@ -198,7 +198,7 @@ M.active_storage.ui_hide(M) M.active_storage = src LAZYOR(is_using, M) - if(volumetric_ui()) + if(!M.client?.prefs?.no_tetris_storage && volumetric_ui()) //new volumetric ui bay-style M.client.screen |= orient2hud_volumetric(M, maxallowedscreensize) else diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d44b2ffa04..c452b9db60 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -866,6 +866,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
" dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
" dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"]
" + dat += "Force Slot Storage HUD: [no_tetris_storage ? "Enabled" : "Disabled"]
" dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
" if (user && user.client && !user.client.prefs.screenshake==0) dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" @@ -2204,6 +2205,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) autostand = !autostand if("auto_ooc") auto_ooc = !auto_ooc + if("no_tetris_storage") + no_tetris_storage = !no_tetris_storage if ("screenshake") var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num if (!isnull(desiredshake)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 6d99ef63aa..ea78b05f76 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -231,7 +231,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["autostand"] >> autostand S["cit_toggles"] >> cit_toggles S["preferred_chaos"] >> preferred_chaos - S["auto_ooc"] >> auto_ooc + S["auto_ooc"] >> auto_ooc + S["no_tetris_storage"] >> no_tetris_storage //try to fix any outdated data if necessary @@ -268,10 +269,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_skin = sanitize_inlist(pda_skin, GLOB.pda_reskins, PDA_SKIN_ALT) screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) - widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) + widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) autostand = sanitize_integer(autostand, 0, 1, initial(autostand)) cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles)) auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc)) + no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage)) return 1 @@ -336,6 +338,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["cit_toggles"], cit_toggles) WRITE_FILE(S["preferred_chaos"], preferred_chaos) WRITE_FILE(S["auto_ooc"], auto_ooc) + WRITE_FILE(S["no_tetris_storage"], no_tetris_storage) return 1 diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 8c55f2d9a8..6658d96cc3 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -16,6 +16,7 @@ var/widescreenpref = TRUE var/autostand = TRUE var/auto_ooc = FALSE + var/no_tetris_storage = FALSE //vore prefs var/toggleeatingnoise = TRUE From 85c5548d1a0c5d23a02345f0b671d02ae2e03914 Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 18 Apr 2020 13:49:06 +0300 Subject: [PATCH 17/82] Ports https://github.com/tgstation/tgstation/pull/50521/ --- code/datums/components/tackle.dm | 38 ++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 1134f310aa..0f5cd7039c 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -98,10 +98,11 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle) playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) + var/leap_word = isfelinid(user) ? "pounce" : "leap" ///If cat, "pounce" instead of "leap". if(can_see(user, A, 7)) - user.visible_message("[user] leaps at [A]!", "You leap at [A]!") + user.visible_message("[user] [leap_word]s at [A]!", "You [leap_word] at [A]!") else - user.visible_message("[user] leaps!", "You leap!") + user.visible_message("[user] [leap_word]s!", "You [leap_word]!") if(get_dist(user, A) < min_distance) A = get_ranged_target_turf(user, get_dir(user, A), min_distance) //TODO: this only works in cardinals/diagonals, make it work with in-betweens too! @@ -143,14 +144,18 @@ return var/mob/living/carbon/target = hit + var/mob/living/carbon/human/T = target + var/mob/living/carbon/human/S = user + var/tackle_word = isfelinid(user) ? "pounce" : "tackle" ///If cat, "pounce" instead of "tackle". var/roll = rollTackle(target) user.tackling = FALSE switch(roll) if(-INFINITY to -5) - user.visible_message("[user] botches [user.p_their()] tackle and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your tackle and slam your head into [target], knocking yourself silly!", target) - to_chat(target, "[user] botches [user.p_their()] tackle and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!") + user.visible_message("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your [tackle_word] and slam your head into [target], knocking yourself silly!", target) + to_chat(target, "[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!") + user.Paralyze(30) var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD) if(hed) @@ -158,30 +163,34 @@ user.gain_trauma(/datum/brain_trauma/mild/concussion) if(-4 to -2) // glancing blow at best - user.visible_message("[user] lands a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", target) - to_chat(target, "[user] lands a weak tackle on you, briefly knocking you off-balance!") + user.visible_message("[user] lands a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!", target) + to_chat(target, "[user] lands a weak [tackle_word] on you, briefly knocking you off-balance!") + user.Knockdown(30) target.apply_status_effect(STATUS_EFFECT_TASED_WEAK, 6 SECONDS) if(-1 to 0) // decent hit, both parties are about equally inconvenienced - user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target) - to_chat(target, "[user] lands a passable tackle on you, sending you both tumbling!") + user.visible_message("[user] lands a passable [tackle_word] on [target], sending them both tumbling!", "You land a passable [tackle_word] on [target], sending you both tumbling!", target) + to_chat(target, "[user] lands a passable [tackle_word] on you, sending you both tumbling!") + target.adjustStaminaLoss(stamina_cost) target.Paralyze(5) user.Knockdown(20) target.Knockdown(25) if(1 to 2) // solid hit, tackler has a slight advantage - user.visible_message("[user] lands a solid tackle on [target], knocking them both down hard!", "You land a solid tackle on [target], knocking you both down hard!", target) - to_chat(target, "[user] lands a solid tackle on you, knocking you both down hard!") + user.visible_message("[user] lands a solid [tackle_word] on [target], knocking them both down hard!", "You land a solid [tackle_word] on [target], knocking you both down hard!", target) + to_chat(target, "[user] lands a solid [tackle_word] on you, knocking you both down hard!") + target.adjustStaminaLoss(30) target.Paralyze(5) user.Knockdown(10) target.Knockdown(20) if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land - user.visible_message("[user] lands an expert tackle on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert tackle on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target) - to_chat(target, "[user] lands an expert tackle on you, knocking you down hard and maintaining a passive grab!") + user.visible_message("[user] lands an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target) + to_chat(target, "[user] lands an expert [tackle_word] on you, knocking you down hard and maintaining a passive grab!") + user.SetKnockdown(0) user.set_resting(FALSE, TRUE, FALSE) user.forceMove(get_turf(target)) @@ -192,8 +201,9 @@ target.grabbedby(user) if(5 to INFINITY) // absolutely BODIED - user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) - to_chat(target, "[user] lands a monster tackle on you, knocking you senseless and aggressively pinning you!") + user.visible_message("[user] lands a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) + to_chat(target, "[user] lands a monster [tackle_word] on you, knocking you senseless and aggressively pinning you!") + user.SetKnockdown(0) user.set_resting(FALSE, TRUE, FALSE) user.forceMove(get_turf(target)) From edb7b1d61c7feefb818b5e29aff4f2f2bd71965e Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 18 Apr 2020 13:52:27 +0300 Subject: [PATCH 18/82] Fixes catstuffs --- code/datums/components/tackle.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 0f5cd7039c..ddc47d59a1 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -98,7 +98,7 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle) playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) - var/leap_word = isfelinid(user) ? "pounce" : "leap" ///If cat, "pounce" instead of "leap". + var/leap_word = iscatperson(user) ? "pounce" : "leap" ///If cat, "pounce" instead of "leap". if(can_see(user, A, 7)) user.visible_message("[user] [leap_word]s at [A]!", "You [leap_word] at [A]!") else @@ -144,9 +144,7 @@ return var/mob/living/carbon/target = hit - var/mob/living/carbon/human/T = target - var/mob/living/carbon/human/S = user - var/tackle_word = isfelinid(user) ? "pounce" : "tackle" ///If cat, "pounce" instead of "tackle". + var/tackle_word = iscatperson(user) ? "pounce" : "tackle" ///If cat, "pounce" instead of "tackle". var/roll = rollTackle(target) user.tackling = FALSE From f0823bc2b6bc4b2772b54d610d62e8e4400572ad Mon Sep 17 00:00:00 2001 From: Artur Date: Sat, 18 Apr 2020 13:57:34 +0300 Subject: [PATCH 19/82] Combat looks better --- code/modules/clothing/gloves/tacklers.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 54a7b28d5f..47f4aca974 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -55,7 +55,7 @@ /obj/item/clothing/gloves/tackler/combat name = "gorilla gloves" desc = "Premium quality combative gloves, heavily reinforced to give the user an edge in close combat tackles, though they are more taxing to use than normal gripper gloves. Fireproof to boot!" - icon_state = "black" + icon_state = "combat" item_state = "blackgloves" tackle_stam_cost = 35 From 54cce756796f73cbc8be45e0fbeca48a4316d989 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 18 Apr 2020 16:15:40 -0400 Subject: [PATCH 20/82] Update food_reagents.dm --- .../chemistry/reagents/food_reagents.dm | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 39b687c64a..05f0ad1cc0 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -43,7 +43,7 @@ name = "Nutriment" description = "All the vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 10 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 var/brute_heal = 1 @@ -109,7 +109,7 @@ taste_mult = 0.8 value = 1 taste_description = "oil" - nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own + nutriment_factor = 5 * REAGENTS_METABOLISM //Not very healthy on its own metabolization_rate = 10 * REAGENTS_METABOLISM var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world var/boiling //Used in mob life to determine if the oil kills, and only on touch application @@ -153,7 +153,7 @@ reagent_state = SOLID color = "#FFFFFF" // rgb: 255, 255, 255 taste_mult = 1.5 // stop sugar drowning out other flavours - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM metabolization_rate = 2 * REAGENTS_METABOLISM overdose_threshold = 200 // Hyperglycaemic shock taste_description = "sweetness" @@ -179,21 +179,21 @@ /datum/reagent/consumable/soysauce name = "Soysauce" description = "A salty sauce made from the soy plant." - nutriment_factor = 2 * REAGENTS_METABOLISM + nutriment_factor = ` * REAGENTS_METABOLISM color = "#792300" // rgb: 121, 35, 0 taste_description = "umami" /datum/reagent/consumable/ketchup name = "Ketchup" description = "Ketchup, catsup, whatever. It's tomato paste." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#731008" // rgb: 115, 16, 8 taste_description = "ketchup" /datum/reagent/consumable/mustard name = "Mustard" description = "Mustard, mostly used on hotdogs, corndogs and burgers." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#DDED26" // rgb: 221, 237, 38 taste_description = "mustard" @@ -378,14 +378,13 @@ name = "Coco Powder" description = "A fatty, bitter paste made from coco beans." reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 taste_description = "bitterness" /datum/reagent/consumable/hot_coco name = "Hot Chocolate" description = "Made with love! And coco beans." - nutriment_factor = 3 * REAGENTS_METABOLISM color = "#660000" // rgb: 221, 202, 134 taste_description = "creamy chocolate" glass_icon_state = "chocolateglass" @@ -488,13 +487,13 @@ description = "A popular food paste made from ground dry-roasted peanuts." color = "#C29261" value = 3 - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 10 * REAGENTS_METABOLISM taste_description = "peanuts" /datum/reagent/consumable/cornoil name = "Corn Oil" description = "An oil derived from various types of corn." - nutriment_factor = 20 * REAGENTS_METABOLISM + nutriment_factor = 12 * REAGENTS_METABOLISM value = 4 color = "#302000" // rgb: 48, 32, 0 taste_description = "slime" @@ -696,7 +695,7 @@ name = "Stabilized Nutriment" description = "A bioengineered protien-nutrient structure designed to decompose in high saturation. In layman's terms, it won't get you fat." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 12 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 /datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M) @@ -807,7 +806,7 @@ /datum/reagent/consumable/caramel name = "Caramel" description = "Who would have guessed that heated sugar could be so delicious?" - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 4 * REAGENTS_METABOLISM color = "#D98736" taste_mult = 2 taste_description = "caramel" From 26facfa37ac1b5e9c25037c7e4f8148651f61b99 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 18 Apr 2020 16:24:05 -0400 Subject: [PATCH 21/82] honey changes + complie --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 05f0ad1cc0..d335eafabf 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -93,7 +93,7 @@ name = "Vitamin" description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." value = 0.5 - + nutriment_factor = 15 * REAGENTS_METABOLISM //The are the best food for you! brute_heal = 1 burn_heal = 1 @@ -179,7 +179,6 @@ /datum/reagent/consumable/soysauce name = "Soysauce" description = "A salty sauce made from the soy plant." - nutriment_factor = ` * REAGENTS_METABOLISM color = "#792300" // rgb: 121, 35, 0 taste_description = "umami" @@ -625,7 +624,7 @@ description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties." color = "#d3a308" value = 15 - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 10 * REAGENTS_METABOLISM metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "sweetness" From 63524b47c3d1f36260ff79862c2fe82d9e7e7633 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 18 Apr 2020 16:28:51 -0400 Subject: [PATCH 22/82] Why is ice and water so filling? --- .../chemistry/reagents/drink_reagents.dm | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index ebbce61c57..475a6a80fb 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -330,7 +330,6 @@ description = "Encourages the patient to go golfing." color = "#FFB766" quality = DRINK_NICE - nutriment_factor = 2 taste_description = "bitter tea" glass_icon_state = "arnold_palmer" glass_name = "Arnold Palmer" @@ -384,6 +383,7 @@ /datum/reagent/consumable/space_cola name = "Cola" description = "A refreshing beverage." + nutriment_factor = 0 color = "#100800" // rgb: 16, 8, 0 taste_description = "cola" glass_icon_state = "glass_brown" @@ -418,6 +418,7 @@ /datum/reagent/consumable/spacemountainwind name = "SM Wind" description = "Blows right through you like a space wind." + nutriment_factor = 0 color = "#102000" // rgb: 16, 32, 0 taste_description = "sweet citrus soda" glass_icon_state = "Space_mountain_wind_glass" @@ -435,6 +436,7 @@ /datum/reagent/consumable/dr_gibb name = "Dr. Gibb" description = "A delicious blend of 42 different flavours." + nutriment_factor = 0 color = "#102000" // rgb: 16, 32, 0 taste_description = "cherry soda" // FALSE ADVERTISING glass_icon_state = "dr_gibb_glass" @@ -449,6 +451,7 @@ /datum/reagent/consumable/space_up name = "Space-Up" description = "Tastes like a hull breach in your mouth." + nutriment_factor = 0 color = "#00FF00" // rgb: 0, 255, 0 taste_description = "cherry soda" glass_icon_state = "space-up_glass" @@ -463,6 +466,7 @@ /datum/reagent/consumable/lemon_lime name = "Lemon Lime" description = "A tangy substance made of 0.5% natural citrus!" + nutriment_factor = 0 color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "tangy lime and lemon soda" glass_icon_state = "glass_yellow" @@ -476,6 +480,7 @@ /datum/reagent/consumable/pwr_game name = "Pwr Game" description = "The only drink with the PWR that true gamers crave." + nutriment_factor = 0 color = "#9385bf" // rgb: 58, 52, 75 taste_description = "sweet and salty tang" glass_icon_state = "glass_red" @@ -489,6 +494,7 @@ /datum/reagent/consumable/shamblers name = "Shambler's Juice" description = "~Shake me up some of that Shambler's Juice!~" + nutriment_factor = 0 color = "#f00060" // rgb: 94, 0, 38 taste_description = "carbonated metallic soda" glass_icon_state = "glass_red" @@ -502,6 +508,7 @@ /datum/reagent/consumable/buzz_fuzz name = "Buzz Fuzz" description = "~A Hive of Flavour!~ NOTICE: Addicting." + nutriment_factor = 0 addiction_threshold = 26 //A can and a sip color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "carbonated honey and pollen" @@ -572,6 +579,7 @@ /datum/reagent/consumable/sodawater name = "Soda Water" description = "A can of club soda. Why not make a scotch and soda?" + nutriment_factor = 0 color = "#619494" // rgb: 97, 148, 148 taste_description = "carbonated water" glass_icon_state = "glass_clear" @@ -604,6 +612,7 @@ /datum/reagent/consumable/ice name = "Ice" description = "Frozen water, your dentist wouldn't like you chewing this." + nutriment_factor = 0 //Its water why would this even geive nutriments? reagent_state = SOLID color = "#619494" // rgb: 97, 148, 148 taste_description = "ice" @@ -705,7 +714,7 @@ description = "A cherry flavored milkshake." color = "#FFB6C1" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy cherry" glass_icon_state = "cherryshake" glass_name = "cherry shake" @@ -716,7 +725,7 @@ description = "An exotic milkshake." color = "#00F1FF" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy blue cherry" glass_icon_state = "bluecherryshake" glass_name = "blue cherry shake" @@ -727,7 +736,7 @@ description = "A mix of pumpkin juice and coffee." color = "#F4A460" quality = DRINK_VERYGOOD - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy pumpkin" glass_icon_state = "pumpkin_latte" glass_name = "pumpkin latte" @@ -738,7 +747,7 @@ description = "Ice cream on top of a Dr. Gibb glass." color = "#B22222" quality = DRINK_NICE - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 1 * REAGENTS_METABOLISM taste_description = "creamy cherry" glass_icon_state = "gibbfloats" glass_name = "Gibbfloat" @@ -845,6 +854,7 @@ /datum/reagent/consumable/sol_dry name = "Sol Dry" description = "A soothing, mellow drink made from ginger." + nutriment_factor = 0 color = "#f7d26a" quality = DRINK_NICE taste_description = "sweet ginger spice" @@ -889,7 +899,7 @@ description = "A drink of a bygone era of milk and artificial sweetener back on a rock." color = "#f76aeb"//rgb(247, 106, 235) glass_icon_state = "pinkmilk" - quality = DRINK_FANTASTIC //Love drink + quality = DRINK_FANTASTIC taste_description = "sweet strawberry and milk cream" glass_name = "tall glass of strawberry milk" glass_desc = "Delicious flavored strawberry syrup mixed with milk." @@ -905,7 +915,7 @@ description = "A timeless classic!" color = "#f76aeb"//rgb(247, 106, 235) glass_icon_state = "pinktea" - quality = DRINK_FANTASTIC //Love drink + quality = DRINK_FANTASTIC taste_description = "sweet tea with a hint of strawberry" glass_name = "mug of strawberry tea" glass_desc = "Delicious traditional tea flavored with strawberries." From efdab852617dc81b6b4d8958703267f9728037e3 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 18 Apr 2020 17:10:31 -0400 Subject: [PATCH 23/82] Update crayons.dm --- code/game/objects/items/crayons.dm | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 09c045497c..1e69f92132 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -59,7 +59,7 @@ var/edible = TRUE // That doesn't mean eating it is a good idea - var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 1) + var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1) // If the user can toggle the colour, a la vanilla spraycan var/can_change_colour = FALSE @@ -487,56 +487,56 @@ icon_state = "crayonred" paint_color = "#DA0000" crayon_color = "red" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/red = 1) dye_color = DYE_RED /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" crayon_color = "orange" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1) dye_color = DYE_ORANGE /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" crayon_color = "yellow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1) dye_color = DYE_YELLOW /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" crayon_color = "green" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/green = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/green = 1) dye_color = DYE_GREEN /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" crayon_color = "blue" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1) dye_color = DYE_BLUE /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" crayon_color = "purple" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1) dye_color = DYE_PURPLE /obj/item/toy/crayon/black icon_state = "crayonblack" paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black. crayon_color = "black" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/black = 1) dye_color = DYE_BLACK /obj/item/toy/crayon/white icon_state = "crayonwhite" paint_color = "#FFFFFF" crayon_color = "white" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/white = 1) dye_color = DYE_WHITE /obj/item/toy/crayon/mime @@ -544,7 +544,7 @@ desc = "A very sad-looking crayon." paint_color = "#FFFFFF" crayon_color = "mime" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1) charges = -1 dye_color = DYE_MIME @@ -552,10 +552,9 @@ icon_state = "crayonrainbow" paint_color = "#FFF000" crayon_color = "rainbow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent = 1) drawtype = RANDOM_ANY // just the default starter. dye_color = DYE_RAINBOW - charges = -1 /obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) From e3fb9784650116de0edeb43de787e9e4816bc703 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 19 Apr 2020 01:48:51 +0200 Subject: [PATCH 24/82] Shielded element. --- code/__DEFINES/combat.dm | 2 +- code/__DEFINES/dcs/signals.dm | 1 + code/datums/elements/shielded.dm | 210 ++++++++++++++++++ code/modules/clothing/spacesuits/hardsuit.dm | 51 +---- code/modules/clothing/suits/wiz_robe.dm | 8 +- .../mob/living/carbon/human/human_block.dm | 6 +- code/modules/mob/living/living_block.dm | 9 +- tgstation.dme | 1 + 8 files changed, 229 insertions(+), 59 deletions(-) create mode 100644 code/datums/elements/shielded.dm diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 14c78f90d0..e3fbe30b1d 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -302,8 +302,8 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( /// Block priorities #define BLOCK_PRIORITY_HELD_ITEM 100 -#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_WEAR_SUIT 75 +#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_UNIFORM 25 #define BLOCK_PRIORITY_DEFAULT BLOCK_PRIORITY_HELD_ITEM diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 53348b3467..fab6d689f6 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -197,6 +197,7 @@ #define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone) #define COMSIG_LIVING_COMBAT_ENABLED "combatmode_enabled" //from base of mob/living/enable_combat_mode() (was_forced) #define COMSIG_LIVING_COMBAT_DISABLED "combatmode_disabled" //from base of mob/living/disable_combat_mode() (was_forced) +#define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items) //ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS! #define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore) diff --git a/code/datums/elements/shielded.dm b/code/datums/elements/shielded.dm new file mode 100644 index 0000000000..913c2df934 --- /dev/null +++ b/code/datums/elements/shielded.dm @@ -0,0 +1,210 @@ +/datum/element/shielded + element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH + id_arg_index = 3 + var/max_charges = 3 + var/recharge_delay = 20 SECONDS //How long after we've been shot before we can start recharging. + var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. + var/accepted_slots + var/shield_state = "shield-old" //the state of the shield overlay. + var/broken_state //null + var/recharge_sound = 'sound/magic/charge.ogg' + var/recharge_end_sound = 'sound/machines/ding.ogg' + var/list/charges_per_atom = list() //How many charges each atom has. + var/list/last_use_per_atom = list() //Last time an atom has deflected (or failed due to no charges) an attack. + var/list/overlay_per_mob = list() //List of mutable overlays per atom. + var/list/shields_per_mob = list() //number of shields this guy is on, damn. + +/datum/element/shielded/Attach(datum/target, current, _max = 3, _delay = 20 SECONDS, _rate = 1, _slots, _state = "shield-old", _broken, _sound = 'sound/magic/charge.ogg', _end_sound = 'sound/machines/ding.ogg') + . = ..() + var/isitem = isitem(target) + if(. == ELEMENT_INCOMPATIBLE || (!isitem && !isliving(target))) + return ELEMENT_INCOMPATIBLE + max_charges = _max + recharge_delay = _delay + recharge_rate = _rate + accepted_slots = _slots + shield_state = _state + broken_state = _broken + recharge_sound = 'sound/magic/charge.ogg' + recharge_end_sound = 'sound/machines/ding.ogg' + if(isitem) + RegisterSignal(target, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block) + RegisterSignal(target, COMSIG_ITEM_CHECK_BLOCK, .proc/on_check_block) + RegisterSignal(target, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(target, COMSIG_ITEM_DROPPED, .proc/on_drop) + else + RegisterSignal(target, COMSIG_LIVING_RUN_BLOCK, .proc/living_block) + var/prior_shields = shields_per_mob[target] + if(prior_shields) + if(!islist(prior_shields)) + shields_per_mob[target] = list(prior_shields, target) + else + prior_shields += target + else + var/mob/living/L = target + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) + overlay_per_mob[L] = M + L.add_overlay(M, TRUE) + shields_per_mob[L] = L + charges_per_atom[target] = !isnull(current) ? current : max_charges + last_use_per_atom[target] = 0 + if(recharge_delay) + START_PROCESSING(SSdcs, src) + +/datum/element/shielded/Detach(atom/target) + var/mob/living/L + if(isitem(target)) + UnregisterSignal(target, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) + L = isliving(target.loc) ? target.loc : null + else + UnregisterSignal(target, COMSIG_LIVING_RUN_BLOCK) + L = src + if(L) + var/list/shields = shields_per_mob[L] + if(!shields) + return ..() + if(shields == target) //nothing left. + shields_per_mob -= L + var/mutable_appearance/M = overlay_per_mob[L] + L.cut_overlay(M, TRUE) + overlay_per_mob -= L + UnregisterSignal(target, COMSIG_LIVING_GET_BLOCKING_ITEMS) + else //more layers of shielding. + shields -= target + if(length(shields) == 1) + shields_per_mob[L] = shields[1] + charges_per_atom -= target + last_use_per_atom -= target + if(recharge_delay && !length(charges_per_atom)) //nothing left to process. + STOP_PROCESSING(SSdcs, src) + return ..() + +/datum/element/shielded/process() + var/list/checked = list() + for(var/i in last_use_per_atom) + var/atom/movable/A = i + recharge(A, recharge_rate, checked) + +/datum/element/shielded/proc/recharge(atom/movable/A, amount, list/checked = list()) + var/old_charges = charges_per_atom[A] + if(old_charges >= max_charges || world.time < last_use_per_atom[A]) + return + var/new_charges = min(old_charges + recharge_rate, max_charges) + charges_per_atom[A] = new_charges + if(new_charges % 1) + return + var/mob/living/L + var/skip_in = FALSE + if(isitem(A)) + L = isliving(A.loc) ? A.loc : null + else + L = A + skip_in = TRUE + if(L && checked[L]) + return + playsound(A, recharge_sound, 50, 1) + if(new_charges == max_charges) + playsound(A, recharge_sound, 50, 1) + if(L && (skip_in || (A in shields_per_mob[L]))) + var/mutable_appearance/M = overlay_per_mob[L] + M.icon_state = shield_state + checked[L] = TRUE + +/datum/element/shielded/proc/on_equip(obj/item/source, mob/equipper, slot) + if(!(accepted_slots & slotdefine2slotbit(slot))) + return + var/list/shields = shields_per_mob[equipper] + if(!shields) //They have none + RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/get_shields) + shields_per_mob[equipper] = source + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', charges_per_atom[source] ? shield_state : broken_state, MOB_LAYER + 0.01) + overlay_per_mob[equipper] = M + equipper.add_overlay(M, TRUE) + else if(!islist(shields)) //They have one + if(shields == equipper) + RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/get_shields) + shields_per_mob[equipper] = list(shields, source) + else //They have more. + shields += source + +/datum/element/shielded/proc/on_drop(obj/item/source, mob/dropper) + var/list/shields = shields_per_mob[dropper] + if(!shields) + return + if(shields == source) + UnregisterSignal(dropper, COMSIG_LIVING_GET_BLOCKING_ITEMS) + var/mutable_appearance/M = overlay_per_mob[dropper] + dropper.cut_overlay(M, TRUE) + overlay_per_mob -= dropper + shields_per_mob -= dropper + else + shields -= source + if(length(shields) == 1) + shields_per_mob[dropper] = shields[1] + +/datum/element/shielded/proc/get_shields(mob/source, list/items) + items += shields_per_mob[source] + +/datum/element/shielded/proc/on_run_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] >= 100) //already blocked by another shielded item, don't do anything. + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges_per_atom[source]) + return BLOCK_NONE + last_use_per_atom[source] = world.time + recharge_delay + if(charges_per_atom[source] < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") + var/charges_left = --charges_per_atom[source] + if(charges_left < 1) + var/list/shields = shields_per_mob[owner] + var/vis_change = TRUE + if(istype(shields)) + for(var/A in shields) + if(charges_per_atom >= 1) + vis_change = FALSE + break + owner.visible_message("[owner]'s shield overloads!") + if(vis_change) + var/mutable_appearance/M = overlay_per_mob[owner] + M.icon_state = broken_state + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += charges_left + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL //it's an energy field surrounding you after all. + +/datum/element/shielded/proc/on_check_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(charges_per_atom[source] < 1) + return + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges_per_atom[source]) + +/datum/element/shielded/proc/living_block(mob/living/source, real_attack, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list) + if(!real_attack) + if(charges_per_atom[source] >= 1) + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] = round(charges_per_atom[source]) + return + last_use_per_atom[source] = world.time + recharge_delay + if(charges_per_atom[source] < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + source.visible_message("[source]'s shields deflect [attack_text] in a shower of sparks!") + var/charges_left = --charges_per_atom[source] + if(charges_left < 1) + var/list/shields = shields_per_mob[source] + var/vis_change = TRUE + if(istype(shields)) + for(var/A in shields) + if(charges_per_atom >= 1) + vis_change = FALSE + break + source.visible_message("[source]'s shield overloads!") + if(vis_change) + var/mutable_appearance/M = overlay_per_mob[source] + M.icon_state = broken_state + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] += charges_left + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 8a7092d8a6..1b2d24e36a 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -748,63 +748,20 @@ allowed = null armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF - var/current_charges = 3 var/max_charges = 3 //How many charges total the shielding has + var/current_charges //if null, will default to max_chargs var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here - var/recharge_cooldown = 0 //Time since we've last been shot var/recharge_rate = 1 //How quickly the shield recharges once it starts charging var/shield_state = "shield-old" - var/shield_on = "shield-old" /obj/item/clothing/suit/space/hardsuit/shielded/Initialize() . = ..() if(!allowed) allowed = GLOB.advanced_hardsuit_allowed -/obj/item/clothing/suit/space/hardsuit/shielded/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(current_charges > 0) - block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - block_return[BLOCK_RETURN_BLOCK_CAPACITY] = (block_return[BLOCK_RETURN_BLOCK_CAPACITY] || 0) + current_charges - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - recharge_cooldown = world.time + recharge_delay - if(current_charges > 0) - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() - owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") - current_charges-- - if(recharge_rate) - START_PROCESSING(SSobj, src) - if(current_charges <= 0) - owner.visible_message("[owner]'s shield overloads!") - shield_state = "broken" - owner.update_inv_wear_suit() - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL - return BLOCK_NONE - -/obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/process() - if(world.time > recharge_cooldown && current_charges < max_charges) - current_charges = CLAMP((current_charges + recharge_rate), 0, max_charges) - playsound(loc, 'sound/magic/charge.ogg', 50, 1) - if(current_charges == max_charges) - playsound(loc, 'sound/machines/ding.ogg', 50, 1) - STOP_PROCESSING(SSobj, src) - shield_state = "[shield_on]" - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - C.update_inv_wear_suit() - -/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) +/obj/item/clothing/suit/space/hardsuit/shielded/ComponentInitialize() . = ..() - if(!isinhands) - var/file2use = style_flags & STYLE_ALL_TAURIC ? 'modular_citadel/icons/mob/64x32_effects.dmi' : 'icons/effects/effects.dmi' - . += mutable_appearance(file2use, shield_state, MOB_LAYER + 0.01) + AddElement(/datum/element/shielded, current_charges, max_charges, recharge_delay, recharge_rate, ITEM_SLOT_OCLOTHING, shield_state) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF @@ -833,7 +790,6 @@ hardsuit_type = "ert_security" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red shield_state = "shield-red" - shield_on = "shield-red" /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue name = "blue shielded hardsuit" @@ -896,7 +852,6 @@ item_state = "swat_suit" hardsuit_type = "syndi" max_charges = 4 - current_charges = 4 recharge_delay = 15 armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index c3ddda2328..e4596825d0 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -195,10 +195,9 @@ icon_state = "battlemage" item_state = "battlemage" recharge_rate = 0 + max_charges = INFINITY current_charges = 15 - recharge_cooldown = INFINITY shield_state = "shield-red" - shield_on = "shield-red" min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard @@ -239,6 +238,7 @@ if(!istype(W)) to_chat(user, "The rune can only be used on battlemage armour!") return - W.current_charges += 8 - to_chat(user, "You charge \the [W]. It can now absorb [W.current_charges] hits.") + var/datum/element/shielded/S = SSdcs.GetElement(list(/datum/element/shielded, 0, W.max_charges, W.recharge_delay, W.recharge_rate, ITEM_SLOT_OCLOTHING, W.shield_state)) + S.recharge(W, 8) + to_chat(user, "You charge \the [W]. It can now absorb [S.charges_per_atom[W]] hits.") qdel(src) diff --git a/code/modules/mob/living/carbon/human/human_block.dm b/code/modules/mob/living/carbon/human/human_block.dm index b1a5153ce5..8fe0376a08 100644 --- a/code/modules/mob/living/carbon/human/human_block.dm +++ b/code/modules/mob/living/carbon/human/human_block.dm @@ -1,8 +1,8 @@ /mob/living/carbon/human/get_blocking_items() . = ..() if(wear_suit) - . += wear_suit + . |= wear_suit if(w_uniform) - . += w_uniform + . |= w_uniform if(wear_neck) - . += wear_neck + . |= wear_neck diff --git a/code/modules/mob/living/living_block.dm b/code/modules/mob/living/living_block.dm index d9e3309e47..22940b5846 100644 --- a/code/modules/mob/living/living_block.dm +++ b/code/modules/mob/living/living_block.dm @@ -71,6 +71,7 @@ /// Gets an unsortedlist of objects to run block checks on. /mob/living/proc/get_blocking_items() . = list() + SEND_SIGNAL(src, COMSIG_LIVING_GET_BLOCKING_ITEMS, .) for(var/obj/item/I in held_items) // this is a bad check but i am not removing it until a better catchall is made if(istype(I, /obj/item/clothing)) @@ -85,11 +86,13 @@ /// Runs block and returns flag for do_run_block to process. /obj/item/proc/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return) + . = SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return) + if(. & BLOCK_SUCCESS) + return if(prob(final_block_chance)) owner.visible_message("[owner] blocks [attack_text] with [src]!") - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL - return BLOCK_NONE + return . | BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL + return . | BLOCK_NONE /// Returns block information using list/block_return. Used for check_block() on mobs. /obj/item/proc/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) diff --git a/tgstation.dme b/tgstation.dme index 26bb4e2e5a..593586e98e 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -514,6 +514,7 @@ #include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\elements\mob_holder.dm" #include "code\datums\elements\polychromic.dm" +#include "code\datums\elements\shielded.dm" #include "code\datums\elements\spellcasting.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\sword_point.dm" From 9c8f6cd00fedff0caf02eb0e83d7c0dc12aa28e3 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 19 Apr 2020 02:03:05 +0200 Subject: [PATCH 25/82] peeves. --- code/datums/elements/shielded.dm | 10 +++++----- code/modules/clothing/suits/wiz_robe.dm | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/datums/elements/shielded.dm b/code/datums/elements/shielded.dm index 913c2df934..b9c8c094f6 100644 --- a/code/datums/elements/shielded.dm +++ b/code/datums/elements/shielded.dm @@ -3,7 +3,7 @@ id_arg_index = 3 var/max_charges = 3 var/recharge_delay = 20 SECONDS //How long after we've been shot before we can start recharging. - var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. + var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. set to zero to disable. var/accepted_slots var/shield_state = "shield-old" //the state of the shield overlay. var/broken_state //null @@ -85,13 +85,13 @@ var/atom/movable/A = i recharge(A, recharge_rate, checked) -/datum/element/shielded/proc/recharge(atom/movable/A, amount, list/checked = list()) +/datum/element/shielded/proc/recharge(atom/movable/A, amount, list/checked = list(), forced = FALSE) var/old_charges = charges_per_atom[A] - if(old_charges >= max_charges || world.time < last_use_per_atom[A]) + if(old_charges >= max_charges || (!forced && world.time < last_use_per_atom[A])) return - var/new_charges = min(old_charges + recharge_rate, max_charges) + var/new_charges = CLAMP(old_charges + recharge_rate, 0, max_charges) charges_per_atom[A] = new_charges - if(new_charges % 1) + if(round(old_charges) >= round(new_charges)) //only send outputs if it effectively gained at least one charge return var/mob/living/L var/skip_in = FALSE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index e4596825d0..6c61cf1255 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -239,6 +239,6 @@ to_chat(user, "The rune can only be used on battlemage armour!") return var/datum/element/shielded/S = SSdcs.GetElement(list(/datum/element/shielded, 0, W.max_charges, W.recharge_delay, W.recharge_rate, ITEM_SLOT_OCLOTHING, W.shield_state)) - S.recharge(W, 8) + S.recharge(W, 8, forced = TRUE) to_chat(user, "You charge \the [W]. It can now absorb [S.charges_per_atom[W]] hits.") qdel(src) From 98081aa56bcc999bb918b304a9294e4a91af8b61 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Sun, 19 Apr 2020 03:15:51 +0200 Subject: [PATCH 26/82] Some mispelled filepaths. --- .../new_player/sprite_accessories/{pines.dm => spines.dm} | 0 code/modules/vending/{drinnerware.dm => dinnerware.dm} | 0 tgstation.dme | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename code/modules/mob/dead/new_player/sprite_accessories/{pines.dm => spines.dm} (100%) rename code/modules/vending/{drinnerware.dm => dinnerware.dm} (100%) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/pines.dm b/code/modules/mob/dead/new_player/sprite_accessories/spines.dm similarity index 100% rename from code/modules/mob/dead/new_player/sprite_accessories/pines.dm rename to code/modules/mob/dead/new_player/sprite_accessories/spines.dm diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/dinnerware.dm similarity index 100% rename from code/modules/vending/drinnerware.dm rename to code/modules/vending/dinnerware.dm diff --git a/tgstation.dme b/tgstation.dme index 26bb4e2e5a..3a9b087896 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2220,9 +2220,9 @@ #include "code\modules\mob\dead\new_player\sprite_accessories\horns.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\ipc_synths.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\legs_and_taurs.dm" -#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\spines.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\synthliz.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm" @@ -3207,7 +3207,7 @@ #include "code\modules\vending\clothesmate.dm" #include "code\modules\vending\coffee.dm" #include "code\modules\vending\cola.dm" -#include "code\modules\vending\drinnerware.dm" +#include "code\modules\vending\dinnerware.dm" #include "code\modules\vending\engineering.dm" #include "code\modules\vending\engivend.dm" #include "code\modules\vending\games.dm" From 42b81fee3da81d4d804f12e53ae68de49338a710 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sat, 18 Apr 2020 21:57:36 -0400 Subject: [PATCH 27/82] Update drink_reagents.dm --- .../chemistry/reagents/drink_reagents.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index 475a6a80fb..85f474920b 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -383,7 +383,7 @@ /datum/reagent/consumable/space_cola name = "Cola" description = "A refreshing beverage." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#100800" // rgb: 16, 8, 0 taste_description = "cola" glass_icon_state = "glass_brown" @@ -418,7 +418,7 @@ /datum/reagent/consumable/spacemountainwind name = "SM Wind" description = "Blows right through you like a space wind." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 taste_description = "sweet citrus soda" glass_icon_state = "Space_mountain_wind_glass" @@ -436,7 +436,7 @@ /datum/reagent/consumable/dr_gibb name = "Dr. Gibb" description = "A delicious blend of 42 different flavours." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 taste_description = "cherry soda" // FALSE ADVERTISING glass_icon_state = "dr_gibb_glass" @@ -451,7 +451,7 @@ /datum/reagent/consumable/space_up name = "Space-Up" description = "Tastes like a hull breach in your mouth." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#00FF00" // rgb: 0, 255, 0 taste_description = "cherry soda" glass_icon_state = "space-up_glass" @@ -466,7 +466,7 @@ /datum/reagent/consumable/lemon_lime name = "Lemon Lime" description = "A tangy substance made of 0.5% natural citrus!" - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "tangy lime and lemon soda" glass_icon_state = "glass_yellow" @@ -480,7 +480,7 @@ /datum/reagent/consumable/pwr_game name = "Pwr Game" description = "The only drink with the PWR that true gamers crave." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#9385bf" // rgb: 58, 52, 75 taste_description = "sweet and salty tang" glass_icon_state = "glass_red" @@ -494,7 +494,7 @@ /datum/reagent/consumable/shamblers name = "Shambler's Juice" description = "~Shake me up some of that Shambler's Juice!~" - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#f00060" // rgb: 94, 0, 38 taste_description = "carbonated metallic soda" glass_icon_state = "glass_red" @@ -854,7 +854,7 @@ /datum/reagent/consumable/sol_dry name = "Sol Dry" description = "A soothing, mellow drink made from ginger." - nutriment_factor = 0 + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#f7d26a" quality = DRINK_NICE taste_description = "sweet ginger spice" From dc5c8fb657c713bebd777cdd8e57f5386482145b Mon Sep 17 00:00:00 2001 From: Winter Flare <7543955+Owai-Seek@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:00:48 -0400 Subject: [PATCH 28/82] Ups Crab Meat from 1 to 4 --- code/modules/mob/living/simple_animal/friendly/crab.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 9e1ae48bdd..cce5edc513 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -11,7 +11,7 @@ blood_volume = 350 speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" From c3905c8c2b244e9cdc2ef7d4ac18c432569aa20e Mon Sep 17 00:00:00 2001 From: kiwedespars <47008095+kiwedespars@users.noreply.github.com> Date: Sun, 19 Apr 2020 15:56:31 -0700 Subject: [PATCH 29/82] Update uplink_kits.dm --- code/game/objects/items/storage/uplink_kits.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 037ae51e30..293735c598 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -494,4 +494,14 @@ new item1(src) // Create three, non repeat items from the list. new item2(src) new item3(src) - new /obj/item/paper/contractor_guide(src) //Paper guide \ No newline at end of file + new /obj/item/paper/contractor_guide(src) //Paper guide + + +/obj/item/storage/box/syndie_kit/northstar + +/obj/item/storage/box/syndie_kit/northstar/PopulateContents() + new /obj/item/clothing/gloves/fingerless/pugilist/rapid(src) + new /obj/item/clothing/accessory/padding(src) + new /obj/item/clothing/under/chameleon(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + new /obj/item/lighter(src) From 2c362dd84f83627c2ac20d63581de5e11a369b13 Mon Sep 17 00:00:00 2001 From: kiwedespars <47008095+kiwedespars@users.noreply.github.com> Date: Sun, 19 Apr 2020 15:58:31 -0700 Subject: [PATCH 30/82] Update uplink_bundles.dm --- code/modules/uplink/uplink_items/uplink_bundles.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm index a748f49322..a85c8d53fe 100644 --- a/code/modules/uplink/uplink_items/uplink_bundles.dm +++ b/code/modules/uplink/uplink_items/uplink_bundles.dm @@ -41,6 +41,16 @@ player_minimum = 15 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) +/datum/uplink_item/bundles_TC/northstar_bundle + name = "Northstar Bundle" + desc = "An item usually reserved for the Gorlex Marauders and their operatives, now available for recreational use. \ + These armbands let the user punch people very fast and with the lethality of a legendary martial artist. \ + Does not improve weapon attack speed or the meaty fists of a hulk, but you will be unmatched in martial power. \ + Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands." + item = /obj/item/storage/box/syndie_kit/northstar + cost = 20 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/suits/infiltrator_bundle name = "Insidious Infiltration Gear Case" desc = "Developed by Roseus Galactic in conjunction with the Gorlex Marauders to produce a functional suit for urban operations, \ @@ -197,4 +207,4 @@ name = "20 Raw Telecrystals" desc = "Twenty telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count." item = /obj/item/stack/telecrystal/twenty - cost = 20 \ No newline at end of file + cost = 20 From 25b1b889dcad639f96c56d26b885b2dffe0f6eb3 Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Sun, 19 Apr 2020 19:09:20 -0400 Subject: [PATCH 31/82] amazing truely amazing --- code/game/objects/items/storage/bags.dm | 2 +- code/game/objects/items/storage/boxes.dm | 4 +- code/modules/cargo/packs/organic.dm | 2 +- .../food_and_drinks/food/snacks_meat.dm | 96 +++++++++++++------ .../kitchen_machinery/monkeyrecycler.dm | 2 +- .../recipes/tablecraft/recipes_salad.dm | 2 +- code/modules/mining/machine_vending.dm | 2 +- .../chemistry/reagents/other_reagents.dm | 6 +- .../chemistry/recipes/slime_extracts.dm | 2 +- .../research/designs/biogenerator_designs.dm | 2 +- .../crossbreeding/_status_effects.dm | 4 +- .../xenobiology/crossbreeding/industrial.dm | 2 +- .../xenobiology/crossbreeding/reproductive.dm | 6 +- .../research/xenobiology/xenobio_camera.dm | 4 +- .../research/xenobiology/xenobiology.dm | 2 +- code/modules/vending/drinnerware.dm | 2 +- 16 files changed, 88 insertions(+), 52 deletions(-) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 103dabdeec..52802fa3df 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -412,7 +412,7 @@ STR.max_combined_w_class = 200 STR.max_items = 25 STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart)) + STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/cube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart)) STR.cant_hold = typecacheof(list(/obj/item/organ/brain, /obj/item/organ/liver/cybernetic, /obj/item/organ/heart/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/tongue/cybernetic, /obj/item/organ/ears/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/cyberimp)) /obj/item/storage/bag/bio/holding diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 515c39ffcb..d8e507050b 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -454,11 +454,11 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 - STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube)) + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/cube/monkey)) /obj/item/storage/box/monkeycubes/PopulateContents() for(var/i in 1 to 5) - new /obj/item/reagent_containers/food/snacks/monkeycube(src) + new /obj/item/reagent_containers/food/snacks/cube/monkey(src) /obj/item/storage/box/ids name = "box of spare IDs" diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index 97b7636f58..22cb518926 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -205,7 +205,7 @@ desc = "Need some meat? With this do-it-yourself kit you'll be swimming in it! Contains a monkey cube, an IV drip, and some cryoxadone!" cost = 2150 contraband = TRUE - contains = list(/obj/item/reagent_containers/food/snacks/monkeycube, + contains = list(/obj/item/reagent_containers/food/snacks/cube/monkey, /obj/item/restraints/handcuffs/cable, /obj/machinery/iv_drip, /obj/item/reagent_containers/glass/beaker/cryoxadone, diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 7e831b6cd6..b802aea31a 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -222,36 +222,6 @@ tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtype = MEAT -/obj/item/reagent_containers/food/snacks/monkeycube - name = "monkey cube" - desc = "Just add water!" - icon_state = "monkeycube" - bitesize = 12 - list_reagents = list(/datum/reagent/consumable/nutriment = 2) - filling_color = "#CD853F" - tastes = list("the jungle" = 1, "bananas" = 1) - foodtype = MEAT | SUGAR - -/obj/item/reagent_containers/food/snacks/monkeycube/On_Consume(mob/living/carbon/M) - if(iscarbon(M)) - M.visible_message("[src] bursts out of [M]!") - M.emote("scream") - M.DefaultCombatKnockdown(40) - M.adjustBruteLoss(60) - Expand() - return TRUE - return ..() - -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() - var/mob/spammer = get_mob_by_key(fingerprintslast) - var/mob/living/carbon/monkey/bananas = new(drop_location(), TRUE, spammer) - if (!QDELETED(bananas)) - visible_message("[src] expands!") - bananas.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK) - else if (!spammer) // Visible message in case there are no fingerprints - visible_message("[src] fails to expand!") - qdel(src) - /obj/item/reagent_containers/food/snacks/enchiladas name = "enchiladas" desc = "Viva La Mexico!" @@ -372,3 +342,69 @@ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) tastes = list("meat" = 3, "smokey sauce" = 1) foodtype = MEAT + +////////////// Cubes ////////// + +/obj/item/reagent_containers/food/snacks/cube + name = "debug cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + list_reagents = list(/datum/reagent/consumable/nutriment = 2) + filling_color = "#CD853F" + tastes = list("broken" = 1, "code" = 1) + foodtype = MEAT | SUGAR + var/dried_being = /mob/living/carbon/monkey //What the cube will spawn mob wise + +/obj/item/reagent_containers/food/snacks/cube/On_Consume(mob/living/carbon/M) + if(iscarbon(M)) + M.visible_message("[src] bursts out of [M]!") + M.emote("scream") + M.DefaultCombatKnockdown(40) + M.adjustBruteLoss(60) + Expand() + return TRUE + return ..() + +/obj/item/reagent_containers/food/snacks/cube/proc/Expand() + var/mob/spammer = get_mob_by_key(fingerprintslast) + var/mob/living/water = new dried_being(drop_location(), TRUE, spammer) + if (!QDELETED(water)) + visible_message("[src] expands!") + water.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK) + else if (!spammer) // Visible message in case there are no fingerprints + visible_message("[src] fails to expand!") + qdel(src) + +/obj/item/reagent_containers/food/snacks/cube/monkey + name = "monkey cube" + desc = "Just add water!" + tastes = list("the jungle" = 1, "bananas" = 1) + dried_being = /mob/living/carbon/monkey + +/obj/item/reagent_containers/food/snacks/cube/beno + name = "alien cube" + desc = "Just add water and run!" + tastes = list("the jungle" = 1, "acid" = 1) + dried_being = /mob/living/carbon/alien + +/obj/item/reagent_containers/food/snacks/cube/goat + name = "goat cube" + tastes = list("grass" = 1) + dried_being = /mob/living/simple_animal/hostile/retaliate/goat + +/obj/item/reagent_containers/food/snacks/cube/cow + name = "cow cube" + tastes = list("milk" = 1, "beef" = 1) + dried_being = /mob/living/simple_animal/cow + +/obj/item/reagent_containers/food/snacks/cube/egg //Well eggs normally are able to hatch into small birds, this one does not. \ +Also in order to have a normal egg hatch you need a hen ontop of it for it to hatch, meaning this one is for on-demand hen needs. + name = "egg cube thing" + desc = "Just add water, hey wait a second..." + icon_state = "egg" + filling_color = "#F0E68C" + cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg + list_reagents = list(/datum/reagent/consumable/eggyolk = 5) + tastes = list("dried eggs" = 1, "confusion" = 1) + dried_being = /mob/living/simple_animal/chicken diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 3d7341308b..2318c54508 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -78,7 +78,7 @@ playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1) grinded -= required_grind for(var/i = 0, i < cube_production, i++) - new /obj/item/reagent_containers/food/snacks/monkeycube(src.loc) + new /obj/item/reagent_containers/food/snacks/cube/monkey(src.loc) to_chat(user, "The machine's display flashes that it has [grinded] monkeys worth of material left.") else to_chat(user, "The machine needs at least [required_grind] monkey(s) worth of material to produce a monkey cube. It only has [grinded].") diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm index 90036c0e2a..f25aaab6fd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm @@ -68,7 +68,7 @@ /datum/reagent/consumable/sodiumchloride = 1, /datum/reagent/consumable/blackpepper = 1, /obj/item/reagent_containers/glass/bowl = 1, - /obj/item/reagent_containers/food/snacks/monkeycube = 1, + /obj/item/reagent_containers/food/snacks/cube/monkey = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1 ) result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 0182dec254..bcb196a103 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -194,7 +194,7 @@ prize_list += list( new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250), new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), - new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), + new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/cube/monkey, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index e66ebc5f20..0206b571cb 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -271,9 +271,9 @@ /datum/reagent/water/reaction_obj(obj/O, reac_volume) O.extinguish() O.acid_level = 0 - // Monkey cube - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O + // cubes + if(istype(O, /obj/item/reagent_containers/food/snacks/cube)) + var/obj/item/reagent_containers/food/snacks/cube/cube = O cube.Expand() // Dehydrated carp diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index eb473950d5..ead47e2a42 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -42,7 +42,7 @@ /datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder) for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom)) + new /obj/item/reagent_containers/food/snacks/cube/monkey(get_turf(holder.my_atom)) ..() //Green diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index e82dffbe07..c2bf817ddf 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -72,7 +72,7 @@ id = "mcube" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube + build_path = /obj/item/reagent_containers/food/snacks/cube/monkey category = list("initial", "Food") /datum/design/smeat diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 95d6c49529..fd4e508e1b 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -624,9 +624,9 @@ datum/status_effect/stabilized/blue/on_remove() O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason. O.acid_level = 0 // Monkey cube - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O, /obj/item/reagent_containers/food/snacks/cube)) to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!") - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O + var/obj/item/reagent_containers/food/snacks/cube/cube = O cube.Expand() // Dehydrated carp diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index bec2c2c1ae..ac9d2e58c5 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -53,7 +53,7 @@ Industrial extracts: /obj/item/slimecross/industrial/grey colour = "grey" - itempath = /obj/item/reagent_containers/food/snacks/monkeycube + itempath = /obj/item/reagent_containers/food/snacks/cube/monkey itemamount = 5 /obj/item/slimecross/industrial/orange diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm index 2f6ca9555a..3662f45355 100644 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm @@ -19,14 +19,14 @@ Reproductive extracts: return if(istype(O, /obj/item/storage/bag/bio)) var/list/inserted = list() - SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/cube/monkey, src, 1, null, null, user, inserted) if(inserted.len) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1] + var/obj/item/reagent_containers/food/snacks/cube/monkey/M = inserted[1] if(istype(M)) eat_cube(M, user) else to_chat(user, "There are no monkey cubes in the bio bag!") - if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O,/obj/item/reagent_containers/food/snacks/cube/monkey)) eat_cube(O, user) if(cubes_eaten >= 3) var/cores = rand(1,4) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 5492e9bc38..ef9c751d57 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -146,7 +146,7 @@ else to_chat(user, "[src] already has the contents of [O] installed!") return - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS + if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") qdel(O) @@ -155,7 +155,7 @@ var/obj/item/storage/P = O var/loaded = FALSE for(var/obj/G in P.contents) - if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(G, /obj/item/reagent_containers/food/snacks/cube/monkey)) loaded = TRUE monkeys++ qdel(G) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a346cd697f..c5655026c3 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -83,7 +83,7 @@ /obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) if(SLIME_ACTIVATE_MINOR) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = new + var/obj/item/reagent_containers/food/snacks/cube/monkey/M = new if(!user.put_in_active_hand(M)) M.forceMove(user.drop_location()) playsound(user, 'sound/effects/splat.ogg', 50, 1) diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm index 8f257d07ec..da8baa7e1c 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/drinnerware.dm @@ -20,7 +20,7 @@ /obj/item/reagent_containers/food/condiment/saltshaker = 5, /obj/item/reagent_containers/food/condiment/peppermill = 5) contraband = list( - /obj/item/reagent_containers/food/snacks/monkeycube = 1, + /obj/item/reagent_containers/food/snacks/cube/monkey= 1, /obj/item/kitchen/knife/butcher = 2, /obj/item/reagent_containers/syringe = 3) premium = list( From 3a78da9332959b33ec2ccdbda2a99518fe64a50a Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Sun, 19 Apr 2020 19:18:19 -0400 Subject: [PATCH 32/82] commit clearifcation --- code/modules/food_and_drinks/food/snacks_meat.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index b802aea31a..e7d10566dd 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -399,7 +399,7 @@ dried_being = /mob/living/simple_animal/cow /obj/item/reagent_containers/food/snacks/cube/egg //Well eggs normally are able to hatch into small birds, this one does not. \ -Also in order to have a normal egg hatch you need a hen ontop of it for it to hatch, meaning this one is for on-demand hen needs. +Also in order to have a normal egg hatch you need a hen to lay the egg that is able to hatch, meaning this one is for on-demand hen needs. name = "egg cube thing" desc = "Just add water, hey wait a second..." icon_state = "egg" From d98f536003a95919f44c8411a96e188700824a3a Mon Sep 17 00:00:00 2001 From: TrilbySpaceClone Date: Sun, 19 Apr 2020 19:38:23 -0400 Subject: [PATCH 33/82] map fix + cube fix --- _maps/map_files/PubbyStation/PubbyStation.dmm | 2 +- code/modules/food_and_drinks/food/snacks_meat.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index bdbce36c9c..dda8969b5a 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -23111,7 +23111,7 @@ name = "Hydroponics Desk"; req_access_txt = "35" }, -/obj/item/reagent_containers/food/snacks/monkeycube, +/obj/item/reagent_containers/food/snacks/cube/monkey, /turf/open/floor/plasteel/dark, /area/hydroponics) "bce" = ( diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index e7d10566dd..fe914deba9 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -383,10 +383,10 @@ dried_being = /mob/living/carbon/monkey /obj/item/reagent_containers/food/snacks/cube/beno - name = "alien cube" + name = "alien drone cube" desc = "Just add water and run!" tastes = list("the jungle" = 1, "acid" = 1) - dried_being = /mob/living/carbon/alien + dried_being = /mob/living/carbon/alien/humanoid/drone /obj/item/reagent_containers/food/snacks/cube/goat name = "goat cube" From 25e0c47225badbecd024d788909929d8f28e456b Mon Sep 17 00:00:00 2001 From: kiwedespars <47008095+kiwedespars@users.noreply.github.com> Date: Sun, 19 Apr 2020 16:48:37 -0700 Subject: [PATCH 34/82] oops --- code/game/objects/items/storage/uplink_kits.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 293735c598..f708892877 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -495,7 +495,6 @@ new item2(src) new item3(src) new /obj/item/paper/contractor_guide(src) //Paper guide - /obj/item/storage/box/syndie_kit/northstar From b21ee932cf0c74a7b9911f9f9617c1cb29b2e26d Mon Sep 17 00:00:00 2001 From: kiwedespars <47008095+kiwedespars@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:06:21 -0700 Subject: [PATCH 35/82] maybe this is travis's issue? --- code/game/objects/items/storage/uplink_kits.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 3a3cca0f3c..d94ed6b0ae 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -509,4 +509,5 @@ new /obj/item/clothing/accessory/padding(src) new /obj/item/clothing/under/chameleon(src) new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) - new /obj/item/lighter(src) \ No newline at end of file + new /obj/item/lighter(src) + From 842483190a0267073f93051ecc2bdc52201b0f91 Mon Sep 17 00:00:00 2001 From: kiwedespars <47008095+kiwedespars@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:18:14 -0700 Subject: [PATCH 36/82] Update code/game/objects/items/storage/uplink_kits.dm my brain is small when working git. Co-Authored-By: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> --- code/game/objects/items/storage/uplink_kits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index d94ed6b0ae..cf0afb638b 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -500,7 +500,7 @@ new item1(src) // Create three, non repeat items from the list. new item2(src) new item3(src) - new /obj/item/paper/contractor_guide(src) //Paper guide + new /obj/item/paper/contractor_guide(src) //Paper guide /obj/item/storage/box/syndie_kit/northstar From 31d7fad1b47c38774a5cc880336b52fbf50027a1 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Mon, 20 Apr 2020 02:39:40 +0200 Subject: [PATCH 37/82] Update time_track.dm --- code/controllers/subsystem/time_track.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index cd53c8f0ba..2f4949fc1e 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(time_track) var/time_dilation_text /datum/controller/subsystem/time_track/fire() - stat_time_text = "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]\n\nRound Time: [WORLDTIME2TEXT("hh:mm:ss")]\n\nStation Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]\n\n[time_dilation_text]" + stat_time_text = "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]\n\nRound Time: [DisplayTimeText(world.time - SSticker.round_start_time, 1)] \n\nStation Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]\n\n[time_dilation_text]" if(++last_measurement == measurement_delay) last_measurement = 0 From e311aafbc0de655b9a399d0ced767f857bd8d2df Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Sun, 19 Apr 2020 22:21:07 -0400 Subject: [PATCH 38/82] Update snacks_meat.dm --- code/modules/food_and_drinks/food/snacks_meat.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index fe914deba9..c7c74fb560 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -398,8 +398,9 @@ tastes = list("milk" = 1, "beef" = 1) dried_being = /mob/living/simple_animal/cow -/obj/item/reagent_containers/food/snacks/cube/egg //Well eggs normally are able to hatch into small birds, this one does not. \ -Also in order to have a normal egg hatch you need a hen to lay the egg that is able to hatch, meaning this one is for on-demand hen needs. +/obj/item/reagent_containers/food/snacks/cube/egg +//Well eggs normally are able to hatch into small birds, this one does not. +//Also in order to have a normal egg hatch you need a hen to lay the egg that is able to hatch, meaning this one is for on-demand hen needs. name = "egg cube thing" desc = "Just add water, hey wait a second..." icon_state = "egg" From 10d8ef79db9ef7ad9ddd88ce2db09341c408cb80 Mon Sep 17 00:00:00 2001 From: EmeraldSundisk Date: Sun, 19 Apr 2020 20:33:35 -0700 Subject: [PATCH 39/82] Update CogStation.dmm --- _maps/map_files/CogStation/CogStation.dmm | 5092 +++++++++++++-------- 1 file changed, 3166 insertions(+), 1926 deletions(-) diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 28eded5c85..dbc857dfd7 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -705,6 +705,7 @@ /obj/item/circuitboard/machine/vending/donksofttoyvendor, /obj/item/storage/pill_bottle/happy, /obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/cogstation/cluwne, /turf/open/floor/plating, /area/crew_quarters/theatre/clown) "abJ" = ( @@ -800,24 +801,11 @@ /turf/closed/wall/r_wall, /area/router/aux) "abX" = ( -/obj/machinery/computer/secure_data, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Security Checkpoint"; - pixel_x = 22 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/security/checkpoint) "abY" = ( /obj/structure/grille, @@ -1523,9 +1511,9 @@ dir = 1 }, /obj/structure/closet, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/lounge) "adK" = ( @@ -3511,9 +3499,9 @@ c_tag = "Clown's Office"; pixel_x = 22 }, -/obj/item/clothing/under/rank/yellowclown, -/obj/item/clothing/under/rank/blueclown, -/obj/item/clothing/under/rank/greenclown, +/obj/item/clothing/under/rank/civilian/clown/yellow, +/obj/item/clothing/under/rank/civilian/clown/blue, +/obj/item/clothing/under/rank/civilian/clown/green, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/megaphone/clown, /turf/open/floor/plating, @@ -4141,20 +4129,12 @@ /turf/open/floor/plasteel, /area/construction/secondary) "akd" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/security/checkpoint) "ake" = ( /obj/machinery/firealarm{ @@ -4809,6 +4789,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/item/paper/guides/cogstation/letter_sec, /turf/open/floor/plasteel, /area/security/warden) "alG" = ( @@ -6070,8 +6051,27 @@ /turf/open/floor/plasteel/dark/corner, /area/hallway/secondary/entry) "aoy" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/machinery/computer/secure_data, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Security Checkpoint"; + pixel_x = 22 + }, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, /area/security/checkpoint) "aoz" = ( /obj/structure/closet, @@ -7342,7 +7342,7 @@ pixel_y = 26 }, /obj/effect/landmark/start/bartender, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) @@ -8418,6 +8418,7 @@ /obj/item/storage/bag/tray, /obj/item/clothing/gloves/color/white, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/item/paper/guides/cogstation/cooks, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "atP" = ( @@ -9400,12 +9401,19 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/barbershop) "avY" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 }, -/turf/open/floor/plating, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 5; + pixel_y = -24 + }, +/obj/machinery/door/window/westleft{ + name = "AI Core Access"; + req_access_txt = "65" + }, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "avZ" = ( /obj/effect/landmark/start/cook, @@ -9528,13 +9536,15 @@ /turf/closed/wall/r_wall, /area/maintenance/solars/port) "awn" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "awo" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -10387,11 +10397,16 @@ /turf/open/floor/plasteel, /area/hydroponics/lobby) "axZ" = ( -/obj/machinery/light{ - dir = 1; - light_color = "#e8eaff" +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 0; + pixel_y = 28 + }, +/obj/machinery/door/window/eastright{ + name = "AI Core Access"; + req_access_txt = "65" }, -/obj/structure/disposalpipe/segment, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aya" = ( @@ -11286,9 +11301,9 @@ "azR" = ( /obj/structure/closet/secure_closet/bar, /obj/structure/disposalpipe/segment, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, /obj/item/stack/spacecash/c10, -/obj/item/clothing/under/waiter, +/obj/item/clothing/under/suit/waiter, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) "azS" = ( @@ -11768,27 +11783,31 @@ /turf/closed/wall, /area/crew_quarters/toilet) "aAP" = ( -/obj/effect/turf_decal/tile/red, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/brig) +"aAQ" = ( /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/open/floor/plasteel, -/area/security/brig) -"aAQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/main) +/area/security/checkpoint) "aAR" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, @@ -12361,11 +12380,20 @@ /turf/open/floor/plating, /area/security/main) "aCb" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, /area/security/brig) "aCc" = ( /obj/structure/closet/secure_closet/security/sec, @@ -12680,6 +12708,7 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/item/book/manual/wiki/security_space_law, +/obj/item/paper/guides/cogstation/letter_sec, /turf/open/floor/carpet/red, /area/security/brig) "aCM" = ( @@ -12867,9 +12896,11 @@ /area/crew_quarters/barbershop) "aDb" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, -/area/security/main) +/area/security/checkpoint) "aDc" = ( /obj/machinery/firealarm{ dir = 4; @@ -12972,16 +13003,19 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) "aDm" = ( -/obj/structure/table, -/obj/machinery/recharger, +/obj/machinery/computer/security{ + dir = 1 + }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/security/checkpoint) "aDn" = ( @@ -13176,19 +13210,23 @@ /area/maintenance/port/fore) "aDF" = ( /obj/structure/table, -/obj/machinery/firealarm{ - pixel_y = 26 - }, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/paper_bin, -/obj/item/pen, /turf/open/floor/plasteel, -/area/security/main) +/area/security/checkpoint) "aDG" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -13340,18 +13378,26 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "aEc" = ( -/obj/structure/closet{ - name = "Evidence Closet 5" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/open/floor/plasteel, /area/security/brig) @@ -13839,7 +13885,7 @@ "aFc" = ( /obj/structure/table, /obj/item/clothing/suit/toggle/owlwings, -/obj/item/clothing/under/owl, +/obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask, /turf/open/floor/plating/asteroid, /area/hydroponics/garden{ @@ -13904,12 +13950,11 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/hos) "aFk" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel, -/area/security/main) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/checkpoint) "aFl" = ( /obj/structure/chair/sofa/right, /obj/effect/turf_decal/tile/green{ @@ -14215,10 +14260,18 @@ /turf/open/floor/plasteel, /area/storage/emergency/generic) "aFP" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/security/checkpoint) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/security/main) "aFQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -14241,11 +14294,17 @@ /turf/open/floor/plasteel, /area/storage/emergency/generic) "aFT" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/turf/closed/wall, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, /area/security/brig) "aFU" = ( /obj/machinery/atmospherics/components/binary/circulator/cold{ @@ -15134,17 +15193,14 @@ /turf/open/floor/plasteel/dark, /area/bridge) "aHE" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = -6; - pixel_y = 2 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = 6; - pixel_y = 3 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/bridge) +/turf/open/floor/plating/airless, +/area/space/nearstation) "aHF" = ( /turf/open/floor/plasteel/dark, /area/bridge) @@ -15191,7 +15247,7 @@ }, /area/chapel/main) "aHK" = ( -/obj/structure/piano, +/obj/structure/musician/piano, /turf/open/floor/carpet{ icon_state = "carpetsymbol" }, @@ -15630,34 +15686,71 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aIC" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/security/main) "aID" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/main) "aIE" = ( /turf/open/floor/carpet/royalblue, /area/bridge) "aIF" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 28 + }, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/recharger, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aIG" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ +/obj/structure/table, +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plating, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aIH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 6 @@ -15752,14 +15845,42 @@ /turf/open/floor/plasteel, /area/hydroponics) "aIS" = ( +/obj/structure/disposalpipe/segment, /obj/effect/landmark/start/ai, +/obj/item/radio/intercom{ + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 27; + pixel_y = -7 + }, +/obj/item/radio/intercom{ + freerange = 1; + name = "Common Channel"; + pixel_x = 27; + pixel_y = 5 + }, /obj/machinery/button/door{ id = "AIShutter"; layer = 3.6; name = "AI Core Shutter Control"; - pixel_x = 24 + pixel_x = 24; + pixel_y = -24 + }, +/obj/item/radio/intercom{ + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_x = -24; + pixel_y = -8 + }, +/obj/machinery/button/door{ + id = "AIChamberShutter"; + layer = 3.6; + name = "AI Chamber Shutter Control"; + pixel_x = -24; + pixel_y = -24 }, -/obj/structure/disposalpipe/segment, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aIT" = ( @@ -15918,14 +16039,23 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "aJj" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/chair{ + dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = 24 +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Chapel APC"; + pixel_x = -26 + }, +/turf/open/floor/plasteel{ + icon_state = "chapel" + }, +/area/chapel/main) "aJk" = ( /obj/structure/table/wood, /obj/item/candle, @@ -16429,11 +16559,21 @@ /turf/open/floor/carpet/red, /area/security/brig) "aKi" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aKj" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 6 @@ -17300,25 +17440,12 @@ /turf/open/floor/plasteel, /area/security/brig) "aLX" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/noticeboard{ - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/recharger, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/security/main) "aLY" = ( /obj/effect/turf_decal/tile/red, @@ -17718,13 +17845,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aMN" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/main) "aMO" = ( @@ -17909,9 +18035,7 @@ /turf/open/floor/plasteel, /area/bridge) "aNh" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNi" = ( @@ -17990,37 +18114,13 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aNo" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AIShutter"; + name = "AI Core Shutters" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/aiModule/supplied/oxygen{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/item/aiModule/supplied/quarantine{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/aiModule/zeroth/oneHuman{ - pixel_y = 4 - }, -/obj/effect/spawner/lootdrop/aimodule_harmful{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/aiModule/supplied/protectStation{ - pixel_x = -2 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "aNp" = ( /obj/effect/turf_decal/delivery, @@ -18038,17 +18138,11 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "aNr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNs" = ( /obj/effect/turf_decal/tile/yellow{ @@ -18119,21 +18213,10 @@ }, /area/chapel/main) "aNz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/door/window/northleft{ - name = "AI Chamber"; - req_one_access_txt = "65" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNA" = ( /obj/machinery/door/firedoor, @@ -18407,6 +18490,9 @@ "aOe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "aOf" = ( @@ -18682,16 +18768,15 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aOI" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 10 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/flasher{ + id = "ID"; + pixel_x = 8; + pixel_y = 24 }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aOJ" = ( /turf/closed/wall/r_wall, @@ -18784,7 +18869,7 @@ /obj/effect/turf_decal/bot, /obj/item/clothing/accessory/armband/hydro, /obj/item/encryptionkey/headset_service, -/obj/item/clothing/under/rank/vice, +/obj/item/clothing/under/misc/vice_officer, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, @@ -18859,21 +18944,13 @@ name = "Engine Room" }) "aPf" = ( -/obj/machinery/computer/upload/ai{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 6 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aPg" = ( /obj/structure/grille, @@ -18976,15 +19053,15 @@ }, /area/hallway/primary/central) "aPs" = ( -/obj/structure/closet/secure_closet/hop, -/obj/machinery/light{ - dir = 1; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit, -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hop) +/obj/effect/turf_decal/tile/red, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aPt" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -19101,6 +19178,9 @@ pixel_y = 6 }, /obj/item/clothing/glasses/meson, +/obj/machinery/status_display{ + pixel_x = -32 + }, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "aPF" = ( @@ -19245,30 +19325,40 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/fitness/cogpool) "aPT" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-02" +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/bridge) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "aPU" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/machinery/camera{ - c_tag = "Bridge - Port Quarter"; - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/keycard_auth{ - pixel_y = -24 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/bridge) "aPV" = ( -/obj/machinery/photocopier, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, /area/bridge) "aPW" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, /area/bridge) "aPX" = ( /obj/structure/table, @@ -20551,9 +20641,20 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aSJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/captain) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aSK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20819,11 +20920,16 @@ /turf/open/floor/plating, /area/maintenance/department/eva) "aTo" = ( -/obj/effect/landmark/start/captain, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "0-4" }, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aTp" = ( /obj/structure/chair{ dir = 4 @@ -20856,17 +20962,24 @@ }, /area/chapel/main) "aTr" = ( -/obj/structure/table/wood, -/obj/machinery/recharger, -/turf/open/floor/carpet/blue, -/area/crew_quarters/heads/captain) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aTs" = ( /turf/closed/wall, /area/maintenance/department/eva) "aTt" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/hop) +/obj/structure/closet/secure_closet/detective, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aTu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -20962,14 +21075,16 @@ /turf/closed/wall, /area/router/public) "aTH" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plating, +/area/bridge) "aTI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -20985,16 +21100,12 @@ /turf/open/floor/plasteel, /area/router/public) "aTJ" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/item/pen/fountain{ - pixel_x = 2; - pixel_y = 6 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/item/stamp/hop, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aTK" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -21551,9 +21662,13 @@ /turf/open/floor/plasteel, /area/science/mixing) "aVa" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plating, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aVb" = ( /obj/structure/pool/Rboard, @@ -22108,9 +22223,12 @@ /turf/open/floor/plasteel, /area/gateway) "aWn" = ( -/obj/structure/closet/secure_closet/detective, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aWo" = ( @@ -22197,27 +22315,40 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aWw" = ( -/obj/structure/table/wood, -/obj/item/pinpointer/nuke, -/obj/item/card/id/captains_spare, -/obj/item/hand_tele, -/obj/item/disk/nuclear, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) -"aWx" = ( -/obj/structure/table/wood, -/obj/machinery/light, -/obj/item/storage/photo_album/Captain, -/obj/item/camera{ - pixel_y = -6 +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/stamp/captain, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aWx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aWy" = ( -/obj/machinery/suit_storage_unit/captain, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aWz" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -23026,9 +23157,12 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) "aYm" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ai_monitored/storage/eva) +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aYn" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line{ @@ -23188,30 +23322,40 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "aYD" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) -"aYE" = ( -/obj/item/beacon, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) -"aYF" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/open/floor/plasteel/checker, -/area/ai_monitored/storage/eva) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aYE" = ( +/obj/structure/closet/crate/trashcart, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aYF" = ( +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/hand_labeler, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aYG" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -23229,14 +23373,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aYI" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/turf/open/floor/plasteel/dark/side{ - dir = 4 +/obj/machinery/photocopier, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 }, -/area/hallway/primary/central) +/obj/item/paper/guides/cogstation/letter_sec, +/turf/open/floor/plasteel, +/area/security/main) "aYJ" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -23584,7 +23731,7 @@ /obj/effect/turf_decal/bot_white/left, /obj/item/stack/sheet/mineral/diamond, /obj/item/gun/ballistic/revolver/mateba, -/obj/item/clothing/under/soviet, +/obj/item/clothing/under/costume/soviet, /obj/item/clothing/suit/armor/vest/russian_coat, /obj/item/clothing/head/helmet/rus_helmet, /obj/machinery/light, @@ -23857,6 +24004,9 @@ /obj/item/aiModule/core/full/custom{ pixel_x = -4 }, +/obj/machinery/status_display{ + pixel_x = 32 + }, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "aZQ" = ( @@ -23884,10 +24034,18 @@ /turf/open/floor/plasteel/dark/corner, /area/ai_monitored/storage/eva) "aZT" = ( -/obj/structure/table/wood, -/obj/item/stack/packageWrap, -/turf/open/floor/carpet/royalblue, -/area/bridge) +/obj/structure/closet/secure_closet/hos, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/item/storage/box/deputy, +/obj/item/paper/guides/cogstation/letter_hos, +/turf/open/floor/plasteel/grimy, +/area/crew_quarters/heads/hos) "aZU" = ( /obj/structure/chair, /obj/machinery/light{ @@ -24280,8 +24438,8 @@ "baP" = ( /obj/structure/closet/secure_closet/captains, /obj/item/reagent_containers/food/drinks/flask/gold, -/obj/item/clothing/under/gimmick/rank/captain/suit, -/obj/item/clothing/under/gimmick/rank/captain/suit/skirt, +/obj/item/clothing/under/rank/captain/suit, +/obj/item/clothing/under/rank/captain/suit/skirt, /obj/machinery/airalarm{ pixel_y = 24 }, @@ -24349,11 +24507,39 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "baW" = ( -/obj/structure/grille, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/aiModule/core/full/asimov{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/effect/spawner/lootdrop/aimodule_neutral{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/effect/spawner/lootdrop/aimodule_harmless{ + pixel_y = 6 + }, +/obj/item/aiModule/core/freeformcore{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/aiModule/supplied/freeform{ + pixel_x = -2 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "baX" = ( /obj/effect/turf_decal/tile/yellow, @@ -25772,36 +25958,12 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "beu" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/grille, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/aiModule/core/full/asimov{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/effect/spawner/lootdrop/aimodule_neutral{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/effect/spawner/lootdrop/aimodule_harmless{ - pixel_y = 6 - }, -/obj/item/aiModule/core/freeformcore{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/aiModule/supplied/freeform{ - pixel_x = -2 - }, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "bev" = ( /obj/structure/cable{ @@ -25943,7 +26105,11 @@ /area/security/courtroom/jury) "beQ" = ( /obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/grimy, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall, /area/security/detectives_office) "beR" = ( /obj/structure/chair{ @@ -26304,23 +26470,19 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bfH" = ( -/obj/structure/chair{ - dir = 4 +/obj/machinery/light{ + dir = 1 }, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/light_switch{ + pixel_y = 24 }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Chapel APC"; - pixel_x = -24 +/obj/machinery/button/crematorium{ + id = "foo"; + pixel_x = 8; + pixel_y = 24 }, -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, -/area/chapel/main) +/turf/open/floor/plasteel/dark, +/area/chapel/office) "bfI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -26349,6 +26511,10 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/item/paper/fluff/cogstation/letter_chap{ + pixel_x = 10; + pixel_y = 2 + }, /turf/open/floor/carpet{ icon_state = "carpetsymbol" }, @@ -26549,18 +26715,13 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bgh" = ( -/obj/machinery/conveyor_switch{ - id = "EngiCargoConveyer" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 6 }, -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/sorting"; - dir = 8; - name = "Delivery Office APC"; - pixel_x = -24 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) +/turf/open/space/basic, +/area/space/nearstation) "bgi" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -27190,18 +27351,15 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "bhB" = ( -/obj/structure/closet/secure_closet/quartermaster, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/structure/table/wood, +/obj/item/stack/packageWrap, +/obj/item/paper/fluff/cogstation/bsrb, +/obj/item/paper/fluff/cogstation/survey{ + pixel_x = -4; + pixel_y = 2 }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/turf/open/floor/plasteel, -/area/quartermaster/qm) +/turf/open/floor/carpet/royalblue, +/area/bridge) "bhC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -27517,16 +27675,12 @@ /turf/open/floor/plating, /area/quartermaster/storage) "bik" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/bridge) "bil" = ( /obj/effect/turf_decal/stripes/line{ @@ -27573,14 +27727,16 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "biq" = ( -/obj/machinery/computer/cargo/request{ - dir = 1 +/obj/structure/closet/secure_closet/hop, +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, -/obj/machinery/keycard_auth{ - pixel_x = 24; - pixel_y = -8 +/obj/item/clothing/under/rank/civilian/head_of_personnel/suit, +/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt{ + name = "head of personnel's suitskirt" }, -/turf/open/floor/carpet/green, +/turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hop) "bir" = ( /obj/effect/turf_decal/tile/brown{ @@ -28094,17 +28250,25 @@ /turf/open/floor/plating, /area/security/courtroom/jury) "bjw" = ( -/obj/machinery/computer/card{ - dir = 8 +/obj/item/storage/secure/safe{ + pixel_x = 4; + pixel_y = 32 }, -/obj/machinery/keycard_auth{ - pixel_x = 8; - pixel_y = -24 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" }, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bjx" = ( /obj/structure/table/optable, /obj/effect/turf_decal/bot, @@ -28136,21 +28300,13 @@ /turf/open/floor/plating, /area/maintenance/department/eva) "bjB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/item/folder/red, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/brig) "bjC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -28193,9 +28349,18 @@ }, /area/engine/atmos) "bjF" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/checkpoint/supply) +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Head of Personnel APC"; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bjG" = ( /obj/structure/rack, /turf/open/floor/plasteel, @@ -28350,21 +28515,24 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bjV" = ( +/obj/structure/closet{ + name = "Evidence Closet 5" + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, /obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/structure/chair{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/area/security/brig) "bjW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28642,12 +28810,12 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bkC" = ( -/obj/machinery/modular_computer/console/preset/research{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/item/reagent_containers/food/drinks/coffee, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bkD" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -29496,13 +29664,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bmj" = ( -/obj/structure/closet/secure_closet/RD, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" +/obj/machinery/vending/wardrobe/cap_wardrobe, +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/turf/open/floor/carpet/blue, +/area/crew_quarters/heads/captain) "bmk" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, @@ -29914,6 +30081,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/item/paper/guides/cogstation/cdn_chap, /turf/open/floor/plasteel/dark, /area/chapel/office) "bmY" = ( @@ -30540,9 +30708,17 @@ /turf/closed/wall/r_wall, /area/crew_quarters/fitness/cogpool) "boj" = ( -/obj/structure/rack, -/obj/item/caution, -/obj/item/caution, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bok" = ( @@ -31307,17 +31483,10 @@ name = "Aft Air Hookup" }) "bpW" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/security/brig) "bpX" = ( /obj/machinery/disposal/bin, @@ -32621,12 +32790,9 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bsz" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 4 }, /turf/open/space/basic, @@ -32770,15 +32936,11 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "bsT" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/obj/structure/transit_tube/crossing/horizontal, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) "bsU" = ( @@ -33505,19 +33667,25 @@ /turf/open/floor/plating, /area/maintenance/department/chapel) "buM" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/cmo) +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/carpet/blue, +/area/crew_quarters/heads/captain) "buN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall/rust, /area/chapel/main) "buO" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/closed/wall, -/area/security/detectives_office) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "buP" = ( /obj/item/trash/plate, /obj/item/lighter/greyscale, @@ -33535,22 +33703,15 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "buR" = ( -/obj/item/storage/secure/safe{ - pixel_x = 4; - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/cobweb{ - icon_state = "cobweb2" +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, -/area/maintenance/starboard/central) +/area/crew_quarters/heads/hop) "buS" = ( /turf/closed/wall/r_wall, /area/crew_quarters/heads/cmo) @@ -34517,7 +34678,7 @@ dir = 8 }, /obj/structure/table, -/obj/item/clothing/under/rank/mailman, +/obj/item/clothing/under/misc/mailman, /obj/item/clothing/head/mailman, /obj/item/wirecutters, /obj/item/stack/packageWrap, @@ -34620,8 +34781,8 @@ /obj/structure/disposalpipe/segment, /obj/item/clothing/gloves/color/purple, /obj/item/clothing/gloves/color/purple, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/under/costume/maid, /obj/structure/sign/poster/official/bless_this_spess{ pixel_x = -32 }, @@ -35067,13 +35228,19 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "byd" = ( -/obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fourcolor, +/obj/item/pen/fountain{ + pixel_x = 2; + pixel_y = 6 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/stamp/hop, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bye" = ( /obj/structure/safe/floor, /obj/effect/turf_decal/tile/green, @@ -35615,19 +35782,16 @@ /turf/open/floor/plating/airless, /area/quartermaster/miningoffice) "bzw" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/machinery/conveyor{ - dir = 4; - id = "MiningConveyer" +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 9 }, -/obj/machinery/door/poddoor{ - id = "MiningConveyerBlastDoor"; - name = "Asteroid Mining Load Door" - }, -/turf/open/floor/plating/airless, -/area/quartermaster/miningoffice) +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bzx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -35701,45 +35865,10 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bzH" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 - }, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/structure/disposalpipe/segment, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/disposal) "bzI" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -35995,17 +36124,20 @@ /turf/open/floor/plasteel, /area/router) "bAn" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/area/gateway) +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bAo" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -36131,12 +36263,13 @@ /area/science/mixing) "bAA" = ( /obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera{ - c_tag = "Supply - Warehouse Exterior"; - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/space/basic, /area/space/nearstation) "bAB" = ( @@ -36327,16 +36460,22 @@ /turf/closed/wall, /area/hallway/secondary/exit) "bAX" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/photocopier, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel, -/area/security/main) +/obj/item/paper/fluff/cogstation/letter_cap{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bAY" = ( /obj/machinery/status_display, /turf/closed/wall, @@ -36520,17 +36659,16 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "bBt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bBu" = ( /turf/open/floor/plasteel/showroomfloor, /area/medical/morgue) @@ -36827,11 +36965,14 @@ /turf/open/floor/plasteel, /area/router/eva) "bCd" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/effect/landmark/start/captain, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/white, -/area/gateway) +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bCe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36996,7 +37137,7 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /obj/structure/window/reinforced/spawner/east, /turf/open/floor/plasteel, /area/storage/primary) @@ -37007,9 +37148,11 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bCB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/disposal) "bCC" = ( @@ -37038,8 +37181,11 @@ /turf/open/floor/plating, /area/router/eva) "bCF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -37376,11 +37522,8 @@ "bDw" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 10 + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) @@ -37580,13 +37723,11 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "bDU" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 6 + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) @@ -37594,13 +37735,16 @@ /turf/open/floor/plasteel/stairs/left, /area/crew_quarters/bar) "bDW" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "AI Chamber"; + req_access_txt = "65" }, -/turf/open/floor/circuit, +/turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bDX" = ( /turf/open/floor/plasteel/stairs/right, @@ -37797,18 +37941,22 @@ /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) "bEq" = ( -/obj/machinery/computer/security{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel, -/area/security/checkpoint) +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bEr" = ( /obj/structure/cable, /obj/machinery/power/apc{ @@ -38011,23 +38159,13 @@ /turf/open/floor/plating, /area/maintenance/fore) "bEL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/brig) +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/disposal) "bEM" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -38178,12 +38316,12 @@ /turf/open/floor/plating, /area/router) "bEZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "bFa" = ( @@ -38221,13 +38359,36 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "bFf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/aiModule/supplied/oxygen{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/aiModule/supplied/quarantine{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/item/aiModule/zeroth/oneHuman{ + pixel_y = 4 + }, +/obj/effect/spawner/lootdrop/aimodule_harmful{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/aiModule/supplied/protectStation{ + pixel_x = -2 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bFg" = ( /obj/effect/turf_decal/tile/brown, @@ -38329,8 +38490,16 @@ /turf/open/floor/plating, /area/medical/chemistry) "bFv" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/circuit, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bFw" = ( /obj/machinery/monkey_recycler, @@ -38352,27 +38521,22 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "bFy" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Head of Personnel APC"; - pixel_x = -24 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) -"bFz" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 - }, -/area/gateway) +/area/crew_quarters/heads/captain) +"bFz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/paper/guides/cogstation/janitor, +/turf/open/floor/plasteel, +/area/janitor) "bFA" = ( /obj/structure/chair/stool, /obj/effect/turf_decal/tile/neutral, @@ -38760,11 +38924,17 @@ /turf/open/floor/plasteel, /area/security/main) "bGg" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/circuit, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bGh" = ( /obj/structure/lattice, @@ -38967,11 +39137,10 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-8" }, -/obj/structure/window/reinforced/spawner/north, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bGC" = ( @@ -38991,7 +39160,6 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/structure/window/reinforced/spawner/north, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) @@ -39103,9 +39271,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bGS" = ( @@ -39372,7 +39540,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bHw" = ( @@ -39384,7 +39552,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bHx" = ( @@ -39901,17 +40069,15 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "bIC" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/conveyor/auto{ + id = "disposal" }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Aft Maintenance APC"; - pixel_x = -24 +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/disposal) "bID" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ @@ -40061,16 +40227,11 @@ name = "Research Sector" }) "bIT" = ( -/obj/structure/lattice/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/obj/machinery/atmospherics/pipe/simple/violet/hidden{ - icon_state = "pipe11-2"; - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, /turf/open/space/basic, /area/space/nearstation) "bIU" = ( @@ -40121,12 +40282,9 @@ /turf/open/floor/plasteel, /area/maintenance/department/chapel) "bIY" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 10 - }, -/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, /turf/open/space/basic, -/area/space/nearstation) +/area/space) "bIZ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -40749,16 +40907,13 @@ /turf/open/floor/plating, /area/quartermaster/miningoffice) "bKp" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKq" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -40932,12 +41087,18 @@ /turf/open/floor/engine, /area/science/xenobiology) "bKG" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/computer/cargo/request{ + dir = 1 }, -/turf/open/floor/plating, -/area/science/xenobiology) +/obj/machinery/keycard_auth{ + pixel_x = 24; + pixel_y = -8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bKH" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 4 @@ -40952,25 +41113,23 @@ /turf/open/floor/engine, /area/science/mixing) "bKJ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKK" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKL" = ( /obj/structure/cable{ icon_state = "2-4" @@ -41191,12 +41350,13 @@ /turf/open/floor/engine, /area/science/xenobiology) "bLe" = ( -/obj/machinery/door/window/westright{ - name = "Containment Pen"; - req_one_access_txt = "55" +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/engine, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bLf" = ( /obj/machinery/door/window/eastleft{ name = "Containment Pen"; @@ -41218,8 +41378,23 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bLh" = ( -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/structure/bed, +/obj/item/radio/intercom{ + name = "Station Intercom (Common)"; + pixel_y = -28 + }, +/obj/item/bedsheet/captain, +/obj/effect/landmark/start/captain, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bLi" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -41237,12 +41412,16 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bLk" = ( -/obj/machinery/door/window/eastleft{ - name = "Containment Pen"; - req_one_access_txt = "55" +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 1 }, -/turf/open/floor/engine, -/area/science/xenobiology) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bLl" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 4 @@ -41703,11 +41882,23 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bMh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bMi" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -41731,7 +41922,7 @@ "bMm" = ( /obj/structure/table/wood, /obj/machinery/light, -/obj/item/clothing/under/assistantformal{ +/obj/item/clothing/under/misc/assistantformal{ pixel_y = 4 }, /turf/open/floor/carpet{ @@ -41979,10 +42170,14 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bMK" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 5 }, -/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "bML" = ( @@ -42100,9 +42295,13 @@ /turf/open/floor/plating, /area/router) "bMX" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ +/obj/structure/lattice, +/obj/structure/sign/warning{ + name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 4 }, /turf/open/space/basic, @@ -42879,15 +43078,17 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bOJ" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/mob/living/simple_animal/pet/cat/space, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bOK" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/window/northright{ @@ -42897,18 +43098,20 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bOL" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 +/obj/machinery/computer/card{ + dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/keycard_auth{ + pixel_x = 8; + pixel_y = -24 }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/science, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bOM" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/stripes/line{ @@ -42938,22 +43141,47 @@ /turf/open/floor/plating, /area/science/xenobiology) "bOQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/plating, -/area/science/xenobiology) -"bOR" = ( -/obj/machinery/door/window/southright{ - name = "Secure Xenobiological Containment"; - req_one_access_txt = "55" +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/engine, -/area/science/xenobiology) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) +"bOR" = ( +/obj/structure/table/wood, +/obj/item/pinpointer/nuke, +/obj/item/card/id/captains_spare, +/obj/item/hand_tele, +/obj/item/disk/nuclear, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) "bOS" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/science/xenobiology) +/obj/structure/table/wood, +/obj/machinery/light, +/obj/item/storage/photo_album/Captain, +/obj/item/camera{ + pixel_y = -6 + }, +/obj/item/stamp/captain, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) "bOT" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1 @@ -43048,15 +43276,14 @@ /turf/open/floor/engine, /area/science/xenobiology) "bPh" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/engine, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/space/basic, +/area/space/nearstation) "bPi" = ( /obj/structure/chair{ dir = 8 @@ -43070,8 +43297,8 @@ /area/science/xenobiology) "bPk" = ( /obj/structure/table/reinforced, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /obj/item/clothing/suit/apron/surgical, /obj/item/clothing/suit/apron/surgical, /turf/open/floor/engine, @@ -43141,10 +43368,14 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bPr" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 10 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 4 }, /turf/open/space/basic, /area/space/nearstation) @@ -43329,9 +43560,15 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bPK" = ( -/obj/structure/window/reinforced/spawner/north, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/stool, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bPL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -43445,18 +43682,13 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "bPX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Foyer"; - req_one_access_txt = "10;24" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 9 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/turf/open/space/basic, +/area/space/nearstation) "bPY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -43502,7 +43734,8 @@ dir = 1; name = "AI Chamber turret control"; pixel_x = 5; - pixel_y = 24 + pixel_y = 24; + req_access_txt = "65" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 6 @@ -44084,11 +44317,9 @@ /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) "bRc" = ( +/obj/machinery/suit_storage_unit/captain, /obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 + icon_state = "4-8" }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) @@ -44187,36 +44418,26 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bRn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Foyer"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) -"bRo" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 8 }, /turf/open/space/basic, /area/space/nearstation) +"bRo" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, +/turf/open/space/basic, +/area/space/nearstation) "bRp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) "bRq" = ( @@ -44325,20 +44546,14 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "bRA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Access"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/machinery/light{ dir = 1 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/open/floor/engine, +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bRB" = ( /obj/item/radio/intercom{ name = "Station Intercom (Common)"; @@ -44356,14 +44571,20 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 6; + pixel_y = 3 + }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plasteel/dark, +/area/bridge) "bRE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -45375,17 +45596,13 @@ /turf/open/floor/engine/plasma, /area/engine/atmos) "bTJ" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 8 }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 23 - }, -/turf/open/floor/plasteel, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/turf/open/space/basic, +/area/space/nearstation) "bTK" = ( /turf/open/floor/engine/co2, /area/engine/atmos) @@ -45704,15 +45921,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bUt" = ( -/obj/structure/grille, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" }, -/turf/open/floor/plating, -/area/science/server{ - name = "Computer Core" - }) +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/hallway/primary/central) "bUu" = ( /obj/structure/grille, /obj/structure/disposalpipe/segment{ @@ -45972,23 +46189,19 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bUS" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/photocopier, -/obj/structure/disposalpipe/segment{ +/obj/structure/closet/secure_closet/quartermaster, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ dir = 4 }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo RC"; - pixel_y = 30 - }, -/obj/machinery/camera{ - c_tag = "Supply - Delivery Office Aft"; - network = list("ss13","rd") - }, +/obj/effect/turf_decal/tile/brown, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/paper/fluff/cogstation/letter_qm, /turf/open/floor/plasteel, -/area/quartermaster/sorting) +/area/quartermaster/qm) "bUT" = ( /obj/effect/turf_decal/delivery, /obj/machinery/light{ @@ -46009,13 +46222,14 @@ /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai_upload_foyer) "bUV" = ( -/obj/effect/turf_decal/stripes/white/full, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/turf/open/space/basic, +/area/space/nearstation) "bUW" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -46032,12 +46246,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bUX" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/structure/transit_tube/station/reverse/flipped{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/turf/open/floor/engine, +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bUY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -46068,21 +46283,15 @@ /turf/open/floor/plasteel, /area/router) "bVb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Access"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/transit_tube/horizontal, /turf/open/floor/plasteel, -/area/engine/break_room) +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bVc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46157,17 +46366,12 @@ /turf/open/floor/plasteel, /area/maintenance/department/chapel) "bVj" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor/auto{ + id = "disposal" }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/turf/open/floor/plating, +/area/maintenance/disposal) "bVk" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -46477,9 +46681,13 @@ name = "Research Sector" }) "bVN" = ( -/obj/structure/closet/l3closet/scientist, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bVO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -47522,30 +47730,15 @@ /turf/open/floor/plasteel, /area/hydroponics) "bXI" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/computer/security{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/power/apc{ - areastring = "/area/security/checkpoint/supply"; - dir = 4; - name = "Cargo Security Checkpoint APC"; - pixel_x = 24 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bXJ" = ( /obj/structure/chair{ dir = 8 @@ -47769,15 +47962,13 @@ /turf/open/floor/plating, /area/router) "bYg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/door/poddoor{ + id = "toxinsdriver"; + name = "toxins launcher bay door" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, -/area/maintenance/starboard/aft) +/area/science/mixing) "bYh" = ( /obj/structure/cable{ icon_state = "1-8" @@ -48328,10 +48519,11 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bZe" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/structure/grille, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, /turf/open/floor/plating, /area/science/server{ @@ -48748,17 +48940,11 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "caf" = ( +/obj/structure/lattice, /obj/structure/disposalpipe/segment, -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 5 }, /turf/open/space/basic, /area/space/nearstation) @@ -49168,15 +49354,16 @@ /turf/open/floor/plating, /area/science/storage) "cbi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "cbj" = ( /obj/structure/cable{ icon_state = "1-8" @@ -49237,12 +49424,13 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cbp" = ( +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "cbq" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -49304,20 +49492,12 @@ /turf/open/floor/engine, /area/science/explab) "cbA" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cbB" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -49361,21 +49541,16 @@ /turf/open/space/basic, /area/space/nearstation) "cbH" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cbI" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -50097,11 +50272,16 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cda" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/dark/corner, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "cdb" = ( /obj/structure/disposalpipe/trunk{ @@ -50202,13 +50382,20 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cdm" = ( -/obj/structure/closet/secure_closet/CMO, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/photocopier, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/paper/guides/cogstation/disposals, +/turf/open/floor/plasteel, +/area/engine/break_room) "cdn" = ( /obj/structure/cable{ icon_state = "1-4" @@ -50233,10 +50420,14 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "cdp" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 8 }, /turf/open/space/basic, /area/space/nearstation) @@ -50572,14 +50763,24 @@ /turf/closed/wall/r_wall, /area/medical/medbay/lobby) "cea" = ( -/obj/machinery/computer/cloning, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/segment, -/obj/item/paper/guides/jobs/medical/cloning{ - pixel_x = -4 +/obj/effect/turf_decal/delivery, +/obj/machinery/photocopier, +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Cargo RC"; + pixel_y = 30 + }, +/obj/machinery/camera{ + c_tag = "Supply - Delivery Office Aft"; + network = list("ss13","rd") + }, +/obj/item/paper/guides/cogstation/disposals, /turf/open/floor/plasteel, -/area/medical/medbay/central) +/area/quartermaster/sorting) "ceb" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line, @@ -51327,10 +51528,18 @@ name = "Engineering Construction Area" }) "cfx" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "cfy" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -51815,18 +52024,10 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cgt" = ( -/obj/effect/landmark/start/cargo_technician, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, +/obj/structure/rack, +/obj/item/caution, +/obj/item/caution, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cgu" = ( @@ -52674,13 +52875,23 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cij" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/disposaloutlet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/disposal) +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + name = "Science Desk"; + req_access_txt = "0"; + req_one_access_txt = "29;47" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/science/lab) "cik" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -52827,17 +53038,10 @@ /turf/open/floor/plating/airless, /area/maintenance/port/fore) "ciC" = ( -/obj/structure/closet/secure_closet/hos, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/item/storage/box/deputy, -/turf/open/floor/plasteel/grimy, -/area/crew_quarters/heads/hos) +/obj/structure/table, +/obj/item/paper/pamphlet/gateway, +/turf/open/floor/plasteel/white, +/area/gateway) "ciD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52848,26 +53052,13 @@ /turf/open/floor/plasteel/dark, /area/engine/teg_cold) "ciE" = ( -/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/recharger, -/obj/machinery/requests_console{ - department = "Security"; - departmentType = 5; - name = "Security RC"; - pixel_x = 32 - }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/area/quartermaster/office) "ciF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53087,15 +53278,13 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cjb" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/quartermaster/miningoffice) "cjc" = ( /obj/structure/fans/tiny, /obj/structure/plasticflaps, @@ -53196,15 +53385,16 @@ /turf/closed/wall/rust, /area/maintenance/port/central) "cjr" = ( -/obj/structure/table, -/obj/machinery/airalarm{ - pixel_y = 24 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/item/hand_labeler, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/paper/guides/jobs/medical/morgue, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/morgue) +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/server{ + name = "Computer Core" + }) "cjs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -53344,13 +53534,11 @@ /turf/open/space/basic, /area/space/nearstation) "cjG" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced/spawner, /turf/open/floor/plasteel, -/area/science/xenobiology) +/area/ai_monitored/storage/eva) "cjH" = ( /obj/structure/lattice, /obj/structure/sign/warning/electricshock{ @@ -53581,13 +53769,12 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "cjZ" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/item/beacon, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced/spawner/north, /turf/open/floor/plasteel, -/area/science/xenobiology) +/area/ai_monitored/storage/eva) "cka" = ( /obj/item/beacon, /obj/structure/cable{ @@ -53651,22 +53838,15 @@ name = "Research Sector" }) "ckg" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, +/obj/effect/landmark/event_spawn, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/dark/corner, +/area/ai_monitored/storage/eva) "ckh" = ( /obj/machinery/light_switch{ pixel_x = -24 @@ -53971,7 +54151,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckL" = ( @@ -53983,7 +54163,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckM" = ( @@ -53995,7 +54175,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckN" = ( @@ -54116,26 +54296,25 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "ckY" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/checker, +/area/ai_monitored/storage/eva) "ckZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cla" = ( /obj/structure/cable{ icon_state = "4-8" @@ -54975,12 +55154,26 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "cmT" = ( -/obj/machinery/door/poddoor{ - id = "toxinsdriver"; - name = "toxins launcher bay door" +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/turf/open/floor/plating, -/area/science/mixing) +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/item/folder/red, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/window/northright{ + name = "Security Checkpoint"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cmU" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -55181,12 +55374,12 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "cnm" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/turf/open/floor/plating, +/area/gateway) "cnn" = ( /obj/structure/cable{ icon_state = "2-4" @@ -55331,10 +55524,10 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair{ + dir = 4 }, -/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) "cnC" = ( @@ -56486,19 +56679,14 @@ /turf/open/floor/plasteel, /area/engine/teg_hot) "cpM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/turretid{ - control_area = "area/science/server"; - icon_state = "control_stun"; - name = "Computer Core turret control"; - pixel_x = -3; - pixel_y = -23 +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, /turf/open/floor/plasteel, -/area/ai_monitored/turret_protected/ai_upload_foyer) +/area/engine/atmos) "cpN" = ( /obj/structure/closet/secure_closet/atmospherics, /obj/item/cartridge/atmos, @@ -56947,24 +57135,16 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "cqB" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/absinthe, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/computer/secure_data{ - dir = 8 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 30 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cqC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, @@ -57777,7 +57957,11 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) "csi" = ( @@ -57804,15 +57988,15 @@ /turf/open/floor/plasteel, /area/science/explab) "csl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-8" }, -/obj/machinery/holopad, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) "csm" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -57918,37 +58102,33 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "csu" = ( -/obj/structure/table, -/obj/machinery/computer/med_data/laptop, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Medical Officer's Desk"; - departmentType = 5; - name = "Chief Medical Officer RC"; - pixel_y = 32 +/turf/open/floor/plasteel/dark/side{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/area/gateway) "csv" = ( -/obj/machinery/computer/card/minor/cmo{ - dir = 1 +/obj/structure/table, +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/turf_decal/tile/brown, +/obj/item/storage/toolbox/mechanical, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/keycard_auth{ - pixel_x = -24 - }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/paper/guides/cogstation/letter_supp, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "csw" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -57960,19 +58140,17 @@ /turf/open/floor/plasteel, /area/security/main) "csx" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/structure/closet/secure_closet/RD, +/obj/machinery/light{ + dir = 4; + light_color = "#c1caff" }, -/obj/machinery/photocopier, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/obj/item/paper/fluff/cogstation/letter_rd, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "csy" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -58325,17 +58503,22 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "ctn" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown, -/obj/item/storage/toolbox/mechanical, -/obj/structure/disposalpipe/segment{ +/obj/structure/closet/secure_closet/engineering_chief, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 1; + locked = 0; + pixel_y = -22 + }, +/obj/item/paper/guides/cogstation/letter_chief, /turf/open/floor/plasteel, -/area/quartermaster/sorting) +/area/crew_quarters/heads/chief) "cto" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/brown, @@ -58388,14 +58571,20 @@ /area/quartermaster/sorting) "ctu" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/bot, +/obj/machinery/camera{ + c_tag = "Supply - Cargo Office"; dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/storage/box/disks, /turf/open/floor/plasteel, -/area/quartermaster/miningoffice) +/area/quartermaster/office) "ctv" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/brown, @@ -59209,7 +59398,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/gateway) "cuR" = ( @@ -59732,13 +59923,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cvM" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/absinthe, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/gateway) "cvN" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -60186,20 +60379,13 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "cwx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/transit_tube/station/reverse/flipped{ - dir = 1 - }, -/obj/structure/transit_tube_pod{ - dir = 8 +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, +/obj/effect/turf_decal/stripes/white/full, /turf/open/floor/plasteel, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/area/engine/atmos) "cwy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/transit_tube/horizontal, @@ -60238,24 +60424,19 @@ /turf/open/floor/plasteel, /area/engine/workshop) "cwF" = ( -/obj/structure/lattice, -/obj/structure/transit_tube/curved{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "cwG" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/structure/transit_tube/horizontal, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "cwH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/closed/wall, @@ -60283,6 +60464,9 @@ dir = 4 }, /obj/structure/transit_tube/station/reverse/flipped, +/obj/structure/transit_tube_pod{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cwN" = ( @@ -60828,19 +61012,15 @@ /area/quartermaster/miningoffice) "cxT" = ( /obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/camera{ - c_tag = "Supply - Cargo Office"; +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/item/paper/guides/cogstation/letter_supp, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/miningoffice) "cxU" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -60881,10 +61061,15 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cxZ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/delivery, +/obj/machinery/button/door{ + id = "MiningConveyorBlastDoor"; + name = "Mining Conveyor Access"; + pixel_x = 8; + pixel_y = -24; + req_access_txt = "0"; + req_one_access_txt = "10;24;48" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "cya" = ( @@ -61497,19 +61682,19 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "czf" = ( -/obj/structure/chair/office/light{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/obj/effect/landmark/start/chief_medical_officer, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/side{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/area/gateway) "czg" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -61708,26 +61893,32 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "czz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ - name = "CMO's Office"; - req_access_txt = "40" + name = "Gateway Chamber"; + req_access_txt = "62" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/engine, +/area/gateway) +"czA" = ( +/obj/machinery/modular_computer/console/preset/research{ + dir = 8 + }, +/obj/item/reagent_containers/food/drinks/coffee, +/obj/structure/cable{ + icon_state = "2-4" }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) -"czA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/crew_quarters/heads/cmo) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "czB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -62159,9 +62350,23 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cAo" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/window/northright{ + name = "Medbay Desk"; + req_access_txt = "5" + }, +/obj/item/clipboard, +/obj/item/clothing/glasses/hud/health, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/janitor) +/obj/item/paper/fluff/cogstation/sleepers, +/obj/item/pen, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "cAp" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -62480,16 +62685,12 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "cAQ" = ( -/obj/structure/closet/crate/trashcart, -/obj/machinery/light/small{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 10 - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) "cAR" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -62499,13 +62700,20 @@ }, /area/chapel/office) "cAS" = ( -/obj/structure/table/wood, -/obj/item/storage/box/evidence, -/obj/item/hand_labeler, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/side{ + dir = 8 + }, +/area/gateway) "cAT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -62778,15 +62986,12 @@ name = "Aft Air Hookup" }) "cBt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" +/obj/structure/closet/l3closet/scientist, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, -/area/security/main) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cBu" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -63668,11 +63873,19 @@ /turf/open/floor/plasteel/stairs/left, /area/hallway/primary/central) "cCO" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 4 +/obj/structure/table, +/obj/machinery/airalarm{ + pixel_y = 24 }, -/turf/open/floor/plasteel, -/area/security/main) +/obj/item/hand_labeler, +/obj/item/reagent_containers/glass/bottle/formaldehyde, +/obj/item/paper/guides/jobs/medical/morgue, +/obj/item/paper/guides/cogstation/cdn_med{ + pixel_x = -6; + pixel_y = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/morgue) "cCP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -63832,21 +64045,19 @@ /turf/open/floor/plating, /area/quartermaster/sorting) "cDh" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/computer/card/minor/cmo{ + dir = 1 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/airalarm{ - dir = 1; - locked = 0; - pixel_y = -22 +/obj/machinery/keycard_auth{ + pixel_x = -24 }, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/chief) +/obj/item/paper/guides/cogstation/letter_cmo, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cDi" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -63861,11 +64072,18 @@ /turf/open/floor/plasteel, /area/storage/primary) "cDj" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" }, -/turf/open/floor/plating, /area/crew_quarters/heads/hor) "cDk" = ( /obj/machinery/door/firedoor, @@ -63996,9 +64214,21 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/captain) "cDv" = ( -/obj/machinery/vending/wardrobe/cap_wardrobe, -/turf/open/floor/carpet/blue, -/area/crew_quarters/heads/captain) +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cDw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -64019,35 +64249,39 @@ /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) "cDy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) +"cDz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/checkpoint/supply) +"cDA" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 30 + }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDz" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDA" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cDB" = ( /obj/item/storage/secure/safe{ pixel_x = -24 @@ -64072,49 +64306,64 @@ }, /area/crew_quarters/heads/captain) "cDD" = ( -/obj/structure/bed, -/obj/item/radio/intercom{ - name = "Station Intercom (Common)"; - pixel_y = -28 - }, -/obj/item/bedsheet/captain, -/obj/effect/landmark/start/captain, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDE" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 1 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDF" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/area/crew_quarters/heads/captain) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/supply"; + dir = 4; + name = "Cargo Security Checkpoint APC"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"cDE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cDF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cDG" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/mob/living/simple_animal/pet/cat/space, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" }, -/area/crew_quarters/heads/captain) +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cDH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -64128,16 +64377,19 @@ /turf/open/floor/plasteel, /area/gateway) "cDJ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/computer/crew, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plasteel/dark/side{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/area/gateway) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cDK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -64286,29 +64538,35 @@ }, /area/crew_quarters/heads/hor) "cDZ" = ( +/obj/structure/table, +/obj/machinery/computer/med_data/laptop, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer RC"; + pixel_y = 32 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/hor) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cEa" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cEb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -64726,22 +64984,17 @@ /turf/open/floor/plasteel, /area/science/lab) "cEE" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/westleft{ - name = "Science Desk"; - req_access_txt = "29;47" +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Aft Maintenance APC"; + pixel_x = -26 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/lab) +/turf/open/floor/plating, +/area/maintenance/aft) "cEF" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -66706,23 +66959,20 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "cHV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/obj/machinery/power/apc{ - areastring = "/area/medical/genetics"; - dir = 8; - name = "Genetics Lab APC"; - pixel_x = -24 +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cHW" = ( /obj/machinery/rnd/production/circuit_imprinter, /obj/item/reagent_containers/glass/beaker, @@ -68061,21 +68311,14 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "cKj" = ( -/obj/structure/table/reinforced, +/obj/structure/closet/secure_closet/CMO, +/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/door/window/northright{ - name = "Medbay Desk"; - req_access_txt = "5" - }, -/obj/item/clipboard, -/obj/item/pen, -/obj/item/clothing/glasses/hud/health, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/paper/guides/cogstation/letter_cmo, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/crew_quarters/heads/cmo) "cKk" = ( /obj/structure/chair/office/light{ dir = 1; @@ -68258,20 +68501,22 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "cKC" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/chief_medical_officer, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cKD" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 8 @@ -68550,7 +68795,7 @@ dir = 8 }, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /turf/open/floor/plasteel, /area/storage/primary) "cLo" = ( @@ -68633,7 +68878,7 @@ "cLz" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /turf/open/floor/plasteel, /area/storage/primary) "cLA" = ( @@ -70405,6 +70650,1037 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"cPz" = ( +/obj/structure/lattice, +/obj/structure/transit_tube/curved{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPA" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/structure/transit_tube/horizontal, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/transit_tube/crossing/horizontal, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/transit_tube/horizontal, +/turf/open/floor/plasteel, +/area/engine/atmos) +"cPD" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/engine/atmos) +"cPE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPF" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPG" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Supply - Warehouse Exterior"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPH" = ( +/obj/machinery/conveyor_switch{ + id = "EngiCargoConveyer" + }, +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/sorting"; + dir = 8; + name = "Delivery Office APC"; + pixel_x = -26 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"cPI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Foyer"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Foyer"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Access"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Access"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPM" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security RC"; + pixel_x = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"cPN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"cPO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"cPP" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4; + light_color = "#c1caff" + }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus{ + pixel_y = 8 + }, +/obj/item/stock_parts/cell/high/plus{ + pixel_y = 8 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) +"cPQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + areastring = "/area/medical/genetics"; + dir = 8; + name = "Genetics Lab APC"; + pixel_x = -26 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/aft) +"cPR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cPS" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "CMO's Office"; + req_access_txt = "40" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) +"cPT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cPU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPW" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cPZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQb" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQc" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQd" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQe" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + id = "xenobio2"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQg" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQh" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQi" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQj" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQl" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + id = "xenobio1"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQm" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQq" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQr" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/machinery/button/door{ + id = "xenobio4"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQs" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQu" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio4"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQv" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/button/door{ + id = "xenobio3"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQw" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQx" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/machinery/button/door{ + id = "xenobio6"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQy" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQz" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQB" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQC" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/button/door{ + id = "xenobio5"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQD" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQE" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQH" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "xenobio7"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQI" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/science, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQM" = ( +/obj/machinery/door/window/southright{ + name = "Secure Xenobiological Containment"; + req_one_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQR" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/bridge) +"cQT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/bridge) +"cQU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/bridge) +"cQV" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-02" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQW" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/machinery/camera{ + c_tag = "Bridge - Port Quarter"; + dir = 1 + }, +/obj/machinery/keycard_auth{ + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQX" = ( +/obj/machinery/photocopier, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQY" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQZ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cRa" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "MiningConveyer" + }, +/obj/machinery/door/poddoor{ + id = "MiningConveyorBlastDoor"; + name = "Asteroid Mining Load Door" + }, +/turf/open/floor/plating/airless, +/area/quartermaster/miningoffice) +"cRb" = ( +/obj/machinery/computer/cloning, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/item/paper/guides/jobs/medical/cloning{ + pixel_x = -4 + }, +/obj/item/paper/fluff/cogstation/cloner{ + pixel_x = 6 + }, +/turf/open/floor/plasteel, +/area/medical/medbay/central) +"cRc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/door/airlock/research{ + name = "Aft Observatory"; + req_access_txt = "47" + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab{ + name = "Research Observatory" + }) +"cRd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/airlock/research{ + name = "Aft Observatory"; + req_access_txt = "47" + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab{ + name = "Research Observatory" + }) +"cRe" = ( +/obj/machinery/computer/upload/ai{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ai_monitored/turret_protected/ai) +"cRf" = ( +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/flasher{ + id = "ID"; + pixel_x = 24; + pixel_y = 0 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) +"cRg" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/white/corner, +/area/engine/atmos) +"cRh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/turretid{ + control_area = "area/science/server"; + icon_state = "control_stun"; + name = "Computer Core turret control"; + pixel_x = -3; + pixel_y = -23; + req_access_txt = "65" + }, +/turf/open/floor/plasteel, +/area/ai_monitored/turret_protected/ai_upload_foyer) "cVq" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -70697,16 +71973,6 @@ /obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/space/basic, /area/space) -"kxL" = ( -/obj/structure/lattice, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "kzb" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 @@ -70881,17 +72147,6 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) -"qnM" = ( -/obj/structure/lattice, -/obj/structure/sign/warning{ - name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "qvB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 @@ -70911,14 +72166,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"rbJ" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/space/basic, -/area/space/nearstation) "rdF" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 6 @@ -71123,13 +72370,6 @@ /obj/item/pen, /turf/open/floor/plasteel, /area/engine/atmos) -"xqa" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 5 - }, -/turf/open/space/basic, -/area/space/nearstation) "xCy" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -84607,7 +85847,7 @@ aaU aaa aaU aEa -aTH +aHE bab aaa aaa @@ -84864,7 +86104,7 @@ aaU aaU aaU aEb -bRD +aPT aaU aaU aye @@ -85121,7 +86361,7 @@ aaU aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85378,7 +86618,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85635,7 +86875,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85892,7 +87132,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86149,7 +87389,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86406,7 +87646,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86663,7 +87903,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86920,7 +88160,7 @@ aaa aaa aaU aEb -bRD +aPT aaU aaa aaa @@ -87177,7 +88417,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87434,7 +88674,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87691,7 +88931,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87948,7 +89188,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -88205,7 +89445,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -88462,19 +89702,19 @@ aaa aaa aaU aEa -bRD +aPT aaU aaU aaa aaU -aGn -aGn -aGn -aGn -aGn -aGn -aGn -aGn +aPV +bik +bik +bik +bik +bik +bik +cQT aaU aaa aaU @@ -88547,22 +89787,22 @@ bFt bJs bJV bxT -bKG -bLe -bFl +cQa +cQg +cQk bxT -bKG -bLe -bFl +cQa +cQs +cQk bxT -bKG -bLe -bFl +cQa +cQy +cQk bxT cvz cKA bOH -bFl +cQJ bxT bKM bKM @@ -88719,21 +89959,21 @@ aaU aaU aaU aEa -bRD +aPT aaU aaU -aGn -aGn -aGn +aPV +bik +cQS aIA aJe aLE aLy aMQ aNF -aGn -aGn -aGn +cQU +bik +cQT aaU aaa aaa @@ -88806,20 +90046,20 @@ bJW bxT cbo bLf -cjZ +cQl bxT cbo bLf -cjZ +cQv bxT cbo bLf -cjZ +cQC bxT ctT cKB bOI -bOQ +cQK bOT bKM bKM @@ -88976,10 +90216,10 @@ abh abh abh aEb -bRD +aPT aaU aaU -aGn +aPW aHD aIg aHF @@ -88989,8 +90229,8 @@ aHF aJn aHF aPp -aPT -aGn +cQV +cQS aaU aaa aaa @@ -89058,25 +90298,25 @@ bxT bFo bHV bYz -cbi -cbp -cbA -cbH -cjP -cjP -ckg -cjP -cjP -cjP -ckg -cjP -ckY -cjP +cPU +cPW +cPY +cQb +cQh +cQm +cQh +cQh +cQh +cQh +cQw +cQh +cQz +cQD cjP ctR -cKC -bOJ -bFl +cQF +cQH +cQL bKM bKM bKM @@ -89233,11 +90473,11 @@ aaU aaU aaU aEa -bRD +aPT aaU -aGn -aGn -aHE +aPU +aTH +bRD aHF aHF aIE @@ -89246,7 +90486,7 @@ aIE aIE csD aHF -aPU +cQW aGq aaU aaa @@ -89315,25 +90555,25 @@ bxT cdD bHW bIG -csl -bzy -bKp -bKJ -bLh -bLh -bLh -bLh -bMh -bLh -bLh -bLh -ckZ -bLh +cPV +cPX +cPZ +cQc +cQi +cQn +cQi +cQp +cQt +cQi +cQi +cQp +cQA +cQE cbF cnl cla bOK -bOR +cQM bKM bKM bPa @@ -89494,21 +90734,21 @@ aLK aGq aGq aKH -aHF +cQQ aHF aIE aJu aKA -aZT +bhB aMX aIE aHF -aPV +cQX aQW -aSJ -aSJ +bkC +bkC aQW -aSJ +bkC aQW aaU aaa @@ -89575,22 +90815,22 @@ bIH cGA bJX bKq -bKK +cQd bLi bLi bLF -bLi +cQq bMi bLi -bLF bLi +cQq bLi bLi cvV ckS -cla -bOL -bFl +cQG +cQI +cQN bKM bKM bKM @@ -89751,7 +90991,7 @@ aUz bDP aGq aGL -aHF +cQQ aHF aIH aJz @@ -89760,16 +91000,16 @@ aLI aMX aIE aHF -aPW +cQY aQW -cDv -cjQ +bmj +bBt cDB -cDD +bLh aQW aQW -aSJ -aSJ +bkC +bVN aaa aaa aaa @@ -89804,7 +91044,7 @@ aaa bcw bde bcw -cmT +bYg bcy bfp cwY @@ -89832,22 +91072,22 @@ bII cGB bFw bxT -cjG +cQe bLj ckN bxT -cjG +cQr bLj ckN bxT -cjG +cQx bLj ckN bxT bOy cla bOM -bOS +cQO bOU bKM bKM @@ -90008,7 +91248,7 @@ aZq bDQ hcR aGM -aHF +cQQ aHF aII aJu @@ -90017,16 +91257,16 @@ aRe aXS bbb aHF -aHF +cQQ aQW baP -aTo +bCd cjQ -cDE +bLk aVP cpt -aWw -aSJ +bOR +bXI aaa aaa aaa @@ -90073,7 +91313,7 @@ bAN bKH cbh clc -csR +cGJ cGJ cGO cGU @@ -90089,22 +91329,22 @@ bIJ cGC bXO bxT -bFl -bLk -bKG +cQf +cQj +cQo bxT -bFl -bLk -bKG +cQf +cQu +cQo bxT -bFl -bLk -bKG +cQf +cQB +cQo bxT ctU ckX bON -bFl +cQP bxT bKM bKM @@ -90265,7 +91505,7 @@ bdz bDR aKF aLm -aMi +cQR aMi aQh aQN @@ -90274,16 +91514,16 @@ aRl aXT bbc bbD -bik +cQZ cDt cDw -cDy +bEq cps -cDF +bMh bRb -bRc -aWx -aSJ +bOQ +bOS +cbi aaa aaa aaa @@ -90534,13 +91774,13 @@ bbG bit cDu cDx -cDz +bFy cDC -cDG +bOJ aVR bBj -aWy -aSJ +bRc +bXI aaa aaa aaa @@ -90790,14 +92030,14 @@ aSW aHM biF aQW -aTr -cDA +buM +bAX bEN -bjw +bOL aQW aQW -aSJ -aSJ +buO +cbp aaa aaa aaa @@ -90845,7 +92085,7 @@ bcy cbC cnO cnO -cnO +csR cGQ cGW cGV @@ -91047,10 +92287,10 @@ aSW aHM bju aQW -aSJ -aSJ +buO +buO aQW -aSJ +buO aQW aaU aaa @@ -91818,9 +93058,9 @@ csr aNR blf aNR -aTt -aTt -aTt +buR +bKp +bKJ aaa bdg bdg @@ -92074,10 +93314,10 @@ aGq aNR aNR bly -bFy -aTJ +bjF +byd aUB -aTt +bKK aaa bdg beN @@ -92329,12 +93569,12 @@ aKS aSW cDs aNR -aPs +biq blA bqh buG bIW -aTt +bKK aaa bdg beR @@ -92591,7 +93831,7 @@ aYR csE bvJ aUF -aTt +bKK aaa bdg beJ @@ -92832,7 +94072,7 @@ aAv aOO aCl aFj -ciC +aZT aGv bLp bEV @@ -92846,9 +94086,9 @@ bbf bsf bnI aRo -bBt -biq -aTt +bAn +bKG +bLe aaa bdg beJ @@ -93696,7 +94936,7 @@ ckT ckT ckT ckV -cHK +cRc clg ctc cua @@ -93921,8 +95161,8 @@ csN biA biA csL -cDZ -bgX +cDj +cDy bPl bXx bXT @@ -93953,7 +95193,7 @@ ckQ ckU ckQ ckW -cHL +cRd csX ctP cuk @@ -94178,8 +95418,8 @@ cve bky biA biA -cDZ -bgX +cDj +cDy bWT bXh bYa @@ -94431,11 +95671,11 @@ aaU aaU bgW biI -cvM -bkC -bVN -bmj -cEa +cqB +czA +cBt +csx +cDv bgW bWU bXl @@ -94688,8 +95928,8 @@ aaU aUk bgW bgW -cDj -bgX +csl +cAQ bgW bgW cEb @@ -96426,10 +97666,10 @@ aQg akv aew azf -bpW -aAP -aEc +aCb aFT +bjV +bpW aZO aXu aZX @@ -96487,8 +97727,8 @@ aaU aTV aVk bfu -bAn -bFz +csu +cAS cDV cDX cEg @@ -96682,9 +97922,9 @@ alU aQA aSZ aew -abS -bEL -aCb +aAP +aEc +bjB asL asL bfm @@ -96729,7 +97969,7 @@ aZy beJ bfd bjg -aYI +bUt bai baV cKF @@ -96744,7 +97984,7 @@ aaU aTV aVq bfx -bCd +cuQ cpP aTV bVR @@ -96999,9 +98239,9 @@ aaa aaa aaU aUi -aVq +ciC bzz -cuQ +cvM cts aTV bVM @@ -97258,7 +98498,7 @@ aaU aTV aYf beo -bCd +cuQ cwe aTV bVS @@ -97453,7 +98693,7 @@ awS azB aBC atc -aLX +aIF aJv aJZ aLY @@ -97515,7 +98755,7 @@ aaU aTV bHH aWp -cDJ +czf coI aTV bVT @@ -97710,10 +98950,10 @@ awT aAk cjN atc -aDF +aIG aRU aDX -bAX +aYI atc aVQ aWa @@ -97771,8 +99011,8 @@ aaa aaU aUk aUk -aUi -cDK +cnm +czz aUk aUk bWa @@ -97966,9 +99206,9 @@ bGf bHh cqd cBb -cBt +aFP +aKi aMN -cCO aQw coU atc @@ -98223,9 +99463,9 @@ avL axw cqH bhN -aDb +aIC aDP -aFk +aPs aGh csn atc @@ -98303,7 +99543,7 @@ bRJ bth bTB cek -cKj +cAo cKk cKl cKm @@ -98480,9 +99720,9 @@ avM avL csw aBK -aCa -aCa -aAQ +aID +aLX +aSJ aHZ atc atc @@ -98808,7 +100048,7 @@ cEn bWR bSH bSG -cEE +cij bSG bSC bSC @@ -100054,9 +101294,9 @@ aWB bsl cjJ aXH -aYm -aYm -aYm +cbA +cbH +ckZ aZv bRP aWB @@ -100101,9 +101341,9 @@ ceY bst cyG bst -buM -buM -buM +cDE +cDG +cEa buS buS bFX @@ -100312,7 +101552,7 @@ aWK aXo aXI aYn -aYD +cda aZj aZw bRQ @@ -100358,11 +101598,11 @@ bqm cdW cyG cdY -buM -byd -czf -csv -buM +cDF +cDJ +cKC +cDh +cPR bFJ cFa cFk @@ -100569,7 +101809,7 @@ aWM aXr aXJ aXr -aXr +cjG aXr aXr bRU @@ -100616,10 +101856,10 @@ cmU cyG cdX buS -csu +cDZ czg czt -czz +cPS czD cFb bEl @@ -100826,7 +102066,7 @@ aWO bPz bQf aYs -aYE +cjZ aYs aYs bSV @@ -100876,7 +102116,7 @@ buS bAJ czh czu -czA +cPT czE cFc bEl @@ -101083,7 +102323,7 @@ aWP aXy aXN aXy -cda +ckg aXy aXy aXy @@ -101132,7 +102372,7 @@ bqm buS caR czi -cdm +cKj buS bFY cEX @@ -101340,7 +102580,7 @@ aWQ aXz aXU aYu -aYF +ckY aZn aZx bEs @@ -102380,7 +103620,7 @@ ajO ajO ajO ajO -ajO +aQa ajO ajO aRy @@ -102633,13 +103873,13 @@ ajO aGi axI axI -axI aGi -aNo -aPE -beu ajO +bFf +aPE baW +aYZ +beu beK bTX bWI @@ -102889,10 +104129,10 @@ avv ajO bCv axI -bCF -axI -axI -aNr +aNh +aNz +bDw +bFv bHp bLm ajO @@ -103144,12 +104384,12 @@ aSt brs avv ajO -axI avY -bDw -bEZ -bFv -bGB +ajO +ajO +aOI +bDU +bGg bIF bLz bNe @@ -103193,7 +104433,7 @@ bqq cPx cFh bJe -cea +cRb cHP bKA bKV @@ -103401,12 +104641,12 @@ bns aya avy alo -axZ awn aIS -awn +aNo aJp -aNz +bDW +bGB aHq bki bPp @@ -103423,11 +104663,11 @@ cwd bYZ bZc cgQ -bUt -bUt -bUt -bUt bZe +bZe +bZe +bZe +cjr brL brL bVW @@ -103658,19 +104898,19 @@ aSt brs avv ajO -axI -avY -bDU -bFf -bGg +axZ +ajO +ajO +aPf +bEZ bGD bJk bLC -bPK +cRf bPV bQT bVq -cpM +cRh bfh cbY cdn @@ -103917,10 +105157,10 @@ avv ajO aze azJ -bDW -azJ -aNh -aOI +aNr +bCF +bDw +bPK bKx bmv ajO @@ -103958,7 +105198,7 @@ cpI csK cKi cvR -bzH +cPP bts bCY bHJ @@ -104175,9 +105415,9 @@ ajO aGi axI aIX -axI aGi -aPf +ajO +cRe aZP bmH aYZ @@ -104481,7 +105721,7 @@ bJi bDa czw byQ -cHV +cPQ cIc cIc cIp @@ -104986,7 +106226,7 @@ bpE bpE cyQ byQ -cjr +cCO czx czC czG @@ -105196,19 +106436,19 @@ bUp cci btZ aSq -rTW -kxw -kxw -tpQ -kxw -tpQ -kxw -kxw -kxw -kxw -kxw -kxw -xqa +bgh +bIY +bIY +bRo +bIY +bRo +bIY +bIY +bIY +bIY +bIY +bIY +bRp aaa aaU bWv @@ -105453,7 +106693,7 @@ bUL btT btT cjE -opd +bsz aaU aaU cdV @@ -105495,7 +106735,7 @@ bZk bZn bZq bZh -bIC +cEE bpD cmL cyS @@ -105710,7 +106950,7 @@ bUY ccj aSw aaW -opd +bsz aaa aaa aaa @@ -105967,7 +107207,7 @@ bVa btT aaU aby -opd +bsz aaa aaa aaa @@ -106224,7 +107464,7 @@ bVu bvB aaU aby -opd +bsz aaa aaa aaa @@ -106481,7 +107721,7 @@ bVA btT aaU aby -opd +bsz aaa aaa aaa @@ -106738,8 +107978,8 @@ bXp btT aaU abH -aZp -kxL +bAA +bMK aZp ceq cet @@ -106996,7 +108236,7 @@ bvB bWq acY adz -opd +bsz aaa aaU cdt @@ -107253,7 +108493,7 @@ btT btT btT cjF -qnM +bMX cdt cdt cdt @@ -107510,7 +108750,7 @@ ccn ccA ccy aTl -opd +bsz cdG cer cew @@ -107767,7 +109007,7 @@ cco ccE btZ aTl -opd +bsz cdU ces ces @@ -107792,7 +109032,7 @@ csQ cqs cqG crt -csx +cdm ctl cuL cvd @@ -108024,7 +109264,7 @@ btT btT btT cjF -qnM +bMX cdt cdt cdt @@ -108281,7 +109521,7 @@ btT aaU aVt adN -opd +bsz aaa aaU cdt @@ -108538,7 +109778,7 @@ aaU aaU aTl qeq -rbJ +bPh guK hXk hXk @@ -108742,11 +109982,11 @@ aFr aKg ahO aml -aoy -aoy +abX +akd aoA awt -aoy +aDb aqL anB alS @@ -108795,7 +110035,7 @@ cuy cuD cuG eUF -opd +bsz aej agc agT @@ -108822,12 +110062,12 @@ bwR cBx cCR cdz -bPX +cPI cdJ cdM cdJ cdO -bRA +cPK bbY cIM bZl @@ -109000,10 +110240,10 @@ apv aiF amr aqL -abX +aoy aoD aoj -bEq +aDm aqL aji aKs @@ -109052,7 +110292,7 @@ aQJ aRZ aVK cxa -bsz +bPr sVC aNH bbQ @@ -109257,11 +110497,11 @@ apv ajb amt anH -akd +aAQ aoG bvp -aDm -aFP +aDF +aFk aHh aKB aNu @@ -109309,7 +110549,7 @@ aaU aSu aYU cxb -opd +bsz aej agC aoJ @@ -109336,12 +110576,12 @@ bEW bQF cah cdA -bRn +cPJ cdL cmv cdL cdQ -bVb +cPL bUD cIV coN @@ -109563,10 +110803,10 @@ aaa aaa aaa aaa -rTW -aTl -cdp -wPS +bgh +bGQ +bIT +bPX aaU atF atF @@ -109820,7 +111060,7 @@ aaa aaa aaa aaa -opd +bsz aTl cxc aaa @@ -110077,7 +111317,7 @@ aaa aaa aaa aaa -opd +bsz aTl cxc aaa @@ -110334,7 +111574,7 @@ aaa aWR aaa aaU -opd +bsz aTl cxc atF @@ -110591,7 +111831,7 @@ cgd bwW beE bwW -opd +bsz aTl cxc atF @@ -110625,7 +111865,7 @@ biQ bXf bkG cwP -cDh +ctn bob bib bXX @@ -110824,9 +112064,9 @@ aIN aMK aOc aSA -aVa -aWn -bsR +aTo +aTt +aTJ bsR bCG bCK @@ -110848,7 +112088,7 @@ cgX chC cik bwW -bGh +bsT bGQ bHe bHA @@ -111081,9 +112321,9 @@ aKj aVy aRx aSF -aHA +aTr arH -aIC +aVa aIK aKk aTU @@ -111340,7 +112580,7 @@ aND aWH aHx asc -aID +aWn bvG aKl bCQ @@ -111597,7 +112837,7 @@ bkT aWJ aHz btb -aID +aWn bvR bCI bDJ @@ -111854,14 +113094,14 @@ aci aXQ aHy bDc -aIF -aKi +aWw +aWy +aYm +aYD +aYE +aYF beQ -cnm -cAQ -cAS -buO -buR +bjw bwu bAd aMo @@ -112111,8 +113351,8 @@ aWX aZF anK aHz -aIG -aHA +aWx +aTr boA cAF bCL @@ -112136,7 +113376,7 @@ aMD arp bCk aqk -bIT +bRn qlJ qlJ bcG @@ -112393,9 +113633,9 @@ bwW ciV bwW aaU -bIY -bHg -bMK +bsT +bRo +bRp anr bcI bgw @@ -112652,10 +113892,10 @@ bwW aaU aaa aaa -bJv +bsz cJx cJF -bPh +bRA cJJ bsX cJM @@ -112909,11 +114149,11 @@ bwW aaU aaa aaa -bJv +bsz anr bcI sdp -bgw +bUX bgw uwK bhm @@ -113166,12 +114406,12 @@ bwW aaU aaa aaa -bJv +bsz anr bcI aXp -cwx -bTJ +bVb +cfx bhs bmm bcI @@ -113397,7 +114637,7 @@ aCJ bFn bFn aJd -aJj +bfH bdq bet bmu @@ -113423,7 +114663,7 @@ bwW aaU aaa aaa -bJv +bsz anr bcI bcI @@ -113680,13 +114920,13 @@ bwW aaU aaa aaa -bJv +bsz anr aaU aaa cwz aaa -bfW +jyu aaa aaa aaU @@ -113937,13 +115177,13 @@ bwW aMD bwW aaa -bIY -bMX -tpQ -xqa +bsT +bHe +bRo +bRp aaa cwD -bfW +jyu aaa aaa aaU @@ -114197,10 +115437,10 @@ bwW aaU bdR cJr -opd +bTJ aaa aaa -cwF +cPz aaa aaa aaU @@ -114222,11 +115462,11 @@ bUR cfO cja cja -cgt +boj cxq cxv bgf -bVj +brQ cxC bgq bhX @@ -114423,7 +115663,7 @@ aNy aSd aTq aVY -bfH +aJj aJd btm bdo @@ -114454,10 +115694,10 @@ cwv bAQ bAQ cJs -bPr -bRo +bUV +caf bam -cwG +cPA bam bYl bam @@ -114479,7 +115719,7 @@ cdx cga cgq cgq -cjb +bzw cxr cxw cxx @@ -114712,9 +115952,9 @@ bsu bsx cJt sVC -bRp +cdp sVC -bsT +cPB sVC bZp sVC @@ -114738,7 +115978,7 @@ bZd cfX ciP cjB -boj +cgt bcl bfc bgs @@ -114952,7 +116192,7 @@ aMA czU czY cAe -cAo +bFz cAs cAx bhU @@ -114973,11 +116213,11 @@ bRv bsD bww bsD -caf -bsD -bsD -bsD -bAA +cPE +cPF +cPF +cPF +cPG bBL bBL bCm @@ -115003,7 +116243,7 @@ cxC bhX biJ bjQ -cxT +ctu biZ btz bPm @@ -115263,7 +116503,7 @@ cxQ cxU cxW cxX -bPm +cPN clX bZu cmM @@ -115473,7 +116713,7 @@ aMB bzn bjz cgZ -bmS +bzH bJS bmW bmW @@ -115499,7 +116739,7 @@ bbT bbT bkm brV -bgh +cPH bfU bFD bgO @@ -115988,7 +117228,7 @@ bzn bwW bxF aMD -cih +bEL bAK bjz aMI @@ -116034,7 +117274,7 @@ bGC bpQ bpQ cOa -bYg +cPO cya cya cya @@ -116245,8 +117485,8 @@ bzn bwW byW bCB -ciX -cij +bIC +bVj cip cpE aaa @@ -116502,7 +117742,7 @@ bzn aMD bzh bwW -ciV +cih aMI aMI aMI @@ -116534,7 +117774,7 @@ bLu bVr cth cje -ctn +csv bcV bby bck @@ -117044,7 +118284,7 @@ bgk bbT bkd bbT -bUS +cea bVG cgn cje @@ -117055,13 +118295,13 @@ bcA bdM bdM cNA -bhP -biv -bjB -bjV +bhb +ciE +cmT cnB csh -ciE +cHV +cPM bjn btI buc @@ -117283,8 +118523,8 @@ bMY bMY bPB xoj -cwB -cwM +cwx +cPC cww cbN cww @@ -117314,9 +118554,9 @@ bdM bdM bhP biv -bjF -cqB -bXI +cDz +cDA +cDD bnX bjn bjn @@ -117540,8 +118780,8 @@ bMZ bMZ bPC uAY -cwB -bUV +cwF +cwM cww cge cww @@ -117793,12 +119033,12 @@ aaa bJv bMp cww -bNa +cpM bNa bPJ bRC -cfx -bUX +cwG +cPD bVE cbT cww @@ -117830,7 +119070,7 @@ ccv boS boI bqZ -ctu +cxT bMH btN buy @@ -118090,7 +119330,7 @@ cxR cxV cxV cxV -cxZ +cjb cxV cyb cyc @@ -118314,7 +119554,7 @@ qgO chO cpN bWG -cJo +cRg jiZ bhI cLY @@ -118349,7 +119589,7 @@ btd btd bDy bxR -btS +cxZ boI bBA bFh @@ -118582,7 +119822,7 @@ anr aaa aaU bfC -bhB +bUS bAv bPW cBz @@ -119377,7 +120617,7 @@ boI cre cow boI -bzw +cRa boI aaa aaa From 60e89f154a09861bd0f7be9c2dd830164d9853fe Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 20 Apr 2020 14:44:19 +0300 Subject: [PATCH 40/82] Fixes missing inv/dropped icon of glass gasmask --- icons/obj/clothing/masks.dmi | Bin 37605 -> 37981 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 13f678f53a6a3a0936d258ef1c6308f7f0c60d73..0590104c3065e81db3320d78a1c2a8fcc74dd6b9 100644 GIT binary patch delta 17898 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 O2s~Z=T-G@yGywq4A~!w& delta 17515 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 Date: Mon, 20 Apr 2020 16:04:55 +0200 Subject: [PATCH 41/82] Update game_options.dm --- code/controllers/configuration/entries/game_options.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index cb18d37f21..f1f7442059 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -475,5 +475,4 @@ min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead. //Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones. -/datum/config_entry/number/allow_custom_skintones - config_entry_value = 1 +/datum/config_entry/flag/allow_custom_skintones From e870830a723039a254a361ec9dbed47799c0d46e Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Mon, 20 Apr 2020 17:52:10 +0200 Subject: [PATCH 42/82] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0e5e80eaf3..d4caca017a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1834,7 +1834,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("s_tone") var/list/choices = GLOB.skin_tones - GLOB.nonstandard_skin_tones - if(CONFIG_GET(number/allow_custom_skintones)) + if(CONFIG_GET(flag/allow_custom_skintones)) choices += "custom" var/new_s_tone = input(user, "Choose your character's skin tone:", "Character Preference") as null|anything in choices if(new_s_tone) From 4cf80cb277b1ab2643aef1c7525cbfe051b45744 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Mon, 20 Apr 2020 17:56:48 +0200 Subject: [PATCH 43/82] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a64d3e057d..f62d179fff 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -568,11 +568,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0) - use_custom_skin_tone = sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) - if(use_custom_skin_tone && CONFIG_GET(number/allow_custom_skintones)) + + var/static/allow_custom_skintones + if(isnull(allow_custom_skintones)) + allow_custom_skintones = CONFIG_GET(flag/allow_custom_skintones) + use_custom_skin_tone = allow_custom_skintones ? sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) : FALSE + if(use_custom_skin_tone) skin_tone = sanitize_hexcolor(skin_tone, 6, TRUE, "#FFFFFF") else skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones - GLOB.nonstandard_skin_tones, initial(skin_tone)) + horn_color = sanitize_hexcolor(horn_color, 3, FALSE) wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF") backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) From 9df0982da39b564b2397d2c90bb9e96e287d4586 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Mon, 20 Apr 2020 17:57:08 +0200 Subject: [PATCH 44/82] Update mirror.dm --- code/game/objects/structures/mirror.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index be783f387e..e32def727a 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -159,7 +159,7 @@ if(H.dna.species.use_skintones) var/list/choices = GLOB.skin_tones - if(CONFIG_GET(number/allow_custom_skintones)) + if(CONFIG_GET(flag/allow_custom_skintones)) choices += "custom" var/new_s_tone = input(H, "Choose your skin tone:", "Race change") as null|anything in choices if(new_s_tone) From 90f6904f44f2ead2ff7999fc1171d5c0efdbcde7 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 12:16:42 -0700 Subject: [PATCH 45/82] fix --- code/game/objects/items/shields.dm | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 6d8e582c29..77d24eb80b 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -52,13 +52,13 @@ px = 12 if(WEST) px = -12 - var/oldpx = user.pixel_x - var/oldpy = user.pixel_y - animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW) - animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3) - user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir) - animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3) + effect.pixel_x = user.pixel_x + effect.pixel_y = user.pixel_y + user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") + animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE) + animate(user, pixel_x = -px, pixel_y = -py, time = 3, flags = ANIMATION_RELATIVE) + animate(effect, alpha = 0, pixel_x = px * 1.5, pixel_y = py * 1.5, time = 3, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE) /obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir, harmful) if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess.. @@ -76,7 +76,7 @@ "[user] shoves you with [src]!") for(var/i in 1 to harmful? shieldbash_knockback : shieldbash_push_distance) var/turf/new_turf = get_step(target, bashdir) - var/mob/living/carbon/human/H = locate() in new_turf + var/mob/living/carbon/human/H = locate() in (new_turf.contents - target) if(H && harmful) H.visible_message("[target] is sent crashing into [H]!", "[target] is sent crashing into you!") @@ -113,7 +113,8 @@ if(world.time < last_shieldbash + shieldbash_cooldown) to_chat(user, "You can't bash with [src] again so soon!") return FALSE - if(isliving(target)) //GROUND SLAAAM + var/mob/living/livingtarget = target //only access after an isliving check! + if(isliving(target) && !CHECK_MOBILITY(targetliving, MOBILITY_STAND)) //GROUND SLAAAM if(!(shield_flags & SHIELD_BASH_GROUND_SLAM)) to_chat(user, "You can't ground slam with [src]!") return FALSE @@ -122,7 +123,7 @@ playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1) last_shieldbash = world.time user.adjustStaminaLossBuffered(shieldbash_stamcost) - return 1 + return TRUE // Directional sweep! last_shieldbash = world.time user.adjustStaminaLossBuffered(shieldbash_stamcost) From 6428f4a0c2f768ca1177508006d8f6f978cf242f Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 12:18:09 -0700 Subject: [PATCH 46/82] ok --- code/game/objects/items/shields.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 77d24eb80b..7527415c86 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -114,7 +114,7 @@ to_chat(user, "You can't bash with [src] again so soon!") return FALSE var/mob/living/livingtarget = target //only access after an isliving check! - if(isliving(target) && !CHECK_MOBILITY(targetliving, MOBILITY_STAND)) //GROUND SLAAAM + if(isliving(target) && !CHECK_MOBILITY(livingtarget, MOBILITY_STAND)) //GROUND SLAAAM if(!(shield_flags & SHIELD_BASH_GROUND_SLAM)) to_chat(user, "You can't ground slam with [src]!") return FALSE From 7e2a54d5d6249ff36f668ae5d81c44318a507efe Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 12:30:20 -0700 Subject: [PATCH 47/82] fix --- code/game/objects/items/shields.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 7527415c86..2a0ef0109b 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -33,11 +33,11 @@ return TRUE /obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params) - user_shieldbash(user, A, user.a_intent != INTENT_HARM) + user_shieldbash(user, A, user.a_intent == INTENT_HARM) return TRUE /obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters) - user_shieldbash(user, target, user.a_intent != INTENT_HARM) + user_shieldbash(user, target, user.a_intent !== INTENT_HARM) return TRUE /obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir, harmful) @@ -53,8 +53,8 @@ if(WEST) px = -12 var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir) - effect.pixel_x = user.pixel_x - effect.pixel_y = user.pixel_y + effect.pixel_x = user.pixel_x - 32 //96x96 effect, -32. + effect.pixel_y = user.pixel_y - 32 user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE) animate(user, pixel_x = -px, pixel_y = -py, time = 3, flags = ANIMATION_RELATIVE) From ec9b0573aa519b09a25d2d46ea9058438063cc8f Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 20 Apr 2020 15:45:37 -0400 Subject: [PATCH 48/82] even reagents --- code/game/objects/items/crayons.dm | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 1e69f92132..0cb9e2b7ce 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -487,56 +487,56 @@ icon_state = "crayonred" paint_color = "#DA0000" crayon_color = "red" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/red = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/red = 0.9) dye_color = DYE_RED /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" crayon_color = "orange" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/orange = 0.9) dye_color = DYE_ORANGE /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" crayon_color = "yellow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 0.9) dye_color = DYE_YELLOW /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" crayon_color = "green" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/green = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/green = 0.9) dye_color = DYE_GREEN /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" crayon_color = "blue" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/blue = 0.9) dye_color = DYE_BLUE /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" crayon_color = "purple" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/purple = 0.9) dye_color = DYE_PURPLE /obj/item/toy/crayon/black icon_state = "crayonblack" paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black. crayon_color = "black" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/black = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/black = 0.9) dye_color = DYE_BLACK /obj/item/toy/crayon/white icon_state = "crayonwhite" paint_color = "#FFFFFF" crayon_color = "white" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/white = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/white = 0.9) dye_color = DYE_WHITE /obj/item/toy/crayon/mime @@ -544,7 +544,7 @@ desc = "A very sad-looking crayon." paint_color = "#FFFFFF" crayon_color = "mime" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 0.9) charges = -1 dye_color = DYE_MIME @@ -552,7 +552,7 @@ icon_state = "crayonrainbow" paint_color = "#FFF000" crayon_color = "rainbow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent = 0.9) drawtype = RANDOM_ANY // just the default starter. dye_color = DYE_RAINBOW charges = -1 From 047bb6c162921b4787c5defd1d74313a8d504ede Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 20 Apr 2020 16:19:30 -0400 Subject: [PATCH 49/82] Update hardsuit.dm --- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 8a7092d8a6..385956e7f4 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -408,7 +408,6 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl mutantrace_variation = STYLE_DIGITIGRADE - //Wizard hardsuit /obj/item/clothing/head/helmet/space/hardsuit/wizard name = "gem-encrusted hardsuit helmet" @@ -473,6 +472,7 @@ name = "medical hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement." item_state = "medical_hardsuit" + slowdown = 0.8 allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical) armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical From 3e9b1a68756da72080392dca4db1f6820884118a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 14:02:39 -0700 Subject: [PATCH 50/82] Update shields.dm --- code/game/objects/items/shields.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 2a0ef0109b..16f29491be 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -37,7 +37,7 @@ return TRUE /obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters) - user_shieldbash(user, target, user.a_intent !== INTENT_HARM) + user_shieldbash(user, target, user.a_intent == INTENT_HARM) return TRUE /obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir, harmful) From 03e873478cb773e4668c6eb92312f7ba296b1afc Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 20 Apr 2020 23:11:58 +0200 Subject: [PATCH 51/82] Fixing CE jump suit/skirt and accessory overlays. --- code/modules/clothing/under/_under.dm | 5 +++-- icons/mob/clothing/uniform_digi.dmi | Bin 262426 -> 262431 bytes icons/obj/clothing/uniforms.dmi | Bin 115556 -> 115557 bytes 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index fe3aaf4bda..0d08b59be9 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -26,6 +26,8 @@ . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") if(blood_DNA) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color()) + if(accessory_overlay) + . += accessory_overlay /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) @@ -99,8 +101,7 @@ if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY)) return TRUE - var/accessory_color = attached_accessory.icon_state - accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "[accessory_color]") + accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "attached_accessory.icon_state") accessory_overlay.alpha = attached_accessory.alpha accessory_overlay.color = attached_accessory.color diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi index 7fe37547e96404036937fe4530ce097e3465e7a1..7a638ef54ca7dffd71c91926ee977e07ddb76c04 100644 GIT binary patch delta 1202 zcmV;j1Wo&zf)JmA5RfDRnXx4p0e^hhObW2kuzJ&3vpDcfF|#rD7+9G=OB^D(2}AYB zMlrT`RLNC2sJ0#BEJn3$GD%V!DtZ)d@4|7ePTQKHhl4oas>_Ixkwhe>9K`{b&rd6)C8r>jF@1MrV>@m;vVT!~I7G~g z&21eZ$%CE%e?T#={SF&0&X%D-acVw^P0f`g_cIxJ zAUQ2XN~K);gIWSI?V#l>yMIpv=;8|=(M1=?oT9Nc({Tl(@M7bVJxII2ZelzcATYfM z+ICG_AprQht4=`d7J>luS~&phj|L75_}OTIK|fjHzF+{**AxR_N8{B4Y0#MiBz{i- zbgqN}(j_EX{{7bj8dxtbrA=<>I{;EmidvBR>Lmk3 zL~c18GA=5pnvMyFhuVPyTzmeT7MxCsR3wVT7Z1IZSfrC5NCC2=dGj3;ea%C z+qQCUaNy|<97(ou)*&z07Jn^_<7T?buO`r#`VSuI<69@ziI2s(-tLXMU>tmY(^k?phP) z`flgp?Art9eG5A3x=a31*L_EH)OFW_eEGC*0$)Du+JP^hb}gu;xvxf&xt(HN2XKy3 zKx3(C?h6~#$gIXw|4+LNCYyprq%H1@staw8yci)5AxDW3d461r06E|QQH3M|OFIPt z+VEQk7^|cq2!CycfQ?b02SPSME!+zTwqUSUEMT<^M5fA6y8ufPwl_5Fa>5|Fxb zj6k=3!;rkpD39&i*f1oe1zxa?Jyh?TD)O{rs>sRBlG|o6OGd0B$`~s61o47JY{QWE ztikkz>^aI9Dkkz7MXb&UeFVDp6P>1k+5^D!KP@Q%Nq?>*V`qTDl!+r(K;PJEzhpV6 zA!W}C8n{#$`#G#Yd*DJMYEMRqJ4sdl!y#b=uYlJsiXVZn&)3i^Fz-xOLM(E21|ik_yOs z2JZgD?2-GQB(|Z#Pb=oD6G=p3$x$3|`TVp(T5<|f8Pj)1Hn!unBOA4cLx01(*xc3u zl04`M@COv*+V8O8;%pfT6rVP9G-e>)J6ndbIprNLr$2Dp5Qn&MKd+CJ2nseZ8?+2@ zVHdRqhVV)mrO)nT&jjZo+a$<<6Pf3{XNqmaj%|z@UtZCxE`;0!+SFW0azB%i2a?iK zq*ThaKd2=j!wy=`vin4UE`Pq@5nXhF%qbdMGaXkj3NJP;*@LtT>?X#O0Rq#Dpl#Q* z6##(0yXpkQZXpOjuN4Ep{%GL9fS-*P81$1B?h6J0eN8a{b~Ii+kOrMOK;riVK<5e= zAYDSD<==ljpn>(`QrhHJ2?HS2q{uY}MXv8$lp?jcc9958zR5(?mMIq( zsT6S#oR(54kC zTxC*h)}V!eYH!03y?-n07Ly8S{e?uN2B2kW0rKUx#c`BFoYkqFuZ|{%1JcB8+se7I zfu}i;4=6~FVUAQ1A;r9-q*zIb-5R0*@P&aI0Lz1Qeuv5riwRH%@zWgDfUDb@zH$J{ z2;-@DniA#qGOO{_a~=z~V@EZf`ozAtwg;=mQ=j>%?h>B)sekTUdgiCPYfYT%yPb!# zZx5XJE$FE0F8N1Y_Z`tu*If(p<tRKkf3DYzi8YcDOUDF0?)JVuU<=93@8Nxp6H5M1O(a2iXL*ZZ9C%dcj(-fYmY(nJPnV0xU_`-p;U-!z5lwK`k1a+5bM?Q?m#By0r5 z3Rg@oSfro(zeyf7dyUi%D~nML#sr9DvObVy=*$McK;Ny*8qsfSRvoFwn^Qd~_K_*~ zCi4vFvw!C-sV|cl@)|~Sdv<3!SKxi?YNGEv8IroGdSlYg^1wOrwr%aN7%FRp&)w4+q;a0rs*`NbGi=unt~Uf$`T3 zV)*&sF!;Jl41abE@9y@%@AtqTUW4CupT9kH4-H?x-2My48!I^(i~#s!DQ1p$Y~ L1p>Fm1p`_8noT?F diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index a485deb9add676a1cd29b5b5be973a922372d8b6..cea11f8a49cbe0cd35bd74752983ae945d46a6fa 100644 GIT binary patch delta 1590 zcmV-62Fdy4h6m+_2aqHIJCP+(0+B4Sc;o?p)F)jcC0pNll(XbQp>#u34^#wG%*WcD zCtz#8;*qVrpNoixn~Bs!Gy@8B*}w#B(QyeDq|L-;W;nYm1m=rVtVhLBd9y%5q_!+t zfNynX3fVZySqujIB^L@K24e-?nJMHgE@2#^n*slwq;R5ur7;-TJ2Eqd778G!@S10T zCZP75Cz=I_2R=5ubXO>h^_pMVc6{L=VeCdEW62~gYKH~RTvQTUkoF|?+W$;JAW$=# zMWxgut?nmBotuC%eTtcY6frpx3pG1-5=v`!6iijJnPPOKX#J>oK@o*tXf(mP@=+;_ zbI8_n$x-%%Bo~H!#Eiag6^uo;J?w0tul0)x zki_tFa#7JQILQE&88mvi}KuYXnX>Pws+vr zrqI8tm?fR3=zx;+Xg5HvGqU7~kiw0Mnd(lnC{$lw#6jKhEhA3dL)3oS)}s!81si>L zUVMU*(sdG`mp3Zc{Ta&zE$Iv$VOUR}fzW`(HcL8V=Z8 zGEN0;VknXbIvJ;ep|>t`XQJ<^zCZV4`TM$s7Vqm@G#gSj3Vgggv*QBT+$x#H5s=in z*h49X)j^s6i$=iv~zq%?#Wjy+#dyR`)<+$Dj@m*;UzTVn@qxkKb7Z*S+ ze)RBQ3nq~C;!$h7y72}jj!_hlem&07Dzcz2@#;3IO+wkCCf#RdK>B(q3F6oJBM^V` zs2WG_7smH%1{DAQdpTInHsKR|V!Yf@qHFJ+1(3dtT%de>mVoMho&13hum*>^W!(*@ zBZ@XGdoAc1@FV)RL~6``<0Ld$Z_o44SV0;is>z<|f$*L}w)k1Y#%^&jtT;$yI02(G zw;>yJ;ahFkGH-)B?%NxA)ZBY=jc)EmsZ7dLFGuX6)M%HUGWX0FBqNXOVB za4RYrWcEt2~mRvOS=T9{aYFEEpU~ZbZJte zkEKNKkiPy~98~6&0P4l!sSt2=`G$r!`;~9h2H0)?{`KqMfBN{#f9e%}9I3-RdT?=N zbgFJ}L`yXzB8Q$_aQcji~^mz$R)2CV`(MQT_WrNumhaXlIctRWoq}Mpt$W_>tknF^u(; z)Ki!x)JKzYQAvrls~h`<0^>R=mO)eQEH>_b$HN{D*<$+tbI-A5I@WJ>LHh3VsPpuua{2gJ%f0X9xlPy6FNPSpWb4 delta 1589 zcmV-52Fm&6h6m(^2aqHII*}z&0r%$&P*Y1aS7uP-3<8eB!v?NERDgy-jSIxv`_#+h1WcP zGXZzcd7@c>c;I8hOLv9BSikct+m0_BB#hmNWGtD)MeVS_nTtwd3(}sXe)m695D3)F zW>G2iNUQtFQRgP$nm)x$K#G_giG_+CI|-#VI|`;M*-SCIQM7(kyr77}FEpB9UHPaK z#=7RC$}j+BDn?>dhA$G(bx_%2V4lc-#?=WBbCaX&2}v#t`G^^P-zpf3Y=j5WIUvQEEIN6owF7R{dIEQJ!J zcjv_?C@Ebh0cv@pa^0V?T+ouv&=H2!^ce^ZSZuSTGe&Og98fa{&oJa5^`tQZpC{9iOu_N0Y_1s2YKY`~0U6%Y364iu@ht>VEnBd_A&)Kid@xAAc!bg=K zRpqFwp|p+>WN#w?uu*ux(Y@;o^MbGK(HGqBwx~6Zwl0Y8eO(Z~cI#1p{MO#Z1yD;L zwL92?2_(IE)Ecik-JrxVf&$X7$2eL=7W5@vb&=X6lr3t~eO3mfugyphzs?)J~ zIBLEyzPA@p{QvuLu$*neC-|gz=}n?*?-d1*zKvR-e0-LG>VBR0fe)?*hq`6k4W}ZC zHY|I+$Ti?c^lgdMn8!(fXtLg(-=VRBG)7dDJ;MXxJ#}pHvxbe`;$qmPAd%q&jLh7I zYtV&ncfyuA8{Bc$nLcLwU!DE$NJY`P~`DMXtyk6tK;R83WzYEl#piAx+s95;* z%Rhhr>E~a*eEN8Q`tkQKpFf;_`}y(L)7LMLpMR@+N^~1K#JuH2%6IQ@v|bCop+7(< zG{|`cK}~0Iu%=jwdnHj*&7w^jfW|^+hHogU?+$|s?=YtEdGYnRt1AdAgzyFgYilB{l7HOrLi6bzwvSYxH3nz|Ytf!=& z!YrXal9Y=|N~~So*f$gy(^0VunsR5cF&7of9XKnp!|?EiScbl5ep;v$*0_`bxkD~F z$KEY$2>31W%-a+l=amVWen_O`*@{7HzgPY{C*#zA!dp_{=y`*q62b6K7zkK>HDsgObal=dxeqUc7uCYPr+~SsKAKM n%gTQj7)ZW7ef<34^x@Ov{r>>KOa=eElrAHKXb87x2m$@N`7# Date: Mon, 20 Apr 2020 14:39:43 -0700 Subject: [PATCH 52/82] Makes ling kill objectives kill-once --- 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 967715ce2f..336d21c974 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -430,7 +430,7 @@ objectives += destroy_objective else if(prob(70)) - var/datum/objective/assassinate/kill_objective = new + var/datum/objective/assassinate/once/kill_objective = new kill_objective.owner = owner if(team_mode) //No backstabbing while in a team kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1) From 6dd89ec1e0339b4eaca18264d944cae8ab4addde Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Mon, 20 Apr 2020 21:50:25 -0400 Subject: [PATCH 53/82] Update pockets.dm --- code/datums/components/storage/concrete/pockets.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 4d3ecc8d17..851885b2ed 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -56,7 +56,8 @@ /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper, /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini, - /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol + /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol, + /obj/item/toy/plush/snakeplushie )) /datum/component/storage/concrete/pockets/shoes/clown/Initialize() From 685546551c761112c6a4fc5117b4821023901dbb Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 20:26:50 -0700 Subject: [PATCH 54/82] Update SDQL_2_wrappers.dm --- code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 24149e7e6c..b0cc4fdfa9 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -4,7 +4,7 @@ return abs(A) /proc/_animate(atom/A, set_vars, time = 10, loop = 1, easing = LINEAR_EASING, flags = null) - var/mutable_appearance/MA = new() + var/mutable_appearance/MA = new(A) for(var/v in set_vars) MA.vars[v] = set_vars[v] animate(A, appearance = MA, time, loop, easing, flags) @@ -33,6 +33,9 @@ /proc/_cos(X) return cos(X) +/proc/_filter(type, ...) + return filter(arglist(args.Copy())) + /proc/_get_dir(Loc1, Loc2) return get_dir(Loc1, Loc2) @@ -234,3 +237,4 @@ for(var/turf/T in v) . += T return pick(.) +t From 055606b81bf489dd4926c8f445cc0e0d56047d46 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 20 Apr 2020 20:27:18 -0700 Subject: [PATCH 55/82] Revert "Update SDQL_2_wrappers.dm" This reverts commit 685546551c761112c6a4fc5117b4821023901dbb. --- code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index b0cc4fdfa9..24149e7e6c 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -4,7 +4,7 @@ return abs(A) /proc/_animate(atom/A, set_vars, time = 10, loop = 1, easing = LINEAR_EASING, flags = null) - var/mutable_appearance/MA = new(A) + var/mutable_appearance/MA = new() for(var/v in set_vars) MA.vars[v] = set_vars[v] animate(A, appearance = MA, time, loop, easing, flags) @@ -33,9 +33,6 @@ /proc/_cos(X) return cos(X) -/proc/_filter(type, ...) - return filter(arglist(args.Copy())) - /proc/_get_dir(Loc1, Loc2) return get_dir(Loc1, Loc2) @@ -237,4 +234,3 @@ for(var/turf/T in v) . += T return pick(.) -t From a475355c9307dcb5f8ef205bbc3d289dcc6ddf6e Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Tue, 21 Apr 2020 15:28:12 +0200 Subject: [PATCH 56/82] Update humanform.dm --- code/modules/antagonists/changeling/powers/humanform.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm index a6f7b0b6e9..91119e1c06 100644 --- a/code/modules/antagonists/changeling/powers/humanform.dm +++ b/code/modules/antagonists/changeling/powers/humanform.dm @@ -27,7 +27,7 @@ changeling.purchasedpowers -= src - var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS) + var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) changeling_transform(newmob, chosen_prof) return TRUE From 824904844ce5ee354a7f81dc723599041f0962ec Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Tue, 21 Apr 2020 19:51:44 +0200 Subject: [PATCH 57/82] Componentized for sanity. --- code/datums/components/shielded.dm | 191 +++++++++++++++++ code/datums/elements/shielded.dm | 210 ------------------- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- code/modules/clothing/suits/wiz_robe.dm | 6 +- tgstation.dme | 2 +- 5 files changed, 196 insertions(+), 215 deletions(-) create mode 100644 code/datums/components/shielded.dm delete mode 100644 code/datums/elements/shielded.dm diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm new file mode 100644 index 0000000000..405e7fc064 --- /dev/null +++ b/code/datums/components/shielded.dm @@ -0,0 +1,191 @@ +/datum/component/shielded + dupe_mode = COMPONENT_DUPE_ALLOWED + can_transfer = TRUE + var/charges = 3 + var/max_charges = 3 + var/recharge_delay = 20 SECONDS //How long after we've been attacked before we can start recharging. + var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. set to zero to disable. + var/last_time_used //Last time the shield attempted to stop an attack. + var/accepted_slots + var/shield_state = "shield-old" //the state of the shield overlay. + var/broken_state //null by default. + var/recharge_sound = 'sound/magic/charge.ogg' + var/recharge_end_sound = 'sound/machines/ding.ogg' + var/mob/living/holder //who is currently benefiting from the shield. + var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging. + var/del_on_overload = FALSE //will delete itself once it has no charges left. + +/datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \ + sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE) + var/isitem = isitem(parent) + if(!isitem && !isliving(parent)) + return COMPONENT_INCOMPATIBLE + max_charges = max + charges = !isnull(current) ? current : max_charges + recharge_delay = delay + recharge_rate = rate + accepted_slots = slots + shield_state = state + broken_state = broken + recharge_sound = sound + recharge_end_sound = end_sound + dissipating = diss + del_on_overload = del_overload + if(dissipating && recharge_rate > 0) + recharge_rate = -recharge_rate + if(recharge_delay && recharge_rate && (charges < max_charges || dissipating)) + START_PROCESSING(SSdcs, src) + +/datum/component/shielded/RegisterWithParent() + . = ..() + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop) + else //it's a mob + var/mob/living/L = parent + RegisterSignal(L, COMSIG_LIVING_RUN_BLOCK, .proc/living_block) + holder = L + var/to_add = charges >= 1 ? shield_state : broken_state + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 + holder.add_overlay(M, TRUE) + +/datum/component/shielded/UnregisterFromParent() + . = ..() + if(parent != holder) //not a mob, thus an item. + UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) + if(holder) + UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS)) + var/to_remove = charges >= 1 ? shield_state : broken_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + holder = null + +/datum/component/shielded/process() + if(world.time < last_time_used && !dissipating) + return + var/old_charges = charges + charges = CLAMP(charges + recharge_rate, 0, max_charges) + if(round(old_charges) >= round(charges)) //only send outputs if it effectively gained at least one charge + return + var/sound = recharge_sound + if(dissipating ? !charges : charges == max_charges ) + STOP_PROCESSING(SSdcs, src) + sound = recharge_end_sound + if(parent && sound) + playsound(parent, sound, 50, 1) + if(charges < 1 && del_on_overload) + if(holder) + holder.visible_message("[holder]'s shield overloads!") + qdel(src) + return + if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + update_shield_overlay(charges < 1) + +/datum/component/shielded/proc/adjust_charges(amount) + var/old_charges = charges + charges = CLAMP(charges + amount, 0, max_charges) + if(recharge_delay && recharge_rate && (dissipating ? !charges : charges == max_charges)) + STOP_PROCESSING(SSdcs, src) + if(charges < 1 && del_on_overload) + if(holder) + holder.visible_message("[holder]'s shield overloads!") + qdel(src) + return + if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + update_shield_overlay(charges < 1) + +/datum/component/shielded/proc/update_shield_overlay(broken) + if(!holder) + return + var/to_remove = broken ? shield_state : broken_state + var/to_add = broken ? broken_state : shield_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + holder.add_overlay(M, TRUE) + +/datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot) + if(!(accepted_slots & slotdefine2slotbit(slot))) + return + holder = equipper + RegisterSignal(parent, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block) + RegisterSignal(parent, COMSIG_ITEM_CHECK_BLOCK, .proc/on_check_block) + RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield) + var/to_add = charges >= 1 ? shield_state : broken_state + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + equipper.add_overlay(M, TRUE) + +/datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper) + if(holder == dropper) + UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS) + UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK)) + var/to_remove = charges >= 1 ? shield_state : broken_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + holder = null + +/datum/component/shielded/proc/include_shield(mob/source, list/items) + items += parent + +/datum/component/shielded/proc/on_run_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] >= 100) //already blocked by another shielded item, don't do anything. + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges) + return BLOCK_NONE + last_time_used = world.time + recharge_delay + if(charges < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + owner.visible_message("[holder]'s shields deflect [attack_text] in a shower of sparks!") + charges-- + var/rounded_charges = round(charges) + if(recharge_delay && recharge_rate && !dissipating) + START_PROCESSING(SSdcs, src) + if(charges < 1) + owner.visible_message("[holder]'s shield overloads!") + if(del_on_overload) + qdel(src) + else + update_shield_overlay(TRUE) + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL + +/datum/component/shielded/proc/on_check_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(charges >= 1) + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges) + +/datum/component/shielded/proc/living_block(mob/living/source, real_attack, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list) + if(!real_attack) + if(charges >= 1) + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] = round(charges) + return + last_time_used = world.time + recharge_delay + if(charges < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + source.visible_message("[source]'s shields deflect [attack_text] in a shower of sparks!") + charges-- + var/rounded_charges = round(charges) + if(recharge_delay && recharge_rate && !dissipating) + START_PROCESSING(SSdcs, src) + if(charges < 1) + source.visible_message("[source]'s shield overloads!") + if(del_on_overload) + qdel(src) + else + update_shield_overlay(TRUE) + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL diff --git a/code/datums/elements/shielded.dm b/code/datums/elements/shielded.dm deleted file mode 100644 index b9c8c094f6..0000000000 --- a/code/datums/elements/shielded.dm +++ /dev/null @@ -1,210 +0,0 @@ -/datum/element/shielded - element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH - id_arg_index = 3 - var/max_charges = 3 - var/recharge_delay = 20 SECONDS //How long after we've been shot before we can start recharging. - var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. set to zero to disable. - var/accepted_slots - var/shield_state = "shield-old" //the state of the shield overlay. - var/broken_state //null - var/recharge_sound = 'sound/magic/charge.ogg' - var/recharge_end_sound = 'sound/machines/ding.ogg' - var/list/charges_per_atom = list() //How many charges each atom has. - var/list/last_use_per_atom = list() //Last time an atom has deflected (or failed due to no charges) an attack. - var/list/overlay_per_mob = list() //List of mutable overlays per atom. - var/list/shields_per_mob = list() //number of shields this guy is on, damn. - -/datum/element/shielded/Attach(datum/target, current, _max = 3, _delay = 20 SECONDS, _rate = 1, _slots, _state = "shield-old", _broken, _sound = 'sound/magic/charge.ogg', _end_sound = 'sound/machines/ding.ogg') - . = ..() - var/isitem = isitem(target) - if(. == ELEMENT_INCOMPATIBLE || (!isitem && !isliving(target))) - return ELEMENT_INCOMPATIBLE - max_charges = _max - recharge_delay = _delay - recharge_rate = _rate - accepted_slots = _slots - shield_state = _state - broken_state = _broken - recharge_sound = 'sound/magic/charge.ogg' - recharge_end_sound = 'sound/machines/ding.ogg' - if(isitem) - RegisterSignal(target, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block) - RegisterSignal(target, COMSIG_ITEM_CHECK_BLOCK, .proc/on_check_block) - RegisterSignal(target, COMSIG_ITEM_EQUIPPED, .proc/on_equip) - RegisterSignal(target, COMSIG_ITEM_DROPPED, .proc/on_drop) - else - RegisterSignal(target, COMSIG_LIVING_RUN_BLOCK, .proc/living_block) - var/prior_shields = shields_per_mob[target] - if(prior_shields) - if(!islist(prior_shields)) - shields_per_mob[target] = list(prior_shields, target) - else - prior_shields += target - else - var/mob/living/L = target - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) - overlay_per_mob[L] = M - L.add_overlay(M, TRUE) - shields_per_mob[L] = L - charges_per_atom[target] = !isnull(current) ? current : max_charges - last_use_per_atom[target] = 0 - if(recharge_delay) - START_PROCESSING(SSdcs, src) - -/datum/element/shielded/Detach(atom/target) - var/mob/living/L - if(isitem(target)) - UnregisterSignal(target, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) - L = isliving(target.loc) ? target.loc : null - else - UnregisterSignal(target, COMSIG_LIVING_RUN_BLOCK) - L = src - if(L) - var/list/shields = shields_per_mob[L] - if(!shields) - return ..() - if(shields == target) //nothing left. - shields_per_mob -= L - var/mutable_appearance/M = overlay_per_mob[L] - L.cut_overlay(M, TRUE) - overlay_per_mob -= L - UnregisterSignal(target, COMSIG_LIVING_GET_BLOCKING_ITEMS) - else //more layers of shielding. - shields -= target - if(length(shields) == 1) - shields_per_mob[L] = shields[1] - charges_per_atom -= target - last_use_per_atom -= target - if(recharge_delay && !length(charges_per_atom)) //nothing left to process. - STOP_PROCESSING(SSdcs, src) - return ..() - -/datum/element/shielded/process() - var/list/checked = list() - for(var/i in last_use_per_atom) - var/atom/movable/A = i - recharge(A, recharge_rate, checked) - -/datum/element/shielded/proc/recharge(atom/movable/A, amount, list/checked = list(), forced = FALSE) - var/old_charges = charges_per_atom[A] - if(old_charges >= max_charges || (!forced && world.time < last_use_per_atom[A])) - return - var/new_charges = CLAMP(old_charges + recharge_rate, 0, max_charges) - charges_per_atom[A] = new_charges - if(round(old_charges) >= round(new_charges)) //only send outputs if it effectively gained at least one charge - return - var/mob/living/L - var/skip_in = FALSE - if(isitem(A)) - L = isliving(A.loc) ? A.loc : null - else - L = A - skip_in = TRUE - if(L && checked[L]) - return - playsound(A, recharge_sound, 50, 1) - if(new_charges == max_charges) - playsound(A, recharge_sound, 50, 1) - if(L && (skip_in || (A in shields_per_mob[L]))) - var/mutable_appearance/M = overlay_per_mob[L] - M.icon_state = shield_state - checked[L] = TRUE - -/datum/element/shielded/proc/on_equip(obj/item/source, mob/equipper, slot) - if(!(accepted_slots & slotdefine2slotbit(slot))) - return - var/list/shields = shields_per_mob[equipper] - if(!shields) //They have none - RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/get_shields) - shields_per_mob[equipper] = source - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', charges_per_atom[source] ? shield_state : broken_state, MOB_LAYER + 0.01) - overlay_per_mob[equipper] = M - equipper.add_overlay(M, TRUE) - else if(!islist(shields)) //They have one - if(shields == equipper) - RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/get_shields) - shields_per_mob[equipper] = list(shields, source) - else //They have more. - shields += source - -/datum/element/shielded/proc/on_drop(obj/item/source, mob/dropper) - var/list/shields = shields_per_mob[dropper] - if(!shields) - return - if(shields == source) - UnregisterSignal(dropper, COMSIG_LIVING_GET_BLOCKING_ITEMS) - var/mutable_appearance/M = overlay_per_mob[dropper] - dropper.cut_overlay(M, TRUE) - overlay_per_mob -= dropper - shields_per_mob -= dropper - else - shields -= source - if(length(shields) == 1) - shields_per_mob[dropper] = shields[1] - -/datum/element/shielded/proc/get_shields(mob/source, list/items) - items += shields_per_mob[source] - -/datum/element/shielded/proc/on_run_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] >= 100) //already blocked by another shielded item, don't do anything. - block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges_per_atom[source]) - return BLOCK_NONE - last_use_per_atom[source] = world.time + recharge_delay - if(charges_per_atom[source] < 1) - return BLOCK_NONE - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, source) - s.start() - owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") - var/charges_left = --charges_per_atom[source] - if(charges_left < 1) - var/list/shields = shields_per_mob[owner] - var/vis_change = TRUE - if(istype(shields)) - for(var/A in shields) - if(charges_per_atom >= 1) - vis_change = FALSE - break - owner.visible_message("[owner]'s shield overloads!") - if(vis_change) - var/mutable_appearance/M = overlay_per_mob[owner] - M.icon_state = broken_state - block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - block_return[BLOCK_RETURN_BLOCK_CAPACITY] += charges_left - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL //it's an energy field surrounding you after all. - -/datum/element/shielded/proc/on_check_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(charges_per_atom[source] < 1) - return - block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges_per_atom[source]) - -/datum/element/shielded/proc/living_block(mob/living/source, real_attack, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list) - if(!real_attack) - if(charges_per_atom[source] >= 1) - return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - return_list[BLOCK_RETURN_BLOCK_CAPACITY] = round(charges_per_atom[source]) - return - last_use_per_atom[source] = world.time + recharge_delay - if(charges_per_atom[source] < 1) - return BLOCK_NONE - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, source) - s.start() - source.visible_message("[source]'s shields deflect [attack_text] in a shower of sparks!") - var/charges_left = --charges_per_atom[source] - if(charges_left < 1) - var/list/shields = shields_per_mob[source] - var/vis_change = TRUE - if(istype(shields)) - for(var/A in shields) - if(charges_per_atom >= 1) - vis_change = FALSE - break - source.visible_message("[source]'s shield overloads!") - if(vis_change) - var/mutable_appearance/M = overlay_per_mob[source] - M.icon_state = broken_state - return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - return_list[BLOCK_RETURN_BLOCK_CAPACITY] += charges_left - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 1b2d24e36a..2fe3f3cbf6 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -761,7 +761,7 @@ /obj/item/clothing/suit/space/hardsuit/shielded/ComponentInitialize() . = ..() - AddElement(/datum/element/shielded, current_charges, max_charges, recharge_delay, recharge_rate, ITEM_SLOT_OCLOTHING, shield_state) + AddComponent(/datum/component/shielded, current_charges, max_charges, recharge_delay, recharge_rate, ITEM_SLOT_OCLOTHING, shield_state) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 6c61cf1255..dabbaabb80 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -238,7 +238,7 @@ if(!istype(W)) to_chat(user, "The rune can only be used on battlemage armour!") return - var/datum/element/shielded/S = SSdcs.GetElement(list(/datum/element/shielded, 0, W.max_charges, W.recharge_delay, W.recharge_rate, ITEM_SLOT_OCLOTHING, W.shield_state)) - S.recharge(W, 8, forced = TRUE) - to_chat(user, "You charge \the [W]. It can now absorb [S.charges_per_atom[W]] hits.") + var/datum/component/shielded/S = GetComponent(/datum/component/shielded) + S.adjust_charges(8) + to_chat(user, "You charge \the [W]. It can now absorb [S.charges] hits.") qdel(src) diff --git a/tgstation.dme b/tgstation.dme index 593586e98e..bc9a846110 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -408,6 +408,7 @@ #include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" +#include "code\datums\components\shielded.dm" #include "code\datums\components\shrapnel.dm" #include "code\datums\components\shrink.dm" #include "code\datums\components\sizzle.dm" @@ -514,7 +515,6 @@ #include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\elements\mob_holder.dm" #include "code\datums\elements\polychromic.dm" -#include "code\datums\elements\shielded.dm" #include "code\datums\elements\spellcasting.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\sword_point.dm" From 21c304c5adc0e13e5be157e5b760684d5b6488f9 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Tue, 21 Apr 2020 22:10:19 +0300 Subject: [PATCH 58/82] Fixes cosmetic tactifool sprite not using digi Also adds " to the armor values --- code/modules/clothing/under/syndicate.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 4fc62893b5..fb79c7a8a7 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -57,8 +57,8 @@ icon_state = "tactifool" item_state = "bl_suit" has_sensor = TRUE - mutantrace_variation = NONE - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + mutantrace_variation = STYLE_DIGITIGRADE + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" From e6159b1a82a7affdcf9e34ea39708a09005c1e1c Mon Sep 17 00:00:00 2001 From: Anonymous Date: Tue, 21 Apr 2020 22:24:38 +0300 Subject: [PATCH 59/82] Actually, this is better. --- code/modules/clothing/under/syndicate.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index fb79c7a8a7..3f61c4b45f 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -57,7 +57,6 @@ icon_state = "tactifool" item_state = "bl_suit" has_sensor = TRUE - mutantrace_variation = STYLE_DIGITIGRADE armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/syndicate/sniper From a9600cffaa0ffe90462c3997704e586b1908742b Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 21 Apr 2020 13:01:50 -0700 Subject: [PATCH 60/82] Replaces a xor with a power?? --- 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 f91dc43990..3ed1ad0e5a 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -452,7 +452,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if ((100-get_integrity()) < 75) power = (power_calc * ((100 - (0.15*(100-get_integrity()) - 5)**2) / 100)) + power_calc*0.1 else - power = power_calc * (((100-get_integrity())^((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear + power = power_calc * (((100-get_integrity())**((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear //power = power_calc * ((((100-get_integrity())**1.3)-(2*(100-get_integrity())))/100) if(power > POWER_PENALTY_THRESHOLD || damage > damage_penalty_point) From 4fc041d4f4b4ff2f236305225cbcba896cf31551 Mon Sep 17 00:00:00 2001 From: MrJWhit <48370570+MrJWhit@users.noreply.github.com> Date: Tue, 21 Apr 2020 19:43:38 -0400 Subject: [PATCH 61/82] teg hot no hot aaaaaaah --- _maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm index 37bc2a7dde..ba438eccb9 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm @@ -1170,7 +1170,8 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ dir = 1 }, -/turf/open/floor/plating/airless, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, /area/engine/engineering) "Hp" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -1332,7 +1333,8 @@ /area/engine/engineering) "LS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/floor/plating/airless, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, /area/engine/engineering) "Mf" = ( /obj/structure/closet/secure_closet/engineering_personal, From 39199a3a79ed285d3d502722846cff64c579f54c Mon Sep 17 00:00:00 2001 From: Seris02 Date: Wed, 22 Apr 2020 12:31:55 +0800 Subject: [PATCH 62/82] there --- code/modules/client/preferences.dm | 2 ++ modular_citadel/code/modules/client/preferences.dm | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c452b9db60..db72daff88 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -211,6 +211,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/show_mismatched_markings = FALSE //determines whether or not the markings lists should show markings that don't match the currently selected species. Intentionally left unsaved. + var/no_tetris_storage = FALSE + /datum/preferences/New(client/C) parent = C diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 6658d96cc3..8c55f2d9a8 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -16,7 +16,6 @@ var/widescreenpref = TRUE var/autostand = TRUE var/auto_ooc = FALSE - var/no_tetris_storage = FALSE //vore prefs var/toggleeatingnoise = TRUE From 0c15c09e489bc322567680f2bf71c5b336404ffc Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Wed, 22 Apr 2020 16:30:30 +0200 Subject: [PATCH 63/82] Update _box_magazine.dm --- .../projectiles/boxes_magazines/_box_magazine.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 4f37cf3ba9..594734c86a 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -112,11 +112,7 @@ update_icon() /obj/item/ammo_box/update_icon() - switch(multiple_sprites) - if(1) - icon_state = "[initial(icon_state)]-[stored_ammo.len]" - if(2) - icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" + . = ..() desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" for (var/material in bullet_cost) var/material_amount = bullet_cost[material] @@ -124,6 +120,13 @@ custom_materials[material] = material_amount set_custom_materials(custom_materials)//make sure we setup the correct properties again +/obj/item/ammo_box/update_icon_state() + switch(multiple_sprites) + if(1) + icon_state = "[initial(icon_state)]-[stored_ammo.len]" + if(2) + icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" + //Behavior for magazines /obj/item/ammo_box/magazine/proc/ammo_count() return stored_ammo.len From 3e09ee8328b6950586c7f7fc4b1f71fc61552a2d Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 10:42:11 -0700 Subject: [PATCH 64/82] Alright --- code/game/objects/items/shields.dm | 35 +++++++++--- code/modules/assembly/flash.dm | 7 +++ code/modules/surgery/organs/augments_arms.dm | 56 ++++++++++---------- 3 files changed, 64 insertions(+), 34 deletions(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 16f29491be..3bc8362255 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -357,20 +357,41 @@ obj/item/shield/riot/bullet_proof block_chance = 50 /obj/item/shield/riot/implant - name = "riot tower shield" - desc = "A massive shield that can block a lot of attacks and can take a lot of abuse before breaking." //It cant break unless it is removed from the implant + name = "telescoping shield implant" + desc = "A compact, arm-mounted telescopic shield. While nigh-indestructible when powered by a host user, it will eventually overload from damage. Recharges while inside its implant." item_state = "metal" icon_state = "metal" - block_chance = 30 //May be big but hard to move around to block. + block_chance = 50 slowdown = 1 shield_flags = SHIELD_FLAGS_DEFAULT item_flags = SLOWS_WHILE_IN_HAND + var/recharge_timerid + var/recharge_delay = 15 SECONDS -/obj/item/shield/riot/implant/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(attack_type & ATTACK_TYPE_PROJECTILE) - final_block_chance = 60 //Massive shield - return ..() +/// Entirely overriden take_damage. +/obj/item/shield/riot/implant/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) + obj_integrity -= damage_amount + if(obj_integrity < 0) + obj_integrity = 0 + if(obj_integrity == 0) + if(ismob(loc)) + var/mob/living/L = loc + L.visible_message("[src] overloads from the damage sustained!") + L.dropItemToGround(src) //implant component catch hook will grab it. +/obj/item/shield/riot/implant/Moved() + . = ..() + if(istype(loc, /obj/item/organ/cyberimp/arm/shield)) + recharge_timerid = addtimer(CALLBACK(src, .proc/recharge), recharge_delay, flags = TIMER_STOPPABLE) + else //extending + if(recharge_timerid) + deltimer(recharge_timerid) + recharge_timerid = null + +/obj/item/shield/riot/implant/proc/recharge() + obj_integrity = max_integrity + if(ismob(loc.loc)) //cyberimplant.user + to_chat(loc, "[src] has recharged its reinforcement matrix and is ready for use!") /obj/item/shield/energy name = "energy combat shield" diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 0fbc5cf71c..8a0645f311 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -229,6 +229,7 @@ var/flashcd = 20 var/overheat = 0 var/obj/item/organ/cyberimp/arm/flash/I = null + var/active_light_strength = 7 /obj/item/assembly/flash/armimplant/burn_out() if(I && I.owner) @@ -248,6 +249,12 @@ update_icon(1) return TRUE +/obj/item/assembly/flash/armimplant/Moved(oldLoc, dir) + . = ..() + if(!ismob(loc)) + set_light(0) + else + set_light(7) /obj/item/assembly/flash/armimplant/proc/cooldown() overheat = FALSE diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index daf3324980..139061a601 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -20,7 +20,27 @@ update_icon() SetSlotFromZone() - items_list = contents.Copy() + for(var/obj/item/I in contents) + add_item(I) + +/obj/item/organ/cyberimp/arm/proc/add_item(obj/item/I) + if(I in items_list) + return + I.forceMove(src) + items_list += I + // ayy only dropped signal for performance, we can't possibly have shitcode that doesn't call it when removing items from a mob, right? + // .. right??! + RegisterSignal(I, COMSIG_ITEM_DROPPED, .proc/magnetic_catch) + +/obj/item/organ/cyberimp/arm/proc/magnetic_catch(datum/source, mob/user) + var/obj/item/I = source //if someone is misusing the signal, just runtime + if(I in items_list) + if(I in contents) //already in us somehow? i probably shouldn't catch this so it's easier to spot bugs but eh.. + return + I.visible_message("[I] snaps back into [src]!") + I.forceMove(contents) + if(I == holder) + holder = null /obj/item/organ/cyberimp/arm/proc/SetSlotFromZone() switch(zone) @@ -62,7 +82,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - if(prob(15/severity) && owner) + if(owner) to_chat(owner, "[src] is hit by EMP!") // give the owner an idea about why his implant is glitching Retract() @@ -75,29 +95,20 @@ "[holder] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(0) - owner.transferItemToLoc(holder, src, TRUE) holder = null playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) -/obj/item/organ/cyberimp/arm/proc/Extend(var/obj/item/item) +/obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item) if(!(item in src)) return holder = item - ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.set_custom_materials(null) - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(7) - var/obj/item/arm_item = owner.get_active_held_item() if(arm_item) @@ -223,21 +234,6 @@ icon_state = "arm_taser" contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) -/obj/item/organ/cyberimp/arm/gun/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(30/severity) && owner && !(organ_flags & ORGAN_FAILING)) - Retract() - owner.visible_message("A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm!") - playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) - to_chat(owner, "You feel an explosion erupt inside your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as your implant breaks!") - owner.adjust_fire_stacks(20) - owner.IgniteMob() - owner.adjustFireLoss(25) - crit_fail = 1 - organ_flags |= ORGAN_FAILING - /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." @@ -275,6 +271,12 @@ desc = "A deployable riot shield to help deal with civil unrest." contents = newlist(/obj/item/shield/riot/implant) +/obj/item/organ/cyberimp/arm/shield/Extend(obj/item/I) + if(item.obj_integrity == 0) //that's how the shield recharge works + to_chat(owner, "[I] is still too unstable to extend. Give it some time!") + return FALSE + return ..() + /obj/item/organ/cyberimp/arm/shield/emag_act() . = ..() if(obj_flags & EMAGGED) From 467497af54a64205d7b2d9d1be8b8eec41cd435a Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 10:45:13 -0700 Subject: [PATCH 65/82] woops --- code/game/objects/items/shields.dm | 2 ++ code/modules/surgery/organs/augments_arms.dm | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 3bc8362255..3b6995f93e 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -389,6 +389,8 @@ obj/item/shield/riot/bullet_proof recharge_timerid = null /obj/item/shield/riot/implant/proc/recharge() + if(obj_integrity == max_integrity) + return obj_integrity = max_integrity if(ismob(loc.loc)) //cyberimplant.user to_chat(loc, "[src] has recharged its reinforcement matrix and is ready for use!") diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 139061a601..bdd7da9d5a 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -272,7 +272,7 @@ contents = newlist(/obj/item/shield/riot/implant) /obj/item/organ/cyberimp/arm/shield/Extend(obj/item/I) - if(item.obj_integrity == 0) //that's how the shield recharge works + if(I.obj_integrity == 0) //that's how the shield recharge works to_chat(owner, "[I] is still too unstable to extend. Give it some time!") return FALSE return ..() From 3626cc5d282fba8742fa7dd1fa3875ab1a90db5f Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 10:50:03 -0700 Subject: [PATCH 66/82] okay --- code/game/objects/items/shields.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 3b6995f93e..0da18f0d7c 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -364,11 +364,13 @@ obj/item/shield/riot/bullet_proof block_chance = 50 slowdown = 1 shield_flags = SHIELD_FLAGS_DEFAULT + max_integrity = 60 + obj_integrity = 60 item_flags = SLOWS_WHILE_IN_HAND var/recharge_timerid var/recharge_delay = 15 SECONDS -/// Entirely overriden take_damage. +/// Entirely overriden take_damage. This shouldn't exist outside of an implant (other than maybe christmas). /obj/item/shield/riot/implant/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) obj_integrity -= damage_amount if(obj_integrity < 0) @@ -376,6 +378,7 @@ obj/item/shield/riot/bullet_proof if(obj_integrity == 0) if(ismob(loc)) var/mob/living/L = loc + playsound(src, 'sound/effects/glassbr3.ogg', 100) L.visible_message("[src] overloads from the damage sustained!") L.dropItemToGround(src) //implant component catch hook will grab it. From c551006295ad162a3d86367ede238faccb972fc9 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 10:54:42 -0700 Subject: [PATCH 67/82] catch dropped --- code/__DEFINES/dcs/signals.dm | 2 ++ code/__DEFINES/misc/return_values.dm | 3 +++ code/game/objects/items.dm | 3 ++- code/modules/mob/inventory.dm | 3 ++- code/modules/surgery/organs/augments_arms.dm | 1 + tgstation.dme | 1 + 6 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 code/__DEFINES/misc/return_values.dm diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index b32625a539..9d7c33f8a7 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -241,6 +241,8 @@ #define COMSIG_ITEM_ALT_AFTERATTACK "item_alt_afterattack" //from base of obj/item/altafterattack(): (atom/target, mob/user, proximity, params) #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) #define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) + // relocated, tell inventory procs if those called this that the item isn't available anymore. + #define COMPONENT_DROPPED_RELOCATION 1 #define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) diff --git a/code/__DEFINES/misc/return_values.dm b/code/__DEFINES/misc/return_values.dm new file mode 100644 index 0000000000..d55f603de9 --- /dev/null +++ b/code/__DEFINES/misc/return_values.dm @@ -0,0 +1,3 @@ +// obj/item/dropped +/// dropped() relocated this item, return FALSE for doUnEquip. +#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5c80b81ba5..9455a610c5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -392,7 +392,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(item_flags & DROPDEL) qdel(src) item_flags &= ~IN_INVENTORY - SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) + if(SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) & COMPONENT_DROPPED_RELOCATION) + return ITEM_RELOCATED_BY_DROPPED user.update_equipment_speed_mods() // called just as an item is picked up (loc is not yet changed) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 9f7d2067de..fad3a7e534 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -333,7 +333,8 @@ I.moveToNullspace() else I.forceMove(newloc) - I.dropped(src) + if(I.dropped(src) == ITEM_RELOCATED_BY_DROPPED) + return FALSE return TRUE //Outdated but still in use apparently. This should at least be a human proc. diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index bdd7da9d5a..cc3928e6ac 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -33,6 +33,7 @@ RegisterSignal(I, COMSIG_ITEM_DROPPED, .proc/magnetic_catch) /obj/item/organ/cyberimp/arm/proc/magnetic_catch(datum/source, mob/user) + . = COMPONENT_DROPPED_RELOCATION var/obj/item/I = source //if someone is misusing the signal, just runtime if(I in items_list) if(I in contents) //already in us somehow? i probably shouldn't catch this so it's easier to spot bugs but eh.. diff --git a/tgstation.dme b/tgstation.dme index 41708bc0bd..1ec3728280 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -124,6 +124,7 @@ #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\flags\shields.dm" +#include "code\__DEFINES\misc\return_values.dm" #include "code\__HELPERS\_cit_helpers.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" From eafdae5e66be03323cc1995b777250f6b4857549 Mon Sep 17 00:00:00 2001 From: MrJWhit <48370570+MrJWhit@users.noreply.github.com> Date: Wed, 22 Apr 2020 14:01:11 -0400 Subject: [PATCH 68/82] Swaps out some catwalks for latices to make travis happy --- .../StationRuins/Box/Engine/engine_teg.dmm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm index ba438eccb9..a9c5eab318 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm @@ -103,10 +103,6 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/engine/engineering) -"dw" = ( -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/space/nearstation) "dZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -2631,7 +2627,7 @@ EN fq LS Hn -dw +tw yf Rh yf @@ -2657,9 +2653,9 @@ XW ST Ok MP -dw -dw -dw +tw +tw +tw Rh Rh Rh From fe63eca8176fd0194b5cf91468db2d4c9817f9de Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 11:04:01 -0700 Subject: [PATCH 69/82] kay --- code/game/objects/items/shields.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 0da18f0d7c..151e31658c 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -165,6 +165,7 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time var/repair_material = /obj/item/stack/sheet/mineral/titanium + var/can_shatter = TRUE shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_TRANSPARENT max_integrity = 75 @@ -214,7 +215,7 @@ new /obj/item/shard((get_turf(src))) /obj/item/shield/riot/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(obj_integrity <= damage) + if(can_shatter && (obj_integrity <= damage)) var/turf/T = get_turf(owner) T.visible_message("[attack_text] destroys [src]!") shatter(owner) @@ -366,6 +367,7 @@ obj/item/shield/riot/bullet_proof shield_flags = SHIELD_FLAGS_DEFAULT max_integrity = 60 obj_integrity = 60 + can_shatter = FALSE item_flags = SLOWS_WHILE_IN_HAND var/recharge_timerid var/recharge_delay = 15 SECONDS From e4e2c0195c0403c455545eee41fc68f485f85989 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 12:04:47 -0700 Subject: [PATCH 70/82] epic --- code/modules/surgery/organs/augments_arms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index cc3928e6ac..e01059204c 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -39,7 +39,7 @@ if(I in contents) //already in us somehow? i probably shouldn't catch this so it's easier to spot bugs but eh.. return I.visible_message("[I] snaps back into [src]!") - I.forceMove(contents) + I.forceMove(src) if(I == holder) holder = null From 2126ca1674539c85f4204b987e6bbb7f1d9bd787 Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Wed, 22 Apr 2020 15:41:22 -0500 Subject: [PATCH 71/82] dot on casing name gone --- .../modules/projectiles/ammunition/ballistic/pistol.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 58a5bfb497..461166ab0d 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -1,28 +1,28 @@ // 10mm (Stechkin) /obj/item/ammo_casing/c10mm - name = ".10mm bullet casing" + name = "10mm bullet casing" desc = "A 10mm bullet casing." caliber = "10mm" projectile_type = /obj/item/projectile/bullet/c10mm /obj/item/ammo_casing/c10mm/ap - name = ".10mm armor-piercing bullet casing" + name = "10mm armor-piercing bullet casing" desc = "A 10mm armor-piercing bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm_ap /obj/item/ammo_casing/c10mm/hp - name = ".10mm hollow-point bullet casing" + name = "10mm hollow-point bullet casing" desc = "A 10mm hollow-point bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm_hp /obj/item/ammo_casing/c10mm/fire - name = ".10mm incendiary bullet casing" + name = "10mm incendiary bullet casing" desc = "A 10mm incendiary bullet casing." projectile_type = /obj/item/projectile/bullet/incendiary/c10mm /obj/item/ammo_casing/c10mm/soporific - name = ".10mm soporific bullet casing" + name = "10mm soporific bullet casing" desc = "A 10mm soporific bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm/soporific From 511465ed7bb489a3573b86106b03f35fb778ba23 Mon Sep 17 00:00:00 2001 From: Trilbyspaceclone <30435998+Trilbyspaceclone@users.noreply.github.com> Date: Wed, 22 Apr 2020 18:13:09 -0400 Subject: [PATCH 72/82] Update shields.dm --- code/game/objects/items/shields.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 16f29491be..bd357c016d 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -325,7 +325,6 @@ obj/item/shield/riot/bullet_proof armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80) lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - icon = 'icons/obj/items_and_weapons.dmi' item_state = "metal" icon_state = "makeshift_shield" custom_materials = list(/datum/material/iron = 18000) @@ -341,7 +340,6 @@ obj/item/shield/riot/bullet_proof armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user item_state = "metal" icon_state = "metal" - icon = 'icons/obj/items_and_weapons.dmi' block_chance = 75 //1/4 shots will hit* force = 16 slowdown = 2 From 42201343a9faacd0d83e523b629a9b5c5e0fc53e Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 23 Apr 2020 00:59:23 +0200 Subject: [PATCH 73/82] Backward 512 compatibility removal. --- code/__DEFINES/__513_compatibility.dm | 32 ------------------- code/__DEFINES/maths.dm | 12 ++++--- code/__HELPERS/icon_smoothing.dm | 2 +- code/__HELPERS/mouse_control.dm | 2 +- code/__HELPERS/radio.dm | 4 +-- code/__HELPERS/sanitize_values.dm | 2 +- code/__HELPERS/unsorted.dm | 10 +++--- code/_compile_options.dm | 27 +++------------- code/_onclick/hud/picture_in_picture.dm | 4 +-- code/_onclick/item_attack.dm | 4 +-- code/_onclick/observer.dm | 2 +- .../controllers/configuration/config_entry.dm | 2 +- code/controllers/subsystem/profiler.dm | 14 +------- code/datums/components/bouncy.dm | 2 +- code/datums/components/butchering.dm | 4 +-- code/datums/components/edit_complainer.dm | 2 +- code/datums/components/explodable.dm | 2 +- code/datums/components/fantasy/prefixes.dm | 2 +- code/datums/components/infective.dm | 2 +- code/datums/components/knockback.dm | 2 +- code/datums/components/magnetic_catch.dm | 2 +- code/datums/components/mirage_border.dm | 4 +-- code/datums/components/nanites.dm | 10 +++--- code/datums/components/orbiter.dm | 8 ++--- code/datums/components/riding.dm | 2 +- code/datums/components/rotation.dm | 2 +- code/datums/components/shielded.dm | 4 +-- code/datums/components/squeak.dm | 2 +- code/datums/components/stationloving.dm | 2 +- code/datums/components/storage/ui.dm | 6 ++-- code/datums/components/wet_floor.dm | 2 +- code/datums/dash_weapon.dm | 2 +- code/datums/diseases/advance/advance.dm | 6 ++-- code/datums/elements/cleaning.dm | 2 +- code/datums/elements/firestacker.dm | 2 +- code/datums/explosion.dm | 6 ++-- code/datums/martial/krav_maga.dm | 6 ++-- code/datums/materials/basemats.dm | 2 +- code/datums/position_point_vector.dm | 2 +- code/datums/progressbar.dm | 2 +- code/datums/status_effects/debuffs.dm | 4 +-- code/game/atoms.dm | 4 +-- .../game/gamemodes/bloodsucker/bloodsucker.dm | 4 +-- .../dynamic/dynamic_rulesets_midround.dm | 4 +-- .../dynamic/dynamic_rulesets_roundstart.dm | 2 +- .../gamemodes/dynamic/dynamic_storytellers.dm | 26 +++++++-------- code/game/gamemodes/meteor/meteor.dm | 2 +- code/game/gamemodes/revolution/revolution.dm | 2 +- code/game/machinery/autolathe.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/apc_control.dm | 4 +-- .../machinery/computer/arcade/minesweeper.dm | 6 ++-- code/game/machinery/computer/atmos_control.dm | 4 +-- code/game/machinery/computer/dna_console.dm | 14 ++++---- .../computer/prisoner/gulag_teleporter.dm | 2 +- code/game/machinery/deployable.dm | 2 +- code/game/machinery/doors/brigdoors.dm | 2 +- code/game/machinery/launch_pad.dm | 4 +-- code/game/machinery/pipe/pipe_dispenser.dm | 4 +-- code/game/machinery/shieldgen.dm | 2 +- code/game/machinery/spaceheater.dm | 4 +-- code/game/machinery/syndicatebomb.dm | 2 +- code/game/machinery/teleporter.dm | 2 +- code/game/machinery/toylathe.dm | 4 +-- code/game/mecha/equipment/weapons/weapons.dm | 2 +- code/game/objects/effects/alien_acid.dm | 2 +- code/game/objects/effects/step_triggers.dm | 2 +- code/game/objects/items/chrono_eraser.dm | 2 +- .../circuitboards/machine_circuitboards.dm | 2 +- code/game/objects/items/crayons.dm | 4 +-- .../objects/items/devices/desynchronizer.dm | 2 +- code/game/objects/items/devices/gps.dm | 2 +- .../objects/items/devices/lightreplacer.dm | 2 +- .../items/devices/radio/electropack.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- code/game/objects/items/dice.dm | 2 +- code/game/objects/items/grenades/plastic.dm | 2 +- code/game/objects/items/his_grace.dm | 4 +-- code/game/objects/items/hot_potato.dm | 2 +- code/game/objects/items/pneumaticCannon.dm | 4 +-- code/game/objects/items/robot/robot_items.dm | 4 +-- code/game/objects/items/sharpener.dm | 6 ++-- code/game/objects/items/shields.dm | 2 +- code/game/objects/items/singularityhammer.dm | 2 +- code/game/objects/items/stacks/stack.dm | 4 +-- code/game/objects/items/tanks/tanks.dm | 2 +- code/game/objects/items/theft_tools.dm | 2 +- code/game/objects/obj_defense.dm | 6 ++-- .../structures/crates_lockers/closets.dm | 2 +- code/game/objects/structures/fireplace.dm | 2 +- code/game/objects/structures/girders.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/morgue.dm | 4 +-- code/game/objects/structures/tables_racks.dm | 8 ++--- code/game/turfs/change_turf.dm | 4 +-- code/game/turfs/turf.dm | 2 +- code/game/world.dm | 2 -- code/modules/admin/sound_emitter.dm | 4 +-- code/modules/admin/sql_message_system.dm | 2 +- code/modules/admin/topic.dm | 2 +- code/modules/admin/verbs/borgpanel.dm | 2 +- code/modules/admin/verbs/playsound.dm | 2 +- .../antagonists/blob/blob/blobs/blob_mobs.dm | 2 +- .../modules/antagonists/blob/blob/overmind.dm | 2 +- code/modules/antagonists/blob/blob/theblob.dm | 2 +- .../bloodsucker/bloodsucker_life.dm | 16 +++++----- .../bloodsucker/bloodsucker_objectives.dm | 4 +-- .../bloodsucker/objects/bloodsucker_lair.dm | 2 +- .../clock_helpers/fabrication_helpers.dm | 2 +- .../clockcult/clock_helpers/power_helpers.dm | 2 +- .../clockcult/clock_helpers/slab_abilities.dm | 2 +- .../clock_weapons/ratvarian_spear.dm | 2 +- .../scripture_applications.dm | 2 +- .../clockcult/clock_structures/mania_motor.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 8 ++--- code/modules/antagonists/cult/cult_items.dm | 2 +- .../nukeop/equipment/nuclearbomb.dm | 2 +- .../atmospherics/gasmixtures/reactions.dm | 2 +- .../components/binary_devices/dp_vent_pump.dm | 6 ++-- .../components/binary_devices/passive_gate.dm | 4 +-- .../components/binary_devices/pump.dm | 4 +-- .../components/binary_devices/relief_valve.dm | 4 +-- .../components/binary_devices/volume_pump.dm | 4 +-- .../components/trinary_devices/filter.dm | 2 +- .../components/trinary_devices/mixer.dm | 2 +- .../unary_devices/outlet_injector.dm | 4 +-- .../components/unary_devices/relief_valve.dm | 4 +-- .../components/unary_devices/thermomachine.dm | 2 +- .../components/unary_devices/vent_pump.dm | 8 ++--- .../machinery/pipes/layermanifold.dm | 4 +-- .../machinery/portable/canister.dm | 4 +-- .../atmospherics/machinery/portable/pump.dm | 2 +- code/modules/buildmode/effects/line.dm | 2 +- code/modules/buildmode/submodes/copy.dm | 2 +- code/modules/client/client_procs.dm | 4 +-- code/modules/client/preferences.dm | 4 +-- code/modules/events/wormholes.dm | 2 +- code/modules/food_and_drinks/food.dm | 2 +- .../kitchen_machinery/food_cart.dm | 2 +- code/modules/food_and_drinks/pizzabox.dm | 2 +- code/modules/goonchat/browserOutput.dm | 2 +- code/modules/hydroponics/biogenerator.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 4 +-- code/modules/hydroponics/hydroponics.dm | 12 +++---- code/modules/hydroponics/seeds.dm | 28 ++++++++-------- code/modules/instruments/songs/_song.dm | 10 +++--- code/modules/instruments/songs/editor.dm | 2 +- .../instruments/songs/play_synthesized.dm | 4 +-- .../core/special_pins/index_pin.dm | 2 +- .../subtypes/atmospherics.dm | 2 +- .../subtypes/data_transfer.dm | 2 +- .../integrated_electronics/subtypes/input.dm | 8 ++--- .../subtypes/manipulation.dm | 12 +++---- .../integrated_electronics/subtypes/output.dm | 4 +-- .../subtypes/reagents.dm | 6 ++-- .../integrated_electronics/subtypes/smart.dm | 4 +-- .../integrated_electronics/subtypes/time.dm | 4 +-- .../integrated_electronics/subtypes/trig.dm | 2 +- .../subtypes/weaponized.dm | 14 ++++---- code/modules/language/language_holder.dm | 4 +-- code/modules/library/lib_machines.dm | 2 +- code/modules/lighting/lighting_atom.dm | 2 +- code/modules/mapping/reader.dm | 8 ++--- .../mining/lavaland/necropolis_chests.dm | 6 ++-- code/modules/mining/machine_silo.dm | 2 +- code/modules/mining/mint.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/living/brain/brain_item.dm | 2 +- .../mob/living/carbon/alien/status_procs.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../carbon/human/species_types/dwarves.dm | 2 +- .../carbon/human/species_types/golems.dm | 2 +- .../carbon/human/species_types/jellypeople.dm | 2 +- .../carbon/human/species_types/vampire.dm | 4 +-- code/modules/mob/living/carbon/life.dm | 2 +- .../modules/mob/living/carbon/status_procs.dm | 4 +-- code/modules/mob/living/damage_procs.dm | 12 +++---- code/modules/mob/living/living.dm | 6 ++-- code/modules/mob/living/living_block.dm | 4 +-- code/modules/mob/living/living_defense.dm | 4 +-- code/modules/mob/living/silicon/ai/ai.dm | 4 +-- code/modules/mob/living/silicon/pai/pai.dm | 4 +-- .../mob/living/silicon/pai/pai_defense.dm | 2 +- code/modules/mob/living/silicon/robot/life.dm | 2 +- .../mob/living/simple_animal/damage_procs.dm | 2 +- .../mob/living/simple_animal/hostile/alien.dm | 2 +- .../hostile/megafauna/bubblegum.dm | 4 +-- .../hostile/megafauna/colossus.dm | 2 +- .../simple_animal/hostile/megafauna/drake.dm | 2 +- .../hostile/megafauna/hierophant.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- .../mob/living/simple_animal/slime/powers.dm | 2 +- code/modules/mob/mob.dm | 2 +- code/modules/mob/status_procs.dm | 8 ++--- code/modules/photography/camera/camera.dm | 8 ++--- .../camera/camera_image_capturing.dm | 4 +-- code/modules/power/apc.dm | 6 ++-- code/modules/power/cable.dm | 8 ++--- code/modules/power/cell.dm | 4 +-- code/modules/power/lighting.dm | 2 +- code/modules/power/power.dm | 4 +-- code/modules/power/powernet.dm | 2 +- code/modules/power/singularity/narsie.dm | 2 +- code/modules/power/smes.dm | 6 ++-- code/modules/power/solar.dm | 8 ++--- code/modules/power/supermatter/supermatter.dm | 14 ++++---- code/modules/power/tesla/energy_ball.dm | 2 +- code/modules/projectiles/guns/energy.dm | 2 +- .../projectiles/guns/misc/beam_rifle.dm | 8 ++--- code/modules/projectiles/projectile.dm | 14 ++++---- .../projectile/bullets/dart_syringe.dm | 4 +-- .../projectiles/projectile/bullets/shotgun.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 8 ++--- .../chemistry/machinery/chem_heater.dm | 2 +- code/modules/reagents/chemistry/reagents.dm | 2 +- .../chemistry/reagents/alcohol_reagents.dm | 2 +- .../chemistry/reagents/drug_reagents.dm | 18 +++++------ .../chemistry/reagents/other_reagents.dm | 4 +-- .../reagents/chemistry/recipes/medicine.dm | 2 +- .../chemistry/recipes/pyrotechnics.dm | 8 ++--- code/modules/reagents/reagent_containers.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- .../reagents/reagent_containers/syringes.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 2 +- .../modules/research/machinery/_production.dm | 2 +- .../research/nanites/extra_settings/number.dm | 2 +- .../nanites/nanite_chamber_computer.dm | 4 +-- .../nanites/nanite_cloud_controller.dm | 2 +- .../research/nanites/nanite_programmer.dm | 16 +++++----- .../nanites/nanite_programs/weapon.dm | 2 +- .../modules/research/nanites/nanite_remote.dm | 4 +-- .../research/xenobiology/xenobiology.dm | 4 +-- code/modules/shuttle/shuttle.dm | 4 +-- code/modules/spells/spell_types/wizard.dm | 2 +- code/modules/surgery/bodyparts/bodyparts.dm | 2 +- .../surgery/bodyparts/dismemberment.dm | 2 +- code/modules/surgery/organs/eyes.dm | 2 +- code/modules/surgery/organs/lungs.dm | 6 ++-- code/modules/surgery/organs/organ_internal.dm | 2 +- code/modules/vehicles/secway.dm | 2 +- modular_citadel/code/_onclick/hud/sprint.dm | 2 +- modular_citadel/code/_onclick/hud/stamina.dm | 2 +- .../code/modules/arousal/organs/breasts.dm | 4 +-- .../code/modules/arousal/organs/penis.dm | 6 ++-- .../modules/mob/living/carbon/damage_procs.dm | 2 +- .../living/silicon/robot/dogborg_equipment.dm | 2 +- .../reagents/chemistry/recipes/fermi.dm | 2 +- tgstation.dme | 1 - 248 files changed, 478 insertions(+), 544 deletions(-) delete mode 100644 code/__DEFINES/__513_compatibility.dm diff --git a/code/__DEFINES/__513_compatibility.dm b/code/__DEFINES/__513_compatibility.dm deleted file mode 100644 index 12577fb68b..0000000000 --- a/code/__DEFINES/__513_compatibility.dm +++ /dev/null @@ -1,32 +0,0 @@ - -#if DM_VERSION < 513 - -#define ismovableatom(A) (istype(A, /atom/movable)) - -#define islist(L) (istype(L, /list)) - -#define CLAMP01(x) (CLAMP(x, 0, 1)) - -#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) ) - -#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) ) - -#define TAN(x) (sin(x) / cos(x)) - -#define arctan(x) (arcsin(x/sqrt(1+x*x))) - -////////////////////////////////////////////////// - -#else - -#define ismovableatom(A) ismovable(A) - -#define CLAMP01(x) clamp(x, 0, 1) - -#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX) - -#define TAN(x) tan(x) - -#define ATAN2(x, y) arctan(x, y) - -#endif diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index f37efd694c..e418b8b4c6 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -17,6 +17,8 @@ #define PERCENT(val) (round((val)*100, 0.1)) +#define CLAMP01(x) clamp(x, 0, 1) + //time of day but automatically adjusts to the server going into the next day within the same round. //for when you need a reliable time number that doesn't depend on byond time. #define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) @@ -30,13 +32,13 @@ #define FLOOR(x, y) ( round((x) / (y)) * (y) ) // Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive -#define WRAP(val, min, max) CLAMP(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1) +#define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1) // Real modulus that handles decimals #define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) ) // Cotangent -#define COT(x) (1 / TAN(x)) +#define COT(x) (1 / tan(x)) // Secant #define SEC(x) (1 / cos(x)) @@ -169,8 +171,8 @@ while(pixel_y < -16) pixel_y += 32 new_y-- - new_x = CLAMP(new_x, 0, world.maxx) - new_y = CLAMP(new_y, 0, world.maxy) + new_x = clamp(new_x, 0, world.maxx) + new_y = clamp(new_y, 0, world.maxy) return locate(new_x, new_y, starting.z) // Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles @@ -195,7 +197,7 @@ #define EXP_DISTRIBUTION(desired_mean) ( -(1/(1/desired_mean)) * log(rand(1, 1000) * 0.001) ) -#define LORENTZ_DISTRIBUTION(x, s) ( s*TAN(TODEGREES(PI*(rand()-0.5))) + x ) +#define LORENTZ_DISTRIBUTION(x, s) ( s*tan(TODEGREES(PI*(rand()-0.5))) + x ) #define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 ) #define RULE_OF_THREE(a, b, x) ((a*x)/b) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 7e52fbe273..801a2cd431 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -61,7 +61,7 @@ var/adjacencies = 0 var/atom/movable/AM - if(ismovableatom(A)) + if(ismovable(A)) AM = A if(AM.can_be_unanchored && !AM.anchored) return 0 diff --git a/code/__HELPERS/mouse_control.dm b/code/__HELPERS/mouse_control.dm index a69c139d80..10fe976c26 100644 --- a/code/__HELPERS/mouse_control.dm +++ b/code/__HELPERS/mouse_control.dm @@ -11,7 +11,7 @@ var/screenviewY = screenview[2] * world.icon_size var/ox = round(screenviewX/2) - client.pixel_x //"origin" x var/oy = round(screenviewY/2) - client.pixel_y //"origin" y - var/angle = SIMPLIFY_DEGREES(ATAN2(y - oy, x - ox)) + var/angle = SIMPLIFY_DEGREES(arctan(y - oy, x - ox)) return angle //Wow, specific name! diff --git a/code/__HELPERS/radio.dm b/code/__HELPERS/radio.dm index 5fe87bdf5b..dc52299025 100644 --- a/code/__HELPERS/radio.dm +++ b/code/__HELPERS/radio.dm @@ -2,9 +2,9 @@ /proc/sanitize_frequency(frequency, free = FALSE) frequency = round(frequency) if(free) - . = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ) + . = clamp(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ) else - . = CLAMP(frequency, MIN_FREQ, MAX_FREQ) + . = clamp(frequency, MIN_FREQ, MAX_FREQ) if(!(. % 2)) // Ensure the last digit is an odd number . += 1 diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index e494468fe7..dadd4322fb 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -9,7 +9,7 @@ /proc/sanitize_num_clamp(number, min=0, max=1, default=0, quantize=0) if(!isnum(number)) return default - . = CLAMP(number, min, max) + . = clamp(number, min, max) if(quantize) . = round(number, quantize) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index afa858afb7..8a196e8651 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -777,8 +777,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( tX = splittext(tX[1], ":") tX = tX[1] var/list/actual_view = getviewsize(C ? C.view : world.view) - tX = CLAMP(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) - tY = CLAMP(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) + tX = clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) + tY = clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) return locate(tX, tY, tZ) /proc/screen_loc2turf(text, turf/origin, client/C) @@ -791,8 +791,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( tX = text2num(tX[2]) tZ = origin.z var/list/actual_view = getviewsize(C ? C.view : world.view) - tX = CLAMP(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx) - tY = CLAMP(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy) + tX = clamp(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx) + tY = clamp(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy) return locate(tX, tY, tZ) /proc/IsValidSrc(datum/D) @@ -1568,7 +1568,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/blood_sucking_checks(var/mob/living/carbon/target, check_neck, check_blood) //Bypass this if the target isnt carbon. if(!iscarbon(target)) - return TRUE + return TRUE if(check_neck) if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) return FALSE diff --git a/code/_compile_options.dm b/code/_compile_options.dm index fe4761ddcd..9a36c626ba 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -32,31 +32,12 @@ #endif //Update this whenever you need to take advantage of more recent byond features -#define MIN_COMPILER_VERSION 512 -#if DM_VERSION < MIN_COMPILER_VERSION +#define MIN_COMPILER_VERSION 513 +#define MIN_COMPILER_BUILD 1508 +#if DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD //Don't forget to update this part #error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 512 or higher -#endif - -//Compatability -- These procs were added in 513.1493, not 513.1490 -//Which really shoulda bumped us up to 514 right then and there but instead Lummox is a dumb dumb -#if DM_BUILD < 1493 -#define length_char(args...) length(args) -#define text2ascii_char(args...) text2ascii(args) -#define copytext_char(args...) copytext(args) -#define splittext_char(args...) splittext(args) -#define spantext_char(args...) spantext(args) -#define nonspantext_char(args...) nonspantext(args) -#define findtext_char(args...) findtext(args) -#define findtextEx_char(args...) findtextEx(args) -#define findlasttext_char(args...) findlasttext(args) -#define findlasttextEx_char(args...) findlasttextEx(args) -#define replacetext_char(args...) replacetext(args) -#define replacetextEx_char(args...) replacetextEx(args) -// /regex procs -#define Find_char(args...) Find(args) -#define Replace_char(args...) Replace(args) +#error You need version 513.1508 or higher #endif //Additional code for the above flags. diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index e028212e96..5e474331f6 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -102,8 +102,8 @@ add_overlay(standard_background) /obj/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) + width = clamp(width, 0, max_dimensions) + height = clamp(height, 0, max_dimensions) src.width = width src.height = height diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b0e1d39d9a..98db89a100 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -155,9 +155,9 @@ /obj/item/proc/get_clamped_volume() if(w_class) if(force) - return CLAMP((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 + return clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 else - return CLAMP(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 + return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 /mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area) var/message_verb = "attacked" diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index d596b5fabf..9f9870a9e5 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -5,7 +5,7 @@ return // seems legit. // Things you might plausibly want to follow - if(ismovableatom(A)) + if(ismovable(A)) ManualFollow(A) // Otherwise jump diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index d7323700e4..4647b83cd7 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -103,7 +103,7 @@ return FALSE var/temp = text2num(trim(str_val)) if(!isnull(temp)) - config_entry_value = CLAMP(integer ? round(temp) : temp, min_val, max_val) + config_entry_value = clamp(integer ? round(temp) : temp, min_val, max_val) if(config_entry_value != temp && !(datum_flags & DF_VAR_EDITED)) log_config("Changing [name] from [temp] to [config_entry_value]!") return TRUE diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index ec8b243073..ef10e0626c 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -5,7 +5,7 @@ SUBSYSTEM_DEF(profiler) init_order = INIT_ORDER_PROFILER runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY wait = 3000 - flags = SS_NO_TICK_CHECK + flags = SS_NO_TICK_CHECK var/fetch_cost = 0 var/write_cost = 0 @@ -31,23 +31,12 @@ SUBSYSTEM_DEF(profiler) return ..() /datum/controller/subsystem/profiler/proc/StartProfiling() -#if DM_BUILD < 1506 || DM_VERSION < 513 - stack_trace("Auto profiling unsupported on this byond version") - CONFIG_SET(flag/auto_profile, FALSE) -#else world.Profile(PROFILE_START) -#endif /datum/controller/subsystem/profiler/proc/StopProfiling() -#if DM_BUILD >= 1506 && DM_VERSION >= 513 world.Profile(PROFILE_STOP) -#endif /datum/controller/subsystem/profiler/proc/DumpFile() -#if DM_BUILD < 1506 || DM_VERSION < 513 - stack_trace("Auto profiling unsupported on this byond version") - CONFIG_SET(flag/auto_profile, FALSE) -#else var/timer = TICK_USAGE_REAL var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json") fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) @@ -60,4 +49,3 @@ SUBSYSTEM_DEF(profiler) timer = TICK_USAGE_REAL WRITE_FILE(json_file, current_profile_data) write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) -#endif diff --git a/code/datums/components/bouncy.dm b/code/datums/components/bouncy.dm index c7ca85455b..fed603410e 100644 --- a/code/datums/components/bouncy.dm +++ b/code/datums/components/bouncy.dm @@ -4,7 +4,7 @@ var/list/bounce_signals = list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK) /datum/component/bouncy/Initialize(_bouncy_mod, list/_bounce_signals) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE if(_bouncy_mod) bouncy_mod = _bouncy_mod diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index e5625dee6a..441a161428 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -55,7 +55,7 @@ log_combat(user, H, "starts slicing the throat of") playsound(H.loc, butcher_sound, 50, TRUE, -1) - if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source)) + if(do_mob(user, H, clamp(500 / source.force, 30, 100)) && H.Adjacent(source)) if(H.has_status_effect(/datum/status_effect/neck_slice)) user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \ "Their neck has already been already cut, you can't make the bleeding any worse!") @@ -65,7 +65,7 @@ "[user] slits your throat...") log_combat(user, H, "finishes slicing the throat of") H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD) - H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30) + H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30) H.apply_status_effect(/datum/status_effect/neck_slice) /datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat) diff --git a/code/datums/components/edit_complainer.dm b/code/datums/components/edit_complainer.dm index bf52296e2c..e2cca2eb50 100644 --- a/code/datums/components/edit_complainer.dm +++ b/code/datums/components/edit_complainer.dm @@ -3,7 +3,7 @@ var/list/say_lines /datum/component/edit_complainer/Initialize(list/text) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE var/static/list/default_lines = list( diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 820208a319..2e5834c025 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -13,7 +13,7 @@ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/explodable_attack) RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/explodable_insert_item) RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/detonate) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/explodable_impact) RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/explodable_bump) if(isitem(parent)) diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm index 702ec9329a..5ef2ac2baf 100644 --- a/code/datums/components/fantasy/prefixes.dm +++ b/code/datums/components/fantasy/prefixes.dm @@ -54,7 +54,7 @@ /datum/fantasy_affix/pyromantic/apply(datum/component/fantasy/comp, newName) var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/igniter, CLAMP(comp.quality, 1, 10)) + comp.appliedComponents += master.AddComponent(/datum/component/igniter, clamp(comp.quality, 1, 10)) return "pyromantic [newName]" /datum/fantasy_affix/vampiric diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index ad2b7ded14..8d3c6ab81f 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -13,7 +13,7 @@ expire_time = world.time + expire_in QDEL_IN(src, expire_in) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean) RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle) diff --git a/code/datums/components/knockback.dm b/code/datums/components/knockback.dm index 988a0e575e..3899e92a22 100644 --- a/code/datums/components/knockback.dm +++ b/code/datums/components/knockback.dm @@ -34,7 +34,7 @@ do_knockback(target, null, angle2dir(Angle)) /datum/component/knockback/proc/do_knockback(atom/target, mob/thrower, throw_dir) - if(!ismovableatom(target) || throw_dir == null) + if(!ismovable(target) || throw_dir == null) return var/atom/movable/throwee = target if(throwee.anchored && !throw_anchored) diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm index c7e59e0ead..181b24260b 100644 --- a/code/datums/components/magnetic_catch.dm +++ b/code/datums/components/magnetic_catch.dm @@ -2,7 +2,7 @@ if(!isatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/crossed_react) RegisterSignal(parent, COMSIG_MOVABLE_UNCROSSED, .proc/uncrossed_react) for(var/i in get_turf(parent)) diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm index 20e3b317ec..de4425e208 100644 --- a/code/datums/components/mirage_border.dm +++ b/code/datums/components/mirage_border.dm @@ -14,8 +14,8 @@ var/x = target.x var/y = target.y var/z = target.z - var/turf/southwest = locate(CLAMP(x - (direction & WEST ? range : 0), 1, world.maxx), CLAMP(y - (direction & SOUTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz)) - var/turf/northeast = locate(CLAMP(x + (direction & EAST ? range : 0), 1, world.maxx), CLAMP(y + (direction & NORTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz)) + var/turf/southwest = locate(clamp(x - (direction & WEST ? range : 0), 1, world.maxx), clamp(y - (direction & SOUTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz)) + var/turf/northeast = locate(clamp(x + (direction & EAST ? range : 0), 1, world.maxx), clamp(y + (direction & NORTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz)) //holder.vis_contents += block(southwest, northeast) // This doesnt work because of beta bug memes for(var/i in block(southwest, northeast)) holder.vis_contents += i diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 7aacb745b6..8ba748dac7 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -175,7 +175,7 @@ return (nanite_volume > 0) /datum/component/nanites/proc/adjust_nanites(datum/source, amount) - nanite_volume = CLAMP(nanite_volume + amount, 0, max_nanites) + nanite_volume = clamp(nanite_volume + amount, 0, max_nanites) if(nanite_volume <= 0) //oops we ran out qdel(src) @@ -187,7 +187,7 @@ if(remove || stealth) return //bye icon var/nanite_percent = (nanite_volume / max_nanites) * 100 - nanite_percent = CLAMP(CEILING(nanite_percent, 10), 10, 100) + nanite_percent = clamp(CEILING(nanite_percent, 10), 10, 100) holder.icon_state = "nanites[nanite_percent]" /datum/component/nanites/proc/on_emp(datum/source, severity) @@ -249,13 +249,13 @@ return FALSE /datum/component/nanites/proc/set_volume(datum/source, amount) - nanite_volume = CLAMP(amount, 0, max_nanites) + nanite_volume = clamp(amount, 0, max_nanites) /datum/component/nanites/proc/set_max_volume(datum/source, amount) max_nanites = max(1, max_nanites) /datum/component/nanites/proc/set_cloud(datum/source, amount) - cloud_id = CLAMP(amount, 0, 100) + cloud_id = clamp(amount, 0, 100) /datum/component/nanites/proc/set_cloud_sync(datum/source, method) switch(method) @@ -267,7 +267,7 @@ cloud_active = TRUE /datum/component/nanites/proc/set_safety(datum/source, amount) - safety_threshold = CLAMP(amount, 0, max_nanites) + safety_threshold = clamp(amount, 0, max_nanites) /datum/component/nanites/proc/set_regen(datum/source, amount) regen_rate = amount diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index 2be22d01e5..49e6b91c6d 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -22,14 +22,14 @@ /datum/component/orbiter/RegisterWithParent() . = ..() var/atom/target = parent - while(ismovableatom(target)) + while(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react) target = target.loc /datum/component/orbiter/UnregisterFromParent() . = ..() var/atom/target = parent - while(ismovableatom(target)) + while(ismovable(target)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) target = target.loc @@ -111,12 +111,12 @@ // These are prety rarely activated, how often are you following something in a bag? if(oldloc && !isturf(oldloc)) // We used to be registered to it, probably var/atom/target = oldloc - while(ismovableatom(target)) + while(ismovable(target)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) target = target.loc if(orbited?.loc && orbited.loc != newturf) // We want to know when anything holding us moves too var/atom/target = orbited.loc - while(ismovableatom(target)) + while(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react, TRUE) target = target.loc diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index 4d8cfc4412..d185221163 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -21,7 +21,7 @@ var/list/offhands = list() // keyed list containing all the current riding offsets associated by mob /datum/component/riding/Initialize() - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/vehicle_mob_buckle) RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, .proc/vehicle_mob_unbuckle) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 422d73520e..6a32a46aef 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -14,7 +14,7 @@ var/default_rotation_direction = ROTATION_CLOCKWISE /datum/component/simple_rotation/Initialize(rotation_flags = NONE ,can_user_rotate,can_be_rotated,after_rotation) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE //throw if no rotation direction is specificed ? diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 405e7fc064..2052e57f49 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -66,7 +66,7 @@ if(world.time < last_time_used && !dissipating) return var/old_charges = charges - charges = CLAMP(charges + recharge_rate, 0, max_charges) + charges = clamp(charges + recharge_rate, 0, max_charges) if(round(old_charges) >= round(charges)) //only send outputs if it effectively gained at least one charge return var/sound = recharge_sound @@ -85,7 +85,7 @@ /datum/component/shielded/proc/adjust_charges(amount) var/old_charges = charges - charges = CLAMP(charges + amount, 0, max_charges) + charges = clamp(charges + amount, 0, max_charges) if(recharge_delay && recharge_rate && (dissipating ? !charges : charges == max_charges)) STOP_PROCESSING(SSdcs, src) if(charges < 1 && del_on_overload) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index ad538760db..792222b27b 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -16,7 +16,7 @@ if(!isatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak) RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED), .proc/play_squeak_crossed) RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 13267e74c3..b651133274 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -5,7 +5,7 @@ var/allow_death = FALSE /datum/component/stationloving/Initialize(inform_admins = FALSE, allow_death = FALSE) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate) diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm index ab0535064a..f37f574002 100644 --- a/code/datums/components/storage/ui.dm +++ b/code/datums/components/storage/ui.dm @@ -27,8 +27,8 @@ numbered_contents = _process_numerical_display() adjusted_contents = numbered_contents.len - var/columns = CLAMP(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns) - var/rows = CLAMP(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows) + var/columns = clamp(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns) + var/rows = clamp(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows) // First, boxes. ui_boxes = get_ui_boxes() @@ -105,7 +105,7 @@ // after this point we are sure we can somehow fit all items into our max number of rows. // determine rows - var/rows = CLAMP(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows) + var/rows = clamp(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows) var/overrun = FALSE if(used > our_volume) diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 30c6625049..0fbbcd59b0 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -181,7 +181,7 @@ /datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum) var/time = 0 if(LAZYACCESS(time_left_list, "[type]")) - time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) + time = clamp(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) else time = min(duration_minimum, duration_maximum) LAZYSET(time_left_list, "[type]", time) diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index c31139dcd7..80570d0c3b 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -42,7 +42,7 @@ addtimer(CALLBACK(src, .proc/charge), charge_rate) /datum/action/innate/dash/proc/charge() - current_charges = CLAMP(current_charges + 1, 0, max_charges) + current_charges = clamp(current_charges + 1, 0, max_charges) holder.update_action_buttons_icon() if(recharge_sound) playsound(dashing_item, recharge_sound, 50, 1) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 330a3494d9..7e3ac29b2d 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -246,10 +246,10 @@ else visibility_flags &= ~HIDDEN_SCANNER - SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE)) + SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE)) permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1) - cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20 + cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20 stage_prob = max(properties["stage_rate"], 2) SetSeverity(properties["severity"]) GenerateCure(properties) @@ -304,7 +304,7 @@ // Will generate a random cure, the less resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/GenerateCure() if(properties && properties.len) - var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) + var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) if(res == oldres) return cures = list(pick(advance_cures[res])) diff --git a/code/datums/elements/cleaning.dm b/code/datums/elements/cleaning.dm index 3f80204089..d86fe22632 100644 --- a/code/datums/elements/cleaning.dm +++ b/code/datums/elements/cleaning.dm @@ -1,6 +1,6 @@ /datum/element/cleaning/Attach(datum/target) . = ..() - if(!ismovableatom(target)) + if(!ismovable(target)) return ELEMENT_INCOMPATIBLE RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/Clean) diff --git a/code/datums/elements/firestacker.dm b/code/datums/elements/firestacker.dm index 39021d23bb..771812242f 100644 --- a/code/datums/elements/firestacker.dm +++ b/code/datums/elements/firestacker.dm @@ -10,7 +10,7 @@ /datum/element/firestacker/Attach(datum/target, amount) . = ..() - if(!ismovableatom(target)) + if(!ismovable(target)) return ELEMENT_INCOMPATIBLE src.amount = amount diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 7be4489e86..f763affcd1 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -121,14 +121,14 @@ GLOBAL_LIST_EMPTY(explosions) if(dist <= round(max_range + world.view - 2, 1)) M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound) if(baseshakeamount > 0) - shake_camera(M, 25, CLAMP(baseshakeamount, 0, 10)) + shake_camera(M, 25, clamp(baseshakeamount, 0, 10)) // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. else if(dist <= far_dist) - var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist + var/far_volume = clamp(far_dist, 30, 50) // Volume is based on explosion size and dist far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound) if(baseshakeamount > 0) - shake_camera(M, 10, CLAMP(baseshakeamount*0.25, 0, 2.5)) + shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5)) EX_PREPROCESS_CHECK_TICK //postpone processing for a bit diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 4332b09ac6..f054867de4 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -116,7 +116,7 @@ "[A] slams your chest! You can't breathe!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) if(D.losebreath <= 10) - D.losebreath = CLAMP(D.losebreath + 5, 0, 10) + D.losebreath = clamp(D.losebreath + 5, 0, 10) D.adjustOxyLoss(damage + 5) log_combat(A, D, "quickchoked") return TRUE @@ -128,7 +128,7 @@ playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.apply_damage(damage, BRUTE) if(D.silent <= 10) - D.silent = CLAMP(D.silent + 10, 0, 10) + D.silent = clamp(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") return TRUE @@ -187,7 +187,7 @@ if(damage >= stunthreshold) D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") D.drop_all_held_items() - + return TRUE //Krav Maga Gloves diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index c3d0deeac6..f07b1d8792 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -92,7 +92,7 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/plasma/on_applied(atom/source, amount, material_flags) . = ..() - if(ismovableatom(source)) + if(ismovable(source)) source.AddElement(/datum/element/firestacker, amount=1) source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, amount / 1250) diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm index 44ff87e8ae..608683c3dc 100644 --- a/code/datums/position_point_vector.dm +++ b/code/datums/position_point_vector.dm @@ -20,7 +20,7 @@ return sqrt(((b.x - a.x) ** 2) + ((b.y - a.y) ** 2)) /proc/angle_between_points(datum/point/a, datum/point/b) - return ATAN2((b.y - a.y), (b.x - a.x)) + return arctan((b.y - a.y), (b.x - a.x)) /datum/position //For positions with map x/y/z and pixel x/y so you don't have to return lists. Could use addition/subtraction in the future I guess. var/x = 0 diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index faecf809cc..fbc194cc6f 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -38,7 +38,7 @@ if (user.client) user.client.images += bar - progress = CLAMP(progress, 0, goal) + progress = clamp(progress, 0, goal) bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" if (!shown) user.client.images += bar diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 69b74841df..e22b33d90a 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -336,7 +336,7 @@ if(prob(severity * 0.15)) to_chat(owner, "\"[text2ratvar(pick(mania_messages))]\"") owner.playsound_local(get_turf(motor), hum, severity, 1) - owner.adjust_drugginess(CLAMP(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1 + owner.adjust_drugginess(clamp(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1 if(owner.hallucination < 50) owner.hallucination = min(owner.hallucination + max(severity * 0.075, 1), 50) //7.5% of severity per second, minimum 1 if(owner.dizziness < 50) @@ -594,7 +594,7 @@ old_health = owner.health if(!old_oxyloss) old_oxyloss = owner.getOxyLoss() - var/health_difference = old_health - owner.health - CLAMP(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss()) + var/health_difference = old_health - owner.health - clamp(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss()) if(!health_difference) return owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!", \ diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 40090c35c5..b71f51bd07 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -192,7 +192,7 @@ reagents = new() reagents.reagent_list.Add(A) reagents.conditional_update() - else if(ismovableatom(A)) + else if(ismovable(A)) var/atom/movable/M = A if(isliving(M.loc)) var/mob/living/L = M.loc @@ -692,7 +692,7 @@ /atom/vv_get_dropdown() . = ..() VV_DROPDOWN_OPTION("", "---------") - if(!ismovableatom(src)) + if(!ismovable(src)) var/turf/curturf = get_turf(src) if(curturf) . += "" diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index bb776d7bc0..c54de16e2e 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -53,7 +53,7 @@ restricted_jobs += "Assistant" // Set number of Vamps - recommended_enemies = CLAMP(round(num_players()/10), 1, 6); + recommended_enemies = clamp(round(num_players()/10), 1, 6); // Select Antags for(var/i = 0, i < recommended_enemies, i++) @@ -195,7 +195,7 @@ return FALSE if(target.stat > UNCONSCIOUS) return FALSE - + // Check Overdose: Am I even addicted to blood? Do I even have any in me? //if (!target.reagents.addiction_list || !target.reagents.reagent_list) //message_admins("DEBUG2: can_make_vassal() Abort: No reagents") diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 48e306b2b5..4378a5c440 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -105,7 +105,7 @@ if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - var/threat = CLAMP(round(mode.threat_level/10),1,10) + var/threat = clamp(round(mode.threat_level/10),1,10) if (job_check < required_enemies[threat]) SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE @@ -671,7 +671,7 @@ message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by dynamic.") log_game("[key_name(Ninja)] was spawned as a ninja by dynamic.") return Ninja - + /datum/dynamic_ruleset/midround/from_ghosts/ninja/finish_setup(mob/new_character, index) return diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index a7fc9b86ce..edaadeae1c 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -789,7 +789,7 @@ if (prob(meteorminutes/2)) wavetype = GLOB.meteors_catastrophic - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) + var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index c37eb9bc2a..3639ada166 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -11,7 +11,7 @@ WAROPS_ALWAYS_ALLOWED: Can always do warops, regardless of threat level. USE_PREF_WEIGHTS: Will use peoples' preferences to change the threat centre. FORCE_IF_WON: If this mode won the vote, forces it - USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds. + USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds. */ var/flags = 0 var/dead_player_weight = 1 // How much dead players matter for threat calculation @@ -22,11 +22,11 @@ var/datum/game_mode/dynamic/mode = null // Cached as soon as it's made, by dynamic. /** -Property weights are: +Property weights are: "story_potential" -- essentially how many different ways the antag can be played. "trust" -- How much it makes the crew trust each other. Negative values means they're suspicious. Team antags are like this. "chaos" -- How chaotic it makes the round. Has some overlap with "valid" and somewhat contradicts "extended". -"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to +"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to let everyone into the armory, wizard moving around and being a nuisance, nightmare busting lights. "extended" -- How much the antag is conducive to a long round. Nukies and cults are bad for this; Wizard is less bad; and so on. "conversion" -- Basically a bool. Conversion antags, well, convert. It's its own class for a good reason. @@ -34,13 +34,13 @@ Property weights are: /datum/dynamic_storyteller/proc/start_injection_cooldowns() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min) - mode.latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time + mode.latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max) - mode.midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time - + mode.midround_injection_cooldown = round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time + var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - mode.event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) + mode.event_injection_cooldown = (round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) /datum/dynamic_storyteller/proc/calculate_threat() var/threat = 0 @@ -99,15 +99,15 @@ Property weights are: /datum/dynamic_storyteller/proc/get_midround_cooldown() var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + return round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) /datum/dynamic_storyteller/proc/get_event_cooldown() var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + return round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) /datum/dynamic_storyteller/proc/get_latejoin_cooldown() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + return round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) /datum/dynamic_storyteller/proc/get_injection_chance(dry_run = FALSE) if(mode.forced_injection) @@ -144,7 +144,7 @@ Property weights are: if(!(rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) /* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to - pick this particular ruleset. + pick this particular ruleset. Let's use a toy example: there's 60 threat level and 10 threat spent. We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets. Ruleset 1 has 30 cost, ruleset 2 has 5 cost. @@ -212,7 +212,7 @@ Property weights are: flags = WAROPS_ALWAYS_ALLOWED min_players = 40 var/refund_cooldown = 0 - + /datum/dynamic_storyteller/chaotic/do_process() if(refund_cooldown < world.time) mode.create_threat(20) @@ -221,7 +221,7 @@ Property weights are: /datum/dynamic_storyteller/chaotic/get_midround_cooldown() return ..() / 4 - + /datum/dynamic_storyteller/chaotic/get_latejoin_cooldown() return ..() / 4 diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 7857eb8253..afeebb770b 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -25,7 +25,7 @@ if (prob(meteorminutes/2)) wavetype = GLOB.meteors_catastrophic - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) + var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 74554ac9f8..9eed18d906 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -70,7 +70,7 @@ /datum/game_mode/revolution/post_setup() var/list/heads = SSjob.get_living_heads() var/list/sec = SSjob.get_living_sec() - var/weighted_score = CLAMP(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs) + var/weighted_score = clamp(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs) for(var/datum/mind/rev_mind in headrev_candidates) //People with return to lobby may still be in the lobby. Let's pick someone else in that case. if(isnewplayer(rev_mind.current)) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6fa7fa30c0..8b3958e606 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -169,7 +169,7 @@ var/multiplier = text2num(href_list["multiplier"]) var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) + multiplier = clamp(multiplier,1,50) ///////////////// diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index bc0fec68ba..3f4b389b77 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -69,7 +69,7 @@ for(var/obj/item/stock_parts/manipulator/P in component_parts) speed_coeff += (P.rating / 2) speed_coeff = max(1, speed_coeff) - heal_level = CLAMP((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100) + heal_level = clamp((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100) //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 6d22f9d6c8..eae2d5fa5b 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -150,7 +150,7 @@ return log_activity("changed greater than charge filter to \"[new_filter]\"") if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) + new_filter = clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) result_filters["Charge Above"] = new_filter if(href_list["below_filter"]) @@ -160,7 +160,7 @@ return log_activity("changed lesser than charge filter to \"[new_filter]\"") if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) + new_filter = clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) result_filters["Charge Below"] = new_filter if(href_list["access_filter"]) diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index 370f85b4b9..ad325455ad 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -308,12 +308,12 @@ var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user))) return FALSE - new_rows = CLAMP(new_rows + 1, 4, 30) + new_rows = clamp(new_rows + 1, 4, 30) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user))) return FALSE - new_columns = CLAMP(new_columns + 1, 4, 50) + new_columns = clamp(new_columns + 1, 4, 50) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/grid_area = (new_rows - 1) * (new_columns - 1) var/lower_limit = round(grid_area*0.156) @@ -324,7 +324,7 @@ playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) rows = new_rows columns = new_columns - mine_limit = CLAMP(new_mine_limit, lower_limit, upper_limit) + mine_limit = clamp(new_mine_limit, lower_limit, upper_limit) return TRUE /obj/machinery/computer/arcade/minesweeper/proc/make_mines(var/reset_everything) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 22e102b54b..79ea51eca4 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -296,7 +296,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) if("rate") var/target = text2num(params["rate"]) if(!isnull(target)) - target = CLAMP(target, 0, MAX_TRANSFER_RATE) + target = clamp(target, 0, MAX_TRANSFER_RATE) signal.data += list("tag" = input_tag, "set_volume_rate" = target) . = TRUE if("output") @@ -305,7 +305,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) if("pressure") var/target = text2num(params["pressure"]) if(!isnull(target)) - target = CLAMP(target, 0, MAX_OUTPUT_PRESSURE) + target = clamp(target, 0, MAX_OUTPUT_PRESSURE) signal.data += list("tag" = output_tag, "set_internal_pressure" = target) . = TRUE radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index b9bd3da95e..d465ff2022 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -604,13 +604,13 @@ if("setbufferlabel") var/text = sanitize(input(usr, "Input a new label:", "Input a Text", null) as text|null) if(num && text) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) buffer_slot["label"] = text if("setbuffer") if(num && viable_occupant) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) buffer[num] = list( "label"="Buffer[num]:[viable_occupant.real_name]", "UI"=viable_occupant.dna.uni_identity, @@ -620,7 +620,7 @@ ) if("clearbuffer") if(num) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) buffer_slot.Cut() @@ -635,7 +635,7 @@ apply_buffer(SCANNER_ACTION_MIXED,num) if("injector") if(num && injectorready < world.time) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) var/obj/item/dnainjector/timed/I @@ -662,11 +662,11 @@ injectorready = world.time + INJECTOR_TIMEOUT if("loaddisk") if(num && diskette && diskette.fields) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) buffer[num] = diskette.fields.Copy() if("savedisk") if(num && diskette && !diskette.read_only) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) diskette.name = "data disk \[[buffer_slot["label"]]\]" @@ -953,7 +953,7 @@ return viable_occupant /obj/machinery/computer/scan_consolenew/proc/apply_buffer(action,buffer_num) - buffer_num = CLAMP(buffer_num, 1, NUMBER_OF_BUFFERS) + buffer_num = clamp(buffer_num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[buffer_num] var/mob/living/carbon/viable_occupant = get_viable_occupant() if(istype(buffer_slot)) diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm index e4a6a0b2d4..ca75ff1dd0 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -97,7 +97,7 @@ return if(!new_goal) new_goal = default_goal - contained_id.goal = CLAMP(new_goal, 0, 1000) //maximum 1000 points + contained_id.goal = clamp(new_goal, 0, 1000) //maximum 1000 points return TRUE if("toggle_open") if(teleporter.locked) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 686b62d1c3..67113fcf78 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -33,7 +33,7 @@ to_chat(user, "You begin repairing [src]...") if(I.use_tool(src, user, 40, volume=40)) - obj_integrity = CLAMP(obj_integrity + 20, 0, max_integrity) + obj_integrity = clamp(obj_integrity + 20, 0, max_integrity) else return ..() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index adc1748ded..cd22b2dc05 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -135,7 +135,7 @@ . /= 10 /obj/machinery/door_timer/proc/set_timer(value) - var/new_time = CLAMP(value,0,MAX_TIMER) + var/new_time = clamp(value,0,MAX_TIMER) . = new_time == timer_duration //return 1 on no change timer_duration = new_time diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index d01f7e3e40..c8219e9ebf 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -68,9 +68,9 @@ if(teleporting) return if(!isnull(x)) - x_offset = CLAMP(x, -range, range) + x_offset = clamp(x, -range, range) if(!isnull(y)) - y_offset = CLAMP(y, -range, range) + y_offset = clamp(y, -range, range) /obj/machinery/launchpad/proc/doteleport(mob/user, sending) if(teleporting) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index b0e26ce129..c144616c05 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -55,9 +55,9 @@ new /obj/item/pipe_meter(loc) wait = world.time + 15 if(href_list["layer_up"]) - piping_layer = CLAMP(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + piping_layer = clamp(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) if(href_list["layer_down"]) - piping_layer = CLAMP(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + piping_layer = clamp(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) return /obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index c152e302fe..34db7b0e08 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -270,7 +270,7 @@ use_stored_power(50) /obj/machinery/shieldwallgen/proc/use_stored_power(amount) - power = CLAMP(power - amount, 0, maximum_stored_power) + power = clamp(power - amount, 0, maximum_stored_power) update_activity() /obj/machinery/shieldwallgen/proc/update_activity() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 41dfe8e3ac..f9f4eb3e80 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -127,7 +127,7 @@ settableTemperatureRange = cap * 30 efficiency = (cap + 1) * 10000 - targetTemperature = CLAMP(targetTemperature, + targetTemperature = clamp(targetTemperature, max(settableTemperatureMedian - settableTemperatureRange, TCMB), settableTemperatureMedian + settableTemperatureRange) @@ -230,7 +230,7 @@ target= text2num(target) + T0C . = TRUE if(.) - targetTemperature = CLAMP(round(target), + targetTemperature = clamp(round(target), max(settableTemperatureMedian - settableTemperatureRange, TCMB), settableTemperatureMedian + settableTemperatureRange) if("eject") diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index b8d4ef26e8..50984c43b8 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -195,7 +195,7 @@ /obj/machinery/syndicatebomb/proc/settings(mob/user) var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station - timer_set = CLAMP(new_timer, minimum_timer, maximum_timer) + timer_set = clamp(new_timer, minimum_timer, maximum_timer) loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 985c1166b7..16ae158ea7 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -70,7 +70,7 @@ com.target = null visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return - if (ismovableatom(M)) + if (ismovable(M)) if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE)) use_power(5000) diff --git a/code/game/machinery/toylathe.dm b/code/game/machinery/toylathe.dm index c679f3f983..4e039d304c 100644 --- a/code/game/machinery/toylathe.dm +++ b/code/game/machinery/toylathe.dm @@ -156,7 +156,7 @@ var/multiplier = text2num(href_list["multiplier"]) var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) + multiplier = clamp(multiplier,1,50) ///////////////// @@ -240,7 +240,7 @@ T=1.2 for(var/obj/item/stock_parts/manipulator/M in component_parts) T -= M.rating*0.2 - prod_coeff = CLAMP(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 + prod_coeff = clamp(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 /obj/machinery/autoylathe/proc/main_win(mob/user) var/dat = "

Autoylathe Menu:


" diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index f1fa5ddd20..65aa001fe1 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -484,7 +484,7 @@ /obj/item/punching_glove/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!..()) - if(ismovableatom(hit_atom)) + if(ismovable(hit_atom)) var/atom/movable/AM = hit_atom AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2) qdel(src) diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index 3b5a029df4..5276062121 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -17,7 +17,7 @@ target = get_turf(src) if(acid_amt) - acid_level = min( (CLAMP(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor. + acid_level = min( (clamp(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor. //handle APCs and newscasters and stuff nicely pixel_x = target.pixel_x + rand(-4,4) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 01edd82ccb..80178c95c4 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -52,7 +52,7 @@ var/list/affecting = list() /obj/effect/step_trigger/thrower/Trigger(atom/A) - if(!A || !ismovableatom(A)) + if(!A || !ismovable(A)) return var/atom/movable/AM = A var/curtiles = 0 diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 6b3428698b..c3b6c0312f 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -193,7 +193,7 @@ /obj/effect/chrono_field/update_icon() var/ttk_frame = 1 - (tickstokill / initial(tickstokill)) - ttk_frame = CLAMP(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) + ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) if(ttk_frame != RPpos) RPpos = ttk_frame mob_underlay.icon_state = "frame[RPpos]" diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index aaa87bbf01..ef0380fce0 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -804,7 +804,7 @@ var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null if(new_cloud == null) return - cloud_id = CLAMP(round(new_cloud, 1), 1, 100) + cloud_id = clamp(round(new_cloud, 1), 1, 100) /obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user) . = ..() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 09c045497c..60136f5529 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -346,8 +346,8 @@ var/clicky if(click_params && click_params["icon-x"] && click_params["icon-y"]) - clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + clickx = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + clicky = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) if(!instant) to_chat(user, "You start drawing a [temp] on the [target.name]...") diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index e5dcfc0075..e3385dc13f 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -39,7 +39,7 @@ var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num if(new_duration) new_duration = new_duration SECONDS - new_duration = CLAMP(new_duration, 50, max_duration) + new_duration = clamp(new_duration, 50, max_duration) duration = new_duration to_chat(user, "You set the duration to [DisplayTimeText(duration)].") return TRUE diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 9a09be093d..981a811bc3 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(GPS_list) if(!ui) // Variable window height, depending on how many GPS units there are // to show, clamped to relatively safe range. - var/gps_window_height = CLAMP(325 + GLOB.GPS_list.len * 14, 325, 700) + var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700) ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height ui.open() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index bee59b254c..9ab6115634 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -171,7 +171,7 @@ // Negative numbers will subtract /obj/item/lightreplacer/proc/AddUses(amount = 1) - uses = CLAMP(uses + amount, 0, max_uses) + uses = clamp(uses + amount, 0, max_uses) /obj/item/lightreplacer/proc/AddShards(amount = 1, user) bulb_shards += amount diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 1eee083c80..e94d14a57d 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -81,7 +81,7 @@ if(!usr.canUseTopic(src, BE_CLOSE)) return new_code = round(new_code) - new_code = CLAMP(new_code, 1, 100) + new_code = clamp(new_code, 1, 100) code = new_code if(href_list["set"] == "power") diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 4bab5a5bcd..b6261b9060 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -232,7 +232,7 @@ effective or pretty fucking useless. charge = max(0,charge - 25)//Quick decrease in light else charge = min(max_charge,charge + 50) //Charge in the dark - animate(user,alpha = CLAMP(255 - charge,0,255),time = 10) + animate(user,alpha = clamp(255 - charge,0,255),time = 10) /obj/item/jammer diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index f572d0a841..4fdb862288 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -170,7 +170,7 @@ /obj/item/dice/proc/diceroll(mob/user) result = roll(sides) if(rigged && result != rigged) - if(prob(CLAMP(1/(sides - 1) * 100, 25, 80))) + if(prob(clamp(1/(sides - 1) * 100, 25, 80))) result = rigged var/fake_result = roll(sides)//Daredevil isn't as good as he used to be var/comment = "" diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index eaecae5a92..66869d6f04 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -94,7 +94,7 @@ return var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num if(user.get_active_held_item() == src) - newtime = CLAMP(newtime, 10, 60000) + newtime = clamp(newtime, 10, 60000) det_time = newtime to_chat(user, "Timer set for [det_time] seconds.") diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index c961134244..6e270b6374 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -197,9 +197,9 @@ /obj/item/his_grace/proc/adjust_bloodthirst(amt) prev_bloodthirst = bloodthirst if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) else if(!ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) update_stats() /obj/item/his_grace/proc/update_stats() diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 5f74830c99..347ec118fd 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -74,7 +74,7 @@ L.SetAllImmobility(0) L.SetSleeping(0) L.SetUnconscious(0) - L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, CLAMP(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck! + L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, clamp(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck! colorize(L) /obj/item/hot_potato/examine(mob/user) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 342f756ffc..23be8cbb9a 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -201,8 +201,8 @@ return target var/x_o = (target.x - starting.x) var/y_o = (target.y - starting.y) - var/new_x = CLAMP((starting.x + (x_o * range_multiplier)), 0, world.maxx) - var/new_y = CLAMP((starting.y + (y_o * range_multiplier)), 0, world.maxy) + var/new_x = clamp((starting.x + (x_o * range_multiplier)), 0, world.maxx) + var/new_y = clamp((starting.y + (y_o * range_multiplier)), 0, world.maxy) var/turf/newtarget = locate(new_x, new_y, starting.z) return newtarget diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 318753e4ad..abb2d12a1f 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -649,7 +649,7 @@ continue usage += projectile_tick_speed_ecost usage += (tracked[I] * projectile_damage_tick_ecost_coefficient) - energy = CLAMP(energy - usage, 0, maxenergy) + energy = clamp(energy - usage, 0, maxenergy) if(energy <= 0) deactivate_field() visible_message("[src] blinks \"ENERGY DEPLETED\".") @@ -659,7 +659,7 @@ if(iscyborg(host.loc)) host = host.loc else - energy = CLAMP(energy + energy_recharge, 0, maxenergy) + energy = clamp(energy + energy_recharge, 0, maxenergy) return if(host.cell && (host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy)) host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index 93056adc99..014d4cb159 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -35,14 +35,14 @@ if(TH.force_wielded > initial(TH.force_wielded)) to_chat(user, "[TH] has already been refined before. It cannot be sharpened further!") return - TH.force_wielded = CLAMP(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay + TH.force_wielded = clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay if(I.force > initial(I.force)) to_chat(user, "[I] has already been refined before. It cannot be sharpened further!") return user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.") I.sharpness = IS_SHARP_ACCURATE - I.force = CLAMP(I.force + increment, 0, max) - I.throwforce = CLAMP(I.throwforce + increment, 0, max) + I.force = clamp(I.force + increment, 0, max) + I.throwforce = clamp(I.throwforce + increment, 0, max) I.name = "[prefix] [I.name]" name = "worn out [name]" desc = "[desc] At least, it used to." diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 16f29491be..1ba6fc2364 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -169,7 +169,7 @@ max_integrity = 75 /obj/item/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(ismovableatom(object)) + if(ismovable(object)) var/atom/movable/AM = object if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS)) return BLOCK_NONE diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index 4c64ed9dd4..dc761ee3bf 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -37,7 +37,7 @@ /obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/X in orange(5,pull)) - if(ismovableatom(X)) + if(ismovable(X)) var/atom/movable/A = X if(A == wielder) continue diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 70b00c72ec..add9ebd6b2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -71,9 +71,9 @@ /obj/item/stack/proc/update_weight() if(amount <= (max_amount * (1/3))) - w_class = CLAMP(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class) + w_class = clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class) else if (amount <= (max_amount * (2/3))) - w_class = CLAMP(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class) + w_class = clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class) else w_class = full_w_class diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 58e16ad615..1c92ed4e61 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -204,7 +204,7 @@ pressure = text2num(pressure) . = TRUE if(.) - distribute_pressure = CLAMP(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) + distribute_pressure = clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) /obj/item/tank/remove_air(amount) return air_contents.remove(amount) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 6fbf9316ed..08390e1607 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -256,7 +256,7 @@ . = ..() if(!sliver) return - if(proximity && ismovableatom(O) && O != sliver) + if(proximity && ismovable(O) && O != sliver) Consume(O, user) /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index e582aa7e67..8dac972d04 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -31,7 +31,7 @@ if(damage_flag) armor_protection = armor.getRating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. - armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) + armor_protection = clamp(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION) //the sound played when the obj is damaged. @@ -213,7 +213,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(T.intact && level == 1) //fire can't damage things hidden below the floor. return if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) - take_damage(CLAMP(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) + take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) resistance_flags |= ON_FIRE SSfire_burning.processing[src] = src @@ -244,7 +244,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(has_buckled_mobs()) for(var/m in buckled_mobs) var/mob/living/buckled_mob = m - buckled_mob.electrocute_act((CLAMP(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA) + buckled_mob.electrocute_act((clamp(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA) /obj/proc/reset_shocked() obj_flags &= ~BEING_SHOCKED diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a40314c7ad..5da04a6686 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -505,7 +505,7 @@ /obj/structure/closet/container_resist(mob/living/user) if(opened) return - if(ismovableatom(loc)) + if(ismovable(loc)) user.changeNext_move(CLICK_CD_BREAKOUT) user.last_special = world.time + CLICK_CD_BREAKOUT var/atom/movable/AM = loc diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index ee8f285230..ca66dbd8de 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -130,7 +130,7 @@ if(burn_time_remaining() < MAXIMUM_BURN_TIMER) flame_expiry_timer = world.time + MAXIMUM_BURN_TIMER else - fuel_added = CLAMP(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) + fuel_added = clamp(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) /obj/structure/fireplace/proc/burn_time_remaining() if(lit) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 7c373f2734..fd62ffd368 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -294,7 +294,7 @@ /obj/structure/girder/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSGRILLE) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 61983dcb4f..54e08db210 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -129,7 +129,7 @@ /obj/structure/grille/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSGRILLE) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 8cf5b1ee66..79a7ce0519 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -333,7 +333,7 @@ GLOBAL_LIST_EMPTY(crematoriums) to_chat(user, "That's not connected to anything!") /obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user) - if(!ismovableatom(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) + if(!ismovable(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) return if(!ismob(O)) if(!istype(O, /obj/structure/closet/body_bag)) @@ -375,6 +375,6 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/tray/m_tray/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 550c0216c6..bbdf6925f9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -103,7 +103,7 @@ /obj/structure/table/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) @@ -175,8 +175,8 @@ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) return //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - I.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - I.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) return 1 else return ..() @@ -610,7 +610,7 @@ /obj/structure/rack/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index bc4cd8df33..3a719d05b9 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -256,9 +256,9 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( if(depth) var/list/target_baseturfs if(length(copytarget.baseturfs)) - // with default inputs this would be Copy(CLAMP(2, -INFINITY, baseturfs.len)) + // with default inputs this would be Copy(clamp(2, -INFINITY, baseturfs.len)) // Don't forget a lower index is lower in the baseturfs stack, the bottom is baseturfs[1] - target_baseturfs = copytarget.baseturfs.Copy(CLAMP(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len)) + target_baseturfs = copytarget.baseturfs.Copy(clamp(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len)) else if(!ignore_bottom) target_baseturfs = list(copytarget.baseturfs) if(target_baseturfs) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f31649eaca..849b6cf45d 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -441,7 +441,7 @@ for(var/V in contents) var/atom/A = V if(!QDELETED(A) && A.level >= affecting_level) - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A if(!AM.ex_check(explosion_id)) continue diff --git a/code/game/world.dm b/code/game/world.dm index 77361310b8..bee595047f 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -10,9 +10,7 @@ GLOBAL_LIST(topic_status_cache) /world/New() enable_debugger() -#if DM_VERSION >= 513 && DM_BUILD >= 1506 world.Profile(PROFILE_START) -#endif log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!") diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 702e2071bd..56c778dc85 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -95,7 +95,7 @@ var/new_volume = input(user, "Choose a volume.", "Sound Emitter", sound_volume) as null|num if(isnull(new_volume)) return - new_volume = CLAMP(new_volume, 0, 100) + new_volume = clamp(new_volume, 0, 100) sound_volume = new_volume to_chat(user, "Volume set to [sound_volume]%.") if(href_list["edit_mode"]) @@ -118,7 +118,7 @@ var/new_radius = input(user, "Choose a radius.", "Sound Emitter", sound_volume) as null|num if(isnull(new_radius)) return - new_radius = CLAMP(new_radius, 0, 127) + new_radius = clamp(new_radius, 0, 127) play_radius = new_radius to_chat(user, "Audible radius set to [play_radius].") if(href_list["play"]) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 7b59e72403..356746ddbc 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -393,7 +393,7 @@ var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) if (agegate && type == "note" && isnum(nsd) && isnum(nfd) && nsd > nfd) - var/alpha = CLAMP(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100) + var/alpha = clamp(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100) if (alpha < 100) if (alpha <= 15) if (skipped) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 62c2dc900c..342f2ca6eb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2363,7 +2363,7 @@ return var/list/offset = splittext(href_list["offset"],",") - var/number = CLAMP(text2num(href_list["object_count"]), 1, 100) + var/number = clamp(text2num(href_list["object_count"]), 1, 100) var/X = offset.len > 0 ? text2num(offset[1]) : 0 var/Y = offset.len > 1 ? text2num(offset[2]) : 0 var/Z = offset.len > 2 ? text2num(offset[3]) : 0 diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 83f2839438..869e44e4f5 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -85,7 +85,7 @@ if ("set_charge") var/newcharge = input("New charge (0-[borg.cell.maxcharge]):", borg.name, borg.cell.charge) as num|null if (newcharge) - borg.cell.charge = CLAMP(newcharge, 0, borg.cell.maxcharge) + borg.cell.charge = clamp(newcharge, 0, borg.cell.maxcharge) message_admins("[key_name_admin(user)] set the charge of [ADMIN_LOOKUPFLW(borg)] to [borg.cell.charge].") log_admin("[key_name(user)] set the charge of [key_name(borg)] to [borg.cell.charge].") if ("remove_cell") diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index cbbec40f85..066c38bcba 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -10,7 +10,7 @@ var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num if(!freq) freq = 1 - vol = CLAMP(vol, 1, 100) + vol = clamp(vol, 1, 100) var/sound/admin_sound = new() admin_sound.file = S diff --git a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm index 3757aecd02..fbdeea6b84 100644 --- a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume) ..() if(exposed_temperature) - adjustFireLoss(CLAMP(0.01 * exposed_temperature, 1, 5)) + adjustFireLoss(clamp(0.01 * exposed_temperature, 1, 5)) else adjustFireLoss(5) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index aed64e4039..02be432045 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) B.hud_used.blobpwrdisplay.maptext = "
[round(blob_core.obj_integrity)]
" /mob/camera/blob/proc/add_points(points) - blob_points = CLAMP(blob_points + points, 0, max_blob_points) + blob_points = clamp(blob_points + points, 0, max_blob_points) hud_used.blobpwrdisplay.maptext = "
[round(blob_points)]
" /mob/camera/blob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm index 444b10684b..5717dc557d 100644 --- a/code/modules/antagonists/blob/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -77,7 +77,7 @@ /obj/structure/blob/CanAStarPass(ID, dir, caller) . = 0 - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSBLOB) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index efccb5591e..3bfc76322d 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -39,7 +39,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/antagonist/bloodsucker/proc/AddBloodVolume(value) - owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, max_blood_volume) + owner.current.blood_volume = clamp(owner.current.blood_volume + value, 0, max_blood_volume) update_hud() /datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1) @@ -112,7 +112,7 @@ CheckVampOrgans() // Heart, Eyes if(check_limbs(costMult)) return TRUE - + // BRUTE: Always Heal var/bruteheal = min(C.getBruteLoss(), actual_regen) var/toxinheal = min(C.getToxLoss(), actual_regen) @@ -121,7 +121,7 @@ if(mult == 0) return TRUE if(owner.current.stat >= UNCONSCIOUS) //Faster regeneration while unconcious, so you dont have to wait all day - mult *= 2 + mult *= 2 // We have damage. Let's heal (one time) C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body. C.adjustFireLoss(-fireheal * mult, forced = TRUE) @@ -129,7 +129,7 @@ //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. AddBloodVolume((bruteheal * -0.5 + fireheal * -1 + toxinheal * -0.2) / mult * costMult) // Costs blood to heal return TRUE // Healed! Done for this tick. - + /datum/antagonist/bloodsucker/proc/check_limbs(costMult) @@ -137,7 +137,7 @@ var/mob/living/carbon/C = owner.current var/list/missing = C.get_missing_limbs() if(missing.len && C.blood_volume < limb_regen_cost + 5) - return FALSE + return FALSE for(var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it. C.regenerate_limb(targetLimbZone, FALSE) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head")) AddBloodVolume(50) @@ -183,7 +183,7 @@ owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD)) // Nutrition owner.current.nutrition = clamp(owner.current.blood_volume, 545, 0) //The amount of blood is how full we are. - //A bit higher regeneration based on blood volume + //A bit higher regeneration based on blood volume if(owner.current.blood_volume < 700) additional_regen = 0.4 else if(owner.current.blood_volume < BLOOD_VOLUME_NORMAL) @@ -369,8 +369,8 @@ //Puke blood only if puke_blood is true, and loose some blood, else just puke normally. if(puke_blood) C.blood_volume = max(0, C.blood_volume - foodInGut * 2) - C.vomit(foodInGut * 4, foodInGut * 2, 0) - else + C.vomit(foodInGut * 4, foodInGut * 2, 0) + else C.vomit(foodInGut * 4, FALSE, 0) C.Stun(30) //C.Dizzy(50) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm index 0c80ce0dee..7043c2f429 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm @@ -87,7 +87,7 @@ // Heads? if (target_role == "HEAD") target_amount = rand(1, round(SSticker.mode.num_players() / 20)) - target_amount = CLAMP(target_amount,1,3) + target_amount = clamp(target_amount,1,3) // Department? else switch(target_role) @@ -100,7 +100,7 @@ if("Quartermaster") department_string = "Cargo" target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10)) - target_amount = CLAMP(target_amount, 2, 4) + target_amount = clamp(target_amount, 2, 4) ..() // EXPLANATION diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm index f68191d6d7..dd7e835d3a 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -63,7 +63,7 @@ // Find Animals in Area /* if(rand(0,2) == 0) var/mobCount = 0 - var/mobMax = CLAMP(area_turfs.len / 25, 1, 4) + var/mobMax = clamp(area_turfs.len / 25, 1, 4) for (var/turf/T in area_turfs) if(!T) continue var/mob/living/simple_animal/SA = locate() in T diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index 05f11294de..b0259c460e 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -239,7 +239,7 @@ if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \ extra_checks = CALLBACK(fabricator, /obj/item/clockwork/replica_fabricator.proc/fabricator_repair_checks, repair_values, src, user, TRUE))) break - obj_integrity = CLAMP(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity) + obj_integrity = clamp(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity) adjust_clockwork_power(-repair_values["power_required"]) playsound(src, 'sound/machines/click.ogg', 50, 1) diff --git a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm index f927fc237d..628add0cb3 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm @@ -10,7 +10,7 @@ if(GLOB.ratvar_awakens) current_power = GLOB.clockwork_power = INFINITY else - current_power = GLOB.clockwork_power = CLAMP(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER) + current_power = GLOB.clockwork_power = clamp(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER) for(var/obj/effect/clockwork/sigil/transmission/T in GLOB.all_clockwork_objects) T.update_icon() var/unlock_message diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index c7c9c42ee9..de2e85a501 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -211,7 +211,7 @@ var/mob/living/carbon/C = L C.stuttering = max(8, C.stuttering) C.drowsyness = max(8, C.drowsyness) - C.confused += CLAMP(16 - C.confused, 0, 8) + C.confused += clamp(16 - C.confused, 0, 8) C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) L.adjustFireLoss(15) ..() diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm index 4a10862e28..234f0445e0 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm @@ -59,7 +59,7 @@ if(issilicon(L)) L.DefaultCombatKnockdown(100) else if(iscultist(L)) - L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage + L.confused += clamp(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage to_chat(L, "[src] crashes into you with burning force, sending you reeling!") L.adjust_fire_stacks(2) L.DefaultCombatKnockdown(1) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index 0fd6c8a8dc..ffe9ecfa80 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -111,7 +111,7 @@ var/mob/living/L = M.current if(ishuman(L) && L.stat != DEAD) human_servants++ - construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 + construct_limit = round(clamp((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 //Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage. /datum/clockwork_scripture/create_object/summon_arbiter diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm index 9b4ac8085c..5fbaf9fd57 100644 --- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm +++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm @@ -63,4 +63,4 @@ break if(!M) M = H.apply_status_effect(STATUS_EFFECT_MANIAMOTOR, src) - M.severity = CLAMP(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY) + M.severity = clamp(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index d64e99d206..28d1a66e00 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -454,16 +454,16 @@ S.emp_act(EMP_HEAVY) else if(iscarbon(target)) var/mob/living/carbon/C = L - C.silent += CLAMP(12 - C.silent, 0, 6) - C.stuttering += CLAMP(30 - C.stuttering, 0, 15) - C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15) + C.silent += clamp(12 - C.silent, 0, 6) + C.stuttering += clamp(30 - C.stuttering, 0, 15) + C.cultslurring += clamp(30 - C.cultslurring, 0, 15) C.Jitter(15) else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff if(iscarbon(target)) var/mob/living/carbon/C = L C.stuttering = max(10, C.stuttering) C.drowsyness = max(10, C.drowsyness) - C.confused += CLAMP(20 - C.confused, 0, 10) + C.confused += clamp(20 - C.confused, 0, 10) L.adjustBruteLoss(15) to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]") uses-- diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index b05aa7f769..fcb57a5a2e 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -731,7 +731,7 @@ if(!L.anti_magic_check()) if(is_servant_of_ratvar(L)) to_chat(L, "\"Kneel for me, scum\"") - L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before + L.confused += clamp(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before L.DefaultCombatKnockdown(15) L.adjustBruteLoss(10) else diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index b4f896fa08..5552efef1f 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -358,7 +358,7 @@ if(NUKEUI_AWAIT_TIMER) var/number_value = text2num(numeric_input) if(number_value) - timer_set = CLAMP(number_value, minimum_timer_set, maximum_timer_set) + timer_set = clamp(number_value, minimum_timer_set, maximum_timer_set) playsound(src, 'sound/machines/nuke/general_beep.ogg', 50, FALSE) set_safety() . = TRUE diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index ebe894138d..59ef15b4cf 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -282,7 +282,7 @@ var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - air.temperature = CLAMP(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY) + air.temperature = clamp(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY) return REACTING /datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst. diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 9238b8602b..2dc0afac26 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -159,13 +159,13 @@ pump_direction = 1 if("set_input_pressure" in signal.data) - input_pressure_min = CLAMP(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50) + input_pressure_min = clamp(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50) if("set_output_pressure" in signal.data) - output_pressure_max = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + output_pressure_max = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if("set_external_pressure" in signal.data) - external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) if("status" in signal.data) spawn(2) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 02eb95acab..051dc965ad 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -122,7 +122,7 @@ Passive gate is similar to the regular pump except: pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -144,7 +144,7 @@ Passive gate is similar to the regular pump except: on = !on if("set_output_pressure" in signal.data) - target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 9e49953df5..0e41f78e20 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -145,7 +145,7 @@ pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -167,7 +167,7 @@ on = !on if("set_output_pressure" in signal.data) - target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm index bc58ef158f..7bdd22cbd1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm @@ -91,7 +91,7 @@ pressure = text2num(pressure) . = TRUE if(.) - open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE) + open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE) investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("close_pressure") var/pressure = params["close_pressure"] @@ -106,6 +106,6 @@ pressure = text2num(pressure) . = TRUE if(.) - close_pressure = CLAMP(pressure, 0, open_pressure) + close_pressure = clamp(pressure, 0, open_pressure) investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 864e3eef5e..1005f72afe 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -135,7 +135,7 @@ rate = text2num(rate) . = TRUE if(.) - transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -153,7 +153,7 @@ if("set_transfer_rate" in signal.data) var/datum/gas_mixture/air1 = airs[1] - transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) + transfer_rate = clamp(text2num(signal.data["set_transfer_rate"]),0,air1.volume) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 1099020662..78258dd10a 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -175,7 +175,7 @@ rate = text2num(rate) . = TRUE if(.) - transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) if("filter") filter_type = null diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 5b929452fe..dcf0d09bee 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -164,7 +164,7 @@ pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("node1") var/value = text2num(params["concentration"]) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 87ab4fa643..05720583f9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -123,7 +123,7 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) var/datum/gas_mixture/air_contents = airs[1] - volume_rate = CLAMP(number, 0, air_contents.volume) + volume_rate = clamp(number, 0, air_contents.volume) if("status" in signal.data) spawn(2) @@ -172,7 +172,7 @@ rate = text2num(rate) . = TRUE if(.) - volume_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + volume_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [volume_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() broadcast_status() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm index 4b6a4a4c10..1d8b875528 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm @@ -92,7 +92,7 @@ pressure = text2num(pressure) . = TRUE if(.) - open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE) + open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE) investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("close_pressure") var/pressure = params["close_pressure"] @@ -107,6 +107,6 @@ pressure = text2num(pressure) . = TRUE if(.) - close_pressure = CLAMP(pressure, 0, open_pressure) + close_pressure = clamp(pressure, 0, open_pressure) investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 877826c1c1..f98f628cab 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -170,7 +170,7 @@ target = text2num(target) . = TRUE if(.) - target_temperature = CLAMP(target, min_temperature, max_temperature) + target_temperature = clamp(target, min_temperature, max_temperature) investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index f2f2329661..9788bcb4ee 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -210,13 +210,13 @@ if("set_internal_pressure" in signal.data) var/old_pressure = internal_pressure_bound - internal_pressure_bound = CLAMP(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50) + internal_pressure_bound = clamp(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50) if(old_pressure != internal_pressure_bound) investigate_log(" internal pressure was set to [internal_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS) if("set_external_pressure" in signal.data) var/old_pressure = external_pressure_bound - external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) if(old_pressure != external_pressure_bound) investigate_log(" external pressure was set to [external_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS) @@ -227,10 +227,10 @@ internal_pressure_bound = 0 if("adjust_internal_pressure" in signal.data) - internal_pressure_bound = CLAMP(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50) + internal_pressure_bound = clamp(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50) if("adjust_external_pressure" in signal.data) - external_pressure_bound = CLAMP(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50) if("init" in signal.data) name = signal.data["init"] diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index b98098584f..33092f5354 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -128,7 +128,7 @@ if(initialize_directions & dir) return ..() if((NORTH|EAST) & dir) - user.ventcrawl_layer = CLAMP(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + user.ventcrawl_layer = clamp(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) if((SOUTH|WEST) & dir) - user.ventcrawl_layer = CLAMP(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + user.ventcrawl_layer = clamp(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) to_chat(user, "You align yourself with the [user.ventcrawl_layer]\th output.") diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 0b26cfc2f0..a41bdee3b6 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -390,7 +390,7 @@ pressure = text2num(pressure) . = TRUE if(.) - release_pressure = CLAMP(round(pressure), can_min_release_pressure, can_max_release_pressure) + release_pressure = clamp(round(pressure), can_min_release_pressure, can_max_release_pressure) investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS) if("valve") var/logmsg @@ -434,7 +434,7 @@ var/N = text2num(user_input) if(!N) return - timer_set = CLAMP(N,minimum_timer_set,maximum_timer_set) + timer_set = clamp(N,minimum_timer_set,maximum_timer_set) log_admin("[key_name(usr)] has activated a prototype valve timer") . = TRUE if("toggle_timer") diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 3603e46490..18e4da621a 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -150,7 +150,7 @@ pressure = text2num(pressure) . = TRUE if(.) - pump.target_pressure = CLAMP(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) + pump.target_pressure = clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS) if("eject") if(holding) diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm index 60191de934..8bba27ac88 100644 --- a/code/modules/buildmode/effects/line.dm +++ b/code/modules/buildmode/effects/line.dm @@ -12,7 +12,7 @@ var/matrix/mat = matrix() mat.Translate(0, 16) mat.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) - mat.Turn(90 - ATAN2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. + mat.Turn(90 - arctan(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. mat.Translate(atom_a.pixel_x, atom_a.pixel_y) transform = mat diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm index ba415c50fc..4aed8ac700 100644 --- a/code/modules/buildmode/submodes/copy.dm +++ b/code/modules/buildmode/submodes/copy.dm @@ -23,6 +23,6 @@ DuplicateObject(stored, perfectcopy=1, sameloc=0,newloc=T) log_admin("Build Mode: [key_name(c)] copied [stored] to [AREACOORD(object)]") else if(right_click) - if(ismovableatom(object)) // No copying turfs for now. + if(ismovable(object)) // No copying turfs for now. to_chat(c, "[object] set as template.") stored = object diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 74885d0ac0..989ccaf450 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -888,8 +888,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/viewscale = getviewsize(view) var/x = viewscale[1] var/y = viewscale[2] - x = CLAMP(x+change, min, max) - y = CLAMP(y+change, min,max) + x = clamp(x+change, min, max) + y = clamp(y+change, min,max) change_view("[x]x[y]") /client/proc/change_view(new_size) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 76e0b36961..30291236e2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1966,7 +1966,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/max_D = CONFIG_GET(number/penis_max_inches_prefs) var/new_length = input(user, "Penis length in inches:\n([min_D]-[max_D])", "Character Preference") as num|null if(new_length) - features["cock_length"] = CLAMP(round(new_length), min_D, max_D) + features["cock_length"] = clamp(round(new_length), min_D, max_D) if("cock_shape") var/new_shape @@ -2163,7 +2163,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/danger = CONFIG_GET(number/threshold_body_size_slowdown) var/new_body_size = input(user, "Choose your desired sprite size:\n([min*100]%-[max*100]%), Warning: May make your character look distorted[danger > min ? ", and an exponential slowdown will occur for those smaller than [danger*100]%!" : "!"]", "Character Preference", features["body_size"]*100) as num|null if (new_body_size) - new_body_size = CLAMP(new_body_size * 0.01, min, max) + new_body_size = clamp(new_body_size * 0.01, min, max) var/dorfy if(danger > new_body_size) dorfy = alert(user, "The chosen size appears to be smaller than the threshold of [danger*100]%, which will lead to an added exponential slowdown. Are you sure about that?", "Dwarfism Alert", "Yes", "Move it to the threshold", "No") diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index b7f8b8f911..a8137acf48 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -57,7 +57,7 @@ if(!(ismecha(M) && mech_sized)) return - if(ismovableatom(M)) + if(ismovable(M)) if(GLOB.portals.len) var/obj/effect/portal/P = pick(GLOB.portals) if(P && isturf(P.loc)) diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 1342b1fcbf..203eb3eef6 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -25,7 +25,7 @@ pixel_y = rand(-5, 5) /obj/item/reagent_containers/food/proc/adjust_food_quality(new_quality) - food_quality = CLAMP(new_quality,0,100) + food_quality = clamp(new_quality,0,100) /obj/item/reagent_containers/food/proc/checkLiked(var/fraction, mob/M) if(last_check_time + 50 < world.time) diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 68cc84c639..feba35da97 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -118,7 +118,7 @@ break if(href_list["portion"]) - portion = CLAMP(input("How much drink do you want to dispense per glass?") as num, 0, 50) + portion = clamp(input("How much drink do you want to dispense per glass?") as num, 0, 50) if(href_list["pour"] || href_list["m_pour"]) if(glasses-- <= 0) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 94c8d7219c..19ded25b08 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -125,7 +125,7 @@ return else bomb_timer = input(user, "Set the [bomb] timer from [BOMB_TIMER_MIN] to [BOMB_TIMER_MAX].", bomb, bomb_timer) as num - bomb_timer = CLAMP(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX) + bomb_timer = clamp(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX) bomb_defused = FALSE var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds." diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 74432c7cbe..6d9e141309 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -138,7 +138,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico /datum/chatOutput/proc/setMusicVolume(volume = "") if(volume) - adminMusicVolume = CLAMP(text2num(volume), 0, 100) + adminMusicVolume = clamp(text2num(volume), 0, 100) //Sends client connection details to the chat to handle and save /datum/chatOutput/proc/sendClientData() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 6a3fd56208..7fac7ef9b6 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -311,7 +311,7 @@ else if(href_list["create"]) var/amount = (text2num(href_list["amount"])) //Can't be outside these (if you change this keep a sane limit) - amount = CLAMP(amount, 1, 50) + amount = clamp(amount, 1, 50) var/id = href_list["create"] if(!stored_research.researched_designs.Find(id)) //naughty naughty diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 1775a1f9b1..a18dbe165d 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -199,8 +199,8 @@ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) return //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - W.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - W.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + W.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + W.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) else return ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 718033ac56..b7665d7b5d 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -928,26 +928,26 @@ /// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds./// /obj/machinery/hydroponics/proc/adjustNutri(adjustamt) - nutrilevel = CLAMP(nutrilevel + adjustamt, 0, maxnutri) + nutrilevel = clamp(nutrilevel + adjustamt, 0, maxnutri) /obj/machinery/hydroponics/proc/adjustWater(adjustamt) - waterlevel = CLAMP(waterlevel + adjustamt, 0, maxwater) + waterlevel = clamp(waterlevel + adjustamt, 0, maxwater) if(adjustamt>0) adjustToxic(-round(adjustamt/4))//Toxicity dilutation code. The more water you put in, the lesser the toxin concentration. /obj/machinery/hydroponics/proc/adjustHealth(adjustamt) if(myseed && !dead) - plant_health = CLAMP(plant_health + adjustamt, 0, myseed.endurance) + plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance) /obj/machinery/hydroponics/proc/adjustToxic(adjustamt) - toxic = CLAMP(toxic + adjustamt, 0, 100) + toxic = clamp(toxic + adjustamt, 0, 100) /obj/machinery/hydroponics/proc/adjustPests(adjustamt) - pestlevel = CLAMP(pestlevel + adjustamt, 0, 10) + pestlevel = clamp(pestlevel + adjustamt, 0, 10) /obj/machinery/hydroponics/proc/adjustWeeds(adjustamt) - weedlevel = CLAMP(weedlevel + adjustamt, 0, 10) + weedlevel = clamp(weedlevel + adjustamt, 0, 10) /obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index aa0e789721..5e49a32a23 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -211,7 +211,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) /// Setters procs /// /obj/item/seeds/proc/adjust_yield(adjustamt) if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable - yield = CLAMP(yield + adjustamt, 0, 10) + yield = clamp(yield + adjustamt, 0, 10) if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) yield = 1 // Mushrooms always have a minimum yield of 1. @@ -220,39 +220,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) C.value = yield /obj/item/seeds/proc/adjust_lifespan(adjustamt) - lifespan = CLAMP(lifespan + adjustamt, 10, 100) + lifespan = clamp(lifespan + adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan) if(C) C.value = lifespan /obj/item/seeds/proc/adjust_endurance(adjustamt) - endurance = CLAMP(endurance + adjustamt, 10, 100) + endurance = clamp(endurance + adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance) if(C) C.value = endurance /obj/item/seeds/proc/adjust_production(adjustamt) if(yield != -1) - production = CLAMP(production + adjustamt, 1, 10) + production = clamp(production + adjustamt, 1, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production) if(C) C.value = production /obj/item/seeds/proc/adjust_potency(adjustamt) if(potency != -1) - potency = CLAMP(potency + adjustamt, 0, 100) + potency = clamp(potency + adjustamt, 0, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency) if(C) C.value = potency /obj/item/seeds/proc/adjust_weed_rate(adjustamt) - weed_rate = CLAMP(weed_rate + adjustamt, 0, 10) + weed_rate = clamp(weed_rate + adjustamt, 0, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate) if(C) C.value = weed_rate /obj/item/seeds/proc/adjust_weed_chance(adjustamt) - weed_chance = CLAMP(weed_chance + adjustamt, 0, 67) + weed_chance = clamp(weed_chance + adjustamt, 0, 67) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance) if(C) C.value = weed_chance @@ -261,7 +261,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) /obj/item/seeds/proc/set_yield(adjustamt) if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable - yield = CLAMP(adjustamt, 0, 10) + yield = clamp(adjustamt, 0, 10) if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) yield = 1 // Mushrooms always have a minimum yield of 1. @@ -270,39 +270,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) C.value = yield /obj/item/seeds/proc/set_lifespan(adjustamt) - lifespan = CLAMP(adjustamt, 10, 100) + lifespan = clamp(adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan) if(C) C.value = lifespan /obj/item/seeds/proc/set_endurance(adjustamt) - endurance = CLAMP(adjustamt, 10, 100) + endurance = clamp(adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance) if(C) C.value = endurance /obj/item/seeds/proc/set_production(adjustamt) if(yield != -1) - production = CLAMP(adjustamt, 1, 10) + production = clamp(adjustamt, 1, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production) if(C) C.value = production /obj/item/seeds/proc/set_potency(adjustamt) if(potency != -1) - potency = CLAMP(adjustamt, 0, 100) + potency = clamp(adjustamt, 0, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency) if(C) C.value = potency /obj/item/seeds/proc/set_weed_rate(adjustamt) - weed_rate = CLAMP(adjustamt, 0, 10) + weed_rate = clamp(adjustamt, 0, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate) if(C) C.value = weed_rate /obj/item/seeds/proc/set_weed_chance(adjustamt) - weed_chance = CLAMP(adjustamt, 0, 67) + weed_chance = clamp(adjustamt, 0, 67) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance) if(C) C.value = weed_chance diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index 67feb14457..30d8b7b3a7 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -213,7 +213,7 @@ /datum/song/proc/sanitize_tempo(new_tempo) new_tempo = abs(new_tempo) - return CLAMP(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS) + return clamp(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS) /datum/song/proc/get_bpm() return 600 / tempo @@ -242,22 +242,22 @@ cached_linear_dropoff = volume_decrease_per_decisecond /datum/song/proc/set_volume(volume) - src.volume = CLAMP(volume, max(0, min_volume), min(100, max_volume)) + src.volume = clamp(volume, max(0, min_volume), min(100, max_volume)) update_sustain() updateDialog() /datum/song/proc/set_dropoff_volume(volume) - sustain_dropoff_volume = CLAMP(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100) + sustain_dropoff_volume = clamp(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100) update_sustain() updateDialog() /datum/song/proc/set_exponential_drop_rate(drop) - sustain_exponential_dropoff = CLAMP(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX) + sustain_exponential_dropoff = clamp(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX) update_sustain() updateDialog() /datum/song/proc/set_linear_falloff_duration(duration) - sustain_linear_duration = CLAMP(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN) + sustain_linear_duration = clamp(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN) update_sustain() updateDialog() diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index 873ff0e1a7..d9595797d7 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -230,7 +230,7 @@ else if(href_list["setnoteshift"]) var/amount = input(usr, "Set note shift", "Note Shift") as null|num if(!isnull(amount)) - note_shift = CLAMP(amount, note_shift_min, note_shift_max) + note_shift = clamp(amount, note_shift_min, note_shift_max) else if(href_list["setsustainmode"]) var/choice = input(usr, "Choose a sustain mode", "Sustain Mode") as null|anything in list("Linear", "Exponential") diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index 2573da324a..5e7c5652a0 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -52,8 +52,8 @@ if(!num) //it's an accidental accents[key] = oct_acc //if they misspelled it/fucked up that's on them lmao, no safety checks. else //octave - octaves[key] = CLAMP(num, octave_min, octave_max) - compiled_chord += CLAMP((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max) + octaves[key] = clamp(num, octave_min, octave_max) + compiled_chord += clamp((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max) compiled_chord += tempodiv //this goes last if(length(compiled_chord)) compiled_chords[++compiled_chords.len] = compiled_chord diff --git a/code/modules/integrated_electronics/core/special_pins/index_pin.dm b/code/modules/integrated_electronics/core/special_pins/index_pin.dm index 06267eec61..e904c4c6d0 100644 --- a/code/modules/integrated_electronics/core/special_pins/index_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/index_pin.dm @@ -14,7 +14,7 @@ new_data = 0 if(isnum(new_data)) - data = CLAMP(round(new_data), 0, IC_MAX_LIST_LENGTH) + data = clamp(round(new_data), 0, IC_MAX_LIST_LENGTH) holder.on_data_written() /datum/integrated_io/index/display_pin_type() diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm index 6b4f46f83d..219e30c57f 100644 --- a/code/modules/integrated_electronics/subtypes/atmospherics.dm +++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm @@ -308,7 +308,7 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() /obj/item/integrated_circuit/atmospherics/pump/filter/on_data_written() var/amt = get_pin_data(IC_INPUT, 5) - target_pressure = CLAMP(amt, 0, PUMP_MAX_PRESSURE) + target_pressure = clamp(amt, 0, PUMP_MAX_PRESSURE) /obj/item/integrated_circuit/atmospherics/pump/filter/do_work() activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/data_transfer.dm b/code/modules/integrated_electronics/subtypes/data_transfer.dm index 8e1c715d83..8db1db4e00 100644 --- a/code/modules/integrated_electronics/subtypes/data_transfer.dm +++ b/code/modules/integrated_electronics/subtypes/data_transfer.dm @@ -125,7 +125,7 @@ /obj/item/integrated_circuit/transfer/pulsedemultiplexer/do_work() var/output_index = get_pin_data(IC_INPUT, 1) - if(output_index == CLAMP(output_index, 1, number_of_pins)) + if(output_index == clamp(output_index, 1, number_of_pins)) activate_pin(round(output_index + 1 ,1)) /obj/item/integrated_circuit/transfer/pulsedemultiplexer/medium diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 0be6fd8686..49e6855b38 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -389,8 +389,8 @@ activate_pin(3) return var/turf/T = get_turf(assembly) - var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx) - var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy) + var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx) + var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy) var/turf/A = locate(target_x, target_y, T.z) set_pin_data(IC_OUTPUT, 1, null) if(!A || !(A in view(T))) @@ -532,7 +532,7 @@ var/rad = get_pin_data(IC_INPUT, 2) if(isnum(rad)) - rad = CLAMP(rad, 0, 8) + rad = clamp(rad, 0, 8) radius = rad /obj/item/integrated_circuit/input/advanced_locator_list/do_work() @@ -594,7 +594,7 @@ /obj/item/integrated_circuit/input/advanced_locator/on_data_written() var/rad = get_pin_data(IC_INPUT, 2) if(isnum(rad)) - rad = CLAMP(rad, 0, 8) + rad = clamp(rad, 0, 8) radius = rad /obj/item/integrated_circuit/input/advanced_locator/do_work() diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index d1cd852651..fd4e6abfc5 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -236,7 +236,7 @@ var/mode = get_pin_data(IC_INPUT, 2) switch(ord) if(1) - mode = CLAMP(mode, GRAB_PASSIVE, max_grab) + mode = clamp(mode, GRAB_PASSIVE, max_grab) if(AM) if(check_target(AM, exclude_contents = TRUE)) acting_object.investigate_log("grabbed ([AM]) using [src].", INVESTIGATE_CIRCUIT) @@ -329,9 +329,9 @@ // If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it. var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc - var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx) - var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy) - var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) + var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx) + var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy) + var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) //remove damage A.throwforce = 0 A.embedding = list("embed_chance" = 0) @@ -447,7 +447,7 @@ if(!S) activate_pin(4) return - if(materials.insert_item(S, CLAMP(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) ) + if(materials.insert_item(S, clamp(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) ) AfterMaterialInsert() activate_pin(3) else @@ -458,7 +458,7 @@ for(var/I in 1 to mtypes.len) var/datum/material/M = materials.materials[mtypes[I]] if(M) - var/U = CLAMP(get_pin_data(IC_INPUT, I+2),-100000,100000) + var/U = clamp(get_pin_data(IC_INPUT, I+2),-100000,100000) if(!U) continue if(!mt) //Invalid input diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 6005709dde..47b6e151cb 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -112,7 +112,7 @@ var/brightness = get_pin_data(IC_INPUT, 2) if(new_color && isnum(brightness)) - brightness = CLAMP(brightness, 0, 10) + brightness = clamp(brightness, 0, 10) light_rgb = new_color light_brightness = brightness @@ -151,7 +151,7 @@ var/selected_sound = sounds[ID] if(!selected_sound) return - vol = CLAMP(vol ,0 , 100) + vol = clamp(vol ,0 , 100) playsound(get_turf(src), selected_sound, vol, freq, -1) var/atom/A = get_object() A.investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 0fc9f58db8..663ba9fe16 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -94,7 +94,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, volume) + new_amount = clamp(new_amount, 0, volume) transfer_amount = new_amount @@ -222,7 +222,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, 50) + new_amount = clamp(new_amount, 0, 50) transfer_amount = new_amount /obj/item/integrated_circuit/reagent/pump/do_work() @@ -468,7 +468,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, 50) + new_amount = clamp(new_amount, 0, 50) transfer_amount = new_amount /obj/item/integrated_circuit/reagent/filter/do_work() diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index d0c47f0950..5dc866c556 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -57,8 +57,8 @@ activate_pin(3) return var/turf/T = get_turf(assembly) - var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx) - var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy) + var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx) + var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy) var/turf/A = locate(target_x, target_y, T.z) set_pin_data(IC_OUTPUT, 1, null) if(!A||A==T) diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm index 1f1d5444bb..cae43718c2 100644 --- a/code/modules/integrated_electronics/subtypes/time.dm +++ b/code/modules/integrated_electronics/subtypes/time.dm @@ -64,7 +64,7 @@ /obj/item/integrated_circuit/time/delay/custom/do_work() var/delay_input = get_pin_data(IC_INPUT, 1) if(delay_input && isnum(delay_input) ) - var/new_delay = CLAMP(delay_input ,1 ,36000) //An hour. + var/new_delay = clamp(delay_input ,1 ,36000) //An hour. delay = new_delay ..() @@ -119,7 +119,7 @@ /obj/item/integrated_circuit/time/ticker/custom/on_data_written() var/delay_input = get_pin_data(IC_INPUT, 2) if(delay_input && isnum(delay_input) ) - var/new_delay = CLAMP(delay_input ,1 ,1 HOURS) + var/new_delay = clamp(delay_input ,1 ,1 HOURS) delay = new_delay ..() diff --git a/code/modules/integrated_electronics/subtypes/trig.dm b/code/modules/integrated_electronics/subtypes/trig.dm index cefa25e945..75580911c3 100644 --- a/code/modules/integrated_electronics/subtypes/trig.dm +++ b/code/modules/integrated_electronics/subtypes/trig.dm @@ -71,7 +71,7 @@ var/result = null var/A = get_pin_data(IC_INPUT, 1) if(!isnull(A)) - result = TAN(A) + result = tan(A) set_pin_data(IC_OUTPUT, 1, result) push_data() diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm index 02340970af..2f6a2cd841 100644 --- a/code/modules/integrated_electronics/subtypes/weaponized.dm +++ b/code/modules/integrated_electronics/subtypes/weaponized.dm @@ -102,8 +102,8 @@ yo.data = round(yo.data, 1) var/turf/T = get_turf(assembly) - var/target_x = CLAMP(T.x + xo.data, 0, world.maxx) - var/target_y = CLAMP(T.y + yo.data, 0, world.maxy) + var/target_x = clamp(T.x + xo.data, 0, world.maxx) + var/target_y = clamp(T.y + yo.data, 0, world.maxy) assembly.visible_message("[assembly] fires [installed_gun]!") shootAt(locate(target_x, target_y, T.z)) @@ -191,7 +191,7 @@ var/datum/integrated_io/detonation_time = inputs[1] var/dt if(isnum(detonation_time.data) && detonation_time.data > 0) - dt = CLAMP(detonation_time.data, 1, 12)*10 + dt = clamp(detonation_time.data, 1, 12)*10 else dt = 15 addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt) @@ -293,9 +293,9 @@ // If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it. var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc - var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx) - var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy) - var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) + var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx) + var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy) + var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) assembly.visible_message("\The [assembly] has thrown [A]!") log_attack("[assembly] [REF(assembly)] has thrown [A] with lethal force.") A.forceMove(drop_location()) @@ -324,7 +324,7 @@ /obj/item/integrated_circuit/weaponized/stun/do_work() - var/stunforce = CLAMP(get_pin_data(IC_INPUT, 1),1,70) + var/stunforce = clamp(get_pin_data(IC_INPUT, 1),1,70) var/mob/living/L = assembly.loc if(attempt_stun(L,stunforce)) activate_pin(2) diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index b307e66b39..f31ea9022b 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -74,7 +74,7 @@ var/datum/language_holder/other if(istype(thing, /datum/language_holder)) other = thing - else if(ismovableatom(thing)) + else if(ismovable(thing)) var/atom/movable/AM = thing other = AM.get_language_holder() else if(istype(thing, /datum/mind)) @@ -94,7 +94,7 @@ language_menu.ui_interact(user) /datum/language_holder/proc/get_atom() - if(ismovableatom(owner)) + if(ismovable(owner)) . = owner else if(istype(owner, /datum/mind)) var/datum/mind/M = owner diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 008724b10f..144037b3a7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -267,7 +267,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "(Order book by SS13BN)

" dat += "" dat += "" - dat += libcomp_menu[CLAMP(page,1,libcomp_menu.len)] + dat += libcomp_menu[clamp(page,1,libcomp_menu.len)] dat += "" dat += "
AUTHORTITLECATEGORY
<<<< >>>>
" dat += "
(Return to main menu)
" diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 8712a66290..779dd9c3ea 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -38,7 +38,7 @@ if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. QDEL_NULL(light) else - if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. + if (!ismovable(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 86b501c455..e7d7fd4898 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -93,7 +93,7 @@ gridSet.ycrd = text2num(dmmRegex.group[4]) gridSet.zcrd = text2num(dmmRegex.group[5]) - bounds[MAP_MINX] = min(bounds[MAP_MINX], CLAMP(gridSet.xcrd, x_lower, x_upper)) + bounds[MAP_MINX] = min(bounds[MAP_MINX], clamp(gridSet.xcrd, x_lower, x_upper)) bounds[MAP_MINZ] = min(bounds[MAP_MINZ], gridSet.zcrd) bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], gridSet.zcrd) @@ -113,15 +113,15 @@ if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - bounds[MAP_MINY] = min(bounds[MAP_MINY], CLAMP(gridSet.ycrd, y_lower, y_upper)) + bounds[MAP_MINY] = min(bounds[MAP_MINY], clamp(gridSet.ycrd, y_lower, y_upper)) gridSet.ycrd += gridLines.len - 1 // Start at the top and work down - bounds[MAP_MAXY] = max(bounds[MAP_MAXY], CLAMP(gridSet.ycrd, y_lower, y_upper)) + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], clamp(gridSet.ycrd, y_lower, y_upper)) var/maxx = gridSet.xcrd if(gridLines.len) //Not an empty map maxx = max(maxx, gridSet.xcrd + length(gridLines[1]) / key_len - 1) - bounds[MAP_MAXX] = CLAMP(max(bounds[MAP_MAXX], maxx), x_lower, x_upper) + bounds[MAP_MAXX] = clamp(max(bounds[MAP_MAXX], maxx), x_lower, x_upper) CHECK_TICK // Indicate failure to parse any coordinates by nulling bounds diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 56e1a04b95..4dd86a847a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -428,7 +428,7 @@ /obj/item/projectile/hook/on_hit(atom/target) . = ..() - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/A = target if(A.anchored) return @@ -833,13 +833,13 @@ force = 0 var/ghost_counter = ghost_check() - force = CLAMP((ghost_counter * 4), 0, 75) + force = clamp((ghost_counter * 4), 0, 75) user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") return ..() /obj/item/melee/ghost_sword/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) var/ghost_counter = ghost_check() - final_block_chance += CLAMP((ghost_counter * 5), 0, 75) + final_block_chance += clamp((ghost_counter * 5), 0, 75) owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") return ..() diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index c0356dd1ab..09246abc46 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) var/list/logs = GLOB.silo_access_logs[REF(src)] var/len = LAZYLEN(logs) var/num_pages = 1 + round((len - 1) / 30) - var/page = CLAMP(log_page, 1, num_pages) + var/page = clamp(log_page, 1, num_pages) if(num_pages > 1) for(var/i in 1 to num_pages) if(i == page) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index d04c0104e5..e89bbef58d 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -87,7 +87,7 @@ if(istype(new_material)) chosen = new_material if(href_list["chooseAmt"]) - coinsToProduce = CLAMP(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000) + coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000) updateUsrDialog() if(href_list["makeCoins"]) var/temp_coins = coinsToProduce diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b2d02d8fa2..dc7384124d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -570,7 +570,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp views |= i var/new_view = input("Choose your new view", "Modify view range", 7) as null|anything in views if(new_view) - client.change_view(CLAMP(new_view, 7, max_view)) + client.change_view(clamp(new_view, 7, max_view)) else client.change_view(CONFIG_GET(string/default_view)) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index f32d84ae73..4cb93a1b6a 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -229,7 +229,7 @@ var/adjusted_amount if(amount >= 0 && maximum) var/brainloss = get_brain_damage() - var/new_brainloss = CLAMP(brainloss + amount, 0, maximum) + var/new_brainloss = clamp(brainloss + amount, 0, maximum) if(brainloss > new_brainloss) //brainloss is over the cap already return 0 adjusted_amount = new_brainloss - brainloss diff --git a/code/modules/mob/living/carbon/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm index 4a63a72686..71d61cab25 100644 --- a/code/modules/mob/living/carbon/alien/status_procs.dm +++ b/code/modules/mob/living/carbon/alien/status_procs.dm @@ -20,5 +20,5 @@ /mob/living/carbon/alien/AdjustStun(amount, updating = 1, ignore_canstun = 0) . = ..() if(!.) - move_delay_add = CLAMP(move_delay_add + round(amount/2), 0, 10) + move_delay_add = clamp(move_delay_add + round(amount/2), 0, 10) */ diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 94aba6851a..29c7321660 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -768,7 +768,7 @@ return else if(hud_used.healths) - var/health_amount = min(health, maxHealth - CLAMP(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud + var/health_amount = min(health, maxHealth - clamp(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud if(..(health_amount)) //not dead switch(hal_screwyhud) if(SCREWYHUD_CRIT) diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index 7b43f6d565..50b88579f4 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // for(var/datum/reagent/R in owner.reagents.reagent_list) if(istype(R, /datum/reagent/consumable/ethanol)) var/datum/reagent/consumable/ethanol/E = R - stored_alcohol = CLAMP(stored_alcohol + E.boozepwr / 50, 0, max_alcohol) + stored_alcohol = clamp(stored_alcohol + E.boozepwr / 50, 0, max_alcohol) var/heal_amt = heal_rate stored_alcohol -= alcohol_rate //Subtracts alcohol_Rate from stored alcohol so EX: 250 - 0.25 per each loop that occurs. if(stored_alcohol > 400) //If they are over 400 they start regenerating diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index abc2288e9b..7a5e347060 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -397,7 +397,7 @@ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) var/turf/target = get_turf(P.starting) // redirect the projectile - P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H) + P.preparePixelProjectile(locate(clamp(target.x + new_x, 1, world.maxx), clamp(target.y + new_y, 1, world.maxy), H.z), H) return BULLET_ACT_FORCE_PIERCE return ..() 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 775f36cfc7..10a29c72c1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -606,7 +606,7 @@ var/max_D = CONFIG_GET(number/penis_max_inches_prefs) var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null if(new_length) - H.dna.features["cock_length"] = CLAMP(round(new_length), min_D, max_D) + H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) H.update_genitals() H.apply_overlay() H.give_genital(/obj/item/organ/genital/testicles) 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 f37e718462..f720aa7f8a 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -106,8 +106,8 @@ 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) - H.blood_volume = CLAMP(H.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/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8097859aac..00a0991e19 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -235,7 +235,7 @@ //TOXINS/PLASMA if(Toxins_partialpressure > safe_tox_max) var/ratio = (breath_gases[/datum/gas/plasma]/safe_tox_max) * 10 - adjustToxLoss(CLAMP(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) + adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) else clear_alert("too_much_tox") diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 6c497bb8d4..a47bb7fb4a 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -23,10 +23,10 @@ clear_alert("high") /mob/living/carbon/adjust_disgust(amount) - disgust = CLAMP(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT) + disgust = clamp(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT) /mob/living/carbon/set_disgust(amount) - disgust = CLAMP(amount, 0, DISGUST_LEVEL_MAXEDOUT) + disgust = clamp(amount, 0, DISGUST_LEVEL_MAXEDOUT) ////////////////////////////////////////TRAUMAS///////////////////////////////////////// diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index d5e1fa6fc4..3257b0e3bf 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -88,7 +88,7 @@ if(EFFECT_STUN) Stun(effect * hit_percent) if(EFFECT_KNOCKDOWN) - DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? CLAMP(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride) + DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? clamp(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride) if(EFFECT_UNCONSCIOUS) Unconscious(effect * hit_percent) if(EFFECT_IRRADIATE) @@ -140,7 +140,7 @@ /mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - bruteloss = CLAMP((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -151,7 +151,7 @@ /mob/living/proc/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - oxyloss = CLAMP((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + oxyloss = clamp((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -170,7 +170,7 @@ /mob/living/proc/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - toxloss = CLAMP((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + toxloss = clamp((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -189,7 +189,7 @@ /mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - fireloss = CLAMP((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -200,7 +200,7 @@ /mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - cloneloss = CLAMP((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 22a0da2cf6..89f8381087 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -68,7 +68,7 @@ var/obj/O = A if(ObjBump(O)) return - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A if(PushAM(AM, move_force)) return @@ -645,7 +645,7 @@ attempt_resist_grab(FALSE) // Return as we should only resist one thing at a time. Give clickdelay if the grab wasn't passive. return old_gs? TRUE : FALSE - + // unbuckling yourself. stops the chain if you try it. if(buckled && last_special <= world.time) log_combat(src, buckled, "resisted buckle") @@ -1030,7 +1030,7 @@ update_fire() /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person - fire_stacks = CLAMP(fire_stacks + add_fire_stacks, -20, 20) + fire_stacks = clamp(fire_stacks + add_fire_stacks, -20, 20) if(on_fire && fire_stacks <= 0) ExtinguishMob() diff --git a/code/modules/mob/living/living_block.dm b/code/modules/mob/living/living_block.dm index 22940b5846..d39abb1250 100644 --- a/code/modules/mob/living/living_block.dm +++ b/code/modules/mob/living/living_block.dm @@ -57,7 +57,7 @@ if(real_attack) for(var/obj/item/I in tocheck) // i don't like this too - var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example var/results = I.run_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list) . |= results if((results & BLOCK_SUCCESS) && !(results & BLOCK_CONTINUE_CHAIN)) @@ -65,7 +65,7 @@ else for(var/obj/item/I in tocheck) // i don't like this too - var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example I.check_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list) /// Gets an unsortedlist of objects to run block checks on. diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 7d220739d5..39a94232a3 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -88,9 +88,9 @@ /obj/item/proc/get_volume_by_throwforce_and_or_w_class() if(throwforce && w_class) - return CLAMP((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 + return clamp((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 else if(w_class) - return CLAMP(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 + return clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 else return 0 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d178af9fb0..e959144ed5 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -869,7 +869,7 @@ if(istype(A, /obj/machinery/camera)) current = A if(client) - if(ismovableatom(A)) + if(ismovable(A)) if(A != GLOB.ai_camera_room_landmark) end_multicam() client.perspective = EYE_PERSPECTIVE @@ -1016,7 +1016,7 @@ if("Yes.") src.ghostize(FALSE, penalize = TRUE) var/announce_rank = "Artificial Intelligence," - if(GLOB.announcement_systems.len) + if(GLOB.announcement_systems.len) // Sends an announcement the AI has cryoed. var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("CRYOSTORAGE", src.real_name, announce_rank, list()) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 26fa3b505d..9eb1bbc9e4 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -154,7 +154,7 @@ /mob/living/silicon/pai/proc/process_hack() if(cable && cable.machine && istype(cable.machine, /obj/machinery/door) && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1) - hackprogress = CLAMP(hackprogress + 4, 0, 100) + hackprogress = clamp(hackprogress + 4, 0, 100) else temp = "Door Jack: Connection to airlock has been lost. Hack aborted." hackprogress = 0 @@ -301,7 +301,7 @@ update_stat() /mob/living/silicon/pai/process() - emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth) + emitterhealth = clamp((emitterhealth + emitterregen), -50, emittermaxhealth) /obj/item/paicard/attackby(obj/item/W, mob/user, params) ..() diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index 0477492c0a..ba162ecf2c 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -69,7 +69,7 @@ return FALSE //No we're not flammable /mob/living/silicon/pai/proc/take_holo_damage(amount) - emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth) + emitterhealth = clamp((emitterhealth - amount), -50, emittermaxhealth) if(emitterhealth < 0) fold_in(force = TRUE) if(amount > 0) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index cf67517c52..e04943a8c5 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -21,7 +21,7 @@ if(cell && cell.charge) if(cell.charge <= 100) uneq_all() - var/amt = CLAMP((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. + var/amt = clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 0cc097dc08..90fdeb0a62 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -2,7 +2,7 @@ /mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - bruteloss = round(CLAMP(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION) + bruteloss = round(clamp(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION) if(updating_health) updatehealth() return amount diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 3b9700bb58..2045e194d2 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -175,7 +175,7 @@ AddElement(/datum/element/cleaning) /mob/living/simple_animal/hostile/alien/maid/AttackingTarget() - if(ismovableatom(target)) + if(ismovable(target)) if(istype(target, /obj/effect/decal/cleanable)) visible_message("[src] cleans up \the [target].") qdel(target) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 5e75088f53..d2680fbf61 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -65,10 +65,10 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/Life() ..() - move_to_delay = CLAMP(round((health/maxHealth) * 10), 3, 10) + move_to_delay = clamp(round((health/maxHealth) * 10), 3, 10) /mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) if(charging) return ranged_cooldown = world.time + ranged_cooldown_time diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 83d27e7ea6..73fb9d4e48 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -56,7 +56,7 @@ Difficulty: Very Hard L.dust() /mob/living/simple_animal/hostile/megafauna/colossus/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + 120 if(enrage(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 4644992ad0..159f8a7f5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -105,7 +105,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() if(swooping) return - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + ranged_cooldown_time if(prob(15 + anger_modifier) && !client) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index a9d42373a2..477c2ce3aa 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -191,7 +191,7 @@ Difficulty: Normal /mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall - anger_modifier = CLAMP(((maxHealth - health) / 42),0,50) + anger_modifier = clamp(((maxHealth - health) / 42),0,50) burst_range = initial(burst_range) + round(anger_modifier * 0.08) beam_range = initial(beam_range) + round(anger_modifier * 0.12) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3feed2129b..230bb9ecb7 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -128,7 +128,7 @@ /mob/living/simple_animal/updatehealth() ..() - health = CLAMP(health, 0, maxHealth) + health = clamp(health, 0, maxHealth) /mob/living/simple_animal/update_stat() if(status_flags & GODMODE) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 4f8e271d6f..d5da6d76fc 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -190,7 +190,7 @@ step_away(M,src) M.Friends = Friends.Copy() babies += M - M.mutation_chance = CLAMP(mutation_chance+(rand(5,-5)),0,100) + M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) var/mob/living/simple_animal/slime/new_slime = pick(babies) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index fd786c8631..8fa1367aad 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -284,7 +284,7 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA /mob/proc/reset_perspective(atom/A) if(client) if(A) - if(ismovableatom(A)) + if(ismovable(A)) //Set the the thing unless it's us if(A != src) client.perspective = EYE_PERSPECTIVE diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index 10abf460c6..cf86e962bd 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -20,7 +20,7 @@ dizziness = max(amount, 0) /** - * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work + * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work */ /mob/proc/blind_eyes(amount) var/old_blind = eye_blind || HAS_TRAIT(src, TRAIT_BLIND) @@ -90,8 +90,8 @@ return var/obj/screen/plane_master/game_world/GW = locate(/obj/screen/plane_master/game_world) in client.screen var/obj/screen/plane_master/floor/F = locate(/obj/screen/plane_master/floor) in client.screen - GW.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3))) - F.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3))) + GW.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3))) + F.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3))) /mob/proc/remove_eyeblur() if(!client) @@ -120,4 +120,4 @@ ///Adjust the body temperature of a mob, with min/max settings /mob/proc/adjust_bodytemperature(amount,min_temp=0,max_temp=INFINITY) if(bodytemperature >= min_temp && bodytemperature <= max_temp) - bodytemperature = CLAMP(bodytemperature + amount,min_temp,max_temp) + bodytemperature = clamp(bodytemperature + amount,min_temp,max_temp) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index b7b7bc36b7..f039dc32b2 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -53,8 +53,8 @@ return var/desired_x = input(user, "How high do you want the camera to shoot, between [picture_size_x_min] and [picture_size_x_max]?", "Zoom", picture_size_x) as num var/desired_y = input(user, "How wide do you want the camera to shoot, between [picture_size_y_min] and [picture_size_y_max]?", "Zoom", picture_size_y) as num - picture_size_x = min(CLAMP(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) - picture_size_y = min(CLAMP(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) + picture_size_x = min(clamp(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) + picture_size_y = min(clamp(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) return TRUE /obj/item/camera/attack(mob/living/carbon/human/M, mob/user) @@ -155,8 +155,8 @@ if(!isturf(target_turf)) blending = FALSE return FALSE - size_x = CLAMP(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) - size_y = CLAMP(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) + size_x = clamp(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) + size_y = clamp(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.") var/ai_user = isAI(user) var/list/seen diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index f25d80c050..5bd9c108d1 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -4,7 +4,7 @@ if(istype(A)) appearance = A.appearance dir = A.dir - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A step_x = AM.step_x step_y = AM.step_y @@ -68,7 +68,7 @@ for(var/atom/A in sorted) var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A xo += AM.step_x yo += AM.step_y diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 1b23b1bb5d..7eabeafcb1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -208,7 +208,7 @@ GLOB.apcs_list -= src if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) area.power_light = FALSE area.power_equip = FALSE area.power_environ = FALSE @@ -1350,7 +1350,7 @@ lighting = autoset(lighting, 0) environ = autoset(environ, 0) area.poweralert(0, src) - + else if(cell_percent < 15 && longtermpower < 0) // <15%, turn off lighting & equipment equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) @@ -1447,7 +1447,7 @@ /obj/machinery/power/apc/proc/set_broken() if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) stat |= BROKEN operating = FALSE if(occupier) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ed90ed407f..aab38c8754 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -217,7 +217,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/surplus() if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) + return clamp(powernet.avail-powernet.load, 0, powernet.avail) else return 0 @@ -233,7 +233,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/delayed_surplus() if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) else return 0 @@ -565,7 +565,7 @@ By design, d1 is the smallest direction and d2 is the highest return var/obj/item/restraints/handcuffs/cable/result = new(get_turf(user)) user.put_in_hands(result) - result.color = color + result.color = color to_chat(user, "You make some restraints out of cable") //add cables to the stack @@ -848,4 +848,4 @@ By design, d1 is the smallest direction and d2 is the highest . = ..() var/list/cable_colors = GLOB.cable_colors color = pick(cable_colors) - + diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 93fe7e8fa6..cc321fdb4d 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -157,7 +157,7 @@ /obj/item/stock_parts/cell/proc/get_electrocute_damage() if(charge >= 1000) - return CLAMP(round(charge/10000), 10, 90) + rand(-5,5) + return clamp(round(charge/10000), 10, 90) + rand(-5,5) else return 0 @@ -334,7 +334,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - charge = CLAMP((charge-(10000/severity)),0,maxcharge) + charge = clamp((charge-(10000/severity)),0,maxcharge) /obj/item/stock_parts/cell/emergency_light name = "miniature power cell" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 02ff4127eb..7ad9f3a6ce 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -314,7 +314,7 @@ . = ..() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if(on && status == LIGHT_OK) - SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, CLAMP(light_power*250, 30, 200)) + SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, clamp(light_power*250, 30, 200)) // update the icon_state and luminosity of the light depending on its state diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index fba526edbd..4cec49945a 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -42,7 +42,7 @@ /obj/machinery/power/proc/surplus() if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) + return clamp(powernet.avail-powernet.load, 0, powernet.avail) else return 0 @@ -58,7 +58,7 @@ /obj/machinery/power/proc/delayed_surplus() if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) else return 0 diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 3b70383bee..65d5202ff4 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -96,6 +96,6 @@ /datum/powernet/proc/get_electrocute_damage() if(avail >= 1000) - return CLAMP(round(avail/10000), 10, 90) + rand(-5,5) + return clamp(round(avail/10000), 10, 90) + rand(-5,5) else return 0 \ No newline at end of file diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index c471047682..ed3a098dae 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -201,7 +201,7 @@ // if(defer_powernet_rebuild != 2) // defer_powernet_rebuild = 1 for(var/atom/X in urange(consume_range,src,1)) - if(isturf(X) || ismovableatom(X)) + if(isturf(X) || ismovable(X)) consume(X) // if(defer_powernet_rebuild != 2) // defer_powernet_rebuild = 0 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 47de07cd71..41ed28f0a5 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -220,7 +220,7 @@ . += "smes-og[clevel]" /obj/machinery/power/smes/proc/chargedisplay() - return CLAMP(round(5.5*charge/capacity),0,5) + return clamp(round(5.5*charge/capacity),0,5) /obj/machinery/power/smes/process() if(stat & BROKEN) @@ -372,7 +372,7 @@ target = text2num(target) . = TRUE if(.) - input_level = CLAMP(target, 0, input_level_max) + input_level = clamp(target, 0, input_level_max) log_smes(usr) if("output") var/target = params["target"] @@ -394,7 +394,7 @@ target = text2num(target) . = TRUE if(.) - output_level = CLAMP(target, 0, output_level_max) + output_level = clamp(target, 0, output_level_max) log_smes(usr) /obj/machinery/power/smes/proc/log_smes(mob/user) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 73ea3ccd59..89452affcb 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -28,10 +28,8 @@ /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) . = ..() panel = new() -#if DM_VERSION >= 513 panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE vis_contents += panel -#endif panel.icon = icon panel.icon_state = "solar_panel" panel.layer = FLY_LAYER @@ -170,7 +168,7 @@ else //dot product of sun and panel -- Lambert's Cosine Law . = cos(azimuth_current - sun_azimuth) - . = CLAMP(round(., 0.01), 0, 1) + . = clamp(round(., 0.01), 0, 1) sunfrac = . /obj/machinery/power/solar/process() @@ -385,7 +383,7 @@ if(adjust) value = azimuth_rate + adjust if(value != null) - azimuth_rate = round(CLAMP(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01) + azimuth_rate = round(clamp(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01) return TRUE return FALSE if(action == "tracking") @@ -464,7 +462,7 @@ ///Rotates the panel to the passed angles /obj/machinery/power/solar_control/proc/set_panels(azimuth) - azimuth = CLAMP(round(azimuth, 0.01), -360, 719.99) + azimuth = clamp(round(azimuth, 0.01), -360, 719.99) if(azimuth >= 360) azimuth -= 360 if(azimuth < 0) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 3ed1ad0e5a..92d97365b3 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -346,7 +346,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) else if(takes_damage) //causing damage - damage = max(damage + (max(CLAMP(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) + damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0) damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0) @@ -389,10 +389,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25) if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD) - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling + CLAMP(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) + powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) else - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling - 0.05,0, 1) - powerloss_inhibitor = CLAMP(1-(powerloss_dynamic_scaling * CLAMP(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) + powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05,0, 1) + powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) if(matter_power) var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40) @@ -442,7 +442,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) var/D = sqrt(1 / max(1, get_dist(l, src))) l.hallucination += power_calc * config_hallucination_power * D - l.hallucination = CLAMP(0, 200, l.hallucination) + l.hallucination = clamp(0, 200, l.hallucination) for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) @@ -466,7 +466,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_zap(src, 5, min(power*2, 20000)) else if (damage > damage_penalty_point && prob(20)) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) - supermatter_zap(src, 5, CLAMP(power*2, 4000, 20000)) + supermatter_zap(src, 5, clamp(power*2, 4000, 20000)) if(prob(15) && power > POWER_PENALTY_THRESHOLD) supermatter_pull(src, power/750) @@ -736,7 +736,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 10) playsound(src.loc, 'sound/weapons/marauder.ogg', 100, 1, extrarange = 7) for(var/atom/P in orange(pull_range,center)) - if(ismovableatom(P)) + if(ismovable(P)) var/atom/movable/pulled_object = P if(ishuman(P)) var/mob/living/carbon/human/H = P diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 1b08693d1c..e98fe3c88e 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -65,7 +65,7 @@ pixel_x = -32 pixel_y = -32 for (var/ball in orbiting_balls) - var/range = rand(1, CLAMP(orbiting_balls.len, 3, 7)) + var/range = rand(1, clamp(orbiting_balls.len, 3, 7)) tesla_zap(ball, range, TESLA_MINI_POWER/7*range) else energy = 0 // ensure we dont have miniballs of miniballs diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index e0c84e7047..ff3f127817 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -232,7 +232,7 @@ ..() if(!automatic_charge_overlays) return - var/ratio = can_shoot() ? CEILING(CLAMP(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 + var/ratio = can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if it's power cell is removed. // TG issues #5361 & #47908 if(ratio == old_ratio && !force_update) diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index f230dc7fea..f8ddcb5aae 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -318,7 +318,7 @@ AC.sync_stats() /obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time) + aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time) /obj/item/ammo_casing/energy/beam_rifle name = "particle acceleration lens" @@ -369,11 +369,11 @@ HS_BB.stun = projectile_stun HS_BB.impact_structure_damage = impact_structure_damage HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock + HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock HS_BB.aoe_fire_chance = aoe_fire_chance HS_BB.aoe_fire_range = aoe_fire_range HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock + HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock HS_BB.wall_devastate = wall_devastate HS_BB.wall_pierce_amount = wall_pierce_amount HS_BB.structure_pierce_amount = structure_piercing @@ -465,7 +465,7 @@ else target.ex_act(EXPLODE_HEAVY) return TRUE - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/AM = target if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM)) if(structure_pierce < structure_pierce_amount) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6094a7aa46..b4303dd5a0 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -224,7 +224,7 @@ /obj/item/projectile/proc/vol_by_damage() if(src.damage) - return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100 + return clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100 else return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume @@ -255,7 +255,7 @@ def_zone = ran_zone(def_zone, max(100-(7*distance), 5) * zone_accuracy_factor) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. if(isturf(A) && hitsound_wall) - var/volume = CLAMP(vol_by_damage() + 20, 0, 100) + var/volume = clamp(vol_by_damage() + 20, 0, 100) if(suppressed) volume = 5 playsound(loc, hitsound_wall, volume, 1, -1) @@ -392,7 +392,7 @@ stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!") qdel(src) return - var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z) + var/turf/target = locate(clamp(starting + xo, 1, world.maxx), clamp(starting + yo, 1, world.maxy), starting.z) setAngle(Get_Angle(src, target)) original_angle = Angle if(!nondirectional_sprite) @@ -525,10 +525,10 @@ if(!homing_target) return FALSE var/datum/point/PT = RETURN_PRECISE_POINT(homing_target) - PT.x += CLAMP(homing_offset_x, 1, world.maxx) - PT.y += CLAMP(homing_offset_y, 1, world.maxy) + PT.x += clamp(homing_offset_x, 1, world.maxx) + PT.y += clamp(homing_offset_y, 1, world.maxy) var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT)) - setAngle(Angle + CLAMP(angle, -homing_turn_speed, homing_turn_speed)) + setAngle(Angle + clamp(angle, -homing_turn_speed, homing_turn_speed)) /obj/item/projectile/proc/set_homing_target(atom/A) if(!A || (!isturf(A) && !isturf(A.loc))) @@ -622,7 +622,7 @@ var/ox = round(screenviewX/2) - user.client.pixel_x //"origin" x var/oy = round(screenviewY/2) - user.client.pixel_y //"origin" y - angle = ATAN2(y - oy, x - ox) + angle = arctan(y - oy, x - ox) return list(angle, p_x, p_y) /obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 06d94414be..25809cc7ca 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -60,11 +60,11 @@ if(R.overdose_threshold == 0 || emptrig == TRUE) //Is there a possible OD? M.reagents.add_reagent(R.type, R.volume) else - var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1) + var/transVol = clamp(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1) M.reagents.add_reagent(R.type, transVol) else if(!R.overdose_threshold == 0) - var/transVol = CLAMP(R.volume, 0, R.overdose_threshold-1) + var/transVol = clamp(R.volume, 0, R.overdose_threshold-1) M.reagents.add_reagent(R.type, transVol) else M.reagents.add_reagent(R.type, R.volume) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 4411334883..ff95b65a49 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -51,7 +51,7 @@ /obj/item/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE) . = ..() - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/M = target var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) M.safe_throw_at(throw_target, 3, 2) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 89dd229407..f4c06f39cc 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -728,7 +728,7 @@ return //Make sure things are limited, but superacids/bases can push forward the reaction - pH = CLAMP(pH, 0, 14) + pH = clamp(pH, 0, 14) //return said amount to compare for next step. return (reactedVol) @@ -849,7 +849,7 @@ /datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000) var/S = specific_heat() - chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), min_temp, max_temp) + chem_temp = clamp(chem_temp + (J / (S * total_volume)), min_temp, max_temp) if(istype(my_atom, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = my_atom RC.temp_check() @@ -877,7 +877,7 @@ for (var/datum/reagent/reagentgas in reagent_list) R.add_reagent(reagentgas, amount/5) remove_reagent(reagentgas, amount/5) - s.set_up(R, CLAMP(amount/10, 0, 2), T) + s.set_up(R, clamp(amount/10, 0, 2), T) s.start() return FALSE @@ -995,7 +995,7 @@ RC.pH_check()//checks beaker resilience) //clamp the removal amount to be between current reagent amount //and zero, to prevent removing more than the holder has stored - amount = CLAMP(amount, 0, R.volume) + amount = clamp(amount, 0, R.volume) R.volume -= amount update_total() if(!safety)//So it does not handle reactions when it need not to diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 63e9d724a4..8572d30efe 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -151,7 +151,7 @@ target = text2num(target) . = TRUE if(.) - target_temperature = CLAMP(target, 0, 1000) + target_temperature = clamp(target, 0, 1000) if("eject") on = FALSE replace_beaker(usr) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 5eb5b94de9..725b967a63 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) return 0 if(method == VAPOR) //smoke, foam, spray if(M.reagents) - var/modifier = CLAMP((1 - touch_protection), 0, 1) + var/modifier = clamp((1 - touch_protection), 0, 1) var/amount = round(reac_volume*modifier, 0.1) if(amount >= 0.5) M.reagents.add_reagent(type, amount) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index bff9c8dcef..8194392871 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1124,7 +1124,7 @@ All effects don't start immediately, but rather get worse over time; the rate is var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) changeling.chem_charges += metabolization_rate - changeling.chem_charges = CLAMP(changeling.chem_charges, 0, changeling.chem_storage) + changeling.chem_charges = clamp(changeling.chem_charges, 0, changeling.chem_storage) return ..() /datum/reagent/consumable/ethanol/irishcarbomb diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index c96feec4e2..086515d9dd 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -196,7 +196,7 @@ . = 1 /datum/reagent/drug/methamphetamine/overdose_process(mob/living/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i in 1 to 4) step(M, pick(GLOB.cardinals)) if(prob(20)) @@ -223,7 +223,7 @@ ..() /datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 4, i++) step(M, pick(GLOB.cardinals)) M.Jitter(15) @@ -233,7 +233,7 @@ ..() /datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(20) @@ -285,7 +285,7 @@ M.adjustStaminaLoss(-5, 0) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4) M.hallucination += 5 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) step(M, pick(GLOB.cardinals)) step(M, pick(GLOB.cardinals)) ..() @@ -293,7 +293,7 @@ /datum/reagent/drug/bath_salts/overdose_process(mob/living/M) M.hallucination += 5 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i in 1 to 8) step(M, pick(GLOB.cardinals)) if(prob(20)) @@ -304,7 +304,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M) M.hallucination += 10 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(5) @@ -315,7 +315,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M) M.hallucination += 20 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(10) @@ -327,7 +327,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M) M.hallucination += 30 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 12, i++) step(M, pick(GLOB.cardinals)) M.Jitter(15) @@ -339,7 +339,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M) M.hallucination += 30 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 16, i++) step(M, pick(GLOB.cardinals)) M.Jitter(50) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index e66ebc5f20..af335359c3 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2023,9 +2023,9 @@ /datum/reagent/peaceborg_confuse/on_mob_life(mob/living/carbon/M) if(M.confused < 6) - M.confused = CLAMP(M.confused + 3, 0, 5) + M.confused = clamp(M.confused + 3, 0, 5) if(M.dizziness < 6) - M.dizziness = CLAMP(M.dizziness + 3, 0, 5) + M.dizziness = clamp(M.dizziness + 3, 0, 5) if(prob(20)) to_chat(M, "You feel confused and disorientated.") ..() diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 0b32952d20..9cf9acb424 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -105,7 +105,7 @@ if(St.purity < 1) St.volume *= St.purity St.purity = 1 - var/amount = CLAMP(0.002, 0, N.volume) + var/amount = clamp(0.002, 0, N.volume) N.volume -= amount St.data["grown_volume"] = St.data["grown_volume"] + added_volume St.name = "[initial(St.name)] [round(St.data["grown_volume"], 0.1)]u colony" diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 2c8be10ace..8782d65f76 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -195,7 +195,7 @@ return holder.remove_reagent(/datum/reagent/sorium, multiplier*4) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier*4), 1, 6) + var/range = clamp(sqrt(multiplier*4), 1, 6) goonchem_vortex(T, 1, range) /datum/chemical_reaction/sorium_vortex @@ -206,7 +206,7 @@ /datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, multiplier) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier), 1, 6) + var/range = clamp(sqrt(multiplier), 1, 6) goonchem_vortex(T, 1, range) /datum/chemical_reaction/liquid_dark_matter @@ -220,7 +220,7 @@ return holder.remove_reagent(/datum/reagent/liquid_dark_matter, multiplier*3) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier*3), 1, 6) + var/range = clamp(sqrt(multiplier*3), 1, 6) goonchem_vortex(T, 0, range) /datum/chemical_reaction/ldm_vortex @@ -231,7 +231,7 @@ /datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, multiplier) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier/2), 1, 6) + var/range = clamp(sqrt(multiplier/2), 1, 6) goonchem_vortex(T, 0, range) /datum/chemical_reaction/flash_powder diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 89de7c409d..f326b94e44 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -185,7 +185,7 @@ START_PROCESSING(SSobj, src) else if((reagents.pH < -3) || (reagents.pH > 17)) visible_message("[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform!") - reagents.pH = CLAMP(reagents.pH, -3, 17) + reagents.pH = clamp(reagents.pH, -3, 17) container_HP -= 1 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 62ca5d658e..7fea8250d9 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -66,7 +66,7 @@ /obj/item/reagent_containers/spray/proc/spray(atom/A) - var/range = CLAMP(get_dist(src, A), 1, current_range) + var/range = clamp(get_dist(src, A), 1, current_range) var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) D.create_reagents(amount_per_transfer_from_this, NONE, NO_REAGENTS_VALUE) var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index b8957775b1..1a2742d2a6 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -180,7 +180,7 @@ ///Used by update_icon() and update_overlays() /obj/item/reagent_containers/syringe/proc/get_rounded_vol() if(reagents && reagents.total_volume) - return CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15) + return clamp(round((reagents.total_volume / volume * 15),5), 1, 15) else return 0 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index d6ad1bf042..b47f0de032 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -57,7 +57,7 @@ return ..() /obj/structure/bigDelivery/relay_container_resist(mob/living/user, obj/O) - if(ismovableatom(loc)) + if(ismovable(loc)) var/atom/movable/AM = loc //can't unwrap the wrapped container if it's inside something. AM.relay_container_resist(user, O) return diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 41ed6a556e..bd571607d2 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -141,7 +141,7 @@ say("Mineral access is on hold, please contact the quartermaster.") return FALSE var/power = 1000 - amount = CLAMP(amount, 1, 50) + amount = clamp(amount, 1, 50) for(var/M in D.materials) power += round(D.materials[M] * amount / 35) power = min(3000, power) diff --git a/code/modules/research/nanites/extra_settings/number.dm b/code/modules/research/nanites/extra_settings/number.dm index 6e63ae067e..75489635f5 100644 --- a/code/modules/research/nanites/extra_settings/number.dm +++ b/code/modules/research/nanites/extra_settings/number.dm @@ -16,7 +16,7 @@ value = text2num(value) if(!value || !isnum(value)) return - src.value = CLAMP(value, min, max) + src.value = clamp(value, min, max) /datum/nanite_extra_setting/number/get_copy() return new /datum/nanite_extra_setting/number(value, min, max, unit) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index 0750d3d268..4650af5c80 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -72,14 +72,14 @@ if("set_safety") var/threshold = text2num(params["value"]) if(!isnull(threshold)) - chamber.set_safety(CLAMP(round(threshold, 1),0,500)) + chamber.set_safety(clamp(round(threshold, 1),0,500)) playsound(src, "terminal_type", 25, FALSE) chamber.occupant.investigate_log("'s nanites' safety threshold was set to [threshold] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) . = TRUE if("set_cloud") var/cloud_id = text2num(params["value"]) if(!isnull(cloud_id)) - chamber.set_cloud(CLAMP(round(cloud_id, 1),0,100)) + chamber.set_cloud(clamp(round(cloud_id, 1),0,100)) playsound(src, "terminal_type", 25, FALSE) chamber.occupant.investigate_log("'s nanites' cloud id was set to [cloud_id] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) . = TRUE diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm index 439d0c5750..f9d4d71b01 100644 --- a/code/modules/research/nanites/nanite_cloud_controller.dm +++ b/code/modules/research/nanites/nanite_cloud_controller.dm @@ -174,7 +174,7 @@ var/cloud_id = new_backup_id if(!isnull(cloud_id)) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE) - cloud_id = CLAMP(round(cloud_id, 1),1,100) + cloud_id = clamp(round(cloud_id, 1),1,100) generate_backup(cloud_id, usr) . = TRUE if("delete_backup") diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index d81880c6d9..5315a7a507 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -86,13 +86,13 @@ var/target_code = params["target_code"] switch(target_code) if("activation") - program.activation_code = CLAMP(round(new_code, 1),0,9999) + program.activation_code = clamp(round(new_code, 1),0,9999) if("deactivation") - program.deactivation_code = CLAMP(round(new_code, 1),0,9999) + program.deactivation_code = clamp(round(new_code, 1),0,9999) if("kill") - program.kill_code = CLAMP(round(new_code, 1),0,9999) + program.kill_code = clamp(round(new_code, 1),0,9999) if("trigger") - program.trigger_code = CLAMP(round(new_code, 1),0,9999) + program.trigger_code = clamp(round(new_code, 1),0,9999) . = TRUE if("set_extra_setting") program.set_extra_setting(params["target_setting"], params["value"]) @@ -102,7 +102,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_restart = timer . = TRUE @@ -110,7 +110,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_shutdown = timer . = TRUE @@ -118,7 +118,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_trigger = timer . = TRUE @@ -126,7 +126,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_trigger_delay = timer . = TRUE diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm index bd2b9618de..ae0d8d35aa 100644 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -84,7 +84,7 @@ /datum/nanite_program/explosive/on_trigger(comm_message) host_mob.visible_message("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow...",\ "You start emitting a high-pitched buzzing, and your skin begins to glow...") - addtimer(CALLBACK(src, .proc/boom), CLAMP((nanites.nanite_volume * 0.35), 25, 150)) + addtimer(CALLBACK(src, .proc/boom), clamp((nanites.nanite_volume * 0.35), 25, 150)) /datum/nanite_program/explosive/proc/boom() var/nanite_amount = nanites.nanite_volume diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index 71aecc8f2c..0d9361b534 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -106,7 +106,7 @@ return var/new_code = text2num(params["code"]) if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) + new_code = clamp(round(new_code, 1),0,9999) code = new_code . = TRUE if("set_relay_code") @@ -114,7 +114,7 @@ return var/new_code = text2num(params["code"]) if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) + new_code = clamp(round(new_code, 1),0,9999) relay_code = new_code . = TRUE if("update_name") diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a346cd697f..dc821886c8 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -801,7 +801,7 @@ return to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate.") - M.mutation_chance = CLAMP(M.mutation_chance-15,0,100) + M.mutation_chance = clamp(M.mutation_chance-15,0,100) qdel(src) /obj/item/slimepotion/slime/mutator @@ -825,7 +825,7 @@ return to_chat(user, "You feed the slime the mutator. It is now more likely to mutate.") - M.mutation_chance = CLAMP(M.mutation_chance+12,0,100) + M.mutation_chance = clamp(M.mutation_chance+12,0,100) M.mutator_used = TRUE qdel(src) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 2c466564ff..665361af49 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -757,13 +757,13 @@ var/change_per_engine = (1 - ENGINE_COEFF_MIN) / ENGINE_DEFAULT_MAXSPEED_ENGINES // 5 by default if(initial_engines > 0) change_per_engine = (1 - ENGINE_COEFF_MIN) / initial_engines // or however many it had - return CLAMP(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) + return clamp(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) if(new_value < initial_engines) var/delta = initial_engines - new_value var/change_per_engine = 1 //doesn't really matter should not be happening for 0 engine shuttles if(initial_engines > 0) change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay - return CLAMP(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) + return clamp(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) /obj/docking_port/mobile/proc/in_flight() diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index ace542126c..e9432e2f58 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -297,7 +297,7 @@ var/mob/living/M = AM M.DefaultCombatKnockdown(stun_amt, override_hardstun = stun_amt * 0.2) to_chat(M, "You're thrown back by [user]!") - AM.throw_at(throwtarget, ((CLAMP((maxthrow - (CLAMP(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. + AM.throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. safety-- /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index d6f0866936..f5b0ed1a75 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -183,7 +183,7 @@ //We've dealt the physical damages, if there's room lets apply the stamina damage. var/current_damage = get_damage(TRUE) //This time around, count stamina loss too. var/available_damage = max_damage - current_damage - stamina_dam += round(CLAMP(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION) + stamina_dam += round(clamp(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION) if(disabled && stamina > 10) incoming_stam_mult = max(0.01, incoming_stam_mult/(stamina*0.1)) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 276d4893de..66bca919c4 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -16,7 +16,7 @@ return FALSE var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST) - affecting.receive_damage(CLAMP(brute_dam/2 * affecting.body_damage_coeff, 15, 50), CLAMP(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage + affecting.receive_damage(clamp(brute_dam/2 * affecting.body_damage_coeff, 15, 50), clamp(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage C.visible_message("[C]'s [src.name] has been violently dismembered!") C.emote("scream") SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 6b93995e62..e5aac2a47d 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -259,7 +259,7 @@ if(!isnum(range)) return - set_distance(CLAMP(range, 0, max_light_beam_distance)) + set_distance(clamp(range, 0, max_light_beam_distance)) assume_rgb(C) /obj/item/organ/eyes/robotic/glow/proc/assume_rgb(newcolor) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index ac2b34b855..1b66af6232 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -146,7 +146,7 @@ if(safe_oxygen_max) if((O2_pp > safe_oxygen_max) && safe_oxygen_max == 0) //I guess plasma men technically need to have a check. var/ratio = (breath_gases[/datum/gas/oxygen]/safe_oxygen_max) * 10 - H.apply_damage_type(CLAMP(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) + H.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) else if((O2_pp > safe_oxygen_max) && !(safe_oxygen_max == 0)) //Why yes, this is like too much CO2 and spahget. Dirty lizards. @@ -188,7 +188,7 @@ if(safe_nitro_max) if(N2_pp > safe_nitro_max) var/ratio = (breath_gases[/datum/gas/nitrogen]/safe_nitro_max) * 10 - H.apply_damage_type(CLAMP(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) + H.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) H.throw_alert("too_much_nitro", /obj/screen/alert/too_much_nitro) H.losebreath += 2 else @@ -255,7 +255,7 @@ if(safe_toxins_max) if(Toxins_pp > safe_toxins_max) var/ratio = (breath_gases[/datum/gas/plasma]/safe_toxins_max) * 10 - H.apply_damage_type(CLAMP(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) + H.apply_damage_type(clamp(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) H.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) else H.clear_alert("too_much_tox") diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index d95901bdbe..4e4268c5fe 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -209,7 +209,7 @@ return FALSE if(maximum < damage) return FALSE - damage = CLAMP(damage + d, 0, maximum) + damage = clamp(damage + d, 0, maximum) var/mess = check_damage_thresholds() prev_damage = damage if(mess && owner) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index 868610a149..8ad8b5f1ee 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -22,7 +22,7 @@ /obj/vehicle/ridden/secway/process() var/diff = world.time - last_tick var/regen = chargerate * diff - charge = CLAMP(charge + regen, 0, chargemax) + charge = clamp(charge + regen, 0, chargemax) last_tick = world.time /obj/vehicle/ridden/secway/relaymove(mob/user, direction) diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm index 89547c0feb..326bb81745 100644 --- a/modular_citadel/code/_onclick/hud/sprint.dm +++ b/modular_citadel/code/_onclick/hud/sprint.dm @@ -54,5 +54,5 @@ /obj/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) + amount = round(clamp((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5) icon_state = "prog_bar_[amount]" diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/modular_citadel/code/_onclick/hud/stamina.dm index a7b9a79ecd..5484014f8f 100644 --- a/modular_citadel/code/_onclick/hud/stamina.dm +++ b/modular_citadel/code/_onclick/hud/stamina.dm @@ -22,7 +22,7 @@ else if(user.hal_screwyhud == 5) icon_state = "stamina0" else - icon_state = "stamina[CLAMP(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" + icon_state = "stamina[clamp(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" //stam buffer /obj/screen/staminabuffer diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index c936eb9dc4..213ebb049a 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -54,7 +54,7 @@ desc += " They're leaking [lowertext(R.name)]." var/datum/sprite_accessory/S = GLOB.breasts_shapes_list[shape] var/icon_shape = S ? S.icon_state : "pair" - var/icon_size = CLAMP(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE) + var/icon_size = clamp(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE) icon_state = "breasts_[icon_shape]_[icon_size]" if(owner) if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"]) @@ -73,7 +73,7 @@ //this is far too lewd wah /obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY) - var/new_value = CLAMP(cached_size + modifier, min, max) + var/new_value = clamp(cached_size + modifier, min, max) if(new_value == cached_size) return prev_size = cached_size diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index c05549aaa0..e1b8dc0dba 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -21,11 +21,11 @@ var/diameter_ratio = COCK_DIAMETER_RATIO_DEF //0.25; check citadel_defines.dm /obj/item/organ/genital/penis/modify_size(modifier, min = -INFINITY, max = INFINITY) - var/new_value = CLAMP(length + modifier, min, max) + var/new_value = clamp(length + modifier, min, max) if(new_value == length) return prev_length = length - length = CLAMP(length + modifier, min, max) + length = clamp(length + modifier, min, max) update() ..() @@ -60,7 +60,7 @@ else if(!enlargement && status_effect) owner.remove_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT) if(linked_organ) - linked_organ.size = CLAMP(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX) + linked_organ.size = clamp(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX) linked_organ.update() size = new_size diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index 2e8feb793a..6963714f04 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -6,7 +6,7 @@ var/directstamloss = (bufferedstam + amount) - stambuffer if(directstamloss > 0) adjustStaminaLoss(directstamloss) - bufferedstam = CLAMP(bufferedstam + amount, 0, stambuffer) + bufferedstam = clamp(bufferedstam + amount, 0, stambuffer) stambufferregentime = world.time + 10 if(updating_health) update_health_hud() diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 742ef6c9aa..f59d18686a 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -438,7 +438,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! DefaultCombatKnockdown(15, 1, 1) else L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") - L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice. + L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = clamp(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice. playsound(src, 'sound/weapons/Egloves.ogg', 50, 1) sleep(2)//Runtime prevention (infinite bump() calls on hulks) step_towards(src,L) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index eb93d273a7..837524d49f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -95,7 +95,7 @@ if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less) ImpureTot *= volume - var/empVol = CLAMP (volume/10, 0, 15) + var/empVol = clamp(volume/10, 0, 15) empulse(T, empVol, ImpureTot/10, 1) my_atom.reagents.clear_reagents() //just in case diff --git a/tgstation.dme b/tgstation.dme index 987b24c7c6..7bfbd2dde2 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -17,7 +17,6 @@ #include "_maps\_basemap.dm" #include "code\_compile_options.dm" #include "code\world.dm" -#include "code\__DEFINES\__513_compatibility.dm" #include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_protect.dm" #include "code\__DEFINES\_tick.dm" From b6a47a06edcb1670866d4f391dd38b8a7b417a37 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 22:26:39 -0700 Subject: [PATCH 74/82] Update tacklers.dm --- code/modules/clothing/gloves/tacklers.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 47f4aca974..ddbeeab7f6 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -33,10 +33,7 @@ /obj/item/clothing/gloves/tackler/dropped(mob/user) . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) + if(tackler) qdel(tackler) /obj/item/clothing/gloves/tackler/dolphin From af222768fe6fde7a898b25ea2a3e3a4dd8eff243 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 22:27:17 -0700 Subject: [PATCH 75/82] Revert "Update tacklers.dm" This reverts commit b6a47a06edcb1670866d4f391dd38b8a7b417a37. --- code/modules/clothing/gloves/tacklers.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index ddbeeab7f6..47f4aca974 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -33,7 +33,10 @@ /obj/item/clothing/gloves/tackler/dropped(mob/user) . = ..() - if(tackler) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) qdel(tackler) /obj/item/clothing/gloves/tackler/dolphin From c43f4e2e5ea1678fd06778e7678ca3d61bb7a094 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 22 Apr 2020 22:27:48 -0700 Subject: [PATCH 76/82] Update tacklers.dm --- code/modules/clothing/gloves/tacklers.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 47f4aca974..6913f3e885 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -33,11 +33,7 @@ /obj/item/clothing/gloves/tackler/dropped(mob/user) . = ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) - qdel(tackler) + qdel(tackler) /obj/item/clothing/gloves/tackler/dolphin name = "dolphin gloves" From e4c6df71fc45727e75b2f7667c810014ff289018 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Thu, 23 Apr 2020 14:35:36 +0200 Subject: [PATCH 77/82] Update tacklers.dm --- code/modules/clothing/gloves/tacklers.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 6913f3e885..ddbeeab7f6 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -33,7 +33,8 @@ /obj/item/clothing/gloves/tackler/dropped(mob/user) . = ..() - qdel(tackler) + if(tackler) + qdel(tackler) /obj/item/clothing/gloves/tackler/dolphin name = "dolphin gloves" From a621474ae71e76ed425a4cb2da061695e3fa092c Mon Sep 17 00:00:00 2001 From: MrJWhit <48370570+MrJWhit@users.noreply.github.com> Date: Thu, 23 Apr 2020 18:10:56 -0400 Subject: [PATCH 78/82] Adds a missing wire and a second SMES to the AI sat --- .../map_files/Deltastation/DeltaStation2.dmm | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 61ed3edba7..02e44d0a5a 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -52240,6 +52240,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bLJ" = ( @@ -52257,6 +52260,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bLK" = ( @@ -53546,9 +53552,6 @@ /turf/open/floor/plasteel/dark, /area/aisat) "bND" = ( -/obj/structure/cable/white{ - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53562,6 +53565,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/aisat) "bNE" = ( @@ -56011,27 +56017,33 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bRB" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, /obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bRC" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) @@ -57108,10 +57120,16 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTr" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTs" = ( @@ -57123,6 +57141,9 @@ start_active = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTt" = ( From 037ea6e07307cf5e6ae4b720d443f2124299cd1b Mon Sep 17 00:00:00 2001 From: MrJWhit <48370570+MrJWhit@users.noreply.github.com> Date: Thu, 23 Apr 2020 18:26:39 -0400 Subject: [PATCH 79/82] fixing up the engine --- _maps/map_files/PubbyStation/PubbyStation.dmm | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index dda8969b5a..d2f608acb6 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -53150,6 +53150,9 @@ dir = 1; pixel_y = -22 }, +/obj/structure/reflector/double/anchored{ + dir = 9 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "dFJ" = ( @@ -56503,6 +56506,16 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"loL" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4; + filter_type = "n2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "lqc" = ( /obj/item/toy/gun, /obj/effect/decal/cleanable/oil, @@ -58403,9 +58416,6 @@ /turf/open/space/basic, /area/space/nearstation) "pCo" = ( -/obj/structure/reflector/single/anchored{ - dir = 6 - }, /obj/machinery/light/small{ dir = 1 }, @@ -59921,10 +59931,10 @@ /turf/open/floor/engine, /area/engine/engineering) "tlV" = ( -/obj/structure/reflector/double/anchored{ - dir = 9 +/obj/structure/reflector/single/anchored{ + dir = 6 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/engine/engineering) "tnP" = ( /obj/machinery/seed_extractor, @@ -94076,7 +94086,7 @@ bXk pCo wcs wcs -tlV +wcs eyj qkM miw @@ -94330,7 +94340,7 @@ bZA cam mgz aac -cbX +tlV wcs wcs dEy @@ -94592,7 +94602,7 @@ oHa eWi cbX aac -vlC +loL cgx qeY fyO From 100d7cffd284b083489c5ce5c08fd57298f5aa43 Mon Sep 17 00:00:00 2001 From: MrJWhit <48370570+MrJWhit@users.noreply.github.com> Date: Thu, 23 Apr 2020 19:20:43 -0400 Subject: [PATCH 80/82] Also fix that one maint door to be a maint door --- _maps/map_files/PubbyStation/PubbyStation.dmm | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index d2f608acb6..64d4bd344a 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -60782,19 +60782,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"vsG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Research Lab Maintenance"; - req_one_access_txt = "7;29" - }, -/turf/open/floor/plating, -/area/maintenance/department/engine) "vsJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -94054,7 +94041,7 @@ jZG bpY bpY bpY -vsG +bNZ bva bva bva From f01cb896e54f409883e333b7b279f0429ed70d82 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 25 Apr 2020 02:43:56 +0200 Subject: [PATCH 81/82] Apply suggestions from code review --- code/datums/components/storage/storage.dm | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index a51ccabe8f..aad6e8289f 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -495,20 +495,18 @@ host.add_fingerprint(M) return FALSE if(!length(can_hold_extra) || !is_type_in_typecache(I, can_hold_extra)) - if(length(can_hold)) - if(!is_type_in_typecache(I, can_hold)) - if(!stop_messages) - to_chat(M, "[host] cannot hold [I]!") - return FALSE + if(length(can_hold) && !is_type_in_typecache(I, can_hold)) + if(!stop_messages) + to_chat(M, "[host] cannot hold [I]!") + return FALSE if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. if(!stop_messages) to_chat(M, "[host] cannot hold [I]!") return FALSE - if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS) - if(I.w_class > max_w_class) - if(!stop_messages) - to_chat(M, "[I] is too long for [host]!") - return FALSE + if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS && I.w_class > max_w_class) + if(!stop_messages) + to_chat(M, "[I] is too long for [host]!") + return FALSE // STORAGE LIMITS if(storage_flags & STORAGE_LIMIT_MAX_ITEMS) if(real_location.contents.len >= max_items) From cbe2daea94e29403d615c2b8f83e5ae586d81da8 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 24 Apr 2020 23:52:49 -0700 Subject: [PATCH 82/82] Update callproc.dm --- code/modules/admin/callproc/callproc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 3de5e39ff4..c13353b7cd 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -120,7 +120,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) //adv proc call this, ya nerds /world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) - return call(procname)(arglist(arguments)) + return call(text2path("/proc/[procname]"))(arglist(arguments)) else if(target != world) return call(target, procname)(arglist(arguments)) else