Adds Kinetic Prosthetics (#4861)

## About The Pull Request
Adds kinetic prosthetics! These prosthetics are simple, yet elegant
affairs. Offers a non-robotic alternative to surplus prosthetic limbs
that are nicer looking than peg limbs.

Kinetics:

- Are immune to EMPs
- Attach/detach easily
- Cause no wounds
- Don't hit hard
- Don't allow you to use guns (or anything locked by big hands)
- Have no feeling
- Look nicer than peg limbs.

Available at roundstart (via Augments+) or via cargo crate.
## Why It's Good For The Game
Kinetics provide a simpler alternative to the surplus prosthetic limbs,
that aren't robotic, and are more advanced than peg limbs. Offers a
middle ground between pegs and surplus prosthetics. They're also
available at roundstart and via cargo crate order, unlike peg limbs
which need to be crafted.
More variety is always a nice thing!
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
<img width="71" height="72" alt="3f796af75db3578c47279e8d40a24e7b"
src="https://github.com/user-attachments/assets/0e1d30bb-0d9e-4419-9d99-81738d47068d"
/>
<img width="68" height="67" alt="a15f7441914d6a2032160bd9319bba07"
src="https://github.com/user-attachments/assets/647cb95e-6994-4f57-9ecb-eceadd807b8b"
/>
<img width="68" height="70" alt="506d69ae2eb0e5057291a1494c43a4d7"
src="https://github.com/user-attachments/assets/3ce7da3d-7a08-487e-b9cd-ea3d3ca8d408"
/>
<img width="66" height="66" alt="85ad4d9c4d550d1e98050c1a1474630d"
src="https://github.com/user-attachments/assets/3df9f39e-8284-44fe-abc4-cf9f25a33c07"
/>
<br>
<img width="397" height="372" alt="f29384d507fb0dd21faff1769f9db6f3"
src="https://github.com/user-attachments/assets/cb6cbee8-3dc8-4af8-b73d-53eae80bf37e"
/>
<img width="632" height="81" alt="f0b7048ea1c926fbe94eba55923ac1a9"
src="https://github.com/user-attachments/assets/e80f8930-0678-41d7-b859-5e5c5927c480"
/>
</details>

## Changelog
🆑
add: Added new prosthetics: simple kinetic prosthetics! They offer a
middle ground prosthetic between peg limbs and surplus robotics.
add: New options to Augments+ to have roundstart kinetic prosthetics.
add: Kinetic prosthetic limb cargo pack: includes two full sets of
kinetics. Costs 1000cr, needs medical access.
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
This commit is contained in:
Bridget (Yaki)
2025-11-27 06:39:38 +11:00
committed by GitHub
parent 50a29593e5
commit ba0ae43546
7 changed files with 139 additions and 1 deletions

View File

@@ -167,6 +167,10 @@
#define BODYSHAPE_HIDE_SHOES (1<<12)
///The limb causes glasses and hats to be drawn on layers 5 and 4 respectively. Currently used for snouts with the (Top) suffix, which are drawn on layer 6 and would normally cover facewear
#define BODYSHAPE_ALT_FACEWEAR_LAYER (1<<13)
// BUBBER EDIT ADDITION: START - Adding the kinetic bodytype
///The limb is a kinetic prosthetic.
#define BODYTYPE_KINETIC (1<<14)
// BUBBER EDIT ADDITION: END
// SKYRAT EDIT END
@@ -225,7 +229,7 @@
#define BODYPART_ID_PSYKER "psyker"
#define BODYPART_ID_MEAT "meat"
#define BODYPART_ID_PEG "peg"
#define BODYPART_ID_KINETIC "kinetic" // BUBBER EDIT ADDITION: kinetic bodypart id
//See: datum/species/var/digitigrade_customization
///The species does not have digitigrade legs in generation.

View File

@@ -0,0 +1 @@
#define LIMB_BODY_DAMAGE_COEFFICIENT_KINETIC 0 //Used by kinetic prosthetics

View File

@@ -0,0 +1,13 @@
/datum/supply_pack/medical/kinetics
name = "Kinetic Prosthetic Limbs Crate"
desc = "Contains two sets of four kinetic prosthetic limbs to provide a \
simpler alternative to advanced prosthetics."
cost = CARGO_CRATE_VALUE * 5
contains = list(
/obj/item/bodypart/arm/left/kinetic = 2,
/obj/item/bodypart/arm/right/kinetic = 2,
/obj/item/bodypart/leg/left/kinetic = 2,
/obj/item/bodypart/leg/right/kinetic = 2,
)
crate_name = "kinetics crate"
crate_type = /obj/structure/closet/crate/medical

View File

@@ -0,0 +1,23 @@
/datum/augment_item/limb/l_arm/kinetic
name = "Kinetic prosthetic left arm"
path = /obj/item/bodypart/arm/left/kinetic
cost = -2
uses_robotic_styles = FALSE
/datum/augment_item/limb/r_arm/kinetic
name = "Kinetic prosthetic right arm"
path = /obj/item/bodypart/arm/right/kinetic
cost = -2
uses_robotic_styles = FALSE
/datum/augment_item/limb/l_leg/kinetic
name = "Kinetic prosthetic left leg"
path = /obj/item/bodypart/leg/left/kinetic
cost = -2
uses_robotic_styles = FALSE
/datum/augment_item/limb/r_leg/kinetic
name = "Kinetic prosthetic right leg"
path = /obj/item/bodypart/leg/right/kinetic
cost = -2
uses_robotic_styles = FALSE

View File

@@ -0,0 +1,93 @@
/obj/item/bodypart/arm/left/kinetic
name = "left kinetic prosthetic arm"
desc = "A simple, yet elegantly designed, prosthetic. Intended to give some functionality back to the user and retain the appearance of an organic arm, but its use is limited to simple actions, as it lacks fine motor control."
icon_static = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon_state = "kinetic_l_arm"
limb_id = BODYPART_ID_KINETIC
bodytype = BODYTYPE_KINETIC
should_draw_greyscale = FALSE
attack_verb_simple = list("bashed", "slashed")
unarmed_damage_low = 1
unarmed_damage_high = 5
unarmed_effectiveness = 0
max_damage = LIMB_MAX_HP_PROSTHESIS
body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_KINETIC
bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_EASYDISMEMBER)
disabling_threshold_percentage = 1
bodypart_flags = BODYPART_UNHUSKABLE
biological_state = BIO_INORGANIC
/obj/item/bodypart/arm/left/kinetic/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
/obj/item/bodypart/arm/right/kinetic
name = "right kinetic prosthetic arm"
desc = "A simple, yet elegantly designed, prosthetic. Intended to give some functionality back to the user and retain the appearance of an organic arm, but its use is limited to simple actions, as it lacks fine motor control."
icon_static = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon_state = "kinetic_r_arm"
limb_id = BODYPART_ID_KINETIC
bodytype = BODYTYPE_KINETIC
should_draw_greyscale = FALSE
attack_verb_simple = list("bashed", "slashed")
unarmed_damage_low = 1
unarmed_damage_high = 5
unarmed_effectiveness = 0
max_damage = LIMB_MAX_HP_PROSTHESIS
body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_KINETIC
bodypart_traits = list(TRAIT_CHUNKYFINGERS, TRAIT_EASYDISMEMBER)
disabling_threshold_percentage = 1
bodypart_flags = BODYPART_UNHUSKABLE
biological_state = BIO_INORGANIC
/obj/item/bodypart/arm/right/kinetic/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
/obj/item/bodypart/leg/left/kinetic
name = "left kinetic prosthetic leg"
desc = "A simple, yet elegantly designed, prosthetic. Rather than a normal foot on the end, this prosthetic is fitted with a simple blade style foot, allowing the user to walk as normal."
icon_static = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon_state = "kinetic_r_leg"
limb_id = BODYPART_ID_KINETIC
bodytype = BODYTYPE_KINETIC
should_draw_greyscale = FALSE
unarmed_damage_low = 1
unarmed_damage_high = 5
unarmed_effectiveness = 0
max_damage = LIMB_MAX_HP_PROSTHESIS
body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_KINETIC
bodypart_traits = list(TRAIT_EASYDISMEMBER)
disabling_threshold_percentage = 1
bodypart_flags = BODYPART_UNHUSKABLE
biological_state = BIO_INORGANIC
/obj/item/bodypart/leg/left/kinetic/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)
/obj/item/bodypart/leg/right/kinetic
name = "right kinetic prosthetic leg"
desc = "A simple, yet elegantly designed, prosthetic. Rather than a normal foot on the end, this prosthetic is fitted with a simple blade style foot, allowing the user to walk as normal."
icon_static = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon = 'modular_zubbers/icons/mob/human/kinetic.dmi'
icon_state = "kinetic_l_leg"
limb_id = BODYPART_ID_KINETIC
bodytype = BODYTYPE_KINETIC
should_draw_greyscale = FALSE
unarmed_damage_low = 1
unarmed_damage_high = 5
unarmed_effectiveness = 0
max_damage = LIMB_MAX_HP_PROSTHESIS
body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_KINETIC
bodypart_traits = list(TRAIT_EASYDISMEMBER)
disabling_threshold_percentage = 1
bodypart_flags = BODYPART_UNHUSKABLE
biological_state = BIO_INORGANIC
/obj/item/bodypart/leg/right/kinetic/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_EASY_ATTACH, INNATE_TRAIT)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -510,6 +510,7 @@
#include "code\__DEFINES\~skyrat_defines\traits\declarations.dm"
#include "code\__DEFINES\~~bubber_defines\access.dm"
#include "code\__DEFINES\~~bubber_defines\bloodsucker.dm"
#include "code\__DEFINES\~~bubber_defines\bodyparts.dm"
#include "code\__DEFINES\~~bubber_defines\cameranets.dm"
#include "code\__DEFINES\~~bubber_defines\changeling_zombie.dm"
#include "code\__DEFINES\~~bubber_defines\chat.dm"
@@ -9199,6 +9200,7 @@
#include "modular_zubbers\code\modules\cargo\packs\contraband.dm"
#include "modular_zubbers\code\modules\cargo\packs\general.dm"
#include "modular_zubbers\code\modules\cargo\packs\goodies.dm"
#include "modular_zubbers\code\modules\cargo\packs\medical.dm"
#include "modular_zubbers\code\modules\cargo\packs\metalsheets.dm"
#include "modular_zubbers\code\modules\cargo\packs\security.dm"
#include "modular_zubbers\code\modules\cargo\packs\service.dm"
@@ -9271,6 +9273,7 @@
#include "modular_zubbers\code\modules\credits\credits.dm"
#include "modular_zubbers\code\modules\customization\height_scaling\icons.dm"
#include "modular_zubbers\code\modules\customization\height_scaling\preferences.dm"
#include "modular_zubbers\code\modules\customization\modules\client\augment\limbs.dm"
#include "modular_zubbers\code\modules\customization\modules\reagents\drink_reagents.dm"
#include "modular_zubbers\code\modules\customization\quad_eyes\preferences.dm"
#include "modular_zubbers\code\modules\customization\species\lycans\__DEFINES.dm"
@@ -9743,6 +9746,7 @@
#include "modular_zubbers\code\modules\surgery\advanced\trauma_surgery.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\_bodyparts.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\dismemberment.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\kinetic.dm"
#include "modular_zubbers\code\modules\surgery\bodyparts\species_parts\misc_bodyparts.dm"
#include "modular_zubbers\code\modules\surgery\organs\ear_surgery.dm"
#include "modular_zubbers\code\modules\surgery\organs\eye_surgery.dm"