Various Fixes (#5399)
* modularize digitigrade code * Hide glasses + tail side layering fix * pipe unwrench yeet Co-authored-by: Razgriz <razgriz1032@gmail.com>
@@ -579,12 +579,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
. += "<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>"
|
||||
|
||||
//CHOMPEdit START
|
||||
if(mob_species.digi_allowed)
|
||||
. += "<br><b>Digitigrade?:</b> <a href='?src=\ref[src];digitigrade=1'><b>[pref.digitigrade ? "Yes" : "No"]</b></a><br>"
|
||||
//CHOMPEdit END
|
||||
|
||||
|
||||
. += chomp_custom_additions_body(user, mob_species) //CHOMPEdit - add custom chomp specific body customisation data with this proc.
|
||||
|
||||
. += "<h2>Genetics Settings</h2>"
|
||||
|
||||
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
//CHOMP Overrides for if holder is digitigrade
|
||||
/obj/item/clothing
|
||||
var/update_icon_define_orig = null // temp storage for original update_icon_define (if it exists)
|
||||
var/fit_for_digi = FALSE // flag for if clothing has already been reskinned to digitigrade
|
||||
|
||||
/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
|
||||
var/update_icon_define_digi = null
|
||||
|
||||
if(istype(src, /obj/item/clothing/shoes))
|
||||
update_icon_define_digi = "icons/inventory/feet/mob_digi_ch.dmi"
|
||||
else if(istype(src, /obj/item/clothing/suit)) //suit
|
||||
update_icon_define_digi = "icons/inventory/suit/mob_digi_ch.dmi"
|
||||
else if(istype(src, /obj/item/clothing/under)) //uniform
|
||||
update_icon_define_digi = "icons/inventory/uniform/mob_digi_ch.dmi"
|
||||
else
|
||||
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)
|
||||
@@ -1,22 +0,0 @@
|
||||
/datum/species
|
||||
var/list/env_traits = list()
|
||||
var/dirtslip = FALSE
|
||||
var/photosynthesizing = FALSE
|
||||
var/grows = FALSE
|
||||
var/shrinks = FALSE
|
||||
var/rad_levels = list("safe" = 2.5, "danger_1" = 50, "danger_2" = 75, "danger_3" = 150)
|
||||
var/rad_removal_mod = 1
|
||||
var/bite_mod = 1
|
||||
var/grab_resist_divisor_victims = 1
|
||||
var/grab_resist_divisor_self = 1
|
||||
var/grab_power_victims = 0
|
||||
var/grab_power_self = 0
|
||||
var/waking_speed = 1
|
||||
var/mudking = FALSE
|
||||
var/icodigi = 'icons/mob/human_races/r_digi_ch.dmi'
|
||||
var/digi_allowed = FALSE
|
||||
|
||||
/datum/species/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
for(var/datum/trait/env_trait in env_traits)
|
||||
env_trait.handle_environment_special(H)
|
||||
return
|
||||
@@ -1,72 +0,0 @@
|
||||
//Any species commented out here must be made restricted elsewhere. They are kept here for easy reference of what we disabled.
|
||||
//Note that at the time of this PR we are simply disabling everything new to discuss keeping versus scrapping later.
|
||||
|
||||
///datum/species/zaddat
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled elsewhere.
|
||||
|
||||
///datum/species/crew_shadekin
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/human/gravworlder
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/human/spacer
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
///datum/species/alraune
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled, keeping this here for reference.
|
||||
|
||||
///datum/species/werebeast
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/shadekin_yw
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/shadekin
|
||||
//spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
//datum/species/protean
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
//TFF 20/1/20 - More whitelisted species listed here. Unable to force overrides to be enabled here.
|
||||
/*
|
||||
/datum/species/xenochimera
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
|
||||
/datum/species/diona
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
|
||||
/datum/species/vox
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
*/
|
||||
|
||||
//Can use digitigrade flags
|
||||
/datum/species/custom
|
||||
digi_allowed = TRUE
|
||||
|
||||
/datum/species/unathi
|
||||
digi_allowed = TRUE
|
||||
|
||||
/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
|
||||
@@ -726,7 +726,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
|
||||
remove_layer(GLASSES_LAYER)
|
||||
|
||||
if(!glasses)
|
||||
if(!glasses || hide_glasses) // CHOMPEdit - Add "|| hide_glasses" for glasses hiding
|
||||
return //Not wearing glasses, no need to update anything.
|
||||
|
||||
overlays_standing[GLASSES_LAYER] = glasses.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_gloves_str, default_icon = INV_EYES_DEF_ICON, default_layer = GLASSES_LAYER)
|
||||
@@ -999,7 +999,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
apply_layer(L_HAND_LAYER)
|
||||
|
||||
/mob/living/carbon/human/proc/get_tail_layer()
|
||||
var/list/lower_layer_dirs = list(SOUTH)
|
||||
var/list/lower_layer_dirs = list(SOUTH, EAST, WEST) //ChompEDIT - Tail below clothing on side views too.
|
||||
if(tail_style)
|
||||
lower_layer_dirs = tail_style.lower_layer_dirs.Copy()
|
||||
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
// override the organ icon getting proc if digitigrade and not a synth
|
||||
|
||||
/obj/item/organ/external/get_icon(var/skeletal)
|
||||
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
|
||||
if(owner)
|
||||
digitigrade = owner.digitigrade
|
||||
else if(dna)
|
||||
digitigrade = dna.digitigrade
|
||||
|
||||
if( !model && ( istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) ) ) //All leg icons go through here now.
|
||||
|
||||
var/gender = "m"
|
||||
if(owner && owner.gender == FEMALE)
|
||||
gender = "f"
|
||||
|
||||
if(!force_icon_key)
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
else
|
||||
icon_cache_key = "[icon_name]_[force_icon_key]"
|
||||
|
||||
if(force_icon)
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
if(!dna)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
else
|
||||
|
||||
if(!gendered_icon)
|
||||
gender = null
|
||||
else
|
||||
if(dna.GetUIState(DNA_UI_GENDER))
|
||||
gender = "f"
|
||||
else
|
||||
gender = "m"
|
||||
|
||||
if(skeletal)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else if (robotic >= ORGAN_ROBOT)
|
||||
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
else
|
||||
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
|
||||
apply_colouration(mob_icon)
|
||||
|
||||
//Code here is copied from organ_icon.dm line 118 at time of writing (9/20/21), VOREStation edits are left in intentionally, because I think it's worth keeping track of the fact that the code is from Virgo's edits.
|
||||
//Body markings, actually does not include head this time. Done separately above.
|
||||
if(!istype(src,/obj/item/organ/external/head))
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
|
||||
var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi)
|
||||
if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false.
|
||||
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
|
||||
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
|
||||
add_overlay(mark_s) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
icon_cache_key += "[M][markings[M]["color"]]"
|
||||
if(body_hair && islist(h_col) && h_col.len >= 3)
|
||||
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
|
||||
if(!limb_icon_cache[cache_key])
|
||||
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
|
||||
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
|
||||
limb_icon_cache[cache_key] = I
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
|
||||
// VOREStation edit start
|
||||
if(nail_polish)
|
||||
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
|
||||
I.Blend(nail_polish.color, ICON_MULTIPLY)
|
||||
add_overlay(I)
|
||||
mob_icon.Blend(I, ICON_OVERLAY)
|
||||
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
|
||||
// VOREStation edit end
|
||||
dir = EAST
|
||||
icon = mob_icon
|
||||
return mob_icon
|
||||
|
||||
else
|
||||
. = ..()
|
||||
@@ -0,0 +1,62 @@
|
||||
//Chomp override, always allow unwrenching (at a cost)
|
||||
/obj/machinery/atmospherics/can_unwrench()
|
||||
return 1
|
||||
|
||||
//Chomp override, handle unwrenching with the yeet code
|
||||
/obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if (istype(src, /obj/machinery/atmospherics/pipe/tank))
|
||||
return ..()
|
||||
|
||||
if(istype(W,/obj/item/device/pipe_painter))
|
||||
return 0
|
||||
|
||||
if (!W.is_wrench())
|
||||
return ..()
|
||||
var/turf/T = src.loc
|
||||
if (level==1 && isturf(T) && !T.is_plating())
|
||||
to_chat(user, "<span class='warning'>You must remove the plating first.</span>")
|
||||
return 1
|
||||
if(!can_unwrench())
|
||||
to_chat(user, "<span class='warning'>You cannot unwrench \the [src], it is too exerted due to internal pressure.</span>")
|
||||
add_fingerprint(user)
|
||||
return 1
|
||||
|
||||
//potential yeet
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
var/datum/gas_mixture/env_air = loc.return_air()
|
||||
var/unsafe_wrenching = FALSE
|
||||
var/internal_pressure = int_air.return_pressure()-env_air.return_pressure()
|
||||
|
||||
if (internal_pressure > 2*ONE_ATMOSPHERE)
|
||||
to_chat(user, "<span class='warning'>As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?</span>")
|
||||
unsafe_wrenching = TRUE //here we go
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin to unfasten \the [src]...</span>")
|
||||
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
|
||||
if (do_after(user, 10 * W.toolspeed))
|
||||
user.visible_message( \
|
||||
"<b>\The [user]</b> unfastens \the [src].", \
|
||||
"<span class='notice'>You have unfastened \the [src].</span>", \
|
||||
"You hear a ratchet.")
|
||||
if(unsafe_wrenching)
|
||||
unsafe_pressure_release(user, internal_pressure)
|
||||
deconstruct()
|
||||
|
||||
// Throws the user when they unwrench a pipe with a major difference between the internal and environmental pressure.
|
||||
/obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null)
|
||||
if(!user)
|
||||
return
|
||||
if(!pressures)
|
||||
var/datum/gas_mixture/int_air = return_air()
|
||||
var/datum/gas_mixture/env_air = loc.return_air()
|
||||
pressures = int_air.return_pressure() - env_air.return_pressure()
|
||||
|
||||
user.visible_message("<span class='danger'>[user] is sent flying by pressure!</span>","<span class='userdanger'>The pressure sends you flying!</span>")
|
||||
|
||||
// if get_dir(src, user) is not 0, target is the edge_target_turf on that dir
|
||||
// otherwise, edge_target_turf uses a random cardinal direction
|
||||
// range is pressures / 250
|
||||
// speed is pressures / 1250
|
||||
user.throw_at(get_edge_target_turf(user, get_dir(src, user) || pick(GLOB.cardinal)), pressures / 250, pressures / 1250)
|
||||
@@ -1,13 +1,15 @@
|
||||
/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
|
||||
//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
|
||||
. = ..()
|
||||
@@ -1,37 +1,52 @@
|
||||
// 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.
|
||||
|
||||
|
||||
/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
|
||||
|
||||
/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
|
||||
/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)
|
||||
. = ..()
|
||||
// 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))
|
||||
@@ -1,3 +1,17 @@
|
||||
/obj/item/clothing
|
||||
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
|
||||
if(target != user) return ..() // If the user didn't drag themselves, exit
|
||||
@@ -17,3 +31,54 @@
|
||||
user.forceMove(src)
|
||||
|
||||
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)
|
||||
@@ -22,4 +22,11 @@
|
||||
set category = "IC"
|
||||
set desc = "Toggle headset worn icon visibility."
|
||||
hide_headset = !hide_headset
|
||||
update_inv_ears()
|
||||
update_inv_ears()
|
||||
|
||||
/mob/living/carbon/human/verb/hide_glasses()
|
||||
set name = "Show/Hide Glasses"
|
||||
set category = "IC"
|
||||
set desc = "Toggle glasses worn icon visibility."
|
||||
hide_glasses = !hide_glasses
|
||||
update_inv_glasses()
|
||||
@@ -10,5 +10,6 @@
|
||||
var/struggle_anim_stomach = FALSE
|
||||
var/struggle_anim_taur = FALSE
|
||||
var/hide_headset = FALSE
|
||||
var/hide_glasses = FALSE
|
||||
var/speech_sound_enabled = TRUE
|
||||
var/nutrition_hidden = FALSE
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
/datum/species
|
||||
var/crit_mod = 1
|
||||
var/vore_belly_default_variant = "H"
|
||||
var/list/env_traits = list()
|
||||
var/dirtslip = FALSE
|
||||
var/photosynthesizing = FALSE
|
||||
var/grows = FALSE
|
||||
var/shrinks = FALSE
|
||||
var/rad_levels = list("safe" = 2.5, "danger_1" = 50, "danger_2" = 75, "danger_3" = 150)
|
||||
var/rad_removal_mod = 1
|
||||
var/bite_mod = 1
|
||||
var/grab_resist_divisor_victims = 1
|
||||
var/grab_resist_divisor_self = 1
|
||||
var/grab_power_victims = 0
|
||||
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
|
||||
|
||||
// Handles non-standard eyes when using a species that utilizes a custom base icon set.
|
||||
// Eye data is stored in the head organ, and this needs to be handled specially.
|
||||
@@ -27,4 +43,9 @@
|
||||
|
||||
if(!QDELETED(baseHead) && baseHead)
|
||||
qdel(baseHead)
|
||||
return
|
||||
|
||||
/datum/species/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
for(var/datum/trait/env_trait in env_traits)
|
||||
env_trait.handle_environment_special(H)
|
||||
return
|
||||
@@ -1,2 +1,74 @@
|
||||
/datum/species/unathi
|
||||
vore_belly_default_variant = "L"
|
||||
//Any species commented out here must be made restricted elsewhere. They are kept here for easy reference of what we disabled.
|
||||
//Note that at the time of this PR we are simply disabling everything new to discuss keeping versus scrapping later.
|
||||
|
||||
///datum/species/zaddat
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled elsewhere.
|
||||
|
||||
///datum/species/crew_shadekin
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/human/gravworlder
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/human/spacer
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
///datum/species/alraune
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED //Species has been enabled, keeping this here for reference.
|
||||
|
||||
///datum/species/werebeast
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/shadekin_yw
|
||||
spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
/datum/species/shadekin
|
||||
//spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
//datum/species/protean
|
||||
// spawn_flags = SPECIES_IS_RESTRICTED
|
||||
|
||||
//TFF 20/1/20 - More whitelisted species listed here. Unable to force overrides to be enabled here.
|
||||
/*
|
||||
/datum/species/xenochimera
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
|
||||
/datum/species/diona
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
|
||||
/datum/species/vox
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
|
||||
*/
|
||||
|
||||
//Can use digitigrade flags
|
||||
/datum/species/custom
|
||||
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
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/datum/sprite_accessory/tail
|
||||
lower_layer_dirs = list(SOUTH, WEST, EAST)
|
||||
|
||||
|
||||
/datum/sprite_accessory/tail/anthrovirus_tail
|
||||
name = "Anthro Virus Tail"
|
||||
icon = 'icons/mob/vore/tails_ch.dmi'
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/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()
|
||||
|
||||
/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()
|
||||
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 335 KiB After Width: | Height: | Size: 335 KiB |
|
Before Width: | Height: | Size: 294 KiB After Width: | Height: | Size: 294 KiB |
|
Before Width: | Height: | Size: 702 B After Width: | Height: | Size: 702 B |
@@ -621,7 +621,6 @@
|
||||
#include "code\game\area\Space Station 13 areas_vr.dm"
|
||||
#include "code\game\area\ss13_deprecated_areas.dm"
|
||||
#include "code\game\dna\dna2.dm"
|
||||
#include "code\game\dna\dna2_ch.dm"
|
||||
#include "code\game\dna\dna2_domutcheck.dm"
|
||||
#include "code\game\dna\dna2_helpers.dm"
|
||||
#include "code\game\dna\dna_modifier.dm"
|
||||
@@ -2003,7 +2002,6 @@
|
||||
#include "code\modules\client\preference_setup\general\01_basic.dm"
|
||||
#include "code\modules\client\preference_setup\general\02_language.dm"
|
||||
#include "code\modules\client\preference_setup\general\03_body.dm"
|
||||
#include "code\modules\client\preference_setup\general\03_body_ch.dm"
|
||||
#include "code\modules\client\preference_setup\general\04_equipment.dm"
|
||||
#include "code\modules\client\preference_setup\general\05_background.dm"
|
||||
#include "code\modules\client\preference_setup\general\06_flavor.dm"
|
||||
@@ -2076,7 +2074,6 @@
|
||||
#include "code\modules\clothing\chameleon.dm"
|
||||
#include "code\modules\clothing\clothing.dm"
|
||||
#include "code\modules\clothing\clothing_accessories.dm"
|
||||
#include "code\modules\clothing\clothing_ch.dm"
|
||||
#include "code\modules\clothing\clothing_icons.dm"
|
||||
#include "code\modules\clothing\clothing_vr.dm"
|
||||
#include "code\modules\clothing\ears\earrings.dm"
|
||||
@@ -3020,7 +3017,6 @@
|
||||
#include "code\modules\mob\living\carbon\human\species\species.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_attack.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_attack_vr.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_ch.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_getters.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_getters_vr.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\species_helpers.dm"
|
||||
@@ -3048,7 +3044,6 @@
|
||||
#include "code\modules\mob\living\carbon\human\species\station\prometheans_vr.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\prommie_blob.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\station.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\station_ch.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\station_special_abilities_ch.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\station_special_abilities_vr.dm"
|
||||
#include "code\modules\mob\living\carbon\human\species\station\station_special_vr.dm"
|
||||
@@ -3578,7 +3573,6 @@
|
||||
#include "code\modules\organs\organ_external.dm"
|
||||
#include "code\modules\organs\organ_external_vr.dm"
|
||||
#include "code\modules\organs\organ_icon.dm"
|
||||
#include "code\modules\organs\organ_icon_ch.dm"
|
||||
#include "code\modules\organs\organ_stump.dm"
|
||||
#include "code\modules\organs\pain.dm"
|
||||
#include "code\modules\organs\robolimbs.dm"
|
||||
@@ -4072,7 +4066,6 @@
|
||||
#include "code\modules\resleeving\infocore_records.dm"
|
||||
#include "code\modules\resleeving\machine_subtypes.dm"
|
||||
#include "code\modules\resleeving\machines.dm"
|
||||
#include "code\modules\resleeving\machines_ch.dm"
|
||||
#include "code\modules\resleeving\sleevecard.dm"
|
||||
#include "code\modules\rogueminer_vr\asteroid.dm"
|
||||
#include "code\modules\rogueminer_vr\controller.dm"
|
||||
@@ -4505,10 +4498,12 @@
|
||||
#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm"
|
||||
#include "maps\~map_system\maps.dm"
|
||||
#include "modular_chomp\code\global.dm"
|
||||
#include "modular_chomp\code\ATMOSPHERICS\atmospherics.dm"
|
||||
#include "modular_chomp\code\datums\autolathe\arms.dm"
|
||||
#include "modular_chomp\code\datums\autolathe\engineering_ch.dm"
|
||||
#include "modular_chomp\code\datums\autolathe\general_ch.dm"
|
||||
#include "modular_chomp\code\datums\outfits\jobs\noncrew.dm"
|
||||
#include "modular_chomp\code\game\dna\dna2.dm"
|
||||
#include "modular_chomp\code\game\jobs\job\department.dm"
|
||||
#include "modular_chomp\code\game\jobs\job\noncrew.dm"
|
||||
#include "modular_chomp\code\game\jobs\job\silicon.dm"
|
||||
@@ -4519,6 +4514,7 @@
|
||||
#include "modular_chomp\code\modules\admin\functions\modify_traits.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\loadout_general.dm"
|
||||
#include "modular_chomp\code\modules\clothing\clothing.dm"
|
||||
@@ -4590,6 +4586,7 @@
|
||||
#include "modular_chomp\code\modules\reagents\reagents\medicine.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\vore\eating\exportpanel_ch.dm"
|
||||
|
||||