From 8e4bc80d92827ce001ffef833617277aab5f2a97 Mon Sep 17 00:00:00 2001 From: itseasytosee <55666666+itseasytosee@users.noreply.github.com> Date: Tue, 1 Nov 2022 18:06:21 -0500 Subject: [PATCH] Easy's Super Omega "unarmed strike based species var moved to limbs" refractor, unarmed strike striking with specific body parts rather than it just being flavor, and brain based attacking limb selection extra chunky edition. And also bodypart traits. (#70422) ## About The Pull Request Ok first if you don't want to read any further explanation you can watch these two videos and you will understand all of the mechanical depth of this change. https://user-images.githubusercontent.com/55666666/194788103-8019dad8-7e44-4cc8-bc8f-0a4f8f00a357.mp4 https://user-images.githubusercontent.com/55666666/194788109-345a3146-fb4b-4a2e-9c2a-e2ee786ba97d.mp4 ### **Disclaimer: Effect on gameplay extremely limited and niche read at your own risk** Starting at the top, regarding the species datum, the vars attack_type, punchdamagelow, punchdamagehigh, punchstunthreshold, attack_verb, attack_effect, attack_sound, and miss_sound have been removed. All bodyparts (not just arms) now have corresponding variables for how they should act if utilized in an unarmed attack. The bodyparts vars are correlated to their corresponding species. All arm type bodyparts have been repathed through a common parent for the purposes of keeping variables consistent. The same is true for the legs. When a carbon begins an unarmed attack, it will check the carbon's brain to see what limb should be used for the attack. If the brain has no answers it will default to the arm that corresponds to the active hand of the attacker. Currently in all brains except monkeys, it check to see if the attackers target target is laying down, and if so, call for a kick with the leg that corresponds with the attackers active hand. If the attacker has no useable legs, or the attacker does not have a corresponding leg to the active hand, or the target is not laying down, the brain will simply default for an attack with the active hand. Monkeys brains (take note the difference between having a monkey brain and being controlled by monkey AI) are the exception, they will simply always choose their heads, and by default an attack with the head is a bite attack. As an example: Previously ethereal would make attacks that used the verb "burn" and did burn damage despite what limbs they possessed. Now anybody with an ethereal limb will make an unarmed attack that does burn damage and has all the same verbs as an ethereal would. And finally, the chunky finger species trait has been moved over to the species arms. Effect on other sources like insuls remains unchanged. ## Why It's Good For The Game The main motivation is moving direct mechanical elements off of species to, quoting tralezab here, "Make species like a blueprint." Opens more opportunities for coders to add specific elements to limbs, perhaps we could see a buff to unarmed strikes from robot arms, or a species that headbutts people to death. Also undeniably cool, and fixes some weirdness like fully auged ethereals still doing their normal ethereal attack. ## Changelog :cl: itseasytosee refactor: Elements of unarmed strikes are now limb dependent instead of species dependent. Go rip off an ethereal arm, sew it onto yourself, and burn some people. /:cl: Co-authored-by: itseasytosee Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: ShizCalev Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> --- .../icemoon_underground_abandoned_village.dmm | 8 +- _maps/RandomRuins/SpaceRuins/TheDerelict.dmm | 4 +- _maps/RandomZLevels/moonoutpost19.dmm | 2 +- .../map_files/Deltastation/DeltaStation2.dmm | 12 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 8 +- _maps/map_files/KiloStation/KiloStation.dmm | 8 +- _maps/map_files/MetaStation/MetaStation.dmm | 8 +- _maps/shuttles/infiltrator_advanced.dmm | 4 +- _maps/shuttles/infiltrator_basic.dmm | 4 +- _maps/shuttles/whiteship_kilo.dmm | 2 +- _maps/templates/battlecruiser_starfury.dmm | 8 +- code/__DEFINES/mobs.dm | 8 +- code/__DEFINES/traits.dm | 9 + code/datums/components/crafting/recipes.dm | 24 +- code/datums/elements/kneejerk.dm | 8 +- code/datums/martial/boxing.dm | 8 +- code/datums/quirks/negative.dm | 16 +- code/datums/status_effects/wound_effects.dm | 4 +- code/game/objects/effects/anomalies.dm | 8 +- code/game/objects/items/extinguisher.dm | 2 +- code/game/objects/items/food/pizza.dm | 6 +- code/game/objects/items/robot/robot_parts.dm | 16 +- .../objects/items/storage/boxes/job_boxes.dm | 2 +- code/game/objects/items/storage/medkit.dm | 2 +- .../structures/crates_lockers/crates.dm | 16 +- .../heretic/knowledge/flesh_lore.dm | 2 +- .../heretic/knowledge/side_ash_flesh.dm | 4 +- .../nightmare/nightmare_species.dm | 9 +- .../preferences/species_features/moth.dm | 4 +- code/modules/clothing/shoes/_shoes.dm | 12 +- code/modules/clothing/spacesuits/softsuit.dm | 2 +- .../modules/clothing/suits/reactive_armour.dm | 8 +- code/modules/mob/inventory.dm | 4 +- .../modules/mob/living/basic/basic_defense.dm | 4 +- code/modules/mob/living/brain/brain_item.dm | 8 + .../mob/living/carbon/alien/adult/adult.dm | 8 +- code/modules/mob/living/carbon/carbon.dm | 16 +- .../mob/living/carbon/carbon_defines.dm | 8 +- .../mob/living/carbon/carbon_update_icons.dm | 10 +- .../mob/living/carbon/human/human_defense.dm | 6 +- .../mob/living/carbon/human/human_helpers.dm | 6 +- .../mob/living/carbon/human/species.dm | 89 ++--- .../carbon/human/species_types/abductors.dm | 9 +- .../carbon/human/species_types/android.dm | 8 +- .../carbon/human/species_types/ethereal.dm | 18 +- .../carbon/human/species_types/flypeople.dm | 8 +- .../carbon/human/species_types/golems.dm | 129 +++---- .../carbon/human/species_types/jellypeople.dm | 24 +- .../human/species_types/lizardpeople.dm | 22 +- .../carbon/human/species_types/monkeys.dm | 21 +- .../carbon/human/species_types/mothmen.dm | 12 +- .../carbon/human/species_types/mushpeople.dm | 12 +- .../carbon/human/species_types/plasmamen.dm | 8 +- .../carbon/human/species_types/podpeople.dm | 13 +- .../human/species_types/shadowpeople.dm | 8 +- .../carbon/human/species_types/skeletons.dm | 8 +- .../carbon/human/species_types/snail.dm | 12 +- .../carbon/human/species_types/zombies.dm | 16 +- .../modules/mob/living/silicon/robot/robot.dm | 8 +- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../living/simple_animal/bot/construction.dm | 12 +- .../mob/living/simple_animal/bot/secbot.dm | 4 +- .../living/simple_animal/heretic_monsters.dm | 4 +- .../computers/item/computer_ui.dm | 8 +- .../research/designs/limbgrower_designs.dm | 8 +- .../designs/mechfabricator_designs.dm | 8 +- code/modules/surgery/bodyparts/_bodyparts.dm | 29 +- .../surgery/bodyparts/dismemberment.dm | 14 +- code/modules/surgery/bodyparts/head.dm | 10 +- code/modules/surgery/bodyparts/helpers.dm | 8 +- code/modules/surgery/bodyparts/parts.dm | 136 ++++--- .../surgery/bodyparts/robot_bodyparts.dm | 16 +- .../species_parts/ethereal_bodyparts.dm | 33 +- .../species_parts/lizard_bodyparts.dm | 42 ++- .../bodyparts/species_parts/misc_bodyparts.dm | 342 +++++++++++++----- .../bodyparts/species_parts/moth_bodyparts.dm | 16 +- .../species_parts/plasmaman_bodyparts.dm | 8 +- code/modules/surgery/organs/_organ.dm | 2 +- code/modules/unit_tests/limbsanity.dm | 2 +- code/modules/vending/_vending.dm | 4 +- .../Scripts/70422_limb_refractor.txt | 4 + 81 files changed, 845 insertions(+), 600 deletions(-) create mode 100644 tools/UpdatePaths/Scripts/70422_limb_refractor.txt diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 6fc5d847a04..99b4b0623d5 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -456,13 +456,13 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood, /obj/item/bodypart/head, -/obj/item/bodypart/l_arm{ +/obj/item/bodypart/arm/left{ pixel_x = -9; pixel_y = -9 }, -/obj/item/bodypart/l_leg, -/obj/item/bodypart/r_arm, -/obj/item/bodypart/r_leg{ +/obj/item/bodypart/leg/left, +/obj/item/bodypart/arm/right, +/obj/item/bodypart/leg/right{ pixel_x = 8; pixel_y = 4 }, diff --git a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm index 7382b13e1a7..94736f4dd58 100644 --- a/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm +++ b/_maps/RandomRuins/SpaceRuins/TheDerelict.dmm @@ -4613,7 +4613,7 @@ /area/space/nearstation) "HN" = ( /obj/item/bodypart/head/monkey, -/obj/item/bodypart/l_leg/monkey{ +/obj/item/bodypart/leg/left/monkey{ pixel_x = 8; pixel_y = -5 }, @@ -5026,7 +5026,7 @@ pixel_y = 17; pixel_x = 10 }, -/obj/item/bodypart/r_leg/monkey{ +/obj/item/bodypart/leg/right/monkey{ pixel_x = -5 }, /obj/item/bodypart/head/monkey{ diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 42b21b79495..7e0576d5c2c 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -6053,7 +6053,7 @@ pixel_x = -5; pixel_y = -2 }, -/obj/item/bodypart/l_arm/robot, +/obj/item/bodypart/arm/left/robot, /turf/open/floor/iron/white{ heat_capacity = 1e+006 }, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 4f080ece2b1..486905e09db 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -19117,10 +19117,10 @@ /area/station/engineering/storage/tech) "eCO" = ( /obj/item/stack/cable_coil, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 3 }, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -3 }, /obj/structure/table, @@ -45860,10 +45860,10 @@ "lbz" = ( /obj/structure/table/reinforced, /obj/item/bodypart/chest/robot, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 6 }, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -6 }, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -81528,8 +81528,8 @@ "tTe" = ( /obj/structure/table/reinforced, /obj/item/folder/blue, -/obj/item/bodypart/l_leg/robot, -/obj/item/bodypart/r_leg/robot, +/obj/item/bodypart/leg/left/robot, +/obj/item/bodypart/leg/right/robot, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 3ad29e7ea4f..896dedbd395 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -53199,13 +53199,13 @@ "qrg" = ( /obj/item/bodypart/head, /obj/effect/decal/cleanable/blood, -/obj/item/bodypart/l_arm{ +/obj/item/bodypart/arm/left{ pixel_x = -9; pixel_y = -9 }, -/obj/item/bodypart/l_leg, -/obj/item/bodypart/r_arm, -/obj/item/bodypart/r_leg{ +/obj/item/bodypart/leg/left, +/obj/item/bodypart/arm/right, +/obj/item/bodypart/leg/right{ pixel_x = 8; pixel_y = 4 }, diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index b1bf739424c..4eca0ce985a 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -28737,17 +28737,17 @@ /obj/item/bodypart/chest/robot{ pixel_y = 4 }, -/obj/item/bodypart/r_leg/robot{ +/obj/item/bodypart/leg/right/robot{ pixel_x = 6 }, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 6; pixel_y = 6 }, -/obj/item/bodypart/l_leg/robot{ +/obj/item/bodypart/leg/left/robot{ pixel_x = -6 }, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -6; pixel_y = 6 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index b6fe7585cb9..d8883f89e6c 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -5118,7 +5118,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/engine) "bQk" = ( -/obj/item/bodypart/l_arm, +/obj/item/bodypart/arm/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) "bQs" = ( @@ -6036,7 +6036,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "cmH" = ( -/obj/item/bodypart/l_leg, +/obj/item/bodypart/leg/left, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) "cnc" = ( @@ -65776,10 +65776,10 @@ "xgi" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 3 }, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -3 }, /obj/structure/extinguisher_cabinet/directional/north, diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index b093c695da8..ed6813149f6 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -1877,10 +1877,10 @@ pixel_y = 16 }, /obj/structure/table/reinforced, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -6 }, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 6 }, /obj/item/hemostat, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 8b3f521dc1d..7b450223591 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -876,11 +876,11 @@ "zj" = ( /obj/structure/table/reinforced, /obj/machinery/light/directional/west, -/obj/item/bodypart/l_arm/robot{ +/obj/item/bodypart/arm/left/robot{ pixel_x = -4; pixel_y = 8 }, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = -10; pixel_y = 9 }, diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 754ce7c830b..dbed0e12bd3 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -21,7 +21,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/item/bikehorn/rubberducky, /obj/structure/closet/crate/trashcart/filled, -/obj/item/bodypart/r_arm/robot/surplus{ +/obj/item/bodypart/arm/right/robot/surplus{ name = "rusty robotic arm"; desc = "A rusted and decayed robotic arm. Probably still works... Probably." }, diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index b0e721586fa..b6a025b1da9 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -1083,12 +1083,12 @@ /area/shuttle/sbc_starfury) "dW" = ( /obj/structure/table, -/obj/item/bodypart/l_arm/robot, -/obj/item/bodypart/l_arm/robot, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/left/robot, +/obj/item/bodypart/arm/left/robot, +/obj/item/bodypart/arm/right/robot{ pixel_x = 3 }, -/obj/item/bodypart/r_arm/robot{ +/obj/item/bodypart/arm/right/robot{ pixel_x = 3 }, /obj/item/book/manual/wiki/surgery, diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 157d5f61d76..8038bc4ea92 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -208,10 +208,10 @@ //Health doll screws for human mobs #define SCREWYDOLL_HEAD /obj/item/bodypart/head #define SCREWYDOLL_CHEST /obj/item/bodypart/chest -#define SCREWYDOLL_L_ARM /obj/item/bodypart/l_arm -#define SCREWYDOLL_R_ARM /obj/item/bodypart/r_arm -#define SCREWYDOLL_L_LEG /obj/item/bodypart/l_leg -#define SCREWYDOLL_R_LEG /obj/item/bodypart/r_leg +#define SCREWYDOLL_L_ARM /obj/item/bodypart/arm/left +#define SCREWYDOLL_R_ARM /obj/item/bodypart/arm/right +#define SCREWYDOLL_L_LEG /obj/item/bodypart/leg/left +#define SCREWYDOLL_R_LEG /obj/item/bodypart/leg/right //Threshold levels for beauty for humans #define BEAUTY_LEVEL_HORRID -66 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 17d1156122a..909bfbc2ba1 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -955,3 +955,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Makes a species be better/worse at defending against tackling depending on their tail's status #define TRAIT_TACKLING_TAILED_DEFENDER "tackling_tailed_defender" + +/// some trait sorces dirived from bodyparts BODYPART_TRAIT is generic. +#define BODYPART_TRAIT "bodypart" +#define HEAD_TRAIT "head" +#define CHEST_TRAIT "chest" +#define RIGHT_ARM_TRAIT "right_arm" +#define LEFT_ARM_TRAIT "left_arm" +#define RIGHT_LEG_TRAIT "right_leg" +#define LEFT_LEG_TRAIT "left_leg" diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 7d66f8b4d4b..069521982fc 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -338,8 +338,8 @@ reqs = list(/obj/item/robot_suit = 1, /obj/item/clothing/head/helmet = 1, /obj/item/clothing/suit/armor/vest = 1, - /obj/item/bodypart/l_leg/robot = 1, - /obj/item/bodypart/r_leg/robot = 1, + /obj/item/bodypart/leg/left/robot = 1, + /obj/item/bodypart/leg/right/robot = 1, /obj/item/stack/sheet/iron = 1, /obj/item/stack/cable_coil = 1, /obj/item/gun/energy/disabler = 1, @@ -355,7 +355,7 @@ /obj/item/clothing/head/helmet/sec = 1, /obj/item/melee/baton/security/ = 1, /obj/item/assembly/prox_sensor = 1, - /obj/item/bodypart/r_arm/robot = 1) + /obj/item/bodypart/arm/right/robot = 1) tool_behaviors = list(TOOL_WELDER) time = 6 SECONDS category = CAT_ROBOT @@ -365,7 +365,7 @@ result = /mob/living/simple_animal/bot/cleanbot reqs = list(/obj/item/reagent_containers/cup/bucket = 1, /obj/item/assembly/prox_sensor = 1, - /obj/item/bodypart/r_arm/robot = 1) + /obj/item/bodypart/arm/right/robot = 1) parts = list(/obj/item/reagent_containers/cup/bucket = 1) time = 4 SECONDS category = CAT_ROBOT @@ -376,7 +376,7 @@ reqs = list(/obj/item/storage/toolbox = 1, /obj/item/stack/tile/iron = 10, /obj/item/assembly/prox_sensor = 1, - /obj/item/bodypart/r_arm/robot = 1) + /obj/item/bodypart/arm/right/robot = 1) time = 4 SECONDS category = CAT_ROBOT @@ -386,7 +386,7 @@ reqs = list(/obj/item/healthanalyzer = 1, /obj/item/storage/medkit = 1, /obj/item/assembly/prox_sensor = 1, - /obj/item/bodypart/r_arm/robot = 1) + /obj/item/bodypart/arm/right/robot = 1) parts = list( /obj/item/storage/medkit = 1, /obj/item/healthanalyzer = 1, @@ -418,7 +418,7 @@ name = "Honkbot" result = /mob/living/simple_animal/bot/secbot/honkbot reqs = list(/obj/item/storage/box/clown = 1, - /obj/item/bodypart/r_arm/robot = 1, + /obj/item/bodypart/arm/right/robot = 1, /obj/item/assembly/prox_sensor = 1, /obj/item/bikehorn/ = 1) time = 4 SECONDS @@ -428,7 +428,7 @@ name = "Firebot" result = /mob/living/simple_animal/bot/firebot reqs = list(/obj/item/extinguisher = 1, - /obj/item/bodypart/r_arm/robot = 1, + /obj/item/bodypart/arm/right/robot = 1, /obj/item/assembly/prox_sensor = 1, /obj/item/clothing/head/utility/hardhat/red = 1) time = 4 SECONDS @@ -458,8 +458,8 @@ name = "Vim" result = /obj/vehicle/sealed/car/vim reqs = list(/obj/item/clothing/head/helmet/space/eva = 1, - /obj/item/bodypart/l_leg/robot = 1, - /obj/item/bodypart/r_leg/robot = 1, + /obj/item/bodypart/leg/left/robot = 1, + /obj/item/bodypart/leg/right/robot = 1, /obj/item/flashlight = 1, /obj/item/assembly/voice = 1) tool_behaviors = list(TOOL_SCREWDRIVER) @@ -857,13 +857,13 @@ /datum/crafting_recipe/extendohand_r name = "Extendo-Hand (Right Arm)" - reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1) + reqs = list(/obj/item/bodypart/arm/right/robot = 1, /obj/item/clothing/gloves/boxing = 1) result = /obj/item/extendohand category = CAT_MISC /datum/crafting_recipe/extendohand_l name = "Extendo-Hand (Left Arm)" - reqs = list(/obj/item/bodypart/l_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1) + reqs = list(/obj/item/bodypart/arm/left/robot = 1, /obj/item/clothing/gloves/boxing = 1) result = /obj/item/extendohand category = CAT_MISC diff --git a/code/datums/elements/kneejerk.dm b/code/datums/elements/kneejerk.dm index e0b443f28a9..e70a8ed840a 100644 --- a/code/datums/elements/kneejerk.dm +++ b/code/datums/elements/kneejerk.dm @@ -27,16 +27,16 @@ /datum/element/kneejerk/proc/tap_knee(obj/item/item, mob/living/target, mob/living/user) var/selected_zone = user.zone_selected - var/obj/item/bodypart/r_leg = target.get_bodypart(BODY_ZONE_R_LEG) - var/obj/item/bodypart/l_leg = target.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/leg/right = target.get_bodypart(BODY_ZONE_R_LEG) + var/obj/item/bodypart/leg/left = target.get_bodypart(BODY_ZONE_L_LEG) var/obj/item/organ/internal/brain/target_brain = target.getorganslot(ORGAN_SLOT_BRAIN) if(!ishuman(target)) return - if((selected_zone == BODY_ZONE_R_LEG) && !r_leg) + if((selected_zone == BODY_ZONE_R_LEG) && !right) return - if((selected_zone == BODY_ZONE_L_LEG) && !l_leg) + if((selected_zone == BODY_ZONE_L_LEG) && !left) return user.do_attack_animation(target) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 9f79115630c..9677805f12d 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -13,15 +13,15 @@ /datum/martial_art/boxing/harm_act(mob/living/A, mob/living/D) var/mob/living/carbon/human/attacker_human = A - var/datum/species/species = attacker_human.dna.species + var/obj/item/bodypart/arm/active_arm = attacker_human.get_active_hand() A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("left hook","right hook","straight punch") - var/damage = rand(5, 8) + species.punchdamagelow + var/damage = rand(5, 8) + active_arm.unarmed_damage_low if(!damage) - playsound(D.loc, species.miss_sound, 25, TRUE, -1) + playsound(D.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1) D.visible_message(span_warning("[A]'s [atk_verb] misses [D]!"), \ span_danger("You avoid [A]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, A) to_chat(A, span_warning("Your [atk_verb] misses [D]!")) @@ -32,7 +32,7 @@ var/obj/item/bodypart/affecting = D.get_bodypart(D.get_random_valid_zone(A.zone_selected)) var/armor_block = D.run_armor_check(affecting, MELEE) - playsound(D.loc, species.attack_sound, 25, TRUE, -1) + playsound(D.loc, active_arm.unarmed_attack_sound, 25, TRUE, -1) D.visible_message(span_danger("[A] [atk_verb]ed [D]!"), \ span_userdanger("You're [atk_verb]ed by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A) diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm index 48e50e4f6ed..79ab5a0485e 100644 --- a/code/datums/quirks/negative.dm +++ b/code/datums/quirks/negative.dm @@ -467,16 +467,16 @@ var/obj/item/bodypart/prosthetic switch(limb_slot) if(BODY_ZONE_L_ARM) - prosthetic = new /obj/item/bodypart/l_arm/robot/surplus + prosthetic = new /obj/item/bodypart/arm/left/robot/surplus slot_string = "left arm" if(BODY_ZONE_R_ARM) - prosthetic = new /obj/item/bodypart/r_arm/robot/surplus + prosthetic = new /obj/item/bodypart/arm/right/robot/surplus slot_string = "right arm" if(BODY_ZONE_L_LEG) - prosthetic = new /obj/item/bodypart/l_leg/robot/surplus + prosthetic = new /obj/item/bodypart/leg/left/robot/surplus slot_string = "left leg" if(BODY_ZONE_R_LEG) - prosthetic = new /obj/item/bodypart/r_leg/robot/surplus + prosthetic = new /obj/item/bodypart/leg/right/robot/surplus slot_string = "right leg" human_holder.del_and_replace_bodypart(prosthetic) @@ -494,10 +494,10 @@ /datum/quirk/quadruple_amputee/add_unique() var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.del_and_replace_bodypart(new /obj/item/bodypart/l_arm/robot/surplus) - human_holder.del_and_replace_bodypart(new /obj/item/bodypart/r_arm/robot/surplus) - human_holder.del_and_replace_bodypart(new /obj/item/bodypart/l_leg/robot/surplus) - human_holder.del_and_replace_bodypart(new /obj/item/bodypart/r_leg/robot/surplus) + human_holder.del_and_replace_bodypart(new /obj/item/bodypart/arm/left/robot/surplus) + human_holder.del_and_replace_bodypart(new /obj/item/bodypart/arm/right/robot/surplus) + human_holder.del_and_replace_bodypart(new /obj/item/bodypart/leg/left/robot/surplus) + human_holder.del_and_replace_bodypart(new /obj/item/bodypart/leg/right/robot/surplus) /datum/quirk/quadruple_amputee/post_add() to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. Additionally, \ diff --git a/code/datums/status_effects/wound_effects.dm b/code/datums/status_effects/wound_effects.dm index 9ce7af7fc4b..fada8508ae9 100644 --- a/code/datums/status_effects/wound_effects.dm +++ b/code/datums/status_effects/wound_effects.dm @@ -31,9 +31,9 @@ alert_type = /atom/movable/screen/alert/status_effect/limp var/msg_stage = 0//so you dont get the most intense messages immediately /// The left leg of the limping person - var/obj/item/bodypart/l_leg/left + var/obj/item/bodypart/leg/left/left /// The right leg of the limping person - var/obj/item/bodypart/r_leg/right + var/obj/item/bodypart/leg/right/right /// Which leg we're limping with next var/obj/item/bodypart/next_leg /// How many deciseconds we limp for on the left leg diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index aeb98270b6a..8902a39436e 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -471,13 +471,13 @@ if(!heads) heads = typesof(/obj/item/bodypart/head) if(!l_arms) - l_arms = typesof(/obj/item/bodypart/l_arm) + l_arms = typesof(/obj/item/bodypart/arm/left) if(!r_arms) - r_arms = typesof(/obj/item/bodypart/r_arm) + r_arms = typesof(/obj/item/bodypart/arm/right) if(!l_legs) - l_legs = typesof(/obj/item/bodypart/l_leg) + l_legs = typesof(/obj/item/bodypart/leg/left) if(!r_legs) - r_legs = typesof(/obj/item/bodypart/r_leg) + r_legs = typesof(/obj/item/bodypart/leg/right) /obj/effect/anomaly/bioscrambler/anomalyEffect(delta_time) . = ..() diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 834c60e1e9c..47cf2295f4b 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -254,7 +254,7 @@ //firebot assembly /obj/item/extinguisher/attackby(obj/O, mob/user, params) - if(istype(O, /obj/item/bodypart/l_arm/robot) || istype(O, /obj/item/bodypart/r_arm/robot)) + if(istype(O, /obj/item/bodypart/arm/left/robot) || istype(O, /obj/item/bodypart/arm/right/robot)) to_chat(user, span_notice("You add [O] to [src].")) qdel(O) qdel(src) diff --git a/code/game/objects/items/food/pizza.dm b/code/game/objects/items/food/pizza.dm index 0098632313c..fbea7a5cd10 100644 --- a/code/game/objects/items/food/pizza.dm +++ b/code/game/objects/items/food/pizza.dm @@ -314,9 +314,9 @@ /obj/item/food/proc/try_break_off(mob/living/attacker, mob/living/user) //maybe i give you a pizza maybe i break off your arm if(prob(50) || (attacker != user) || !iscarbon(user) || HAS_TRAIT(user, TRAIT_NODISMEMBER)) return - var/obj/item/bodypart/l_arm = user.get_bodypart(BODY_ZONE_L_ARM) - var/obj/item/bodypart/r_arm = user.get_bodypart(BODY_ZONE_R_ARM) - var/did_the_thing = (l_arm?.dismember() || r_arm?.dismember()) //not all limbs can be removed, so important to check that we did. the. thing. + var/obj/item/bodypart/arm/left = user.get_bodypart(BODY_ZONE_L_ARM) + var/obj/item/bodypart/arm/right = user.get_bodypart(BODY_ZONE_R_ARM) + var/did_the_thing = (left?.dismember() || right?.dismember()) //not all limbs can be removed, so important to check that we did. the. thing. if(!did_the_thing) return to_chat(user, span_userdanger("Maybe I'll give you a pizza, maybe I'll break off your arm.")) //makes the reference more obvious diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index dd60391ac01..491a62e966b 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -8,13 +8,13 @@ icon = 'icons/mob/augmentation/augments.dmi' icon_state = "robo_suit" /// Left arm part of the endoskeleton - var/obj/item/bodypart/l_arm/robot/l_arm = null + var/obj/item/bodypart/arm/left/robot/l_arm = null /// Right arm part of the endoskeleton - var/obj/item/bodypart/r_arm/robot/r_arm = null + var/obj/item/bodypart/arm/right/robot/r_arm = null /// Left leg part of this endoskeleton - var/obj/item/bodypart/l_leg/robot/l_leg = null + var/obj/item/bodypart/leg/left/robot/l_leg = null /// Right leg part of this endoskeleton - var/obj/item/bodypart/r_leg/robot/r_leg = null + var/obj/item/bodypart/leg/right/robot/r_leg = null /// Chest part of this endoskeleton var/obj/item/bodypart/chest/robot/chest = null /// Head part of this endoskeleton @@ -162,7 +162,7 @@ else to_chat(user, span_warning("You need one sheet of iron to start building ED-209!")) return - else if(istype(W, /obj/item/bodypart/l_leg/robot)) + else if(istype(W, /obj/item/bodypart/leg/left/robot)) if(l_leg) return if(!user.transferItemToLoc(W, src)) @@ -172,7 +172,7 @@ l_leg = W update_appearance() - else if(istype(W, /obj/item/bodypart/r_leg/robot)) + else if(istype(W, /obj/item/bodypart/leg/right/robot)) if(src.r_leg) return if(!user.transferItemToLoc(W, src)) @@ -182,7 +182,7 @@ r_leg = W update_appearance() - else if(istype(W, /obj/item/bodypart/l_arm/robot)) + else if(istype(W, /obj/item/bodypart/arm/left/robot)) if(l_arm) return if(!user.transferItemToLoc(W, src)) @@ -192,7 +192,7 @@ l_arm = W update_appearance() - else if(istype(W, /obj/item/bodypart/r_arm/robot)) + else if(istype(W, /obj/item/bodypart/arm/right/robot)) if(r_arm) return if(!user.transferItemToLoc(W, src)) diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm index 47e9cd16e50..5c4dd535a39 100644 --- a/code/game/objects/items/storage/boxes/job_boxes.dm +++ b/code/game/objects/items/storage/boxes/job_boxes.dm @@ -147,7 +147,7 @@ illustration = "clown" /obj/item/storage/box/clown/attackby(obj/item/I, mob/user, params) - if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) + if((istype(I, /obj/item/bodypart/arm/left/robot)) || (istype(I, /obj/item/bodypart/arm/right/robot))) if(contents.len) //prevent accidently deleting contents balloon_alert(user, "items inside!") return diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index cb7ccd4edf5..81c2827fe3c 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -278,7 +278,7 @@ //medibot assembly /obj/item/storage/medkit/attackby(obj/item/bodypart/bodypart, mob/user, params) - if((!istype(bodypart, /obj/item/bodypart/l_arm/robot)) && (!istype(bodypart, /obj/item/bodypart/r_arm/robot))) + if((!istype(bodypart, /obj/item/bodypart/arm/left/robot)) && (!istype(bodypart, /obj/item/bodypart/arm/right/robot))) return ..() //Making a medibot! diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 22445deaf37..8dd2715302a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -222,14 +222,14 @@ /obj/structure/closet/crate/freezer/surplus_limbs/PopulateContents() . = ..() - new /obj/item/bodypart/l_arm/robot/surplus(src) - new /obj/item/bodypart/l_arm/robot/surplus(src) - new /obj/item/bodypart/r_arm/robot/surplus(src) - new /obj/item/bodypart/r_arm/robot/surplus(src) - new /obj/item/bodypart/l_leg/robot/surplus(src) - new /obj/item/bodypart/l_leg/robot/surplus(src) - new /obj/item/bodypart/r_leg/robot/surplus(src) - new /obj/item/bodypart/r_leg/robot/surplus(src) + new /obj/item/bodypart/arm/left/robot/surplus(src) + new /obj/item/bodypart/arm/left/robot/surplus(src) + new /obj/item/bodypart/arm/right/robot/surplus(src) + new /obj/item/bodypart/arm/right/robot/surplus(src) + new /obj/item/bodypart/leg/left/robot/surplus(src) + new /obj/item/bodypart/leg/left/robot/surplus(src) + new /obj/item/bodypart/leg/right/robot/surplus(src) + new /obj/item/bodypart/leg/right/robot/surplus(src) /obj/structure/closet/crate/radiation desc = "A crate with a radiation sign on it." diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index e98fdc606e6..366a0ea39ee 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -238,7 +238,7 @@ required_atoms = list( /obj/item/organ/internal/eyes = 1, /obj/effect/decal/cleanable/blood = 1, - /obj/item/bodypart/l_arm = 1, + /obj/item/bodypart/arm/left = 1, ) mob_to_summon = /mob/living/simple_animal/hostile/heretic_summon/raw_prophet cost = 1 diff --git a/code/modules/antagonists/heretic/knowledge/side_ash_flesh.dm b/code/modules/antagonists/heretic/knowledge/side_ash_flesh.dm index bdfff87e15e..bd4c3e75112 100644 --- a/code/modules/antagonists/heretic/knowledge/side_ash_flesh.dm +++ b/code/modules/antagonists/heretic/knowledge/side_ash_flesh.dm @@ -28,8 +28,8 @@ /datum/heretic_knowledge/summon/raw_prophet, ) required_atoms = list( - /obj/item/bodypart/l_leg = 1, - /obj/item/bodypart/r_leg = 1, + /obj/item/bodypart/leg/left = 1, + /obj/item/bodypart/leg/right = 1, /obj/item/hatchet = 1, ) duration = 3 MINUTES diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm index 87f0d3ff435..0470a39fc16 100644 --- a/code/modules/antagonists/nightmare/nightmare_species.dm +++ b/code/modules/antagonists/nightmare/nightmare_species.dm @@ -16,7 +16,6 @@ TRAIT_NOBREATH, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, - TRAIT_CHUNKYFINGERS, TRAIT_RADIMMUNE, TRAIT_VIRUSIMMUNE, TRAIT_PIERCEIMMUNE, @@ -26,6 +25,14 @@ mutantheart = /obj/item/organ/internal/heart/nightmare mutantbrain = /obj/item/organ/internal/brain/shadow/nightmare + bodypart_overrides = list( + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow/nightmare, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow/nightmare, + BODY_ZONE_HEAD = /obj/item/bodypart/head/shadow, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/shadow, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/shadow, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, + ) /datum/species/shadow/nightmare/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() diff --git a/code/modules/client/preferences/species_features/moth.dm b/code/modules/client/preferences/species_features/moth.dm index 687112a2bfe..a0f54f145a9 100644 --- a/code/modules/client/preferences/species_features/moth.dm +++ b/code/modules/client/preferences/species_features/moth.dm @@ -44,8 +44,8 @@ var/list/body_parts = list( /obj/item/bodypart/head/moth, /obj/item/bodypart/chest/moth, - /obj/item/bodypart/l_arm/moth, - /obj/item/bodypart/r_arm/moth, + /obj/item/bodypart/arm/left/moth, + /obj/item/bodypart/arm/right/moth, ) for (var/obj/item/bodypart/body_part in body_parts) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index dcff1d294c0..a2ba930d9c1 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -26,12 +26,12 @@ /obj/item/clothing/shoes/suicide_act(mob/living/carbon/user) if(rand(2)>1) user.visible_message(span_suicide("[user] begins tying \the [src] up waaay too tightly! It looks like [user.p_theyre()] trying to commit suicide!")) - var/obj/item/bodypart/l_leg = user.get_bodypart(BODY_ZONE_L_LEG) - var/obj/item/bodypart/r_leg = user.get_bodypart(BODY_ZONE_R_LEG) - if(l_leg) - l_leg.dismember() - if(r_leg) - r_leg.dismember() + var/obj/item/bodypart/leg/left = user.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/leg/right = user.get_bodypart(BODY_ZONE_R_LEG) + if(left) + left.dismember() + if(right) + right.dismember() playsound(user, SFX_DESECRATION, 50, TRUE, -1) return BRUTELOSS else//didnt realize this suicide act existed (was in miscellaneous.dm) and didnt want to remove it, so made it a 50/50 chance. Why not! diff --git a/code/modules/clothing/spacesuits/softsuit.dm b/code/modules/clothing/spacesuits/softsuit.dm index 7958bfc9cc2..e1eeb583c22 100644 --- a/code/modules/clothing/spacesuits/softsuit.dm +++ b/code/modules/clothing/spacesuits/softsuit.dm @@ -49,7 +49,7 @@ . = ..() if(.) return - if(!istype(attacked_with, /obj/item/bodypart/l_leg/robot) && !istype(attacked_with, /obj/item/bodypart/r_leg/robot)) + if(!istype(attacked_with, /obj/item/bodypart/leg/left/robot) && !istype(attacked_with, /obj/item/bodypart/leg/right/robot)) return if(ismob(loc)) user.balloon_alert(user, "drop the helmet first!") diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index 4abe44ed1c5..ccd651da412 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -371,13 +371,13 @@ if(!heads) heads = typesof(/obj/item/bodypart/head) if(!l_arms) - l_arms = typesof(/obj/item/bodypart/l_arm) + l_arms = typesof(/obj/item/bodypart/arm/left) if(!r_arms) - r_arms = typesof(/obj/item/bodypart/r_arm) + r_arms = typesof(/obj/item/bodypart/arm/right) if(!l_legs) - l_legs = typesof(/obj/item/bodypart/l_leg) + l_legs = typesof(/obj/item/bodypart/leg/left) if(!r_legs) - r_legs = typesof(/obj/item/bodypart/r_leg) + r_legs = typesof(/obj/item/bodypart/leg/right) /obj/item/clothing/suit/armor/reactive/bioscrambling/cooldown_activation(mob/living/carbon/human/owner) var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 82bd0b58a5f..d1c68b2557f 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -479,9 +479,9 @@ else if(amt > old_limbs) hand_bodyparts.len = amt for(var/i in old_limbs+1 to amt) - var/path = /obj/item/bodypart/l_arm + var/path = /obj/item/bodypart/arm/left if(!(i % 2)) - path = /obj/item/bodypart/r_arm + path = /obj/item/bodypart/arm/right var/obj/item/bodypart/BP = new path () BP.held_index = i diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 2a310170c32..d6dc450f08b 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -37,8 +37,8 @@ span_userdanger("[user] [response_harm_continuous] you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You [response_harm_simple] [src]!")) playsound(loc, attacked_sound, 25, TRUE, -1) - - var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + var/damage = rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) attack_threshold_check(damage) log_combat(user, src, "attacked") diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 7ce9dd90299..f3e0314f72a 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -474,3 +474,11 @@ qdel(X) amount_cured++ return amount_cured + +/// This proc lets the mob's brain decide what bodypart to attack with in an unarmed strike. +/obj/item/organ/internal/brain/proc/get_attacking_limb(mob/living/carbon/human/target) + var/obj/item/bodypart/arm/active_hand = owner.get_active_hand() + if(target.body_position == LYING_DOWN && owner.usable_legs) + var/obj/item/bodypart/found_bodypart = owner.get_bodypart((active_hand.held_index % 2) ? BODY_ZONE_L_LEG : BODY_ZONE_R_LEG) + return found_bodypart || active_hand + return active_hand diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index c469404fae8..6492e0e6279 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -17,10 +17,10 @@ bodyparts = list( /obj/item/bodypart/chest/alien, /obj/item/bodypart/head/alien, - /obj/item/bodypart/l_arm/alien, - /obj/item/bodypart/r_arm/alien, - /obj/item/bodypart/r_leg/alien, - /obj/item/bodypart/l_leg/alien, + /obj/item/bodypart/arm/left/alien, + /obj/item/bodypart/arm/right/alien, + /obj/item/bodypart/leg/right/alien, + /obj/item/bodypart/leg/left/alien, ) GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 40a8d12e828..38cdba27dd5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -989,7 +989,7 @@ ///Proc to hook behavior on bodypart removals. Do not directly call. You're looking for [/obj/item/bodypart/proc/drop_limb()]. /mob/living/carbon/proc/remove_bodypart(obj/item/bodypart/old_bodypart) SHOULD_NOT_OVERRIDE(TRUE) - + old_bodypart.on_removal() bodyparts -= old_bodypart switch(old_bodypart.body_part) if(LEG_LEFT, LEG_RIGHT) @@ -1042,15 +1042,15 @@ if(BODY_ZONE_CHEST) limbtypes = typesof(/obj/item/bodypart/chest) if(BODY_ZONE_R_ARM) - limbtypes = typesof(/obj/item/bodypart/r_arm) + limbtypes = typesof(/obj/item/bodypart/arm/right) if(BODY_ZONE_L_ARM) - limbtypes = typesof(/obj/item/bodypart/l_arm) + limbtypes = typesof(/obj/item/bodypart/arm/left) if(BODY_ZONE_HEAD) limbtypes = typesof(/obj/item/bodypart/head) if(BODY_ZONE_L_LEG) - limbtypes = typesof(/obj/item/bodypart/l_leg) + limbtypes = typesof(/obj/item/bodypart/leg/left) if(BODY_ZONE_R_LEG) - limbtypes = typesof(/obj/item/bodypart/r_leg) + limbtypes = typesof(/obj/item/bodypart/leg/right) switch(edit_action) if("remove") if(BP) @@ -1311,9 +1311,9 @@ /mob/living/carbon/get_attack_type() - var/datum/species/species = dna?.species - if (species) - return species.attack_type + if(has_active_hand()) + var/obj/item/bodypart/arm/active_arm = get_active_hand() + return active_arm.attack_type return ..() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 2b83e74e643..0e57e685644 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -73,10 +73,10 @@ var/list/bodyparts = list( /obj/item/bodypart/chest, /obj/item/bodypart/head, - /obj/item/bodypart/l_arm, - /obj/item/bodypart/r_arm, - /obj/item/bodypart/r_leg, - /obj/item/bodypart/l_leg, + /obj/item/bodypart/arm/left, + /obj/item/bodypart/arm/right, + /obj/item/bodypart/leg/right, + /obj/item/bodypart/leg/left, ) /// A collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems) diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 860375f5cbb..b150a8b3676 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -466,8 +466,8 @@ update_wound_overlays() var/list/needs_update = list() var/limb_count_update = FALSE - var/obj/item/bodypart/l_leg/left_leg - var/obj/item/bodypart/r_leg/right_leg + var/obj/item/bodypart/leg/left/left_leg + var/obj/item/bodypart/leg/right/right_leg var/old_left_leg_key for(var/obj/item/bodypart/limb as anything in bodyparts) limb.update_limb(is_creating = update_limb_data) //Update limb actually doesn't do much, get_limb_icon is the cpu eater. @@ -530,7 +530,7 @@ * Returns a boolean, TRUE if the legs need to be redrawn, FALSE if they do not need to be redrawn. * Necessary so that we can ensure that modifications of legs cause overlay updates. */ -/mob/living/carbon/proc/update_legs(obj/item/bodypart/r_leg/right_leg, obj/item/bodypart/l_leg/left_leg, old_left_leg_key) +/mob/living/carbon/proc/update_legs(obj/item/bodypart/leg/right/right_leg, obj/item/bodypart/leg/left/left_leg, old_left_leg_key) var/list/left_leg_icons // yes it's actually a list, bet you didn't expect that, now did you? var/legs_need_redrawn = FALSE if(left_leg) @@ -647,7 +647,7 @@ return . -/obj/item/bodypart/r_leg/generate_icon_key() +/obj/item/bodypart/leg/right/generate_icon_key() RETURN_TYPE(/list) . = ..() if(left_leg_mask_key) // We do this so we can cache the versions with and without a mask, for when there's no left leg. @@ -669,7 +669,7 @@ * * Returns the `/image` of the right leg that was masked, or `null` if the mask didn't exist. */ -/obj/item/bodypart/r_leg/proc/generate_masked_right_leg(right_leg_icon_file, right_leg_icon_state, image_dir) +/obj/item/bodypart/leg/right/proc/generate_masked_right_leg(right_leg_icon_file, right_leg_icon_state, image_dir) RETURN_TYPE(/image) if(!left_leg_mask_cache[left_leg_mask_key] || !right_leg_icon_file || !right_leg_icon_state) return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d747a9caaaa..0631d033ced 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -204,7 +204,8 @@ return if(check_block()) //everybody is kung fu fighting return - playsound(loc, user.dna.species.attack_sound, 25, TRUE, -1) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + playsound(loc, active_arm.unarmed_attack_sound, 25, TRUE, -1) visible_message(span_danger("[user] [hulk_verb]ed [src]!"), \ span_userdanger("[user] [hulk_verb]ed [src]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, user) to_chat(user, span_danger("You [hulk_verb] [src]!")) @@ -257,7 +258,8 @@ if(try_inject(user, affecting, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))//Thick suits can stop monkey bites. if(..()) //successful monkey bite, this handles disease contraction. - var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) + var/obj/item/bodypart/arm/active_arm = user.get_active_hand() + var/damage = rand(active_arm.unarmed_damage_low, active_arm.unarmed_damage_high) if(!damage) return if(check_shields(user, damage, "the [user.name]")) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index d8dfb39782a..364ef57942a 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -98,13 +98,17 @@ /mob/living/carbon/human/can_use_guns(obj/item/G) . = ..() if(G.trigger_guard == TRIGGER_GUARD_NORMAL) - if(HAS_TRAIT(src, TRAIT_CHUNKYFINGERS)) + if(check_chunky_fingers()) balloon_alert(src, "fingers are too big!") return FALSE if(HAS_TRAIT(src, TRAIT_NOGUNS)) to_chat(src, span_warning("You can't bring yourself to use a ranged weapon!")) return FALSE +/mob/living/carbon/human/proc/check_chunky_fingers() + if(HAS_TRAIT_NOT_FROM(src, TRAIT_CHUNKYFINGERS, RIGHT_ARM_TRAIT) && HAS_TRAIT_NOT_FROM(src, TRAIT_CHUNKYFINGERS, LEFT_ARM_TRAIT)) + return TRUE + return (active_hand_index % 2) ? HAS_TRAIT_FROM(src, TRAIT_CHUNKYFINGERS, LEFT_ARM_TRAIT) : HAS_TRAIT_FROM(src, TRAIT_CHUNKYFINGERS, RIGHT_ARM_TRAIT) /mob/living/carbon/human/get_policy_keywords() . = ..() . += "[dna.species.type]" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 783683e3510..0b501ee6fe3 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -98,11 +98,11 @@ GLOBAL_LIST_EMPTY(features_by_species) var/list/mutant_organs = list() ///The bodyparts this species uses. assoc of bodypart string - bodypart type. Make sure all the fucking entries are in or I'll skin you alive. var/list/bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right, BODY_ZONE_HEAD = /obj/item/bodypart/head, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right, BODY_ZONE_CHEST = /obj/item/bodypart/chest, ) @@ -125,14 +125,6 @@ GLOBAL_LIST_EMPTY(features_by_species) var/stunmod = 1 ///multiplier for money paid at payday var/payday_modifier = 1 - ///Type of damage attack does. Ethereals attack with burn damage for example. - var/attack_type = BRUTE - ///Lowest possible punch damage this species can give. If this is set to 0, punches will always miss. - var/punchdamagelow = 1 - ///Highest possible punch damage this species can give. - var/punchdamagehigh = 10 - ///Damage at which punches from this race will stun - var/punchstunthreshold = 10 //yes it should be to the attacked race but it's not useful that way even if it's logical ///Base electrocution coefficient. Basically a multiplier for damage from electrocutions. var/siemens_coeff = 1 ///To use MUTCOLOR with a fixed color that's independent of the mcolor feature in DNA. @@ -178,13 +170,6 @@ GLOBAL_LIST_EMPTY(features_by_species) ///List of factions the mob gain upon gaining this species. var/list/inherent_factions - ///Punch-specific attack verb. - var/attack_verb = SFX_PUNCH - /// The visual effect of the attack. - var/attack_effect = ATTACK_EFFECT_PUNCH - var/sound/attack_sound = 'sound/weapons/punch1.ogg' - var/sound/miss_sound = 'sound/weapons/punchmiss.ogg' - ///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm] var/breathid = "o2" @@ -623,10 +608,10 @@ GLOBAL_LIST_EMPTY(features_by_species) // organic body markings if(HAS_MARKINGS in species_traits) var/obj/item/bodypart/chest/chest = species_human.get_bodypart(BODY_ZONE_CHEST) - var/obj/item/bodypart/r_arm/right_arm = species_human.get_bodypart(BODY_ZONE_R_ARM) - var/obj/item/bodypart/l_arm/left_arm = species_human.get_bodypart(BODY_ZONE_L_ARM) - var/obj/item/bodypart/r_leg/right_leg = species_human.get_bodypart(BODY_ZONE_R_LEG) - var/obj/item/bodypart/l_leg/left_leg = species_human.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/arm/right/right_arm = species_human.get_bodypart(BODY_ZONE_R_ARM) + var/obj/item/bodypart/arm/left/left_arm = species_human.get_bodypart(BODY_ZONE_L_ARM) + var/obj/item/bodypart/leg/right/right_leg = species_human.get_bodypart(BODY_ZONE_R_LEG) + var/obj/item/bodypart/leg/left/left_leg = species_human.get_bodypart(BODY_ZONE_L_LEG) var/datum/sprite_accessory/markings = GLOB.moth_markings_list[species_human.dna.features["moth_markings"]] if(!HAS_TRAIT(species_human, TRAIT_HUSK)) @@ -1123,11 +1108,14 @@ GLOBAL_LIST_EMPTY(features_by_species) return TRUE else - var/atk_verb = user.dna.species.attack_verb - var/atk_effect = user.dna.species.attack_effect - if(target.body_position == LYING_DOWN) - atk_verb = "kick" - atk_effect = ATTACK_EFFECT_KICK + var/obj/item/organ/internal/brain/brain = user.getorganslot(ORGAN_SLOT_BRAIN) + var/obj/item/bodypart/attacking_bodypart + if(brain) + attacking_bodypart = brain.get_attacking_limb(target) + if(!attacking_bodypart) + attacking_bodypart = user.get_active_hand() + var/atk_verb = attacking_bodypart.unarmed_attack_verb + var/atk_effect = attacking_bodypart.unarmed_attack_effect if(atk_effect == ATTACK_EFFECT_BITE) if(user.is_mouth_covered(mask_only = TRUE)) @@ -1135,19 +1123,19 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE user.do_attack_animation(target, atk_effect) - var/damage = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) + var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) var/obj/item/bodypart/affecting = target.get_bodypart(target.get_random_valid_zone(user.zone_selected)) var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases - if(user.dna.species.punchdamagelow) - if(atk_effect == ATTACK_EFFECT_KICK || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage) + if(attacking_bodypart.unarmed_damage_low) + if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) //kicks never miss (provided your species deals more than 0 damage) miss_chance = 0 else - miss_chance = min((user.dna.species.punchdamagehigh/user.dna.species.punchdamagelow) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() + miss_chance = min((attacking_bodypart.unarmed_damage_high/attacking_bodypart.unarmed_damage_low) + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 100) //old base chance for a miss + various damage. capped at 100 to prevent weirdness in prob() if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted - playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1) + playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) target.visible_message(span_danger("[user]'s [atk_verb] misses [target]!"), \ span_danger("You avoid [user]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_warning("Your [atk_verb] misses [target]!")) @@ -1156,7 +1144,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/armor_block = target.run_armor_check(affecting, MELEE) - playsound(target.loc, user.dna.species.attack_sound, 25, TRUE, -1) + playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) target.visible_message(span_danger("[user] [atk_verb]ed [target]!"), \ span_userdanger("You're [atk_verb]ed by [user]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) @@ -1170,19 +1158,20 @@ GLOBAL_LIST_EMPTY(features_by_species) target.dismembering_strike(user, affecting.body_zone) var/attack_direction = get_dir(user, target) + var/attack_type = attacking_bodypart.attack_type if(atk_effect == ATTACK_EFFECT_KICK)//kicks deal 1.5x raw damage - target.apply_damage(damage*1.5, user.dna.species.attack_type, affecting, armor_block, attack_direction = attack_direction) - if((damage * 1.5) >= 9) + if(damage >= 9) target.force_say() log_combat(user, target, "kicked") + target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) else//other attacks deal full raw damage + 1.5x in stamina damage - target.apply_damage(damage, user.dna.species.attack_type, affecting, armor_block, attack_direction = attack_direction) + target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) if(damage >= 9) target.force_say() log_combat(user, target, "punched") - if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold) + if((target.stat != DEAD) && damage >= attacking_bodypart.unarmed_stun_threshold) target.visible_message(span_danger("[user] knocks [target] down!"), \ span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You knock [target] down!")) @@ -1942,7 +1931,6 @@ GLOBAL_LIST_EMPTY(features_by_species) // and language perk last, as it comes at the end of the perks list species_perks += create_pref_unique_perks() species_perks += create_pref_blood_perks() - species_perks += create_pref_combat_perks() species_perks += create_pref_damage_perks() species_perks += create_pref_temperature_perks() species_perks += create_pref_traits_perks() @@ -1980,25 +1968,6 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/create_pref_unique_perks() return null -/** - * Adds adds any perks related to combat. - * For example, the damage type of their punches. - * - * Returns a list containing perks, or an empty list. - */ -/datum/species/proc/create_pref_combat_perks() - var/list/to_add = list() - - if(attack_type != BRUTE) - to_add += list(list( - SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, - SPECIES_PERK_ICON = "fist-raised", - SPECIES_PERK_NAME = "Elemental Attacker", - SPECIES_PERK_DESC = "[plural_form] deal [attack_type] damage with their punches instead of brute.", - )) - - return to_add - /** * Adds adds any perks related to sustaining damage. * For example, brute damage vulnerability, or fire damage resistance. @@ -2244,8 +2213,8 @@ GLOBAL_LIST_EMPTY(features_by_species) //Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) - new_species.bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/r_leg/digitigrade - new_species.bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/l_leg/digitigrade + new_species.bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade + new_species.bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade for(var/obj/item/bodypart/old_part as anything in target.bodyparts) if(old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 648ccbb54b9..c95d73ac905 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -5,7 +5,6 @@ sexes = FALSE species_traits = list(NOBLOOD, NOEYESPRITES, NOSTOMACH) inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_NOBREATH, TRAIT_NOHUNGER, TRAIT_VIRUSIMMUNE, @@ -17,10 +16,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/abductor, BODY_ZONE_CHEST = /obj/item/bodypart/chest/abductor, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/abductor, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/abductor, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/abductor, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/abductor, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/abductor, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/abductor, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/abductor, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/abductor, ) /datum/species/abductor/on_species_gain(mob/living/carbon/C, datum/species/old_species) diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 8e92ff91513..a1fd3a1d6c3 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -33,10 +33,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/robot, BODY_ZONE_CHEST = /obj/item/bodypart/chest/robot, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/robot, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/robot, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/robot, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/robot, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/robot, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/robot, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/robot, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/robot, ) examine_limb_id = SPECIES_HUMAN diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 81c42599586..00bc32f9e55 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -1,9 +1,6 @@ /datum/species/ethereal name = "\improper Ethereal" id = SPECIES_ETHEREAL - attack_verb = "burn" - attack_sound = 'sound/weapons/etherealhit.ogg' - miss_sound = 'sound/weapons/etherealmiss.ogg' meat = /obj/item/food/meat/slab/human/mutant/ethereal mutantlungs = /obj/item/organ/internal/lungs/ethereal mutantstomach = /obj/item/organ/internal/stomach/ethereal @@ -13,7 +10,6 @@ siemens_coeff = 0.5 //They thrive on energy brutemod = 1.25 //They're weak to punches payday_modifier = 0.75 - attack_type = BURN //burn bish species_traits = list(DYNCOLORS, AGENDER, NO_UNDERWEAR, HAIR, FACEHAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_cookie = /obj/item/food/energybar @@ -29,11 +25,11 @@ hair_alpha = 140 bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/ethereal, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/ethereal, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/ethereal, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/ethereal, BODY_ZONE_HEAD = /obj/item/bodypart/head/ethereal, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/ethereal, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/ethereal, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/ethereal, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/ethereal, BODY_ZONE_CHEST = /obj/item/bodypart/chest/ethereal, ) @@ -217,6 +213,12 @@ SPECIES_PERK_DESC = "The Ethereal's heart will encase them in crystal should they die, returning them to life after a time - \ at the cost of a permanent brain trauma.", ), + list( + SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, + SPECIES_PERK_ICON = "fist-raised", + SPECIES_PERK_NAME = "Elemental Attacker", + SPECIES_PERK_DESC = "Ethereals deal burn damage with their punches instead of brute.", + ), list( SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "biohazard", diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index c172e603b48..c0861c000b5 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -27,11 +27,11 @@ mutant_organs = list(/obj/item/organ/internal/fly, /obj/item/organ/internal/fly/groin) bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/fly, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/fly, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/fly, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/fly, BODY_ZONE_HEAD = /obj/item/bodypart/head/fly, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/fly, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/fly, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/fly, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/fly, BODY_ZONE_CHEST = /obj/item/bodypart/chest/fly, ) 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 625e8344b80..ce27d5e11af 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -4,7 +4,6 @@ id = SPECIES_GOLEM species_traits = list(NOBLOOD,NOTRANSSTING, MUTCOLORS,NO_UNDERWEAR, NO_DNA_COPY) inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_NOBREATH, TRAIT_NODISMEMBER, @@ -22,9 +21,6 @@ payday_modifier = 0.75 armor = 55 siemens_coeff = 0 - punchdamagelow = 5 - punchdamagehigh = 14 - punchstunthreshold = 11 //about 40% chance to stun no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) nojumpsuit = 1 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC @@ -36,11 +32,11 @@ fixed_mut_color = "#aaaaaa" bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, ) @@ -108,7 +104,6 @@ //Can burn and takes damage from heat //no RESISTHEAT, NOFIRE inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_NOBREATH, TRAIT_NODISMEMBER, @@ -200,7 +195,6 @@ name = "Silver Golem" id = SPECIES_GOLEM_SILVER fixed_mut_color = "#dddddd" - punchstunthreshold = 9 //60% chance, from 40% meat = /obj/item/stack/ore/silver info_text = "As a Silver Golem, your attacks have a higher chance of stunning. Being made of silver, your body is immune to spirits of the damned and runic golems." prefix = "Silver" @@ -221,18 +215,20 @@ id = SPECIES_GOLEM_PLASTEEL fixed_mut_color = "#bbbbbb" stunmod = 0.4 - punchdamagelow = 12 - punchdamagehigh = 21 - punchstunthreshold = 18 //still 40% stun chance speedmod = 4 //pretty fucking slow meat = /obj/item/stack/ore/iron info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching. You also magnetically attach to surfaces and so don't float without gravity and cannot have positions swapped with other beings." - attack_verb = "smash" - attack_effect = ATTACK_EFFECT_SMASH - attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard prefix = "Plasteel" special_names = null examine_limb_id = SPECIES_GOLEM + bodypart_overrides = list( + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/plasteel, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/plasteel, + BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/plasteel, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/plasteel, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, + ) /datum/species/golem/plasteel/negates_gravity(mob/living/carbon/human/H) return TRUE @@ -316,7 +312,6 @@ meat = /obj/item/stack/sheet/mineral/wood //Can burn and take damage from heat inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_NOBREATH, TRAIT_NODISMEMBER, @@ -369,20 +364,22 @@ fixed_mut_color = "#77ff00" meat = /obj/item/stack/ore/uranium info_text = "As an Uranium Golem, your very touch burns and irradiates organic lifeforms. You don't hit as hard as most golems, but you are far more durable against blunt force trauma." - attack_verb = "burn" - attack_sound = 'sound/weapons/sear.ogg' - attack_type = BURN var/last_event = 0 var/active = null armor = 40 brutemod = 0.5 - punchdamagelow = 1 - punchdamagehigh = 10 - punchstunthreshold = 9 prefix = "Uranium" special_names = list("Oxide", "Rod", "Meltdown", "235") COOLDOWN_DECLARE(radiation_emission_cooldown) examine_limb_id = SPECIES_GOLEM + bodypart_overrides = list( + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/uranium, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/uranium, + BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, + ) /datum/species/golem/uranium/proc/radiation_emission(mob/living/carbon/human/H) if(!COOLDOWN_FINISHED(src, radiation_emission_cooldown)) @@ -416,7 +413,6 @@ burnmod = 3 //melts easily brutemod = 0.25 info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery." - attack_sound = 'sound/effects/shovel_dig.ogg' prefix = "Sand" special_names = list("Castle", "Bag", "Dune", "Worm", "Storm") examine_limb_id = SPECIES_GOLEM @@ -448,7 +444,6 @@ brutemod = 3 //very fragile burnmod = 0.25 info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - attack_sound = 'sound/effects/glassbr2.ogg' prefix = "Glass" special_names = list("Lens", "Prism", "Fiber", "Bead") examine_limb_id = SPECIES_GOLEM @@ -483,8 +478,6 @@ fixed_mut_color = "#3333ff" meat = /obj/item/stack/ore/bluespace_crystal info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance." - attack_verb = "bluespace punch" - attack_sound = 'sound/effects/phasein.ogg' prefix = "Bluespace" special_names = list("Crystal", "Polycrystal") examine_limb_id = SPECIES_GOLEM @@ -582,7 +575,6 @@ fixed_mut_color = "#ffff00" say_mod = "honks" inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_CLUMSY, TRAIT_GENELESS, TRAIT_NOBREATH, @@ -595,16 +587,19 @@ TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, ) - punchdamagelow = 0 - punchdamagehigh = 1 - punchstunthreshold = 2 //Harmless and can't stun meat = /obj/item/stack/ore/bananium info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged." - attack_verb = "honk" - attack_sound = 'sound/items/airhorn2.ogg' prefix = "Bananium" special_names = null examine_limb_id = SPECIES_GOLEM + bodypart_overrides = list( + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/bananium, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/bananium, + BODY_ZONE_HEAD = /obj/item/bodypart/head/golem, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/bananium, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/bananium, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, + ) /// Cooldown for producing honks COOLDOWN_DECLARE(honkooldown) @@ -688,7 +683,6 @@ info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie." species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors inherent_traits = list( - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_NOBREATH, TRAIT_NODISMEMBER, @@ -707,11 +701,11 @@ inherent_factions = list("cult") species_language_holder = /datum/language_holder/golem/runic bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/cult, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/cult, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cult, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cult, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cult, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/cult, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/cult, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cult, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cult, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cult, ) @@ -773,7 +767,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -788,17 +781,14 @@ armor = 15 //feels no pain, but not too resistant burnmod = 2 // don't get burned speedmod = 1 // not as heavy as stone - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 // not as heavy as stone prefix = "Cloth" special_names = null bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/cloth, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/cloth, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cloth, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cloth, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cloth, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/cloth, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/cloth, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cloth, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cloth, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cloth, ) @@ -946,7 +936,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -1046,7 +1035,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -1058,23 +1046,17 @@ TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, ) - attack_verb = "whips" - attack_sound = 'sound/weapons/whip.ogg' - miss_sound = 'sound/weapons/etherealmiss.ogg' fixed_mut_color = null armor = 25 burnmod = 1.25 heatmod = 2 speedmod = 1.5 - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/cardboard, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/cardboard, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/cardboard, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/cardboard, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/cardboard, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/cardboard, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/cardboard, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/cardboard, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/cardboard, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/cardboard, ) var/last_creation = 0 @@ -1112,7 +1094,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -1128,8 +1109,8 @@ fixed_mut_color = "#624a2e" info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level." grab_sound = 'sound/weapons/whipgrab.ogg' - attack_sound = 'sound/weapons/whip.ogg' examine_limb_id = SPECIES_GOLEM + /datum/species/golem/durathread name = "Durathread Golem" id = SPECIES_GOLEM_DURATHREAD @@ -1140,7 +1121,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -1154,11 +1134,11 @@ ) info_text = "As a Durathread Golem, your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well." bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/durathread, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/durathread, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/durathread, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/durathread, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/durathread, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/durathread, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/durathread, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/durathread, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/durathread, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/durathread, ) @@ -1183,7 +1163,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_FAKEDEATH, TRAIT_GENELESS, TRAIT_LITERATE, @@ -1201,11 +1180,11 @@ species_language_holder = /datum/language_holder/golem/bone info_text = "As a Bone Golem, You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice." bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/bone, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/bone, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/bone, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/bone, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/bone, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/bone, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/bone, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/bone, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/bone, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/bone, ) var/datum/action/innate/bonechill/bonechill @@ -1297,7 +1276,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, @@ -1309,11 +1287,11 @@ TRAIT_RESISTLOWPRESSURE, ) bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/golem/snow, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/golem/snow, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/golem/snow, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/golem/snow, BODY_ZONE_HEAD = /obj/item/bodypart/head/golem/snow, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/golem/snow, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/golem/snow, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/golem/snow, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/golem/snow, BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/snow, ) @@ -1359,7 +1337,6 @@ inherent_traits = list( TRAIT_ADVANCEDTOOLUSER, TRAIT_CAN_STRIP, - TRAIT_CHUNKYFINGERS, TRAIT_GENELESS, TRAIT_LITERATE, TRAIT_NOBREATH, 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 6a3687d2549..0d027704091 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -24,11 +24,11 @@ ass_image = 'icons/ass/assslime.png' bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/jelly, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/jelly, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/jelly, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/jelly, BODY_ZONE_HEAD = /obj/item/bodypart/head/jelly, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/jelly, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/jelly, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/jelly, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/jelly, BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly, ) @@ -155,11 +155,11 @@ var/datum/action/innate/swap_body/swap_body bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/slime, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/slime, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/slime, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/slime, BODY_ZONE_HEAD = /obj/item/bodypart/head/slime, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/slime, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/slime, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/slime, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/slime, BODY_ZONE_CHEST = /obj/item/bodypart/chest/slime, ) @@ -442,11 +442,11 @@ id = SPECIES_LUMINESCENT examine_limb_id = SPECIES_LUMINESCENT bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/luminescent, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/luminescent, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/luminescent, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/luminescent, BODY_ZONE_HEAD = /obj/item/bodypart/head/luminescent, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/luminescent, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/luminescent, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/luminescent, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/luminescent, BODY_ZONE_CHEST = /obj/item/bodypart/chest/luminescent, ) var/glow_intensity = LUMINESCENT_DEFAULT_GLOW diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index e5ec28fc6a8..450d5462fa8 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -24,10 +24,6 @@ payday_modifier = 0.75 changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT species_cookie = /obj/item/food/meat/slab - attack_verb = "slash" - attack_effect = ATTACK_EFFECT_CLAW - attack_sound = 'sound/weapons/slash.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' meat = /obj/item/food/meat/slab/human/mutant/lizard skinned_type = /obj/item/stack/sheet/animalhide/lizard exotic_bloodtype = "L" @@ -48,10 +44,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/lizard, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/lizard, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/lizard, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/lizard, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/lizard, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/lizard, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/lizard, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) /// Lizards are cold blooded and do not stabilize body temperature naturally @@ -131,13 +127,21 @@ Lizard subspecies: ASHWALKERS mutantlungs = /obj/item/organ/internal/lungs/ashwalker mutantbrain = /obj/item/organ/internal/brain/primitive inherent_traits = list( - TRAIT_CHUNKYFINGERS, //TRAIT_LITERATE, TRAIT_VIRUSIMMUNE, ) species_language_holder = /datum/language_holder/lizard/ash digitigrade_customization = DIGITIGRADE_FORCED examine_limb_id = SPECIES_LIZARD + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/lizard/ashwalker, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/lizard/ashwalker, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/lizard, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, + ) + /* Lizard subspecies: SILVER SCALED */ diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 4e8583b9b50..18331ab9abb 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -3,10 +3,6 @@ id = SPECIES_MONKEY say_mod = "chimpers" bodytype = BODYTYPE_ORGANIC | BODYTYPE_MONKEY - attack_verb = "bite" - attack_effect = ATTACK_EFFECT_BITE - attack_sound = 'sound/weapons/bite.ogg' - miss_sound = 'sound/weapons/bite.ogg' external_organs = list( /obj/item/organ/external/tail/monkey = "Monkey" ) @@ -40,17 +36,14 @@ liked_food = MEAT | FRUIT | BUGS disliked_food = CLOTH sexes = FALSE - punchdamagelow = 1 - punchdamagehigh = 3 - punchstunthreshold = 4 // no stun punches species_language_holder = /datum/language_holder/monkey bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/monkey, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/monkey, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/monkey, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/monkey, BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/monkey, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/monkey, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/monkey, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/monkey, BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey, ) fire_overlay = "monkey" @@ -98,7 +91,8 @@ span_danger("You avoid [user]'s bite!"), span_hear("You hear jaws snapping shut!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("Your bite misses [victim]!")) return TRUE - victim.apply_damage(rand(punchdamagelow, punchdamagehigh), BRUTE, affecting, armor) + var/obj/item/bodypart/arm/mouth = user.get_bodypart(BODY_ZONE_HEAD) + victim.apply_damage(rand(mouth.unarmed_damage_low, mouth.unarmed_damage_high), BRUTE, affecting, armor) victim.visible_message(span_danger("[name] bites [victim]!"), span_userdanger("[name] bites you!"), span_hear("You hear a chomp!"), COMBAT_MESSAGE_RANGE, name) to_chat(user, span_danger("You bite [victim]!")) @@ -234,3 +228,6 @@ if(in_the_way_mob.pass_flags & PASSTABLE) return in_the_way_mob.knockOver(owner) + +/obj/item/organ/internal/brain/primate/get_attacking_limb(mob/living/carbon/human/target) + return owner.get_bodypart(BODY_ZONE_HEAD) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index f6cbba9fc17..5d85e119b0e 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -11,10 +11,6 @@ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG mutant_bodyparts = list("moth_markings" = "None") external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") - attack_verb = "slash" - attack_effect = ATTACK_EFFECT_CLAW - attack_sound = 'sound/weapons/slash.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' meat = /obj/item/food/meat/slab/human/mutant/moth liked_food = VEGETABLES | DAIRY | CLOTH disliked_food = FRUIT | GROSS | BUGS | GORE @@ -30,10 +26,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/moth, BODY_ZONE_CHEST = /obj/item/bodypart/chest/moth, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/moth, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/moth, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/moth, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/moth, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/moth, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/moth, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/moth, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/moth, ) /datum/species/moth/regenerate_organs(mob/living/carbon/C, datum/species/old_species, replace_current= TRUE, list/excluded_zones, visual_only) diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index ccd55ec9289..a26381187a5 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -18,10 +18,6 @@ inherent_factions = list("mushroom") speedmod = 1.5 //faster than golems but not by much - punchdamagelow = 6 - punchdamagehigh = 14 - punchstunthreshold = 14 //about 44% chance to stun - no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING) burnmod = 1.25 @@ -33,11 +29,11 @@ species_language_holder = /datum/language_holder/mushroom bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/mushroom, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/mushroom, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mushroom, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mushroom, BODY_ZONE_HEAD = /obj/item/bodypart/head/mushroom, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/mushroom, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/mushroom, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mushroom, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mushroom, BODY_ZONE_CHEST = /obj/item/bodypart/chest/mushroom, ) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 74632cf42ff..5ca04abce62 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -32,11 +32,11 @@ species_language_holder = /datum/language_holder/skeleton bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/plasmaman, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/plasmaman, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/plasmaman, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/plasmaman, BODY_ZONE_HEAD = /obj/item/bodypart/head/plasmaman, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/plasmaman, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/plasmaman, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/plasmaman, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/plasmaman, BODY_ZONE_CHEST = /obj/item/bodypart/chest/plasmaman, ) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index c2101fb167a..bbaf53d3f6d 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -12,10 +12,7 @@ ) inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT inherent_factions = list("plants", "vines") - attack_verb = "slash" - attack_effect = ATTACK_EFFECT_CLAW - attack_sound = 'sound/weapons/slice.ogg' - miss_sound = 'sound/weapons/slashmiss.ogg' + burnmod = 1.25 heatmod = 1.5 payday_modifier = 0.75 @@ -27,11 +24,11 @@ species_language_holder = /datum/language_holder/plant bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/pod, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/pod, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/pod, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/pod, BODY_ZONE_HEAD = /obj/item/bodypart/head/pod, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/pod, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/pod, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/pod, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/pod, BODY_ZONE_CHEST = /obj/item/bodypart/chest/pod, ) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4b5ef78cbf4..4c054d42866 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -20,11 +20,11 @@ species_language_holder = /datum/language_holder/shadowpeople bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/shadow, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/shadow, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow, BODY_ZONE_HEAD = /obj/item/bodypart/head/shadow, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/shadow, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/shadow, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/shadow, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/shadow, BODY_ZONE_CHEST = /obj/item/bodypart/chest/shadow, ) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 6fa56030c15..047963c65e9 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -36,11 +36,11 @@ species_language_holder = /datum/language_holder/skeleton bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/skeleton, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/skeleton, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/skeleton, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/skeleton, BODY_ZONE_HEAD = /obj/item/bodypart/head/skeleton, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/skeleton, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/skeleton, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/skeleton, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/skeleton, BODY_ZONE_CHEST = /obj/item/bodypart/chest/skeleton, ) diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 247e557a24d..14813ed3c01 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -5,13 +5,11 @@ inherent_traits = list( TRAIT_NOSLIPALL, ) - attack_verb = "slap" - attack_effect = ATTACK_EFFECT_DISARM + say_mod = "slurs" coldmod = 0.5 //snails only come out when its cold and wet burnmod = 2 speedmod = 6 - punchdamagehigh = 0.5 //snails are soft and squishy siemens_coeff = 2 //snails are mostly water changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP sexes = FALSE //snails are hermaphrodites @@ -23,10 +21,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/snail, BODY_ZONE_CHEST = /obj/item/bodypart/chest/snail, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/snail, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/snail, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/snail, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/snail + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/snail, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/snail, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/snail, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/snail ) /datum/species/snail/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, delta_time, times_fired) diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 54095f9a6e9..28ed9e259cb 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -37,10 +37,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/zombie, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/zombie + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie ) /// Zombies do not stabilize body temperature they are the walking dead and are cold blooded @@ -151,10 +151,10 @@ bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/zombie, BODY_ZONE_CHEST = /obj/item/bodypart/chest/zombie, - BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/zombie, - BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/zombie, - BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/zombie, - BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/zombie + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/zombie, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/zombie, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/zombie, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/zombie ) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e5c168b070c..3a60c8b2073 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -546,12 +546,12 @@ robot_suit.update_appearance() else new /obj/item/robot_suit(T) - new /obj/item/bodypart/l_leg/robot(T) - new /obj/item/bodypart/r_leg/robot(T) + new /obj/item/bodypart/leg/left/robot(T) + new /obj/item/bodypart/leg/right/robot(T) new /obj/item/stack/cable_coil(T, 1) new /obj/item/bodypart/chest/robot(T) - new /obj/item/bodypart/l_arm/robot(T) - new /obj/item/bodypart/r_arm/robot(T) + new /obj/item/bodypart/arm/left/robot(T) + new /obj/item/bodypart/arm/right/robot(T) new /obj/item/bodypart/head/robot(T) var/b for(b=0, b!=2, b++) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a054af8510d..5bc024bcf85 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -36,7 +36,7 @@ ///Access required to access this Bot's maintenance protocols var/maints_access_required = list(ACCESS_ROBOTICS) ///The Robot arm attached to this robot - has a 50% chance to drop on death. - var/robot_arm = /obj/item/bodypart/r_arm/robot + var/robot_arm = /obj/item/bodypart/arm/right/robot ///The inserted (if any) pAI in this bot. var/obj/item/pai_card/paicard ///The type of bot it is, for radio control. diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index a4b038b2715..d01e36c334b 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -8,7 +8,7 @@ throw_range = 5 var/created_name var/build_step = ASSEMBLY_FIRST_STEP - var/robot_arm = /obj/item/bodypart/r_arm/robot + var/robot_arm = /obj/item/bodypart/arm/right/robot /obj/item/bot_assembly/attackby(obj/item/I, mob/user, params) ..() @@ -77,7 +77,7 @@ /obj/item/bot_assembly/cleanbot/attackby(obj/item/W, mob/user, params) ..() - if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot)) + if(istype(W, /obj/item/bodypart/arm/left/robot) || istype(W, /obj/item/bodypart/arm/right/robot)) if(!can_finish_build(W, user)) return var/mob/living/simple_animal/bot/cleanbot/A = new(drop_location(), bucket_obj) @@ -102,7 +102,7 @@ ..() switch(build_step) if(ASSEMBLY_FIRST_STEP, ASSEMBLY_SECOND_STEP) - if(istype(W, /obj/item/bodypart/l_leg/robot) || istype(W, /obj/item/bodypart/r_leg/robot)) + if(istype(W, /obj/item/bodypart/leg/left/robot) || istype(W, /obj/item/bodypart/leg/right/robot)) if(!user.temporarilyRemoveItemFromInventory(W)) return to_chat(user, span_notice("You add [W] to [src].")) @@ -241,7 +241,7 @@ update_appearance() if(ASSEMBLY_SECOND_STEP) - if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot)) + if(istype(W, /obj/item/bodypart/arm/left/robot) || istype(W, /obj/item/bodypart/arm/right/robot)) if(!can_finish_build(W, user)) return var/mob/living/simple_animal/bot/floorbot/A = new(drop_location(), toolbox_color) @@ -378,7 +378,7 @@ build_step-- if(ASSEMBLY_THIRD_STEP) - if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot))) + if((istype(I, /obj/item/bodypart/arm/left/robot)) || (istype(I, /obj/item/bodypart/arm/right/robot))) if(!user.temporarilyRemoveItemFromInventory(I)) return to_chat(user, span_notice("You add [I] to [src]!")) @@ -569,7 +569,7 @@ return switch(build_step) if(ASSEMBLY_FIRST_STEP) - if(istype(part, /obj/item/bodypart/l_leg/robot) || istype(part, /obj/item/bodypart/r_leg/robot)) + if(istype(part, /obj/item/bodypart/leg/left/robot) || istype(part, /obj/item/bodypart/leg/right/robot)) if(!user.temporarilyRemoveItemFromInventory(part)) return balloon_alert(user, "leg attached") diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index a4968def1d9..672ab0704c3 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -486,9 +486,9 @@ disabler_gun.cell.charge = 0 disabler_gun.update_appearance() if(prob(50)) - new /obj/item/bodypart/l_leg/robot(Tsec) + new /obj/item/bodypart/leg/left/robot(Tsec) if(prob(25)) - new /obj/item/bodypart/r_leg/robot(Tsec) + new /obj/item/bodypart/leg/right/robot(Tsec) if(prob(25))//50% chance for a helmet OR vest if(prob(50)) new /obj/item/clothing/head/helmet(Tsec) diff --git a/code/modules/mob/living/simple_animal/heretic_monsters.dm b/code/modules/mob/living/simple_animal/heretic_monsters.dm index 0250186a81d..60f0ffdb39e 100644 --- a/code/modules/mob/living/simple_animal/heretic_monsters.dm +++ b/code/modules/mob/living/simple_animal/heretic_monsters.dm @@ -54,7 +54,7 @@ maxHealth = 65 health = 65 sight = SEE_MOBS|SEE_OBJS|SEE_TURFS|SEE_BLACKNESS - loot = list(/obj/effect/gibspawner/human, /obj/item/bodypart/l_arm, /obj/item/organ/internal/eyes) + loot = list(/obj/effect/gibspawner/human, /obj/item/bodypart/arm/left, /obj/item/organ/internal/eyes) actions_to_add = list( /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/long, /datum/action/cooldown/spell/list_target/telepathy/eldritch, @@ -301,7 +301,7 @@ AttackingTarget() /mob/living/simple_animal/hostile/heretic_summon/armsy/AttackingTarget() - if(istype(target, /obj/item/bodypart/r_arm) || istype(target, /obj/item/bodypart/l_arm)) + if(istype(target, /obj/item/bodypart/arm)) playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE) qdel(target) heal() diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 5ea800b7bc8..07479385680 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -16,9 +16,11 @@ if(!user.can_read(src, READING_CHECK_LITERACY)) return - if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS) && !allow_chunky) - to_chat(user, span_warning("Your fingers are too big to use this right now!")) - return + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(human_user.check_chunky_fingers()) + balloon_alert(human_user, "fingers are too big!") + return // Robots don't really need to see the screen, their wireless connection works as long as computer is on. if(!screen_on && !issilicon(user)) diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 4c8f793d028..44aa62ab9b1 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -7,7 +7,7 @@ id = "l_arm" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) - build_path = /obj/item/bodypart/l_arm + build_path = /obj/item/bodypart/arm/left category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL) /datum/design/rightarm @@ -15,7 +15,7 @@ id = "r_arm" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) - build_path = /obj/item/bodypart/r_arm + build_path = /obj/item/bodypart/arm/right category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL) /datum/design/leftleg @@ -23,7 +23,7 @@ id = "l_leg" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) - build_path = /obj/item/bodypart/l_leg + build_path = /obj/item/bodypart/leg/left category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_LIMBS_DIGITIGRADE) /datum/design/rightleg @@ -31,7 +31,7 @@ id = "r_leg" build_type = LIMBGROWER reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25) - build_path = /obj/item/bodypart/r_leg + build_path = /obj/item/bodypart/leg/right category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_LIMBS_DIGITIGRADE) //Non-limb limb designs diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index a424d2d87c5..b856c5ba68d 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -36,7 +36,7 @@ name = "Cyborg Left Arm" id = "borg_l_arm" build_type = MECHFAB - build_path = /obj/item/bodypart/l_arm/robot + build_path = /obj/item/bodypart/arm/left/robot materials = list(/datum/material/iron=10000) construction_time = 200 category = list( @@ -47,7 +47,7 @@ name = "Cyborg Right Arm" id = "borg_r_arm" build_type = MECHFAB - build_path = /obj/item/bodypart/r_arm/robot + build_path = /obj/item/bodypart/arm/right/robot materials = list(/datum/material/iron=10000) construction_time = 200 category = list( @@ -58,7 +58,7 @@ name = "Cyborg Left Leg" id = "borg_l_leg" build_type = MECHFAB - build_path = /obj/item/bodypart/l_leg/robot + build_path = /obj/item/bodypart/leg/left/robot materials = list(/datum/material/iron=10000) construction_time = 200 category = list( @@ -69,7 +69,7 @@ name = "Cyborg Right Leg" id = "borg_r_leg" build_type = MECHFAB - build_path = /obj/item/bodypart/r_leg/robot + build_path = /obj/item/bodypart/leg/right/robot materials = list(/datum/material/iron=10000) construction_time = 200 category = list( diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index ad9df41d8c9..62b94e1b158 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -142,6 +142,27 @@ ///A list of all the external organs we've got stored to draw horns, wings and stuff with (special because we are actually in the limbs unlike normal organs :/ ) var/list/obj/item/organ/external/external_organs = list() + /// Type of an attack from this limb does. Arms will do punches, Legs for kicks, and head for bites. (TO ADD: tactical chestbumps) + var/attack_type = BRUTE + /// the verb used for an unarmed attack when using this limb, such as arm.unarmed_attack_verb = punch + var/unarmed_attack_verb = "bump" + /// what visual effect is used when this limb is used to strike someone. + var/unarmed_attack_effect = ATTACK_EFFECT_PUNCH + /// Sounds when this bodypart is used in an umarmed attack + var/sound/unarmed_attack_sound = 'sound/weapons/punch1.ogg' + var/sound/unarmed_miss_sound = 'sound/weapons/punchmiss.ogg' + ///Lowest possible punch damage this bodypart can give. If this is set to 0, unarmed attacks will always miss. + var/unarmed_damage_low = 1 + ///Highest possible punch damage this bodypart can ive. + var/unarmed_damage_high = 1 + ///Damage at which attacks from this bodypart will stun + var/unarmed_stun_threshold = 2 + + /// Traits that are given to the holder of the part. If you want an effect that changes this, don't add directly to this. Use the add_bodypart_trait() proc + var/list/bodypart_traits = list() + /// The name of the trait source that the organ gives. Should not be altered during the events of gameplay, and will cause problems if it is. + var/bodypart_trait_source = BODYPART_TRAIT + /obj/item/bodypart/Initialize(mapload) . = ..() if(can_be_disabled) @@ -588,7 +609,6 @@ ///Proc to change the value of the `owner` variable and react to the event of its change. /obj/item/bodypart/proc/set_owner(new_owner) SHOULD_CALL_PARENT(TRUE) - if(owner == new_owner) return FALSE //`null` is a valid option, so we need to use a num var to make it clear no change was made. var/mob/living/carbon/old_owner = owner @@ -620,9 +640,12 @@ if(needs_update_disabled) update_disabled() + refresh_bleed_rate() return old_owner - +/obj/item/bodypart/proc/on_removal() + for(var/trait in bodypart_traits) + REMOVE_TRAIT(owner, trait, bodypart_trait_source) ///Proc to change the value of the `can_be_disabled` variable and react to the event of its change. /obj/item/bodypart/proc/set_can_be_disabled(new_can_be_disabled) @@ -817,7 +840,7 @@ icon_exists(limb.icon, limb.icon_state, TRUE) //Prints a stack trace on the first failure of a given iconstate. if(body_zone == BODY_ZONE_R_LEG) - var/obj/item/bodypart/r_leg/leg = src + var/obj/item/bodypart/leg/right/leg = src var/limb_overlays = limb.overlays var/image/new_limb = leg.generate_masked_right_leg(limb.icon, limb.icon_state, image_dir) if(new_limb) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 4793a9aaee9..73f08afb637 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -137,6 +137,9 @@ continue organ.transfer_to_limb(src, phantom_owner) + for(var/trait in bodypart_traits) + REMOVE_TRAIT(phantom_owner, trait, bodypart_trait_source) + update_icon_dropped() synchronize_bodytypes(phantom_owner) phantom_owner.update_health_hud() //update the healthdoll @@ -237,7 +240,7 @@ if(special) return ..() -/obj/item/bodypart/r_arm/drop_limb(special) +/obj/item/bodypart/arm/right/drop_limb(special) . = ..() var/mob/living/carbon/arm_owner = owner @@ -256,7 +259,7 @@ arm_owner.update_worn_gloves() //to remove the bloody hands overlay -/obj/item/bodypart/l_arm/drop_limb(special) +/obj/item/bodypart/arm/left/drop_limb(special) var/mob/living/carbon/arm_owner = owner . = ..() if(arm_owner && !special) @@ -274,7 +277,7 @@ arm_owner.update_worn_gloves() //to remove the bloody hands overlay -/obj/item/bodypart/r_leg/drop_limb(special) +/obj/item/bodypart/leg/right/drop_limb(special) if(owner && !special) if(owner.legcuffed) owner.legcuffed.forceMove(owner.drop_location()) //At this point bodypart is still in nullspace @@ -285,7 +288,7 @@ owner.dropItemToGround(owner.shoes, TRUE) return ..() -/obj/item/bodypart/l_leg/drop_limb(special) //copypasta +/obj/item/bodypart/leg/left/drop_limb(special) //copypasta if(owner && !special) if(owner.legcuffed) owner.legcuffed.forceMove(owner.drop_location()) @@ -384,6 +387,9 @@ if(can_be_disabled) update_disabled() + for(var/trait in bodypart_traits) + ADD_TRAIT(owner, trait, bodypart_trait_source) + // Bodyparts need to be sorted for leg masking to be done properly. It also will allow for some predictable // behavior within said bodyparts list. We sort it here, as it's the only place we make changes to bodyparts. new_limb_owner.bodyparts = sort_list(new_limb_owner.bodyparts, /proc/cmp_bodypart_by_body_part_asc) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index c23a12dcf9c..172dc7a6731 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -19,6 +19,14 @@ scars_covered_by_clothes = FALSE grind_results = null is_dimorphic = TRUE + unarmed_attack_verb = "bite" + unarmed_attack_effect = ATTACK_EFFECT_BITE + unarmed_attack_sound = 'sound/weapons/bite.ogg' + unarmed_miss_sound = 'sound/weapons/bite.ogg' + unarmed_damage_low = 1 // Yeah, biteing is pretty weak, blame the monkey super-nerf + unarmed_damage_high = 3 + unarmed_stun_threshold = 4 + bodypart_trait_source = HEAD_TRAIT var/mob/living/brain/brainmob //The current occupant. var/obj/item/organ/internal/brain/brain //The brain organ @@ -216,7 +224,7 @@ facial_overlay.color = facial_hair_color facial_overlay.alpha = hair_alpha . += facial_overlay - + if(!eyes) . += image('icons/mob/species/human/human_face.dmi', "eyes_missing", -BODY_LAYER, SOUTH) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index b6fd1a3fd74..39c368cac95 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -147,15 +147,15 @@ var/obj/item/bodypart/new_bodypart switch(zone) if(BODY_ZONE_L_ARM) - new_bodypart = new /obj/item/bodypart/l_arm/alien() + new_bodypart = new /obj/item/bodypart/arm/left/alien() if(BODY_ZONE_R_ARM) - new_bodypart = new /obj/item/bodypart/r_arm/alien() + new_bodypart = new /obj/item/bodypart/arm/right/alien() if(BODY_ZONE_HEAD) new_bodypart = new /obj/item/bodypart/head/alien() if(BODY_ZONE_L_LEG) - new_bodypart = new /obj/item/bodypart/l_leg/alien() + new_bodypart = new /obj/item/bodypart/leg/left/alien() if(BODY_ZONE_R_LEG) - new_bodypart = new /obj/item/bodypart/r_leg/alien() + new_bodypart = new /obj/item/bodypart/leg/right/alien() if(BODY_ZONE_CHEST) new_bodypart = new /obj/item/bodypart/chest/alien() if(new_bodypart) diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index ecf3ce92b09..a974d863529 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -14,6 +14,7 @@ max_stamina_damage = 120 grind_results = null wound_resistance = 10 + bodypart_trait_source = CHEST_TRAIT ///The bodytype(s) allowed to attach to this chest. var/acceptable_bodytype = BODYTYPE_HUMANOID @@ -70,30 +71,41 @@ bodytype = BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_ORGANIC acceptable_bodytype = BODYTYPE_LARVA_PLACEHOLDER -/obj/item/bodypart/l_arm +/// Parent Type for arms, should not appear in game. +/obj/item/bodypart/arm + name = "arm" + desc = "Hey buddy give me a HAND and report this to the github because you shouldn't be seeing this." + attack_verb_continuous = list("slaps", "punches") + attack_verb_simple = list("slap", "punch") + max_damage = 50 + max_stamina_damage = 50 + aux_layer = HANDS_PART_LAYER + body_damage_coeff = 0.75 + can_be_disabled = TRUE + unarmed_attack_verb = "punch" /// The classic punch, wonderfully classic and completely random + unarmed_damage_low = 1 + unarmed_damage_high = 10 + unarmed_stun_threshold = 10 + body_zone = BODY_ZONE_L_ARM + +/obj/item/bodypart/arm/left name = "left arm" desc = "Did you know that the word 'sinister' stems originally from the \ Latin 'sinestra' (left hand), because the left hand was supposed to \ be possessed by the devil? This arm appears to be possessed by no \ one though." icon_state = "default_human_l_arm" - attack_verb_continuous = list("slaps", "punches") - attack_verb_simple = list("slap", "punch") - max_damage = 50 - max_stamina_damage = 50 body_zone = BODY_ZONE_L_ARM body_part = ARM_LEFT plaintext_zone = "left arm" aux_zone = BODY_ZONE_PRECISE_L_HAND - aux_layer = HANDS_PART_LAYER - body_damage_coeff = 0.75 held_index = 1 px_x = -6 px_y = 0 - can_be_disabled = TRUE + bodypart_trait_source = LEFT_ARM_TRAIT -/obj/item/bodypart/l_arm/set_owner(new_owner) +/obj/item/bodypart/arm/left/set_owner(new_owner) . = ..() if(. == FALSE) return @@ -115,7 +127,7 @@ ///Proc to react to the owner gaining the TRAIT_PARALYSIS_L_ARM trait. -/obj/item/bodypart/l_arm/proc/on_owner_paralysis_gain(mob/living/carbon/source) +/obj/item/bodypart/arm/left/proc/on_owner_paralysis_gain(mob/living/carbon/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM)) @@ -123,14 +135,14 @@ ///Proc to react to the owner losing the TRAIT_PARALYSIS_L_ARM trait. -/obj/item/bodypart/l_arm/proc/on_owner_paralysis_loss(mob/living/carbon/source) +/obj/item/bodypart/arm/left/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_ARM) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_ARM)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_ARM), .proc/on_owner_paralysis_gain) -/obj/item/bodypart/l_arm/set_disabled(new_disabled) +/obj/item/bodypart/arm/left/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) return @@ -150,7 +162,7 @@ hand_screen_object?.update_appearance() -/obj/item/bodypart/l_arm/monkey +/obj/item/bodypart/arm/left/monkey icon = 'icons/mob/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/species/monkey/bodyparts.dmi' icon_state = "default_monkey_l_arm" @@ -161,8 +173,11 @@ px_x = -5 px_y = -3 dmg_overlay_type = SPECIES_MONKEY + unarmed_damage_low = 1 /// monkey punches must be really weak, considering they bite people instead and their bites are weak as hell. + unarmed_damage_high = 2 + unarmed_stun_threshold = 3 -/obj/item/bodypart/l_arm/alien +/obj/item/bodypart/arm/left/alien icon = 'icons/mob/species/alien/bodyparts.dmi' icon_static = 'icons/mob/species/alien/bodyparts.dmi' icon_state = "alien_l_arm" @@ -176,28 +191,22 @@ should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm +/obj/item/bodypart/arm/right name = "right arm" desc = "Over 87% of humans are right handed. That figure is much lower \ among humans missing their right arm." - icon_state = "default_human_r_arm" - attack_verb_continuous = list("slaps", "punches") - attack_verb_simple = list("slap", "punch") - max_damage = 50 body_zone = BODY_ZONE_R_ARM body_part = ARM_RIGHT + icon_state = "default_human_r_arm" plaintext_zone = "right arm" aux_zone = BODY_ZONE_PRECISE_R_HAND aux_layer = HANDS_PART_LAYER - body_damage_coeff = 0.75 held_index = 2 px_x = 6 px_y = 0 - max_stamina_damage = 50 - can_be_disabled = TRUE + bodypart_trait_source = RIGHT_ARM_TRAIT - -/obj/item/bodypart/r_arm/set_owner(new_owner) +/obj/item/bodypart/arm/right/set_owner(new_owner) . = ..() if(. == FALSE) return @@ -219,7 +228,7 @@ ///Proc to react to the owner gaining the TRAIT_PARALYSIS_R_ARM trait. -/obj/item/bodypart/r_arm/proc/on_owner_paralysis_gain(mob/living/carbon/source) +/obj/item/bodypart/arm/right/proc/on_owner_paralysis_gain(mob/living/carbon/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM)) @@ -227,14 +236,14 @@ ///Proc to react to the owner losing the TRAIT_PARALYSIS_R_ARM trait. -/obj/item/bodypart/r_arm/proc/on_owner_paralysis_loss(mob/living/carbon/source) +/obj/item/bodypart/arm/right/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_ARM) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_ARM)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_ARM), .proc/on_owner_paralysis_gain) -/obj/item/bodypart/r_arm/set_disabled(new_disabled) +/obj/item/bodypart/arm/right/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) return @@ -254,7 +263,7 @@ hand_screen_object?.update_appearance() -/obj/item/bodypart/r_arm/monkey +/obj/item/bodypart/arm/right/monkey icon = 'icons/mob/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/species/monkey/bodyparts.dmi' icon_state = "default_monkey_r_arm" @@ -265,8 +274,11 @@ px_x = 5 px_y = -3 dmg_overlay_type = SPECIES_MONKEY + unarmed_damage_low = 1 + unarmed_damage_high = 2 + unarmed_stun_threshold = 3 -/obj/item/bodypart/r_arm/alien +/obj/item/bodypart/arm/right/alien icon = 'icons/mob/species/alien/bodyparts.dmi' icon_static = 'icons/mob/species/alien/bodyparts.dmi' icon_state = "alien_r_arm" @@ -279,25 +291,37 @@ max_damage = 100 should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg +/// Parent Type for arms, should not appear in game. +/obj/item/bodypart/leg + name = "leg" + desc = "This item shouldn't exist. Talk about breaking a leg. Badum-Tss!" + attack_verb_continuous = list("kicks", "stomps") + attack_verb_simple = list("kick", "stomp") + max_damage = 50 + body_damage_coeff = 0.75 + max_stamina_damage = 50 + can_be_disabled = TRUE + unarmed_attack_effect = ATTACK_EFFECT_KICK + body_zone = BODY_ZONE_L_LEG + unarmed_attack_verb = "kick" // The lovely kick, typically only accessable by attacking a grouded foe. 1.5 times better than the punch. + unarmed_damage_low = 2 + unarmed_damage_high = 15 + unarmed_stun_threshold = 10 + +/obj/item/bodypart/leg/left name = "left leg" desc = "Some athletes prefer to tie their left shoelaces first for good \ luck. In this instance, it probably would not have helped." icon_state = "default_human_l_leg" - attack_verb_continuous = list("kicks", "stomps") - attack_verb_simple = list("kick", "stomp") - max_damage = 50 body_zone = BODY_ZONE_L_LEG body_part = LEG_LEFT plaintext_zone = "left leg" - body_damage_coeff = 0.75 px_x = -2 px_y = 12 - max_stamina_damage = 50 can_be_disabled = TRUE + bodypart_trait_source = LEFT_LEG_TRAIT - -/obj/item/bodypart/l_leg/set_owner(new_owner) +/obj/item/bodypart/leg/left/set_owner(new_owner) . = ..() if(. == FALSE) return @@ -319,7 +343,7 @@ ///Proc to react to the owner gaining the TRAIT_PARALYSIS_L_LEG trait. -/obj/item/bodypart/l_leg/proc/on_owner_paralysis_gain(mob/living/carbon/source) +/obj/item/bodypart/leg/left/proc/on_owner_paralysis_gain(mob/living/carbon/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG)) @@ -327,14 +351,14 @@ ///Proc to react to the owner losing the TRAIT_PARALYSIS_L_LEG trait. -/obj/item/bodypart/l_leg/proc/on_owner_paralysis_loss(mob/living/carbon/source) +/obj/item/bodypart/leg/left/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG), .proc/on_owner_paralysis_gain) -/obj/item/bodypart/l_leg/set_disabled(new_disabled) +/obj/item/bodypart/leg/left/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) return @@ -347,7 +371,7 @@ else if(!bodypart_disabled) owner.set_usable_legs(owner.usable_legs + 1) -/obj/item/bodypart/l_leg/monkey +/obj/item/bodypart/leg/left/monkey icon = 'icons/mob/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/species/monkey/bodyparts.dmi' icon_state = "default_monkey_l_leg" @@ -357,8 +381,11 @@ wound_resistance = -10 px_y = 4 dmg_overlay_type = SPECIES_MONKEY + unarmed_damage_low = 2 + unarmed_damage_high = 3 + unarmed_stun_threshold = 4 -/obj/item/bodypart/l_leg/alien +/obj/item/bodypart/leg/left/alien icon = 'icons/mob/species/alien/bodyparts.dmi' icon_static = 'icons/mob/species/alien/bodyparts.dmi' icon_state = "alien_l_leg" @@ -371,24 +398,19 @@ max_damage = 100 should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg +/obj/item/bodypart/leg/right name = "right leg" desc = "You put your right leg in, your right leg out. In, out, in, out, \ shake it all about. And apparently then it detaches.\n\ The hokey pokey has certainly changed a lot since space colonisation." // alternative spellings of 'pokey' are available icon_state = "default_human_r_leg" - attack_verb_continuous = list("kicks", "stomps") - attack_verb_simple = list("kick", "stomp") - max_damage = 50 body_zone = BODY_ZONE_R_LEG body_part = LEG_RIGHT plaintext_zone = "right leg" - body_damage_coeff = 0.75 px_x = 2 px_y = 12 - max_stamina_damage = 50 - can_be_disabled = TRUE + bodypart_trait_source = RIGHT_LEG_TRAIT /// We store this here to generate our icon key more easily. var/left_leg_mask_key /// The associated list of all the left leg mask keys associated to their cached left leg masks. @@ -397,8 +419,7 @@ /// each dir changes, we're doing it with a mask instead, which we cache for efficiency reasons. var/static/list/left_leg_mask_cache = list() - -/obj/item/bodypart/r_leg/set_owner(new_owner) +/obj/item/bodypart/leg/right/set_owner(new_owner) . = ..() if(. == FALSE) return @@ -420,7 +441,7 @@ ///Proc to react to the owner gaining the TRAIT_PARALYSIS_R_LEG trait. -/obj/item/bodypart/r_leg/proc/on_owner_paralysis_gain(mob/living/carbon/source) +/obj/item/bodypart/leg/right/proc/on_owner_paralysis_gain(mob/living/carbon/source) SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG)) @@ -428,14 +449,14 @@ ///Proc to react to the owner losing the TRAIT_PARALYSIS_R_LEG trait. -/obj/item/bodypart/r_leg/proc/on_owner_paralysis_loss(mob/living/carbon/source) +/obj/item/bodypart/leg/right/proc/on_owner_paralysis_loss(mob/living/carbon/source) SIGNAL_HANDLER REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG)) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG), .proc/on_owner_paralysis_gain) -/obj/item/bodypart/r_leg/set_disabled(new_disabled) +/obj/item/bodypart/leg/right/set_disabled(new_disabled) . = ..() if(isnull(.) || !owner) return @@ -448,7 +469,7 @@ else if(!bodypart_disabled) owner.set_usable_legs(owner.usable_legs + 1) -/obj/item/bodypart/r_leg/monkey +/obj/item/bodypart/leg/right/monkey icon = 'icons/mob/species/monkey/bodyparts.dmi' icon_static = 'icons/mob/species/monkey/bodyparts.dmi' icon_state = "default_monkey_r_leg" @@ -458,8 +479,11 @@ wound_resistance = -10 px_y = 4 dmg_overlay_type = SPECIES_MONKEY + unarmed_damage_low = 2 + unarmed_damage_high = 3 + unarmed_stun_threshold = 4 -/obj/item/bodypart/r_leg/alien +/obj/item/bodypart/leg/right/alien icon = 'icons/mob/species/alien/bodyparts.dmi' icon_static = 'icons/mob/species/alien/bodyparts.dmi' icon_state = "alien_r_leg" diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 0415b0c1150..d149c1f21c8 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -10,7 +10,7 @@ //The complete sprite (displayed when the limb is on the ground) should be named "borg_l_arm". //Failure to follow this pattern will cause the hand's icons to be missing due to the way get_limb_icon() works to generate the mob's icons using the aux_zone var. -/obj/item/bodypart/l_arm/robot +/obj/item/bodypart/arm/left/robot name = "cyborg left arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." limb_id = BODYPART_ID_ROBOTIC @@ -37,7 +37,7 @@ medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG -/obj/item/bodypart/r_arm/robot +/obj/item/bodypart/arm/right/robot name = "cyborg right arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." attack_verb_simple = list("slapped", "punched") @@ -64,7 +64,7 @@ medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG -/obj/item/bodypart/l_leg/robot +/obj/item/bodypart/leg/left/robot name = "cyborg left leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." attack_verb_simple = list("kicked", "stomped") @@ -91,7 +91,7 @@ medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG -/obj/item/bodypart/r_leg/robot +/obj/item/bodypart/leg/right/robot name = "cyborg right leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." attack_verb_simple = list("kicked", "stomped") @@ -332,7 +332,7 @@ -/obj/item/bodypart/l_arm/robot/surplus +/obj/item/bodypart/arm/left/robot/surplus name = "surplus prosthetic left arm" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." icon_static = 'icons/mob/augmentation/surplus_augments.dmi' @@ -341,7 +341,7 @@ burn_reduction = 0 max_damage = 20 -/obj/item/bodypart/r_arm/robot/surplus +/obj/item/bodypart/arm/right/robot/surplus name = "surplus prosthetic right arm" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." icon_static = 'icons/mob/augmentation/surplus_augments.dmi' @@ -350,7 +350,7 @@ burn_reduction = 0 max_damage = 20 -/obj/item/bodypart/l_leg/robot/surplus +/obj/item/bodypart/leg/left/robot/surplus name = "surplus prosthetic left leg" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." icon_static = 'icons/mob/augmentation/surplus_augments.dmi' @@ -359,7 +359,7 @@ burn_reduction = 0 max_damage = 20 -/obj/item/bodypart/r_leg/robot/surplus +/obj/item/bodypart/leg/right/robot/surplus name = "surplus prosthetic right leg" desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing." icon_static = 'icons/mob/augmentation/surplus_augments.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm index 428e52a397d..767ee35cb7d 100644 --- a/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/ethereal_bodyparts.dm @@ -3,6 +3,9 @@ limb_id = SPECIES_ETHEREAL is_dimorphic = FALSE dmg_overlay_type = null + attack_type = BURN // bish buzz + unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' /obj/item/bodypart/head/ethereal/update_limb(dropping_limb, is_creating) . = ..() @@ -24,24 +27,32 @@ var/datum/species/ethereal/eth_holder = potato_oc.dna.species species_color = eth_holder.current_color -/obj/item/bodypart/l_arm/ethereal +/obj/item/bodypart/arm/left/ethereal icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi' limb_id = SPECIES_ETHEREAL dmg_overlay_type = null + attack_type = BURN //burn bish + unarmed_attack_verb = "burn" + unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' -/obj/item/bodypart/l_arm/ethereal/update_limb(dropping_limb, is_creating) +/obj/item/bodypart/arm/left/ethereal/update_limb(dropping_limb, is_creating) . = ..() if(isethereal(owner)) var/mob/living/carbon/human/potato_oc = owner var/datum/species/ethereal/eth_holder = potato_oc.dna.species species_color = eth_holder.current_color -/obj/item/bodypart/r_arm/ethereal +/obj/item/bodypart/arm/right/ethereal icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi' limb_id = SPECIES_ETHEREAL dmg_overlay_type = null + attack_type = BURN // bish buzz + unarmed_attack_verb = "burn" + unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' -/obj/item/bodypart/r_arm/ethereal/update_limb(dropping_limb, is_creating) +/obj/item/bodypart/arm/right/ethereal/update_limb(dropping_limb, is_creating) . = ..() if(isethereal(owner)) var/mob/living/carbon/human/potato_oc = owner @@ -49,24 +60,30 @@ species_color = eth_holder.current_color -/obj/item/bodypart/l_leg/ethereal +/obj/item/bodypart/leg/left/ethereal icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi' limb_id = SPECIES_ETHEREAL dmg_overlay_type = null + attack_type = BURN // bish buzz + unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' -/obj/item/bodypart/l_leg/ethereal/update_limb(dropping_limb, is_creating) +/obj/item/bodypart/leg/left/ethereal/update_limb(dropping_limb, is_creating) . = ..() if(isethereal(owner)) var/mob/living/carbon/human/potato_oc = owner var/datum/species/ethereal/eth_holder = potato_oc.dna.species species_color = eth_holder.current_color -/obj/item/bodypart/r_leg/ethereal +/obj/item/bodypart/leg/right/ethereal icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi' limb_id = SPECIES_ETHEREAL dmg_overlay_type = null + attack_type = BURN // bish buzz + unarmed_attack_sound = 'sound/weapons/etherealhit.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' -/obj/item/bodypart/r_leg/ethereal/update_limb(dropping_limb, is_creating) +/obj/item/bodypart/leg/right/ethereal/update_limb(dropping_limb, is_creating) . = ..() if(isethereal(owner)) var/mob/living/carbon/human/potato_oc = owner diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 87203b92c77..1c24a849e39 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -8,28 +8,42 @@ limb_id = SPECIES_LIZARD is_dimorphic = TRUE -/obj/item/bodypart/l_arm/lizard +/obj/item/bodypart/arm/left/lizard + icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' + limb_id = SPECIES_LIZARD + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slash.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + +/obj/item/bodypart/arm/right/lizard + icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' + limb_id = SPECIES_LIZARD + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slash.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + +/obj/item/bodypart/arm/left/lizard/ashwalker + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/bodypart/arm/right/lizard/ashwalker + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/bodypart/leg/left/lizard icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD -/obj/item/bodypart/r_arm/lizard +/obj/item/bodypart/leg/right/lizard icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD -/obj/item/bodypart/l_leg/lizard - icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' - limb_id = SPECIES_LIZARD - -/obj/item/bodypart/r_leg/lizard - icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' - limb_id = SPECIES_LIZARD - -/obj/item/bodypart/l_leg/digitigrade +/obj/item/bodypart/leg/left/digitigrade icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE -/obj/item/bodypart/l_leg/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) +/obj/item/bodypart/leg/left/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() if(ishuman(owner)) var/mob/living/carbon/human/human_owner = owner @@ -50,12 +64,12 @@ else limb_id = SPECIES_LIZARD -/obj/item/bodypart/r_leg/digitigrade +/obj/item/bodypart/leg/right/digitigrade icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE -/obj/item/bodypart/r_leg/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) +/obj/item/bodypart/leg/right/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() if(ishuman(owner)) var/mob/living/carbon/human/human_owner = owner diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 52057f2ac10..c3c00c69d74 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -7,17 +7,25 @@ limb_id = SPECIES_SNAIL is_dimorphic = FALSE -/obj/item/bodypart/l_arm/snail +/obj/item/bodypart/arm/left/snail limb_id = SPECIES_SNAIL + unarmed_attack_verb = "slap" + unarmed_attack_effect = ATTACK_EFFECT_DISARM + unarmed_damage_high = 0.5 //snails are soft and squishy -/obj/item/bodypart/r_arm/snail - limb_id = SPECIES_SNAIL -/obj/item/bodypart/l_leg/snail +/obj/item/bodypart/arm/right/snail limb_id = SPECIES_SNAIL + unarmed_attack_verb = "slap" + unarmed_attack_effect = ATTACK_EFFECT_DISARM + unarmed_damage_high = 0.5 -/obj/item/bodypart/r_leg/snail +/obj/item/bodypart/leg/left/snail limb_id = SPECIES_SNAIL + unarmed_damage_high = 0.5 +/obj/item/bodypart/leg/right/snail + limb_id = SPECIES_SNAIL + unarmed_damage_high = 0.5 ///ABDUCTOR /obj/item/bodypart/head/abductor @@ -30,19 +38,21 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/abductor +/obj/item/bodypart/arm/left/abductor + limb_id = SPECIES_ABDUCTOR + should_draw_greyscale = FALSE + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/bodypart/arm/right/abductor + limb_id = SPECIES_ABDUCTOR + should_draw_greyscale = FALSE + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/bodypart/leg/left/abductor limb_id = SPECIES_ABDUCTOR should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/abductor - limb_id = SPECIES_ABDUCTOR - should_draw_greyscale = FALSE - -/obj/item/bodypart/l_leg/abductor - limb_id = SPECIES_ABDUCTOR - should_draw_greyscale = FALSE - -/obj/item/bodypart/r_leg/abductor +/obj/item/bodypart/leg/right/abductor limb_id = SPECIES_ABDUCTOR should_draw_greyscale = FALSE @@ -57,19 +67,19 @@ is_dimorphic = TRUE dmg_overlay_type = null -/obj/item/bodypart/l_arm/jelly +/obj/item/bodypart/arm/left/jelly limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null -/obj/item/bodypart/r_arm/jelly +/obj/item/bodypart/arm/right/jelly limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null -/obj/item/bodypart/l_leg/jelly +/obj/item/bodypart/leg/left/jelly limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null -/obj/item/bodypart/r_leg/jelly +/obj/item/bodypart/leg/right/jelly limb_id = SPECIES_JELLYPERSON dmg_overlay_type = null @@ -82,16 +92,16 @@ limb_id = SPECIES_SLIMEPERSON is_dimorphic = TRUE -/obj/item/bodypart/l_arm/slime +/obj/item/bodypart/arm/left/slime limb_id = SPECIES_SLIMEPERSON -/obj/item/bodypart/r_arm/slime +/obj/item/bodypart/arm/right/slime limb_id = SPECIES_SLIMEPERSON -/obj/item/bodypart/l_leg/slime +/obj/item/bodypart/leg/left/slime limb_id = SPECIES_SLIMEPERSON -/obj/item/bodypart/r_leg/slime +/obj/item/bodypart/leg/right/slime limb_id = SPECIES_SLIMEPERSON ///LUMINESCENT @@ -103,16 +113,16 @@ limb_id = SPECIES_LUMINESCENT is_dimorphic = TRUE -/obj/item/bodypart/l_arm/luminescent +/obj/item/bodypart/arm/left/luminescent limb_id = SPECIES_LUMINESCENT -/obj/item/bodypart/r_arm/luminescent +/obj/item/bodypart/arm/right/luminescent limb_id = SPECIES_LUMINESCENT -/obj/item/bodypart/l_leg/luminescent +/obj/item/bodypart/leg/left/luminescent limb_id = SPECIES_LUMINESCENT -/obj/item/bodypart/r_leg/luminescent +/obj/item/bodypart/leg/right/luminescent limb_id = SPECIES_LUMINESCENT ///ZOMBIE @@ -126,19 +136,19 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/zombie +/obj/item/bodypart/arm/left/zombie limb_id = SPECIES_ZOMBIE should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/zombie +/obj/item/bodypart/arm/right/zombie limb_id = SPECIES_ZOMBIE should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/zombie +/obj/item/bodypart/leg/left/zombie limb_id = SPECIES_ZOMBIE should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/zombie +/obj/item/bodypart/leg/right/zombie limb_id = SPECIES_ZOMBIE should_draw_greyscale = FALSE @@ -151,16 +161,24 @@ limb_id = SPECIES_PODPERSON is_dimorphic = TRUE -/obj/item/bodypart/l_arm/pod +/obj/item/bodypart/arm/left/pod + limb_id = SPECIES_PODPERSON + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slice.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + +/obj/item/bodypart/arm/right/pod + limb_id = SPECIES_PODPERSON + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slice.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' + +/obj/item/bodypart/leg/left/pod limb_id = SPECIES_PODPERSON -/obj/item/bodypart/r_arm/pod - limb_id = SPECIES_PODPERSON - -/obj/item/bodypart/l_leg/pod - limb_id = SPECIES_PODPERSON - -/obj/item/bodypart/r_leg/pod +/obj/item/bodypart/leg/right/pod limb_id = SPECIES_PODPERSON ///FLY @@ -174,19 +192,19 @@ is_dimorphic = TRUE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/fly +/obj/item/bodypart/arm/left/fly limb_id = SPECIES_FLYPERSON should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/fly +/obj/item/bodypart/arm/right/fly limb_id = SPECIES_FLYPERSON should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/fly +/obj/item/bodypart/leg/left/fly limb_id = SPECIES_FLYPERSON should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/fly +/obj/item/bodypart/leg/right/fly limb_id = SPECIES_FLYPERSON should_draw_greyscale = FALSE @@ -201,22 +219,28 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/shadow +/obj/item/bodypart/arm/left/shadow limb_id = SPECIES_SHADOW should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/shadow +/obj/item/bodypart/arm/right/shadow limb_id = SPECIES_SHADOW should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/shadow +/obj/item/bodypart/leg/left/shadow limb_id = SPECIES_SHADOW should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/shadow +/obj/item/bodypart/leg/right/shadow limb_id = SPECIES_SHADOW should_draw_greyscale = FALSE +/obj/item/bodypart/arm/left/shadow/nightmare + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + +/obj/item/bodypart/arm/right/shadow/nightmare + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + ///SKELETON /obj/item/bodypart/head/skeleton limb_id = SPECIES_SKELETON @@ -230,22 +254,22 @@ should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/l_arm/skeleton +/obj/item/bodypart/arm/left/skeleton limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/r_arm/skeleton +/obj/item/bodypart/arm/right/skeleton limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/l_leg/skeleton +/obj/item/bodypart/leg/left/skeleton limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/r_leg/skeleton +/obj/item/bodypart/leg/right/skeleton limb_id = SPECIES_SKELETON should_draw_greyscale = FALSE dmg_overlay_type = null @@ -259,19 +283,31 @@ limb_id = SPECIES_MUSHROOM is_dimorphic = TRUE -/obj/item/bodypart/l_arm/mushroom +/obj/item/bodypart/arm/left/mushroom limb_id = SPECIES_MUSHROOM + unarmed_damage_low = 6 + unarmed_damage_high = 14 + unarmed_stun_threshold = 14 -/obj/item/bodypart/r_arm/mushroom +/obj/item/bodypart/arm/right/mushroom limb_id = SPECIES_MUSHROOM + unarmed_damage_low = 6 + unarmed_damage_high = 14 + unarmed_stun_threshold = 14 -/obj/item/bodypart/l_leg/mushroom +/obj/item/bodypart/leg/left/mushroom limb_id = SPECIES_MUSHROOM + unarmed_damage_low = 9 + unarmed_damage_high = 21 + unarmed_stun_threshold = 14 -/obj/item/bodypart/r_leg/mushroom +/obj/item/bodypart/leg/right/mushroom limb_id = SPECIES_MUSHROOM + unarmed_damage_low = 9 + unarmed_damage_high = 21 + unarmed_stun_threshold = 14 -///GOLEMS (i hate xenobio SO FUCKING MUCH) +///GOLEMS (i hate xenobio SO FUCKING MUCH) (from 2022: Yeah I fucking feel your pain brother) /obj/item/bodypart/head/golem limb_id = SPECIES_GOLEM is_dimorphic = FALSE @@ -282,21 +318,35 @@ is_dimorphic = TRUE dmg_overlay_type = null -/obj/item/bodypart/l_arm/golem +/obj/item/bodypart/arm/left/golem limb_id = SPECIES_GOLEM dmg_overlay_type = null + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + unarmed_damage_low = 5 // I'd like to take the moment that maintaining all of these random ass golem speciese is hell and oranges was right + unarmed_damage_high = 14 + unarmed_stun_threshold = 11 -/obj/item/bodypart/r_arm/golem +/obj/item/bodypart/arm/right/golem limb_id = SPECIES_GOLEM dmg_overlay_type = null + bodypart_traits = list(TRAIT_CHUNKYFINGERS) + unarmed_damage_low = 5 + unarmed_damage_high = 14 + unarmed_stun_threshold = 11 -/obj/item/bodypart/l_leg/golem +/obj/item/bodypart/leg/left/golem limb_id = SPECIES_GOLEM dmg_overlay_type = null + unarmed_damage_low = 7 + unarmed_damage_high = 21 + unarmed_stun_threshold = 11 -/obj/item/bodypart/r_leg/golem +/obj/item/bodypart/leg/right/golem limb_id = SPECIES_GOLEM dmg_overlay_type = null + unarmed_damage_low = 7 + unarmed_damage_high = 21 + unarmed_stun_threshold = 11 /// /obj/item/bodypart/head/golem/cult @@ -309,19 +359,19 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/cult +/obj/item/bodypart/arm/left/golem/cult limb_id = SPECIES_GOLEM_CULT should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/golem/cult +/obj/item/bodypart/arm/right/golem/cult limb_id = SPECIES_GOLEM_CULT should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/golem/cult +/obj/item/bodypart/leg/left/golem/cult limb_id = SPECIES_GOLEM_CULT should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/golem/cult +/obj/item/bodypart/leg/right/golem/cult limb_id = SPECIES_GOLEM_CULT should_draw_greyscale = FALSE @@ -336,21 +386,33 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/cloth +/obj/item/bodypart/arm/left/golem/cloth limb_id = SPECIES_GOLEM_CLOTH should_draw_greyscale = FALSE + unarmed_damage_low = 4 + unarmed_stun_threshold = 7 + unarmed_damage_high = 8 -/obj/item/bodypart/r_arm/golem/cloth +/obj/item/bodypart/arm/right/golem/cloth limb_id = SPECIES_GOLEM_CLOTH should_draw_greyscale = FALSE + unarmed_damage_low = 4 + unarmed_stun_threshold = 7 + unarmed_damage_high = 8 -/obj/item/bodypart/l_leg/golem/cloth +/obj/item/bodypart/leg/left/golem/cloth limb_id = SPECIES_GOLEM_CLOTH should_draw_greyscale = FALSE + unarmed_damage_low = 6 + unarmed_stun_threshold = 7 + unarmed_damage_high = 12 -/obj/item/bodypart/r_leg/golem/cloth +/obj/item/bodypart/leg/right/golem/cloth limb_id = SPECIES_GOLEM_CLOTH should_draw_greyscale = FALSE + unarmed_damage_low = 6 + unarmed_stun_threshold = 7 + unarmed_damage_high = 12 /// /obj/item/bodypart/head/golem/cardboard @@ -363,21 +425,43 @@ is_dimorphic = TRUE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/cardboard +/obj/item/bodypart/arm/left/golem/cardboard limb_id = SPECIES_GOLEM_CARDBOARD should_draw_greyscale = FALSE + unarmed_attack_verb = "whip" + unarmed_attack_sound = 'sound/weapons/whip.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_damage_low = 4 + unarmed_stun_threshold = 7 + unarmed_damage_high = 8 -/obj/item/bodypart/r_arm/golem/cardboard +/obj/item/bodypart/arm/right/golem/cardboard limb_id = SPECIES_GOLEM_CARDBOARD should_draw_greyscale = FALSE + unarmed_attack_verb = "whip" + unarmed_attack_sound = 'sound/weapons/whip.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_damage_low = 4 + unarmed_stun_threshold = 7 + unarmed_damage_high = 8 -/obj/item/bodypart/l_leg/golem/cardboard +/obj/item/bodypart/leg/left/golem/cardboard limb_id = SPECIES_GOLEM_CARDBOARD should_draw_greyscale = FALSE + unarmed_attack_sound = 'sound/weapons/whip.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_damage_low = 6 + unarmed_stun_threshold = 7 + unarmed_damage_high = 12 -/obj/item/bodypart/r_leg/golem/cardboard +/obj/item/bodypart/leg/right/golem/cardboard limb_id = SPECIES_GOLEM_CARDBOARD should_draw_greyscale = FALSE + unarmed_attack_sound = 'sound/weapons/whip.ogg' + unarmed_miss_sound = 'sound/weapons/etherealmiss.ogg' + unarmed_damage_low = 6 + unarmed_stun_threshold = 7 + unarmed_damage_high = 12 /// /obj/item/bodypart/head/golem/durathread @@ -390,19 +474,19 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/durathread +/obj/item/bodypart/arm/left/golem/durathread limb_id = SPECIES_GOLEM_DURATHREAD should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/golem/durathread +/obj/item/bodypart/arm/right/golem/durathread limb_id = SPECIES_GOLEM_DURATHREAD should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/golem/durathread +/obj/item/bodypart/leg/left/golem/durathread limb_id = SPECIES_GOLEM_DURATHREAD should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/golem/durathread +/obj/item/bodypart/leg/right/golem/durathread limb_id = SPECIES_GOLEM_DURATHREAD should_draw_greyscale = FALSE @@ -417,19 +501,19 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/bone +/obj/item/bodypart/arm/left/golem/bone limb_id = SPECIES_GOLEM_BONE should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/golem/bone +/obj/item/bodypart/arm/right/golem/bone limb_id = SPECIES_GOLEM_BONE should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/golem/bone +/obj/item/bodypart/leg/left/golem/bone limb_id = SPECIES_GOLEM_BONE should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/golem/bone +/obj/item/bodypart/leg/right/golem/bone limb_id = SPECIES_GOLEM_BONE should_draw_greyscale = FALSE @@ -444,18 +528,108 @@ is_dimorphic = TRUE //WHO MADE SNOW BREASTS? should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/golem/snow +/obj/item/bodypart/arm/left/golem/snow limb_id = SPECIES_GOLEM_SNOW should_draw_greyscale = FALSE -/obj/item/bodypart/r_arm/golem/snow +/obj/item/bodypart/arm/right/golem/snow limb_id = SPECIES_GOLEM_SNOW should_draw_greyscale = FALSE -/obj/item/bodypart/l_leg/golem/snow +/obj/item/bodypart/leg/left/golem/snow limb_id = SPECIES_GOLEM_SNOW should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/golem/snow +/obj/item/bodypart/leg/right/golem/snow limb_id = SPECIES_GOLEM_SNOW should_draw_greyscale = FALSE + + +/obj/item/bodypart/arm/left/golem/uranium + attack_type = BURN + unarmed_attack_verb = "burn" + unarmed_attack_sound = 'sound/weapons/sear.ogg' + unarmed_damage_low = 1 + unarmed_damage_high = 10 + unarmed_stun_threshold = 9 + +/obj/item/bodypart/arm/right/golem/uranium + attack_type = BURN + unarmed_attack_verb = "burn" + unarmed_attack_sound = 'sound/weapons/sear.ogg' + unarmed_damage_low = 1 + unarmed_damage_high = 10 + unarmed_stun_threshold = 9 + +/obj/item/bodypart/leg/left/golem/uranium + attack_type = BURN + unarmed_attack_sound = 'sound/weapons/sear.ogg' + unarmed_damage_low = 2 + unarmed_damage_high = 15 + unarmed_stun_threshold = 9 + +/obj/item/bodypart/leg/right/golem/uranium + attack_type = BURN + unarmed_attack_sound = 'sound/weapons/sear.ogg' + unarmed_damage_low = 2 + unarmed_damage_high = 15 + unarmed_stun_threshold = 9 + +/obj/item/bodypart/arm/left/golem/plasteel + unarmed_attack_verb = "smash" + unarmed_attack_effect = ATTACK_EFFECT_SMASH + unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard + unarmed_damage_low = 12 + unarmed_damage_high = 21 + unarmed_stun_threshold = 18 + +/obj/item/bodypart/arm/right/golem/plasteel + unarmed_attack_verb = "smash" + unarmed_attack_effect = ATTACK_EFFECT_SMASH + unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' + unarmed_damage_low = 12 + unarmed_damage_high = 21 + unarmed_stun_threshold = 18 + + +/obj/item/bodypart/leg/left/golem/plasteel + unarmed_attack_effect = ATTACK_EFFECT_SMASH + unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' + unarmed_damage_low = 18 + unarmed_damage_high = 32 + unarmed_stun_threshold = 18 + +/obj/item/bodypart/leg/right/golem/plasteel + unarmed_attack_effect = ATTACK_EFFECT_SMASH + unarmed_attack_sound = 'sound/effects/meteorimpact.ogg' + unarmed_damage_low = 18 + unarmed_damage_high = 32 + unarmed_stun_threshold = 18 + +/obj/item/bodypart/arm/left/golem/bananium + unarmed_attack_verb = "honk" + unarmed_attack_sound = 'sound/items/airhorn2.ogg' + unarmed_damage_low = 0 + unarmed_damage_high = 1 + unarmed_stun_threshold = 2 //Harmless and can't stun + +/obj/item/bodypart/arm/right/golem/bananium + unarmed_attack_verb = "honk" + unarmed_attack_sound = 'sound/items/airhorn2.ogg' + unarmed_damage_low = 0 + unarmed_damage_high = 1 + unarmed_stun_threshold = 2 + +/obj/item/bodypart/leg/right/golem/bananium + unarmed_attack_verb = "honk" + unarmed_attack_sound = 'sound/items/airhorn2.ogg' + unarmed_damage_low = 0 + unarmed_damage_high = 1 + unarmed_stun_threshold = 2 + +/obj/item/bodypart/leg/left/golem/bananium + unarmed_attack_verb = "honk" + unarmed_attack_sound = 'sound/items/airhorn2.ogg' + unarmed_damage_low = 0 + unarmed_damage_high = 1 + unarmed_stun_threshold = 2 diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm index 1d93d505208..c23b935176b 100644 --- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm @@ -14,28 +14,36 @@ is_dimorphic = TRUE should_draw_greyscale = FALSE -/obj/item/bodypart/l_arm/moth +/obj/item/bodypart/arm/left/moth icon = 'icons/mob/species/moth/bodyparts.dmi' icon_state = "moth_l_arm" icon_static = 'icons/mob/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slash.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' -/obj/item/bodypart/r_arm/moth +/obj/item/bodypart/arm/right/moth icon = 'icons/mob/species/moth/bodyparts.dmi' icon_state = "moth_r_arm" icon_static = 'icons/mob/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE + unarmed_attack_verb = "slash" + unarmed_attack_effect = ATTACK_EFFECT_CLAW + unarmed_attack_sound = 'sound/weapons/slash.ogg' + unarmed_miss_sound = 'sound/weapons/slashmiss.ogg' -/obj/item/bodypart/l_leg/moth +/obj/item/bodypart/leg/left/moth icon = 'icons/mob/species/moth/bodyparts.dmi' icon_state = "moth_l_leg" icon_static = 'icons/mob/species/moth/bodyparts.dmi' limb_id = SPECIES_MOTH should_draw_greyscale = FALSE -/obj/item/bodypart/r_leg/moth +/obj/item/bodypart/leg/right/moth icon = 'icons/mob/species/moth/bodyparts.dmi' icon_state = "moth_r_leg" icon_static = 'icons/mob/species/moth/bodyparts.dmi' diff --git a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm index 32c61a34bf9..bfaf4e1ff7d 100644 --- a/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/plasmaman_bodyparts.dm @@ -16,7 +16,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/l_arm/plasmaman +/obj/item/bodypart/arm/left/plasmaman icon = 'icons/mob/species/plasmaman/bodyparts.dmi' icon_state = "plasmaman_l_arm" icon_static = 'icons/mob/species/plasmaman/bodyparts.dmi' @@ -24,7 +24,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/r_arm/plasmaman +/obj/item/bodypart/arm/right/plasmaman icon = 'icons/mob/species/plasmaman/bodyparts.dmi' icon_state = "plasmaman_r_arm" icon_static = 'icons/mob/species/plasmaman/bodyparts.dmi' @@ -32,7 +32,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/l_leg/plasmaman +/obj/item/bodypart/leg/left/plasmaman icon = 'icons/mob/species/plasmaman/bodyparts.dmi' icon_state = "plasmaman_l_leg" icon_static = 'icons/mob/species/plasmaman/bodyparts.dmi' @@ -40,7 +40,7 @@ should_draw_greyscale = FALSE dmg_overlay_type = null -/obj/item/bodypart/r_leg/plasmaman +/obj/item/bodypart/leg/right/plasmaman icon = 'icons/mob/species/plasmaman/bodyparts.dmi' icon_state = "plasmaman_r_leg" icon_static = 'icons/mob/species/plasmaman/bodyparts.dmi' diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index a23c594698a..28a9fc6b0cd 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -41,7 +41,7 @@ var/failure_time = 0 ///Do we effect the appearance of our mob. Used to save time in preference code var/visual = TRUE - /// Traits that are given to the holder of the organ. + /// Traits that are given to the holder of the organ. If you want an effect that changes this, don't add directly to this. Use the add_organ_trait() proc var/list/organ_traits = list() // Players can look at prefs before atoms SS init, and without this diff --git a/code/modules/unit_tests/limbsanity.dm b/code/modules/unit_tests/limbsanity.dm index 32feeb2fe62..b1ff8c83989 100644 --- a/code/modules/unit_tests/limbsanity.dm +++ b/code/modules/unit_tests/limbsanity.dm @@ -1,7 +1,7 @@ /datum/unit_test/limbsanity /datum/unit_test/limbsanity/Run() - for(var/path in subtypesof(/obj/item/bodypart)) + for(var/path in subtypesof(/obj/item/bodypart) - list(/obj/item/bodypart/arm, /obj/item/bodypart/leg)) /// removes the abstract items. var/obj/item/bodypart/part = new path(null) if(part.is_dimorphic) if(!icon_exists(UNLINT(part.should_draw_greyscale ? part.icon_greyscale : part.icon_static), "[part.limb_id]_[part.body_zone]_m")) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index da4488329c4..f635f2d2c12 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -682,10 +682,10 @@ GLOBAL_LIST_EMPTY(vending_products) if(1) // shatter their legs and bleed 'em crit_rebate = 60 C.bleed(150) - var/obj/item/bodypart/l_leg/l = C.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/leg/left/l = C.get_bodypart(BODY_ZONE_L_LEG) if(l) l.receive_damage(brute=200) - var/obj/item/bodypart/r_leg/r = C.get_bodypart(BODY_ZONE_R_LEG) + var/obj/item/bodypart/leg/right/r = C.get_bodypart(BODY_ZONE_R_LEG) if(r) r.receive_damage(brute=200) if(l || r) diff --git a/tools/UpdatePaths/Scripts/70422_limb_refractor.txt b/tools/UpdatePaths/Scripts/70422_limb_refractor.txt new file mode 100644 index 00000000000..8a8f9ae5749 --- /dev/null +++ b/tools/UpdatePaths/Scripts/70422_limb_refractor.txt @@ -0,0 +1,4 @@ +/obj/item/bodypart/l_arm/@SUBTYPES : /obj/item/bodypart/arm/left/@SUBTYPES{@OLD} +/obj/item/bodypart/l_leg/@SUBTYPES : /obj/item/bodypart/leg/left/@SUBTYPES{@OLD} +/obj/item/bodypart/r_arm/@SUBTYPES : /obj/item/bodypart/arm/right/@SUBTYPES{@OLD} +/obj/item/bodypart/r_leg/@SUBTYPES : /obj/item/bodypart/leg/right/@SUBTYPES{@OLD}