[MIRROR-FIX] Upstream merge 15464 (#7176)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
This commit is contained in:
Selis
2023-11-07 13:33:44 +01:00
committed by GitHub
parent 58d26cc799
commit 2ba38d60af
40 changed files with 272 additions and 332 deletions

View File

@@ -1,3 +0,0 @@
#define MARKING_NONDIGI_ONLY (1 << 0)
#define MARKING_DIGITIGRADE_ONLY (1 << 1)
#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY

View File

@@ -50,3 +50,7 @@
#define SELECTS_BODYTYPE_FALSE 0
#define SELECTS_BODYTYPE_CUSTOM 1
#define SELECTS_BODYTYPE_SHAPESHIFTER 2
#define MARKING_NONDIGI_ONLY (1 << 0)
#define MARKING_DIGITIGRADE_ONLY (1 << 1)
#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY

View File

@@ -120,6 +120,7 @@ var/global/list/datum/dna/gene/dna_genes[0]
var/custom_exclaim
var/list/custom_heat = list()
var/list/custom_cold = list()
var/digitigrade = 0 //0, Not FALSE, for future use as indicator for digitigrade types
// VOREStation
// New stuff
@@ -148,6 +149,7 @@ var/global/list/datum/dna/gene/dna_genes[0]
new_dna.custom_exclaim=custom_exclaim //VOREStaton Edit
new_dna.custom_heat=custom_heat //VOREStation Edit
new_dna.custom_cold=custom_cold //VOREStation Edit
new_dna.digitigrade=src.digitigrade //VOREStation Edit
var/list/body_markings_genetic = (body_markings - body_marking_nopersist_list)
new_dna.body_markings=body_markings_genetic.Copy()
for(var/b=1;b<=DNA_SE_LENGTH;b++)
@@ -222,6 +224,7 @@ var/global/list/datum/dna/gene/dna_genes[0]
src.custom_exclaim = character.custom_exclaim
src.custom_heat = character.custom_heat
src.custom_cold = character.custom_cold
src.digitigrade = character.digitigrade
// +1 to account for the none-of-the-above possibility
SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1)

View File

@@ -162,6 +162,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["r_wing3"] >> pref.r_wing3
S["g_wing3"] >> pref.g_wing3
S["b_wing3"] >> pref.b_wing3
S["digitigrade"] >> pref.digitigrade
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
S["species"] << pref.species
@@ -232,6 +233,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["r_wing3"] << pref.r_wing3
S["g_wing3"] << pref.g_wing3
S["b_wing3"] << pref.b_wing3
S["digitigrade"] << pref.digitigrade
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in GLOB.playable_species))
@@ -297,6 +299,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
pref.digitigrade = sanitize_integer(pref.digitigrade, 0, 1, initial(pref.digitigrade))
pref.sanitize_body_styles()
@@ -331,6 +334,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.g_synth = pref.g_synth
character.b_synth = pref.b_synth
character.synth_markings = pref.synth_markings
if(character.species.digi_allowed)
character.digitigrade = pref.digitigrade
else
character.digitigrade = 0
//sanity check
if(character.digitigrade == null)
character.digitigrade = 0
pref.digitigrade = 0
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
character.ear_style = ear_styles[pref.ear_style]
@@ -610,7 +622,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "<br><b>Body Color</b><br>"
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]<br>"
. += chomp_custom_additions_body(user, mob_species) //CHOMPEdit - add custom chomp specific body customisation data with this proc.
if(mob_species.digi_allowed)
. += "<br><b>Digitigrade?:</b> <a href='?src=\ref[src];digitigrade=1'><b>[pref.digitigrade ? "Yes" : "No"]</b></a><br>"
. += "<h2>Genetics Settings</h2>"
@@ -850,6 +863,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.b_facial = hex2num(copytext(new_facial, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
if(href_list["digitigrade"])
pref.digitigrade = !pref.digitigrade
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["eye_color"])
if(!has_flag(mob_species, HAS_EYE_COLOR))
return TOPIC_NOACTION

View File

@@ -81,6 +81,7 @@ var/list/preferences_datums = list()
var/g_synth //Same as above
var/b_synth //Same as above
var/synth_markings = 1 //Enable/disable markings on synth parts. //VOREStation Edit - 1 by default
var/digitigrade = 0
//Some faction information.
var/home_system = "Unset" //Current home or residence.

View File

@@ -23,6 +23,10 @@
var/polychromic = FALSE //VOREStation edit
var/update_icon_define_orig = null // temp storage for original update_icon_define (if it exists)
var/update_icon_define_digi = null // dmi used for the digi sprites
var/fit_for_digi = FALSE // flag for if clothing has already been reskinned to digitigrade
//Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon()
return
@@ -621,6 +625,8 @@
drop_sound = 'sound/items/drop/shoes.ogg'
pickup_sound = 'sound/items/pickup/shoes.ogg'
update_icon_define_digi = "icons/inventory/feet/mob_digi.dmi"
/obj/item/clothing/shoes/proc/draw_knife()
set name = "Draw Boot Knife"
set desc = "Pull out your boot knife."
@@ -757,6 +763,8 @@
valid_accessory_slots = (ACCESSORY_SLOT_OVER | ACCESSORY_SLOT_ARMBAND)
restricted_accessory_slots = (ACCESSORY_SLOT_ARMBAND)
update_icon_define_digi = "icons/inventory/suit/mob_digi.dmi"
/obj/item/clothing/suit/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
@@ -866,6 +874,8 @@
var/icon/rolled_down_icon = 'icons/inventory/uniform/mob_rolled_down.dmi'
var/icon/rolled_down_sleeves_icon = 'icons/inventory/uniform/mob_sleeves_rolled.dmi'
update_icon_define_digi = "icons/inventory/uniform/mob_digi.dmi"
/obj/item/clothing/under/attack_hand(var/mob/user)
if(LAZYLEN(accessories))
..()
@@ -1071,3 +1081,49 @@
M.forceMove(get_turf(src))
return ..()
//Vorestation edit end
/obj/item/clothing/proc/handle_digitigrade(var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
// if digitigrade-use flag is set
if(H.digitigrade)
// Don't reset if already set
if(!fit_for_digi)
fit_for_digi = TRUE // set flag even if no icon_state exists, so we don't repeat checks
//if update_icon_define is already set to something, place it in a var to hold it temporarily
if(update_icon_define)
update_icon_define_orig = update_icon_define
// only override icon if a corresponding digitigrade replacement icon_state exists
// otherwise, keep the old non-digi icon_define (or nothing)
if(icon_state && icon_states(update_icon_define_digi).Find(icon_state))
update_icon_define = update_icon_define_digi
// if not-digitigrade, only act if the clothing was previously fit for a digitigrade char
else
if(fit_for_digi)
fit_for_digi = FALSE
//either reset update_icon_define to it's old value
// or reset update_icon_define to null
if(update_icon_define_orig)
update_icon_define = update_icon_define_orig
update_icon_define_orig = null
else
update_icon_define = null
/obj/item/clothing/shoes/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
/obj/item/clothing/under/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)

View File

@@ -36,6 +36,8 @@
var/b_synth //Same as above
var/synth_markings = 0 //Enables/disables markings on synth parts.
var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet)
//var/size_multiplier = 1 //multiplier for the mob's icon size //VOREStation Edit (Moved to /mob/living)
var/damage_multiplier = 1 //multiplies melee combat damage
var/icon_update = 1 //whether icon updating shall take place

View File

@@ -64,6 +64,9 @@
var/min_age = 17
var/max_age = 70
var/icodigi = 'icons/mob/human_races/r_digi.dmi'
var/digi_allowed = FALSE
// Language/culture vars.
var/default_language = LANGUAGE_GALCOM // Default language is used when 'say' is used without modifiers.
var/language = LANGUAGE_GALCOM // Default racial language, if any.

View File

@@ -8,6 +8,7 @@
name_plural = "Custom"
selects_bodytype = SELECTS_BODYTYPE_CUSTOM
base_species = SPECIES_HUMAN
digi_allowed = TRUE
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)

View File

@@ -80,6 +80,7 @@
health_hud_intensity = 2.5
chem_strength_alcohol = 0.75
throwforce_absorb_threshold = 10
digi_allowed = TRUE
min_age = 32
max_age = 260
@@ -213,6 +214,7 @@
species_language = LANGUAGE_SIIK
health_hud_intensity = 2.5
chem_strength_alcohol = 1.25
digi_allowed = TRUE
min_age = 18
max_age = 110

View File

@@ -16,6 +16,7 @@
burn_mod = 1.15 //As vulnerable to burn as a Tajara.
base_species = "Xenochimera"
selects_bodytype = SELECTS_BODYTYPE_CUSTOM
digi_allowed = TRUE
num_alternate_languages = 3
species_language = null
@@ -338,6 +339,7 @@
brute_mod = 0.8 //20% brute damage reduction
burn_mod = 1.15 //15% burn damage increase. They're spiders. Aerosol can+lighter = dead spiders.
throwforce_absorb_threshold = 10
digi_allowed = TRUE
num_alternate_languages = 3
species_language = LANGUAGE_VESPINAE

View File

@@ -17,6 +17,7 @@
species_language = LANGUAGE_SAGARU
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 110
@@ -90,8 +91,9 @@
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
min_age = 18
max_age = 110
//max_age = 80
max_age = 110 //CHOMPedit
digi_allowed = TRUE
// male_scream_sound = null //CHOMPedit
// female_scream_sound = null //CHOMPedit
@@ -146,8 +148,9 @@
/mob/living/proc/start_wings_hovering,
/mob/living/carbon/human/proc/tie_hair)
min_age = 18
max_age = 110
//max_age = 80
max_age = 110 //CHOMPedit
digi_allowed = TRUE
// male_scream_sound = null //CHOMPedit
// female_scream_sound = null //CHOMPedit
// CHOMPEdit Start: Missing Sounds, so none for this race.
@@ -195,6 +198,7 @@
/mob/living/proc/shred_limb,
/mob/living/carbon/human/proc/tie_hair)
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //AEIOU edit: Zorren can speak Terminus unassisted.
digi_allowed = TRUE
min_age = 18
max_age = 110
@@ -257,6 +261,7 @@
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,
/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
// male_scream_sound = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg') //CHOMPedit: Scream sounds, finally, 3 years later.
// female_scream_sound = list('modular_chomp/sound/voice/scream/canine/wolf_scream.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream2.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream3.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream4.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream5.ogg', 'modular_chomp/sound/voice/scream/canine/wolf_scream6.ogg') //CHOMPedit: Scream sounds, finally, 3 years later.
@@ -452,6 +457,7 @@
color_mult = 1
genders = list(MALE, FEMALE, PLURAL, NEUTER)
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/flying_vore_toggle,/mob/living/proc/start_wings_hovering,/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
@@ -499,6 +505,7 @@
//CHOMPStation Removal
// wikilink = "https://wiki.vore-station.net/Shadekin"
catalogue_data = list(/datum/category_item/catalogue/fauna/shadekin)
digi_allowed = TRUE
language = LANGUAGE_SHADEKIN
name_language = LANGUAGE_SHADEKIN
@@ -610,6 +617,7 @@
name_language = LANGUAGE_TERMINUS
species_language = LANGUAGE_TERMINUS
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,/mob/living/proc/shred_limb,/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
@@ -645,6 +653,7 @@
darksight = 4 //Better hunters in the dark.
hunger_factor = 0.1 //In exchange, they get hungry a tad faster.
num_alternate_languages = 3
digi_allowed = TRUE
min_age = 18
max_age = 80
@@ -688,6 +697,7 @@
name_language = null
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80

View File

@@ -331,6 +331,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(tail_style.clip_mask) //VOREStation Edit.
icon_key += tail_style.clip_mask_state
if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT))
icon_key += "_digi"
if(tail_style)
pixel_x = tail_style.mob_offset_x
pixel_y = tail_style.mob_offset_y
@@ -476,7 +479,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
//Bloody feet
if(feet_blood_DNA)
var/image/bloodsies = image(icon = digitigrade ? 'modular_chomp/icons/mob/human_races/masks/blood_digitigrade.dmi' : species.get_blood_mask(src), icon_state = "shoeblood", layer = BODY_LAYER+BLOOD_LAYER) //CHOMPEdit: digitigrade feeties
var/image/bloodsies = image(icon = digitigrade ? 'icons/mob/human_races/masks/blood_digitigrade.dmi' : species.get_blood_mask(src), icon_state = "shoeblood", layer = BODY_LAYER+BLOOD_LAYER) //CHOMPEdit: digitigrade feeties
bloodsies.color = feet_blood_color
both.add_overlay(bloodsies)
@@ -849,6 +852,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(istype(foot) && foot.is_hidden_by_sprite_accessory(clothing_only = TRUE)) //If either foot is hidden by the tail, don't render footwear.
return
var/obj/item/clothing/shoes/shoe = shoes
var/shoe_sprite
if(istype(shoe) && !isnull(shoe.update_icon_define))
shoe_sprite = shoe.update_icon_define
else
shoe_sprite = INV_FEET_DEF_ICON
//Allow for shoe layer toggle nonsense
var/shoe_layer = SHOES_LAYER
if(istype(shoes, /obj/item/clothing/shoes))
@@ -857,7 +868,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
shoe_layer = SHOES_LAYER_ALT
//NB: the use of a var for the layer on this one
overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = INV_FEET_DEF_ICON, default_layer = shoe_layer)
overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer)
apply_layer(SHOES_LAYER)
apply_layer(SHOES_LAYER_ALT)

View File

@@ -1,7 +1,3 @@
/datum/sprite_accessory/marking
var/digitigrade_acceptance = MARKING_NONDIGI_ONLY
var/digitigrade_icon = 'icons/mob/human_races/markings_digi_ch.dmi'
/datum/sprite_accessory/marking/ch
icon = 'icons/mob/human_races/markings_ch.dmi'
@@ -435,107 +431,6 @@
icon_state = "hair_vox_yasu"
species_allowed = list(SPECIES_VOX)
//Digitigrade markings
/datum/sprite_accessory/marking/digi
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
/datum/sprite_accessory/marking/digi/fullleft
name = "Digitigrade Full Left Leg(Only works with digitigrade legs)"
icon_state = "full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/fullright
name = "Digitigrade Full Right Leg(Only works with digitigrade legs)"
icon_state = "full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/longsockleft
name = "Digitigrade Long Socks Left(Only works with digitigrade legs)"
icon_state = "longsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/longsockright
name = "Digitigrade Long Socks Right(Only works with digitigrade legs)"
icon_state = "longsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/medsockleft
name = "Digitigrade Medium Socks Left(Only works with digitigrade legs)"
icon_state = "medsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/medsockright
name = "Digitigrade Medium Socks Right(Only works with digitigrade legs)"
icon_state = "medsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/shortsockleft
name = "Digitigrade Short Socks Left(Only works with digitigrade legs)"
icon_state = "shortsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT)
/datum/sprite_accessory/marking/digi/shortsockright
name = "Digitigrade Short Socks Right(Only works with digitigrade legs)"
icon_state = "shortsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT)
/datum/sprite_accessory/marking/digi/toesleft
name = "Digitigrade Toes Left(Only works with digitigrade legs)"
icon_state = "toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT)
/datum/sprite_accessory/marking/digi/toesright
name = "Digitigrade Toes Right(Only works with digitigrade legs)"
icon_state = "toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT)
/datum/sprite_accessory/marking/digi/stripesleft
name = "Digitigrade Stripes Left(Only works with digitigrade legs)"
icon_state = "stripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/stripesright
name = "Digitigrade Stripes Right(Only works with digitigrade legs)"
icon_state = "stripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/smallspotsleft
name = "Digitigrade Small Spots Left(Only works with digitigrade legs)"
icon_state = "smallspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/smallspotsright
name = "Digitigrade Small Spots Right(Only works with digitigrade legs)"
icon_state = "smallspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/bigspotsleft
name = "Digitigrade Big Spots Left(Only works with digitigrade legs)"
icon_state = "bigspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/bigspotsright
name = "Digitigrade Big Spots Right(Only works with digitigrade legs)"
icon_state = "bigspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/ch/teshari_large_eyes_het
name = "Teshari large eyes (Heterochromia)"
icon_state = "teshlarge_eyes_het"

View File

@@ -4,6 +4,8 @@
/datum/sprite_accessory/marking //Override for base markings
color_blend_mode = ICON_ADD
species_allowed = list() //This lets all races use
var/digitigrade_acceptance = MARKING_NONDIGI_ONLY
var/digitigrade_icon = 'icons/mob/human_races/markings_digi.dmi'
/datum/sprite_accessory/marking/vr_vulp_belly
name = "belly fur (Vulp)"
@@ -1129,3 +1131,104 @@
icon_state = "backsail"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
//Digitigrade markings
/datum/sprite_accessory/marking/digi
icon = 'icons/mob/human_races/markings_digi.dmi'
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
/datum/sprite_accessory/marking/digi/fullleft
name = "Digitigrade Full Left Leg(Only works with digitigrade legs)"
icon_state = "full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/fullright
name = "Digitigrade Full Right Leg(Only works with digitigrade legs)"
icon_state = "full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/longsockleft
name = "Digitigrade Long Socks Left(Only works with digitigrade legs)"
icon_state = "longsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/longsockright
name = "Digitigrade Long Socks Right(Only works with digitigrade legs)"
icon_state = "longsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/medsockleft
name = "Digitigrade Medium Socks Left(Only works with digitigrade legs)"
icon_state = "medsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/medsockright
name = "Digitigrade Medium Socks Right(Only works with digitigrade legs)"
icon_state = "medsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/shortsockleft
name = "Digitigrade Short Socks Left(Only works with digitigrade legs)"
icon_state = "shortsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT)
/datum/sprite_accessory/marking/digi/shortsockright
name = "Digitigrade Short Socks Right(Only works with digitigrade legs)"
icon_state = "shortsock"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT)
/datum/sprite_accessory/marking/digi/toesleft
name = "Digitigrade Toes Left(Only works with digitigrade legs)"
icon_state = "toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT)
/datum/sprite_accessory/marking/digi/toesright
name = "Digitigrade Toes Right(Only works with digitigrade legs)"
icon_state = "toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT)
/datum/sprite_accessory/marking/digi/stripesleft
name = "Digitigrade Stripes Left(Only works with digitigrade legs)"
icon_state = "stripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/stripesright
name = "Digitigrade Stripes Right(Only works with digitigrade legs)"
icon_state = "stripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/smallspotsleft
name = "Digitigrade Small Spots Left(Only works with digitigrade legs)"
icon_state = "smallspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/smallspotsright
name = "Digitigrade Small Spots Right(Only works with digitigrade legs)"
icon_state = "smallspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/digi/bigspotsleft
name = "Digitigrade Big Spots Left(Only works with digitigrade legs)"
icon_state = "bigspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/digi/bigspotsright
name = "Digitigrade Big Spots Right(Only works with digitigrade legs)"
icon_state = "bigspots"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)

View File

@@ -46,6 +46,8 @@
var/body_hair // Icon blend for body hair if any.
var/mob/living/applied_pressure
var/list/markings = list() // Markings (body_markings) to apply to the icon
var/skip_robo_icon = FALSE //to force it to use the normal species icon
var/digi_prosthetic = FALSE //is it a prosthetic that can be digitigrade
// Wound and structural data.
var/wound_update_accuracy = 1 // how often wounds should be updated, a higher number means less often
@@ -201,6 +203,12 @@
O = O.parent
return 0
//new function to check for markings
/obj/item/organ/external/proc/is_hidden_by_markings()
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
if(istype(mark_style,/datum/sprite_accessory/marking) && (organ_tag in mark_style.hide_body_parts))
return 1
/obj/item/organ/external/proc/dislocate()
if(dislocated == -1)

View File

@@ -81,6 +81,17 @@ var/global/list/limb_icon_cache = list()
/obj/item/organ/external/proc/get_icon(var/skeletal, var/can_apply_transparency = TRUE)
var/digitigrade = 0
// preferentially take digitigrade value from owner if available, THEN DNA.
// this allows limbs to be set properly when being printed in the bioprinter without an owner
// this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check
var/check_digi = istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot)
if(owner)
digitigrade = check_digi && owner.digitigrade
else if(dna)
digitigrade = check_digi && dna.digitigrade
for(var/M in markings)
if (!markings[M]["on"])
continue
@@ -139,8 +150,12 @@ var/global/list/limb_icon_cache = list()
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
should_apply_transparency = TRUE
apply_colouration(mob_icon)
else if(is_hidden_by_markings())
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
should_apply_transparency = TRUE
else
mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
should_apply_transparency = TRUE
apply_colouration(mob_icon)

View File

@@ -99,6 +99,11 @@
for(var/modifier_type in R.genetic_modifiers)
H.add_modifier(modifier_type)
//Apply legs
H.digitigrade = R.dna.digitigrade // ensure clone mob has digitigrade var set appropriately
if(H.dna.digitigrade <> R.dna.digitigrade)
H.dna.digitigrade = R.dna.digitigrade // ensure cloned DNA is set appropriately from record??? for some reason it doesn't get set right despite the override to datum/dna/Clone()
//Apply damage
H.adjustCloneLoss((H.getMaxHealth() - config.health_threshold_dead)*-0.75)
H.Paralyse(4)

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

Before

Width:  |  Height:  |  Size: 336 KiB

After

Width:  |  Height:  |  Size: 336 KiB

View File

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 416 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 715 B

After

Width:  |  Height:  |  Size: 715 B

View File

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View File

Before

Width:  |  Height:  |  Size: 548 B

After

Width:  |  Height:  |  Size: 548 B

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,15 +0,0 @@
//DNA entries for digitigrade functionality
/datum/dna
var/digitigrade = 0 //0, Not FALSE, for future use as indicator for digitigrade types (0 = None, 1 = default, 2 = digitigrade birdfeet, ...ect)
/datum/dna/Clone()
. = ..()
var/datum/dna/D = .
//Data for inclusion of digitigrade leg settings in DNA
D.digitigrade = src.digitigrade
/datum/dna/ResetUIFrom(var/mob/living/carbon/human/character)
//inclusion of digitigrade
src.digitigrade = character.digitigrade
. = ..()

View File

@@ -1,52 +0,0 @@
// Chomp additions to character load/save logic
// /datum/category_item/player_setup_item/general/body/content cannot be overridden here easily as the proc creates a list of html data
// perhaps one could get that list here, and sort through sections to rewrite it's content...? that seems inefficent having to loop through the list.
//copy_to_mob setup proc for spawning mob from prefs
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
. = ..()
if(character.species.digi_allowed)
character.digitigrade = pref.digitigrade
else
character.digitigrade = 0
//sanity check
if(character.digitigrade == null)
character.digitigrade = 0
pref.digitigrade = 0 // given above code, if character.digi is null, pref.digi also has to be.
// ontopic, the proc for clicking an option in the body customisation panel
/datum/category_item/player_setup_item/general/body/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["digitigrade"])
pref.digitigrade = !pref.digitigrade
return TOPIC_REFRESH_UPDATE_PREVIEW
. = ..()
// Savefile additions
// Be careful here
// This will add chomp-custom data to the body customisaiton page, below 'body color', above 'genetics settings'
/datum/category_item/player_setup_item/general/body/proc/chomp_custom_additions_body(var/mob/user, var/datum/species/mob_species)
. += "<h2>ChompStation Settings</h2>"
if(mob_species.digi_allowed)
. += "<br><b>Digitigrade?:</b> <a href='?src=\ref[src];digitigrade=1'><b>[pref.digitigrade ? "Yes" : "No"]</b></a><br>"
return .
/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S)
. = ..()
S["digitigrade"] >> pref.digitigrade //CHOMPEdit
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
. = ..()
S["digitigrade"] << pref.digitigrade //CHOMPEdit
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
. = ..()
pref.digitigrade = sanitize_integer(pref.digitigrade, 0, 1, initial(pref.digitigrade))

View File

@@ -1,6 +1,4 @@
/datum/preferences
var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet)
var/job_other_low = 0
var/job_other_med = 0
var/job_other_high = 0

View File

@@ -1,17 +1,5 @@
/obj/item/clothing
matter = list(MAT_FIBERS = 50)
var/update_icon_define_orig = null // temp storage for original update_icon_define (if it exists)
var/update_icon_define_digi = null
var/fit_for_digi = FALSE // flag for if clothing has already been reskinned to digitigrade
/obj/item/clothing/shoes
update_icon_define_digi = "modular_chomp/icons/inventory/feet/mob_digi.dmi"
/obj/item/clothing/suit
update_icon_define_digi = "modular_chomp/icons/inventory/suit/mob_digi.dmi"
/obj/item/clothing/under
update_icon_define_digi = "modular_chomp/icons/inventory/uniform/mob_digi.dmi"
/obj/item/clothing/shoes/MouseDrop_T(mob/living/target, mob/living/user)
if(!istype(user)) return ..() // If the user passed in isn't a living mob, exit
@@ -33,57 +21,6 @@
return ..()
/obj/item/clothing/proc/handle_digitigrade(var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
// if digitigrade-use flag is set
if(H.digitigrade)
// figure out what slot we care about
if(!update_icon_define_digi)
return
// Don't reset if already set
if(!fit_for_digi)
fit_for_digi = TRUE // set flag even if no icon_state exists, so we don't repeat checks
//if update_icon_define is already set to something, place it in a var to hold it temporarily
if(update_icon_define)
update_icon_define_orig = update_icon_define
// only override icon if a corresponding digitigrade replacement icon_state exists
// otherwise, keep the old non-digi icon_define (or nothing)
if(icon_state && icon_states(update_icon_define_digi).Find(icon_state))
update_icon_define = update_icon_define_digi
// if not-digitigrade, only act if the clothing was previously fit for a digitigrade char
else
if(fit_for_digi)
fit_for_digi = FALSE
//either reset update_icon_define to it's old value
// or reset update_icon_define to null
if(update_icon_define_orig)
update_icon_define = update_icon_define_orig
update_icon_define_orig = null
else
update_icon_define = null
/obj/item/clothing/shoes/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
/obj/item/clothing/under/equipped(var/mob/user, var/slot)
. = ..()
handle_digitigrade(user)
//In shoe steppies!
/obj/item/clothing/shoes/proc/handle_inshoe_stepping(var/mob/living/carbon/human/pred, var/mob/living/carbon/human/prey)
if(!istype(pred)) return //Sorry, inshoe steppies only for carbon/human/ for now. Based on the regular stepping mechanics

View File

@@ -1,6 +1,6 @@
/obj/item/clothing/shoes/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
var/image/bloodsies = image(icon = H.digitigrade ? 'modular_chomp/icons/mob/human_races/masks/blood_digitigrade.dmi' : H.species.get_blood_mask(H), icon_state = blood_sprite_state)
var/image/bloodsies = image(icon = H.digitigrade ? 'icons/mob/human_races/masks/blood_digitigrade.dmi' : H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
standing.add_overlay(bloodsies)

View File

@@ -2,7 +2,6 @@
var/gender_change_cooldown = 0 // A cooldown for gender and gender indentify changing procs to make it easy to avoid spam of gender change
var/loneliness_stage = 0
var/next_loneliness_time = 0
var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet)
vore_capacity = 3
vore_capacity_ex = list("stomach" = 3, "taur belly" = 3)
vore_fullness_ex = list("stomach" = 0, "taur belly" = 0)

View File

@@ -15,8 +15,6 @@
var/grab_power_self = 0
var/waking_speed = 1
var/mudking = FALSE
var/icodigi = 'modular_chomp/icons/mob/human_races/r_digi.dmi'
var/digi_allowed = FALSE
var/vanity_base_fit //when shapeshifting using vanity_copy_to, this allows you to have add something so they can go back to their original species fit
// Handles non-standard eyes when using a species that utilizes a custom base icon set.

View File

@@ -12,6 +12,7 @@
selects_bodytype = SELECTS_BODYTYPE_SHAPESHIFTER
base_species = SPECIES_HUMAN
digi_allowed = TRUE
blood_color = "#505050" //This is the same as the 80,80,80 below, but in hex
flesh_color = "#505050"

View File

@@ -45,39 +45,11 @@
*/
//Can use digitigrade flags
/datum/species/custom
digi_allowed = TRUE
/datum/species/shapeshifter/promethean
digi_allowed = TRUE
/datum/species/unathi
digi_allowed = TRUE
vore_belly_default_variant = "L"
/datum/species/tajaran
digi_allowed = TRUE
/datum/species/hi_zoxxen
digi_allowed = TRUE
/datum/species/sergal
digi_allowed = TRUE
/datum/species/akula
digi_allowed = TRUE
/datum/species/nevrean
digi_allowed = TRUE
/datum/species/vulpkanin
digi_allowed = TRUE
/datum/species/xenohybrid
digi_allowed = TRUE
/datum/species/xenochimera
digi_allowed = TRUE
/datum/species/protean
digi_allowed = TRUE

View File

@@ -53,8 +53,8 @@
/datum/species/xenomorph_hybrid
name = SPECIES_XENOMORPH_HYBRID
name_plural = "Xenomorph Hybrids"
icobase = 'modular_chomp/icons/mob/human_races/r_xenomorph_hybrid.dmi'
deform = 'modular_chomp/icons/mob/human_races/r_xenomorph_hybrid.dmi'
icobase = 'icons/mob/human_races/r_xenomorph_hybrid.dmi'
deform = 'icons/mob/human_races/r_xenomorph_hybrid.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) // Innate claws and bite.
@@ -102,7 +102,7 @@
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
digi_allowed = TRUE
icodigi = 'modular_chomp/icons/mob/human_races/r_digi_xeno.dmi'
icodigi = 'icons/mob/human_races/r_digi_xeno.dmi'
species_sounds = "Xeno"
gender_specific_species_sounds = FALSE

View File

@@ -237,14 +237,14 @@
/datum/sprite_accessory/marking/ch/xenomorph/digi_r_leg
name = "Xenomorph right leg (digitigrade)"
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
icon = 'icons/mob/human_races/markings_digi.dmi'
icon_state = "xeno_digi"
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
body_parts = list(BP_R_LEG, BP_R_FOOT)
/datum/sprite_accessory/marking/ch/xenomorph/digi_r_leg_hidden
name = "Xenomorph right leg (digitigrade, hide)"
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
icon = 'icons/mob/human_races/markings_digi.dmi'
icon_state = "xeno_digi"
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
body_parts = list(BP_R_LEG, BP_R_FOOT)
@@ -252,14 +252,14 @@
/datum/sprite_accessory/marking/ch/xenomorph/digi_l_leg
name = "Xenomorph left leg (digitigrade)"
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
icon = 'icons/mob/human_races/markings_digi.dmi'
icon_state = "xeno_digi"
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
body_parts = list(BP_L_LEG, BP_L_FOOT)
/datum/sprite_accessory/marking/ch/xenomorph/digi_l_leg_hidden
name = "Xenomorph left leg (digitigrade, hide)"
icon = 'icons/mob/human_races/markings_digi_ch.dmi'
icon = 'icons/mob/human_races/markings_digi.dmi'
icon_state = "xeno_digi"
digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY
body_parts = list(BP_L_LEG, BP_L_FOOT)

View File

@@ -1,18 +0,0 @@
/obj/item/organ/external
var/skip_robo_icon = FALSE //CHOMPStation edit - to force it to use the normal species icon
var/digi_prosthetic = FALSE //is it a prosthetic that can be digitigrade
//new function to check for markings
/obj/item/organ/external/proc/is_hidden_by_markings()
//code that checked all limbs.
/*
for(var/obj/item/organ/external/organ in owner.organs)
for(var/M in organ.markings)
var/datum/sprite_accessory/marking/mark_style = organ.markings[M]["datum"]
if (mark_style.hide_body_parts && (organ_tag in mark_style.hide_body_parts))
return 1
*/
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
if(istype(mark_style,/datum/sprite_accessory/marking/ch) && (organ_tag in mark_style.hide_body_parts))
return 1

View File

@@ -1,11 +0,0 @@
/obj/machinery/clonepod/transhuman/growclone(var/datum/transhuman/body_record/current_project)
. = ..()
//Extra clonepod behavior
var/mob/living/carbon/human/H = occupant
var/datum/dna2/record/R = current_project.mydna
H.digitigrade = R.dna.digitigrade // ensure clone mob has digitigrade var set appropriately
if(H.dna.digitigrade <> R.dna.digitigrade)
H.dna.digitigrade = R.dna.digitigrade // ensure cloned DNA is set appropriately from record??? for some reason it doesn't get set right despite the override to datum/dna/Clone()
H.update_icons_body()

View File

@@ -71,7 +71,6 @@
#include "code\__defines\misc_ch.dm"
#include "code\__defines\misc_vr.dm"
#include "code\__defines\mobs.dm"
#include "code\__defines\mobs_ch.dm"
#include "code\__defines\mobs_vr.dm"
#include "code\__defines\mobs_yw.dm"
#include "code\__defines\nifsoft.dm"
@@ -4600,7 +4599,6 @@
#include "modular_chomp\code\datums\supplypacks\security.dm"
#include "modular_chomp\code\datums\underwear\socks.dm"
#include "modular_chomp\code\game\atoms\atoms.dm"
#include "modular_chomp\code\game\dna\dna2.dm"
#include "modular_chomp\code\game\jobs\job\captain.dm"
#include "modular_chomp\code\game\jobs\job\department.dm"
#include "modular_chomp\code\game\jobs\job\job_goodies.dm"
@@ -4641,7 +4639,6 @@
#include "modular_chomp\code\modules\asset_cache\asset_list.dm"
#include "modular_chomp\code\modules\client\preferences.dm"
#include "modular_chomp\code\modules\client\preferences_spawnpoints.dm"
#include "modular_chomp\code\modules\client\preference_setup\general\03_body.dm"
#include "modular_chomp\code\modules\client\preference_setup\global\setting_datums.dm"
#include "modular_chomp\code\modules\client\preference_setup\loadout\gear_tweaks.dm"
#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_general.dm"
@@ -4800,7 +4797,6 @@
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_tail.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_taur.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_wing.dm"
#include "modular_chomp\code\modules\organs\organ_external.dm"
#include "modular_chomp\code\modules\organs\organ_icon.dm"
#include "modular_chomp\code\modules\overmap\dynamic_sector.dm"
#include "modular_chomp\code\modules\player_tips\player_tips_list.dm"
@@ -4834,7 +4830,6 @@
#include "modular_chomp\code\modules\research\designs\misc.dm"
#include "modular_chomp\code\modules\research\designs\power_cells.dm"
#include "modular_chomp\code\modules\research\designs\weapons.dm"
#include "modular_chomp\code\modules\resleeving\machines.dm"
#include "modular_chomp\code\modules\shieldgen\shield_capacitor.dm"
#include "modular_chomp\code\modules\shieldgen\shield_gen.dm"
#include "modular_chomp\code\modules\tgui\feedback.dm"