This commit is contained in:
Byemoh
2025-02-03 16:44:11 -06:00
committed by GitHub
parent 5729598080
commit e979bd449d
29 changed files with 128 additions and 176 deletions

View File

@@ -473,9 +473,9 @@
pixel_x = -9;
pixel_y = -9
},
/obj/item/bodypart/l_leg,
/obj/item/bodypart/leg/left,
/obj/item/bodypart/r_arm,
/obj/item/bodypart/r_leg{
/obj/item/bodypart/leg/right{
pixel_x = 8;
pixel_y = 4
},

View File

@@ -76,7 +76,7 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
/obj/item/bodypart/r_leg,
/obj/item/bodypart/leg/right,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plasteel,
/area/template_noop)

View File

@@ -78,7 +78,7 @@
/obj/item/stack/sheet/mineral/gold,
/obj/item/stack/sheet/mineral/gold,
/obj/item/stack/sheet/mineral/gold,
/obj/item/bodypart/r_leg/ipc/sgmipc,
/obj/item/bodypart/leg/right/ipc/sgmipc,
/turf/open/floor/engine/airless,
/area/template_noop)
"K" = (

View File

@@ -237,8 +237,8 @@ Like its parent but can be applied to carbon mobs instead of clothing items
/datum/component/bloodysoles/feet/update_icon()
. = list()
if(ishuman(wielder))// Monkeys get no bloody feet :(
var/obj/item/bodypart/l_leg/left_leg = wielder.get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/r_leg/right_leg = wielder.get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left/left_leg = wielder.get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/right_leg = wielder.get_bodypart(BODY_ZONE_R_LEG)
if(left_leg?.species_id == right_leg?.species_id && icon_exists(bloody_feet.icon, "shoeblood_[left_leg.species_id]"))
bloody_feet.icon_state = "shoeblood_[left_leg.species_id]"
else if(HAS_TRAIT(wielder, TRAIT_DIGITIGRADE) && !HAS_TRAIT(wielder, TRAIT_DIGI_SQUISH))

View File

@@ -75,8 +75,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/metal = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/gun/energy/e_gun/dragnet = 1,
@@ -805,7 +805,7 @@
/datum/crafting_recipe/leftprostheticleg
name = "Left Prosthetic Leg"
result = /obj/item/bodypart/l_leg/robot/surplus
result = /obj/item/bodypart/leg/left/robot/surplus
time = 10 SECONDS
reqs = list(/obj/item/stack/sheet/metal = 5,
/obj/item/stack/cable_coil = 10,
@@ -815,7 +815,7 @@
/datum/crafting_recipe/rightprostheticleg
name = "Right Prosthetic Leg"
result = /obj/item/bodypart/r_leg/robot/surplus
result = /obj/item/bodypart/leg/right/robot/surplus
time = 10 SECONDS
reqs = list(/obj/item/stack/sheet/metal = 5,
/obj/item/stack/cable_coil = 10,

View File

@@ -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

View File

@@ -297,13 +297,13 @@
prosthetic = new/obj/item/bodypart/r_arm/robot/surplus(quirk_holder)
slot_string = "right arm"
if(BODY_ZONE_L_LEG)
var/obj/item/bodypart/l_leg/L = H.get_bodypart(BODY_ZONE_L_LEG)
prosthetic = new/obj/item/bodypart/l_leg/robot/surplus(quirk_holder)
var/obj/item/bodypart/leg/left/L = H.get_bodypart(BODY_ZONE_L_LEG)
prosthetic = new/obj/item/bodypart/leg/left/robot/surplus(quirk_holder)
prosthetic.set_digitigrade(L.use_digitigrade)
slot_string = "left leg"
if(BODY_ZONE_R_LEG)
var/obj/item/bodypart/r_leg/R = H.get_bodypart(BODY_ZONE_R_LEG)
prosthetic = new/obj/item/bodypart/r_leg/robot/surplus(quirk_holder)
var/obj/item/bodypart/leg/right/R = H.get_bodypart(BODY_ZONE_R_LEG)
prosthetic = new/obj/item/bodypart/leg/right/robot/surplus(quirk_holder)
prosthetic.set_digitigrade(R.use_digitigrade)
slot_string = "right leg"
prosthetic.replace_limb(H)

View File

@@ -250,7 +250,7 @@
return
// Special effects
if(affecting?.stamina_dam >= 50 && (istype(affecting, /obj/item/bodypart/l_leg) || istype(affecting, /obj/item/bodypart/r_leg)))
if(affecting?.stamina_dam >= 50 && (istype(affecting, /obj/item/bodypart/leg)))
desc = get_stun_description(target, user)
target.Knockdown(knockdown_time_carbon)

View File

@@ -14,9 +14,9 @@
/// Right arm part of the endoskeleton
var/obj/item/bodypart/r_arm/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
@@ -168,7 +168,7 @@
else
to_chat(user, span_warning("You need one sheet of metal 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))
@@ -178,8 +178,8 @@
l_leg = W
update_appearance(UPDATE_ICON)
else if(istype(W, /obj/item/bodypart/r_leg/robot))
var/obj/item/bodypart/r_leg/robot/L = W
else if(istype(W, /obj/item/bodypart/leg/right/robot))
var/obj/item/bodypart/leg/right/robot/L = W
if(L.use_digitigrade)
to_chat(user, span_warning("You can only install plantigrade legs on [src]!"))
return
@@ -193,7 +193,7 @@
update_appearance(UPDATE_ICON)
else if(istype(W, /obj/item/bodypart/l_arm/robot))
var/obj/item/bodypart/l_leg/robot/L = W
var/obj/item/bodypart/leg/left/robot/L = W
if(L.use_digitigrade)
to_chat(user, span_warning("You can only install plantigrade legs on [src]!"))
return

View File

@@ -173,10 +173,10 @@
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/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."

View File

@@ -20,7 +20,7 @@
mob_size = MOB_SIZE_LARGE
held_items = list(null, null)
bodyparts = list(/obj/item/bodypart/chest/devil, /obj/item/bodypart/head/devil, /obj/item/bodypart/l_arm/devil,
/obj/item/bodypart/r_arm/devil, /obj/item/bodypart/r_leg/devil, /obj/item/bodypart/l_leg/devil)
/obj/item/bodypart/r_arm/devil, /obj/item/bodypart/leg/right/devil, /obj/item/bodypart/leg/left/devil)
hud_type = /datum/hud/devil
var/ascended = FALSE
var/mob/living/oldform

View File

@@ -40,7 +40,7 @@
/datum/eldritch_transmutation/curse/paralysis
name = "Curse of Paralysis"
required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood,/obj/item/bodypart/l_leg,/obj/item/bodypart/r_leg,/obj/item/hatchet)
required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood,/obj/item/bodypart/leg/left,/obj/item/bodypart/leg/right,/obj/item/hatchet)
timer = 5 MINUTES
required_shit_list = "A knife, a pool of blood, a left and right leg, and a hatchet. Requires an item touched by the to-be victim."

View File

@@ -21,8 +21,8 @@
/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)
var/obj/item/bodypart/leg/left/l_leg = user.get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/r_leg = user.get_bodypart(BODY_ZONE_R_LEG)
if(l_leg)
l_leg.dismember()
playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)

View File

@@ -14,7 +14,7 @@
var/custom_pixel_y_offset = 0
deathsound = 'sound/voice/hiss6.ogg'
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/r_arm/alien, /obj/item/bodypart/leg/right/alien, /obj/item/bodypart/leg/left/alien)
GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list(
/datum/strippable_item/hand/left,

View File

@@ -59,7 +59,7 @@
var/tinttotal = 0 // Total level of visualy impairing items
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/r_arm, /obj/item/bodypart/leg/right, /obj/item/bodypart/leg/left)
//Gets filled up in create_bodyparts()
var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems)

View File

@@ -408,8 +408,8 @@
return dna?.species?.get_butt_sprite(src)
/mob/living/carbon/human/get_footprint_sprite()
var/obj/item/bodypart/l_leg/left_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/r_leg/right_leg = get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left/left_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/right_leg = get_bodypart(BODY_ZONE_R_LEG)
var/species_id
var/datum/species/species
if(left_leg?.species_id == right_leg?.species_id)

View File

@@ -153,8 +153,8 @@ There are several things that need to be remembered:
//Friendly reminder that icon_exists(file, state, scream = TRUE) is your friend when debugging this code.
var/icon_file
var/target_overlay = RESOLVE_ICON_STATE(uniform) //Selects proper icon from the vars the clothing has (Search define for more.)
var/obj/item/bodypart/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/r_leg = get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/r_leg = get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/chest/chest = get_bodypart(BODY_ZONE_CHEST)
uniform.species_fitted = null
if(uniform.adjusted)
@@ -381,8 +381,8 @@ There are several things that need to be remembered:
if(shoes)
var/target_overlay = RESOLVE_ICON_STATE(shoes)
var/obj/item/bodypart/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/r_leg = get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/r_leg = get_bodypart(BODY_ZONE_R_LEG)
shoes.species_fitted = null
if(istype(shoes, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/real_shoes = shoes
@@ -508,8 +508,8 @@ There are several things that need to be remembered:
var/obj/item/bodypart/chest/chest = get_bodypart(BODY_ZONE_CHEST)
var/icon_to_use = DEFAULT_SUIT_FILE
suit.species_fitted = null
var/obj/item/bodypart/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/r_leg = get_bodypart(BODY_ZONE_R_LEG)
var/obj/item/bodypart/leg/left/l_leg = get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right/r_leg = get_bodypart(BODY_ZONE_R_LEG)
if(l_leg?.species_id == r_leg?.species_id == SPECIES_VOX)//for Vox, it's the Vox legs that make regular sprites not fit
if(icon_exists(suit.sprite_sheets[l_leg.species_id], suit.icon_state))
icon_to_use = suit.sprite_sheets[l_leg.species_id]

View File

@@ -16,7 +16,7 @@
unique_name = TRUE
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey,
/obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey)
/obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/leg/right/monkey, /obj/item/bodypart/leg/left/monkey)
hud_type = /datum/hud/monkey
blood_volume = BLOOD_VOLUME_MONKEY // Yogs -- Makes monkeys/xenos have different amounts of blood from normal carbonbois
can_be_held = TRUE

View File

@@ -858,8 +858,8 @@
new /obj/item/key/janitor(T)
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)

View File

@@ -67,7 +67,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]."))

View File

@@ -397,9 +397,9 @@ Auto Patrol[]"},
G.update_appearance(UPDATE_ICON)
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)

View File

@@ -23,7 +23,7 @@
id = "leftleg"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
build_path = /obj/item/bodypart/l_leg
build_path = /obj/item/bodypart/leg/left
category = list("initial","human","lizard","fly","moth","plasmaman","polysmorph","vox")
/datum/design/rightleg
@@ -31,7 +31,7 @@
id = "rightleg"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/synthflesh = 25)
build_path = /obj/item/bodypart/r_leg
build_path = /obj/item/bodypart/leg/right
category = list("initial","human","lizard","fly","moth","plasmaman","polysmorph","vox")
/datum/design/digi_leftleg
@@ -39,7 +39,7 @@
id = "digi_leftleg"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/synthflesh = 30)
build_path = /obj/item/bodypart/l_leg/digitigrade
build_path = /obj/item/bodypart/leg/left/digitigrade
category = list("initial","lizard","polysmorph")
/datum/design/digi_rightleg
@@ -47,7 +47,7 @@
id = "digi_rightleg"
build_type = LIMBGROWER
reagents_list = list(/datum/reagent/medicine/synthflesh = 30)
build_path = /obj/item/bodypart/r_leg/digitigrade
build_path = /obj/item/bodypart/leg/right/digitigrade
category = list("initial","lizard","polysmorph")
//Non-limb limb designs

View File

@@ -48,7 +48,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("Cyborg")
@@ -57,7 +57,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("Cyborg")

View File

@@ -255,7 +255,7 @@
C.update_inv_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
@@ -266,7 +266,7 @@
owner.dropItemToGround(owner.shoes, TRUE)
..()
/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())

View File

@@ -173,9 +173,9 @@
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head()
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg()
L = new /obj/item/bodypart/leg/left()
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg()
L = new /obj/item/bodypart/leg/right()
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest()
if((L.body_part & LEG_LEFT|LEG_RIGHT) && (DIGITIGRADE in dna?.species?.species_traits))
@@ -196,9 +196,9 @@
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head/monkey()
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg/monkey()
L = new /obj/item/bodypart/leg/left/monkey()
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg/monkey()
L = new /obj/item/bodypart/leg/right/monkey()
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest/monkey()
if(L)
@@ -230,9 +230,9 @@
if(BODY_ZONE_HEAD)
L = new /obj/item/bodypart/head/alien()
if(BODY_ZONE_L_LEG)
L = new /obj/item/bodypart/l_leg/alien()
L = new /obj/item/bodypart/leg/left/alien()
if(BODY_ZONE_R_LEG)
L = new /obj/item/bodypart/r_leg/alien()
L = new /obj/item/bodypart/leg/right/alien()
if(BODY_ZONE_CHEST)
L = new /obj/item/bodypart/chest/alien()
if(L)
@@ -290,14 +290,14 @@
if((!O.use_digitigrade && swap_back == FALSE) || (O.use_digitigrade && swap_back == TRUE))
if(O.body_part & LEG_LEFT)
if(swap_back == TRUE)
N = new /obj/item/bodypart/l_leg
N = new /obj/item/bodypart/leg/left
else
N = new /obj/item/bodypart/l_leg/digitigrade
N = new /obj/item/bodypart/leg/left/digitigrade
else if(O.body_part & LEG_RIGHT)
if(swap_back == TRUE)
N = new /obj/item/bodypart/r_leg
N = new /obj/item/bodypart/leg/right
else
N = new /obj/item/bodypart/r_leg/digitigrade
N = new /obj/item/bodypart/leg/right/digitigrade
if(!N)
continue
body_plan_changed = TRUE

View File

@@ -245,59 +245,51 @@
dismemberable = FALSE
can_be_disabled = FALSE
/obj/item/bodypart/l_leg
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"
/obj/item/bodypart/leg
attack_verb = list("kicked", "stomped")
max_damage = 50
body_zone = BODY_ZONE_L_LEG
body_part = LEG_LEFT|FOOT_LEFT
body_damage_coeff = 0.75
px_x = -2
px_y = 12
max_stamina_damage = 50
can_be_disabled = TRUE
/// Used by the bloodysoles component to make footprints
var/footprint_sprite = FOOTPRINT_SPRITE_SHOES
var/paralysis_type
/obj/item/bodypart/l_leg/set_owner(new_owner)
/obj/item/bodypart/leg/set_owner(new_owner)
. = ..()
if(. == FALSE)
return
if(owner)
if(HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG))
ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG)
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_loss))
if(HAS_TRAIT(owner, paralysis_type))
ADD_TRAIT(src, TRAIT_PARALYSIS, paralysis_type)
RegisterSignal(owner, SIGNAL_REMOVETRAIT(paralysis_type), PROC_REF(on_owner_paralysis_loss))
else
REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG)
RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_gain))
REMOVE_TRAIT(src, TRAIT_PARALYSIS, paralysis_type)
RegisterSignal(owner, SIGNAL_ADDTRAIT(paralysis_type), PROC_REF(on_owner_paralysis_gain))
if(.)
var/mob/living/carbon/old_owner = .
if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_L_LEG))
UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG))
if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG))
REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG)
if(HAS_TRAIT(old_owner, paralysis_type))
UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(paralysis_type))
if(!owner || !HAS_TRAIT(owner, paralysis_type))
REMOVE_TRAIT(src, TRAIT_PARALYSIS, paralysis_type)
else
UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG))
UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(paralysis_type))
///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)
ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_L_LEG)
UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_L_LEG))
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_L_LEG), PROC_REF(on_owner_paralysis_loss))
///Proc to react to the owner gaining the [paralysis_type] trait.
/obj/item/bodypart/leg/proc/on_owner_paralysis_gain(mob/living/carbon/source)
ADD_TRAIT(src, TRAIT_PARALYSIS, paralysis_type)
UnregisterSignal(owner, SIGNAL_ADDTRAIT(paralysis_type))
RegisterSignal(owner, SIGNAL_REMOVETRAIT(paralysis_type), PROC_REF(on_owner_paralysis_loss))
///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)
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_REF(on_owner_paralysis_gain))
///Proc to react to the owner losing the [paralysis_type] trait.
/obj/item/bodypart/leg/proc/on_owner_paralysis_loss(mob/living/carbon/source)
REMOVE_TRAIT(src, TRAIT_PARALYSIS, paralysis_type)
UnregisterSignal(owner, SIGNAL_REMOVETRAIT(paralysis_type))
RegisterSignal(owner, SIGNAL_ADDTRAIT(paralysis_type), PROC_REF(on_owner_paralysis_gain))
/obj/item/bodypart/l_leg/set_disabled(new_disabled)
/obj/item/bodypart/leg/set_disabled(new_disabled)
. = ..()
if(isnull(.) || !owner)
return
@@ -307,11 +299,22 @@
if(owner.stat < UNCONSCIOUS)
to_chat(owner, span_userdanger("Your lose control of your [name]!"))
/obj/item/bodypart/l_leg/digitigrade
/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"
body_zone = BODY_ZONE_L_LEG
body_part = LEG_LEFT|FOOT_LEFT
px_x = -2
px_y = 12
paralysis_type = TRAIT_PARALYSIS_L_LEG
/obj/item/bodypart/leg/left/digitigrade
name = "left digitigrade leg"
use_digitigrade = TRUE
/obj/item/bodypart/l_leg/monkey
/obj/item/bodypart/leg/left/monkey
icon = 'icons/mob/animal_parts.dmi'
icon_state = "default_monkey_l_leg"
animal_origin = MONKEY_BODYPART
@@ -319,7 +322,7 @@
px_y = 4
footprint_sprite = FOOTPRINT_SPRITE_PAWS
/obj/item/bodypart/l_leg/alien
/obj/item/bodypart/leg/left/alien
icon = 'icons/mob/animal_parts.dmi'
icon_state = "alien_l_leg"
px_x = 0
@@ -329,81 +332,30 @@
dismemberable = FALSE
can_be_disabled = FALSE
/obj/item/bodypart/l_leg/devil
/obj/item/bodypart/leg/left/devil
max_damage = 5000
animal_origin = DEVIL_BODYPART
dismemberable = FALSE
can_be_disabled = 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 availible
icon_state = "default_human_r_leg"
attack_verb = list("kicked", "stomped")
max_damage = 50
body_zone = BODY_ZONE_R_LEG
body_part = LEG_RIGHT|FOOT_RIGHT
body_damage_coeff = 0.75
px_x = 2
px_y = 12
max_stamina_damage = 50
can_be_disabled = TRUE
/// Used by the bloodysoles component to make footprints
var/footprint_sprite = FOOTPRINT_SPRITE_SHOES
paralysis_type = TRAIT_PARALYSIS_R_LEG
/obj/item/bodypart/r_leg/set_owner(new_owner)
. = ..()
if(. == FALSE)
return
if(owner)
if(HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG))
ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG)
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_loss))
else
REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG)
RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_gain))
if(.)
var/mob/living/carbon/old_owner = .
if(HAS_TRAIT(old_owner, TRAIT_PARALYSIS_R_LEG))
UnregisterSignal(old_owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG))
if(!owner || !HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG))
REMOVE_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG)
else
UnregisterSignal(old_owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG))
///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)
ADD_TRAIT(src, TRAIT_PARALYSIS, TRAIT_PARALYSIS_R_LEG)
UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS_R_LEG))
RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS_R_LEG), PROC_REF(on_owner_paralysis_loss))
///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)
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_REF(on_owner_paralysis_gain))
/obj/item/bodypart/r_leg/set_disabled(new_disabled)
. = ..()
if(isnull(.) || !owner)
return
if(!.)
if(bodypart_disabled)
if(owner.stat < UNCONSCIOUS)
to_chat(owner, span_userdanger("Your lose control of your [name]!"))
/obj/item/bodypart/r_leg/digitigrade
/obj/item/bodypart/leg/right/digitigrade
name = "right digitigrade leg"
use_digitigrade = TRUE
/obj/item/bodypart/r_leg/monkey
/obj/item/bodypart/leg/right/monkey
icon = 'icons/mob/animal_parts.dmi'
icon_state = "default_monkey_r_leg"
animal_origin = MONKEY_BODYPART
@@ -411,7 +363,7 @@
px_y = 4
footprint_sprite = FOOTPRINT_SPRITE_PAWS
/obj/item/bodypart/r_leg/alien
/obj/item/bodypart/leg/right/alien
icon = 'icons/mob/animal_parts.dmi'
icon_state = "alien_r_leg"
px_x = 0
@@ -421,7 +373,7 @@
dismemberable = FALSE
can_be_disabled = FALSE
/obj/item/bodypart/r_leg/devil
/obj/item/bodypart/leg/right/devil
max_damage = 5000
animal_origin = DEVIL_BODYPART
dismemberable = FALSE

View File

@@ -7,12 +7,12 @@
#define ROBOTIC_HEAVY_BURN_MSG "smoldering"
#define IPCLIMB(_id, lname) \
/obj/item/bodypart/l_leg/ipc/_id { \
/obj/item/bodypart/leg/left/ipc/_id { \
name = lname + " Left Leg"; \
icon_state = #_id + "_l_leg"; \
species_id = #_id; \
}; \
/obj/item/bodypart/r_leg/ipc/_id { \
/obj/item/bodypart/leg/right/ipc/_id { \
name = lname + " Right Leg"; \
icon_state = #_id + "_r_leg"; \
species_id = #_id; \
@@ -43,12 +43,12 @@
/datum/design/ipclimbs/l_leg/_id { \
name = lname + " Left Leg"; \
id = #_id + "_l_leg"; \
build_path = /obj/item/bodypart/l_leg/ipc/_id; \
build_path = /obj/item/bodypart/leg/left/ipc/_id; \
}; \
/datum/design/ipclimbs/r_leg/_id { \
name = lname + " Right Leg"; \
id = #_id + "_r_leg"; \
build_path = /obj/item/bodypart/r_leg/ipc/_id; \
build_path = /obj/item/bodypart/leg/right/ipc/_id; \
}; \
/datum/design/ipclimbs/l_arm/_id { \
name = lname + " Left Arm"; \
@@ -116,7 +116,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 = list("kicked", "stomped")
@@ -141,7 +141,7 @@
var/digi_icon_state = "digitigrade_1_l_leg"
/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 = list("kicked", "stomped")
@@ -167,13 +167,13 @@
var/digi_icon_state = "digitigrade_1_r_leg"
//make them swappable
/obj/item/bodypart/l_leg/robot/attackby(obj/item/W, mob/user, params)
/obj/item/bodypart/leg/left/robot/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour != TOOL_SCREWDRIVER)
return ..()
to_chat(user, span_notice("You configure [src] into [!use_digitigrade ? "digitigrade" : "plantigrade"] mode."))
set_digitigrade(!use_digitigrade)
/obj/item/bodypart/l_leg/robot/set_digitigrade(use_digi = FALSE)
/obj/item/bodypart/leg/left/robot/set_digitigrade(use_digi = FALSE)
if(use_digi)
icon_state = digi_icon_state
else
@@ -181,13 +181,13 @@
update_icon()
return ..()
/obj/item/bodypart/r_leg/robot/attackby(obj/item/W, mob/user, params)
/obj/item/bodypart/leg/right/robot/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour != TOOL_SCREWDRIVER)
return ..()
to_chat(user, span_notice("You configure [src] into [!use_digitigrade ? "digitigrade" : "plantigrade"] mode."))
set_digitigrade(!use_digitigrade)
/obj/item/bodypart/r_leg/robot/set_digitigrade(use_digi = FALSE)
/obj/item/bodypart/leg/right/robot/set_digitigrade(use_digi = FALSE)
if(use_digi)
icon_state = digi_icon_state
else
@@ -416,7 +416,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 = 'icons/mob/augmentation/surplus_augments.dmi'
@@ -424,7 +424,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 = 'icons/mob/augmentation/surplus_augments.dmi'
@@ -433,7 +433,7 @@
max_damage = 20
/obj/item/bodypart/l_leg/ipc
/obj/item/bodypart/leg/left/ipc
status = BODYPART_ROBOTIC
sub_status = BODYPART_SUBTYPE_IPC
icon = 'yogstation/icons/mob/human_parts.dmi'
@@ -446,7 +446,7 @@
medium_burn_msg = ROBOTIC_MEDIUM_BURN_MSG
heavy_burn_msg = ROBOTIC_HEAVY_BURN_MSG
/obj/item/bodypart/r_leg/ipc
/obj/item/bodypart/leg/right/ipc
status = BODYPART_ROBOTIC
sub_status = BODYPART_SUBTYPE_IPC
icon = 'yogstation/icons/mob/human_parts.dmi'

View File

@@ -208,10 +208,10 @@
starting_organs = list(/obj/item/bodypart/r_arm/robot)
/obj/item/autosurgeon/l_leg/robot
starting_organs = list(/obj/item/bodypart/l_leg/robot)
starting_organs = list(/obj/item/bodypart/leg/left/robot)
/obj/item/autosurgeon/r_leg/robot
starting_organs = list(/obj/item/bodypart/r_leg/robot)
starting_organs = list(/obj/item/bodypart/leg/right/robot)
//------------------------Antag Autosurgeons without metashield-------------------
/obj/item/autosurgeon/suspicious

View File

@@ -575,10 +575,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, updating_health=TRUE)
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, updating_health=TRUE)
if(l || r)