This commit is contained in:
tigercat2000
2018-10-25 19:59:30 -07:00
parent b0c1033d51
commit 1aa33c97ea
43 changed files with 241 additions and 218 deletions
@@ -1195,18 +1195,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("age")
age = rand(AGE_MIN, AGE_MAX)
if("hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
h_colour = rand_hex_color()
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
h_sec_colour = rand_hex_color()
if("h_style")
h_style = random_hair_style(gender, species, robohead)
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
f_colour = rand_hex_color()
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
f_sec_colour = rand_hex_color()
if("f_style")
f_style = random_facial_hair_style(gender, species, robohead)
@@ -1276,7 +1276,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(new_age)
age = max(min(round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("species")
var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/list/new_species = list("Human", "Felinid", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/prev_species = species
// var/whitelisted = 0
@@ -1407,14 +1407,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_type = new_b_type
if("hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have hair. (No HAS_HAIR flag)
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have hair. (No HAS_HAIR flag)
var/input = "Choose your character's hair colour:"
var/new_hair = input(user, input, "Character Preference", h_colour) as color|null
if(new_hair)
h_colour = new_hair
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/hair_style = GLOB.hair_styles_public_list[h_style]
if(hair_style.secondary_theme && !hair_style.no_sec_colour)
var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", h_sec_colour) as color|null
@@ -1609,13 +1609,13 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
body_accessory = (new_body_accessory == "None") ? null : new_body_accessory
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have facial hair. (No HAS_HAIR_FACIAL flag)
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have facial hair. (No HAS_HAIR_FACIAL flag)
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", f_colour) as color|null
if(new_facial)
f_colour = new_facial
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
if(species in list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style]
if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour)
var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", f_sec_colour) as color|null
+1
View File
@@ -4,6 +4,7 @@
icon_state = "earmuffs"
item_state = "earmuffs"
flags = EARBANGPROTECT
flags_2 = HEALS_EARS_2
strip_delay = 15
put_on_delay = 25
burn_state = FLAMMABLE
@@ -27,6 +27,7 @@
verbs += /mob/living/verb/lay_down
alien_organs += new /obj/item/organ/internal/brain/xeno
alien_organs += new /obj/item/organ/internal/xenos/hivenode
alien_organs += new /obj/item/organ/internal/ears
for(var/obj/item/organ/internal/I in alien_organs)
I.insert(src)
..()
@@ -63,15 +63,12 @@
f_loss += 60
AdjustEarDamage(30)
AdjustEarDeaf(120)
AdjustEarDamage(30, 120)
if(3.0)
b_loss += 30
if(prob(50) && !shielded)
Paralyse(1)
AdjustEarDamage(15)
AdjustEarDeaf(60)
AdjustEarDamage(15, 60)
take_overall_damage(b_loss, f_loss)
@@ -78,14 +78,6 @@
else if(eye_blurry) //blurry eyes heal slowly
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
AdjustEarDeaf(-1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
AdjustEarDamage(-0.05)
if(stuttering)
AdjustStuttering(-1)
@@ -56,15 +56,13 @@
f_loss += 60
AdjustEarDamage(30)
AdjustEarDeaf(120)
AdjustEarDamage(30, 120)
if(3.0)
b_loss += 30
if(prob(50))
Paralyse(1)
AdjustEarDamage(15)
AdjustEarDeaf(60)
AdjustEarDamage(15, 60)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
@@ -46,14 +46,6 @@
else if(eye_blurry) //blurry eyes heal slowly
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
AdjustEarDeaf(-1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold.
AdjustEarDamage(-0.05)
if(stuttering)
AdjustStuttering(-1)
@@ -108,8 +108,5 @@ I'm using this for Stat to give it a more nifty interface to work with
/mob/living/carbon/brain/can_safely_leave_loc()
return 0 //You're not supposed to be ethereal jaunting, brains
/mob/living/carbon/brain/SetEarDamage() // no ears to damage or heal
return
/mob/living/carbon/brain/SetEarDeaf()
return
/mob/living/carbon/brain/can_hear()
. = TRUE
@@ -19,12 +19,6 @@
var/mmi_icon = 'icons/obj/assemblies.dmi'
var/mmi_icon_state = "mmi_full"
/obj/item/organ/internal/brain/surgeryize()
if(!owner)
return
owner.SetEarDeaf(0)
owner.SetEarDamage(0) //Yeah, didn't you...hear? The ears are totally inside the brain.
/obj/item/organ/internal/brain/xeno
name = "xenomorph brain"
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
@@ -265,8 +265,7 @@
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
AdjustEarDamage(30)
AdjustEarDeaf(120)
AdjustEarDamage(30, 120)
if(prob(70) && !shielded)
Paralyse(10)
@@ -290,8 +289,7 @@
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
AdjustEarDamage(15)
AdjustEarDeaf(60)
AdjustEarDamage(15, 60)
if(prob(50) && !shielded)
Paralyse(10)
@@ -786,20 +786,6 @@
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
AdjustEarDeaf(-1)
else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster
AdjustEarDamage(-0.15)
EarDeaf(1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
AdjustEarDamage(-0.05)
if(flying)
animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING)
animate(pixel_y = pixel_y - 5, time = 10, loop = 1, easing = SINE_EASING)
@@ -153,6 +153,9 @@
"l_foot" = list("path" = /obj/item/organ/external/foot),
"r_foot" = list("path" = /obj/item/organ/external/foot/right))
// Mutant pieces
var/obj/item/organ/internal/ears/mutantears = /obj/item/organ/internal/ears
/datum/species/New()
//If the species has eyes, they are the default vision organ
if(!vision_organ && has_organ["eyes"])
@@ -165,7 +168,6 @@
return species_language.get_random_name(gender)
/datum/species/proc/create_organs(mob/living/carbon/human/H) //Handles creation of mob organs.
QDEL_LIST(H.internal_organs)
QDEL_LIST(H.bodyparts)
@@ -184,12 +186,21 @@
// organ new code calls `insert` on its own
new organ(H)
create_mutant_organs(H)
for(var/name in H.bodyparts_by_name)
H.bodyparts |= H.bodyparts_by_name[name]
for(var/obj/item/organ/external/O in H.bodyparts)
O.owner = H
/datum/species/proc/create_mutant_organs(mob/living/carbon/human/H)
var/obj/item/organ/internal/ears/ears = H.get_int_organ(/obj/item/organ/internal/ears)
if(ears)
qdel(ears)
ears = new mutantears(H)
/datum/species/proc/breathe(mob/living/carbon/human/H)
if((NO_BREATHE in species_traits) || (BREATHLESS in H.mutations))
return TRUE
@@ -17,4 +17,11 @@
worlds tumultous at best."
reagent_tag = PROCESS_ORG
//Has standard darksight of 2.
//Has standard darksight of 2.
/datum/species/human/cat
name = "Felinid"
name_plural = "Felinids"
blurb = "CATGIRLS OMG"
mutantears = /obj/item/organ/internal/ears/cat
@@ -274,6 +274,7 @@ var/global/list/damage_icon_parts = list()
apply_overlay(BODY_LAYER)
//tail
update_tail_layer(0)
update_int_organs()
//head accessory
update_head_accessory(0)
//markings
@@ -1187,6 +1188,19 @@ var/global/list/damage_icon_parts = list()
remove_overlay(TAIL_LAYER)
update_tail_layer(update_icons) //just trigger a full update for normal stationary sprites
/mob/living/carbon/human/proc/update_int_organs()
remove_overlay(INTORGAN_LAYER)
var/list/standing = list()
for(var/organ in internal_organs)
var/obj/item/organ/internal/I = organ
var/render = I.render()
if(render)
standing += render
overlays_standing[INTORGAN_LAYER] = standing
apply_overlay(INTORGAN_LAYER)
/mob/living/carbon/human/handle_transform_change()
..()
update_tail_layer()
@@ -218,15 +218,8 @@
if(src.eye_blind)
src.SetEyeBlind(0)
if(src.ear_deaf > 0) SetEarDeaf(0)
if(src.ear_damage < 25)
SetEarDamage(0)
src.density = !( src.lying )
if(src.disabilities & DEAF)
EarDeaf(1)
if(src.eye_blurry > 0)
SetEyeBlurry(0)
@@ -489,4 +489,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
if(istype(toEat, /obj/item/reagent_containers/food/drinks))
return 1
to_chat(user, "This creature does not seem to have a mouth!")
return 0
return 0
/mob/living/carbon/slime/can_hear()
. = TRUE //honestly fuck slimes and organ bullshit
@@ -27,3 +27,9 @@
setStaminaLoss(health - 2)
handle_hud_icons_health()
return
/mob/living/carbon/can_hear()
. = FALSE
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears) && !ears.deaf)
. = TRUE
-9
View File
@@ -170,15 +170,6 @@
else if(eye_blurry) //blurry eyes heal slowly
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
EarDeaf(1)
else
// deafness heals slowly over time, unless ear_damage is over 100
if(ear_damage < 100)
AdjustEarDamage(-0.05)
AdjustEarDeaf(-1)
//this handles hud updates. Calls update_vision() and handle_hud_icons()
/mob/living/proc/handle_regular_hud_updates()
if(!client) return 0
+1 -2
View File
@@ -404,8 +404,7 @@
CureNervous()
SetEyeBlind(0)
SetEyeBlurry(0)
SetEarDamage(0)
SetEarDeaf(0)
RestoreEars()
heal_overall_damage(1000, 1000)
ExtinguishMob()
fire_stacks = 0
+2 -6
View File
@@ -330,9 +330,5 @@
return 1
/////////////////////////////////// EAR DAMAGE ////////////////////////////////////
/mob/living/silicon/SetEarDamage()
return
/mob/living/silicon/SetEarDeaf()
return
/mob/living/silicon/can_hear()
. = TRUE
@@ -578,9 +578,5 @@
if(A.update_remote_sight(src)) //returns 1 if we override all other sight updates.
return
/mob/living/simple_animal/SetEarDamage()
return
/mob/living/simple_animal/SetEarDeaf()
return
/mob/living/simple_animal/can_hear()
. = TRUE
-30
View File
@@ -43,10 +43,6 @@
A trippy overlay appears.
* Drunk *
Essentially what your "BAC" is - the higher it is, the more alcohol you have in you
* EarDamage *
Doesn't do much, but if it's 25+, you go deaf. Heals much slower than other statuses - 0.05 normally
* EarDeaf *
You cannot hear. Prevents EarDamage from healing naturally.
* EyeBlind *
You cannot see. Prevents EyeBlurry from healing naturally.
* EyeBlurry *
@@ -115,8 +111,6 @@
var/drowsyness = 0
var/druggy = 0
var/drunk = 0
var/ear_damage = 0
var/ear_deaf = 0
var/eye_blind = 0
var/eye_blurry = 0
var/hallucination = 0
@@ -233,30 +227,6 @@
var/new_value = directional_bounded_sum(druggy, amount, bound_lower, bound_upper)
return SetDruggy(new_value, updating)
// EAR_DAMAGE
/mob/living/EarDamage(amount)
SetEarDamage(max(ear_damage, amount))
/mob/living/SetEarDamage(amount)
ear_damage = max(amount, 0)
/mob/living/AdjustEarDamage(amount, bound_lower = 0, bound_upper = INFINITY)
var/new_value = directional_bounded_sum(ear_damage, amount, bound_lower, bound_upper)
SetEarDamage(new_value)
// EAR_DEAF
/mob/living/EarDeaf(amount)
SetEarDeaf(max(ear_deaf, amount))
/mob/living/SetEarDeaf(amount)
ear_deaf = max(amount, 0)
/mob/living/AdjustEarDeaf(amount, bound_lower = 0, bound_upper = INFINITY)
var/new_value = directional_bounded_sum(ear_deaf, amount, bound_lower, bound_upper)
SetEarDeaf(new_value)
// EYE_BLIND
/mob/living/EyeBlind(amount, updating = TRUE)
+1 -5
View File
@@ -41,7 +41,7 @@
// Whether the mob can hear things
/mob/living/can_hear()
return !(ear_deaf || (disabilities & DEAF))
. = !(disabilities & DEAF)
// Whether the mob is able to see
// `information_only` is for stuff that's purely informational - like understanding nonverbal languages, or blindness overlays
@@ -137,10 +137,6 @@
SetEyeBlind(eye_blind)
if("eye_blurry")
SetEyeBlurry(eye_blurry)
if("ear_deaf")
SetEarDeaf(ear_deaf)
if("ear_damage")
SetEarDamage(ear_damage)
if("druggy")
SetDruggy(druggy)
if("maxHealth")
@@ -48,7 +48,7 @@
var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
// Restrict some styles to specific species
var/list/species_allowed = list("Human", "Slime People")
var/list/species_allowed = list("Human", "Felinid", "Slime People")
var/list/models_allowed = list() //Specifies which, if any, hairstyles or markings can be accessed by which prosthetics. Should equal the manufacturing company name in robolimbs.dm.
var/list/heads_allowed = null //Specifies which, if any, alt heads a head marking, hairstyle or facial hair style is compatible with.
var/list/tails_allowed = null //Specifies which, if any, tails a tail marking is compatible with.
@@ -75,7 +75,7 @@
/datum/sprite_accessory/hair/bald
name = "Bald"
icon_state = "bald"
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran")
species_allowed = list("Human", "Felinid", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran")
glasses_over = 1
/datum/sprite_accessory/hair/short
@@ -169,7 +169,7 @@
name = "Pompadour"
icon_state = "hair_pompadour"
gender = MALE
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
glasses_over = 1
/datum/sprite_accessory/hair/quiff
@@ -194,19 +194,19 @@
name = "Beehive"
icon_state = "hair_beehive"
gender = FEMALE
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
/datum/sprite_accessory/hair/bobcurl
name = "Bobcurl"
icon_state = "hair_bobcurl"
gender = FEMALE
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
/datum/sprite_accessory/hair/bob
name = "Bob"
icon_state = "hair_bobcut"
gender = FEMALE
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
/datum/sprite_accessory/hair/bowl
name = "Bowl"
@@ -234,7 +234,7 @@
name = "Buzzcut"
icon_state = "hair_buzzcut"
gender = MALE
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
glasses_over = 1
/datum/sprite_accessory/hair/crew
@@ -303,7 +303,7 @@
/datum/sprite_accessory/hair/mohawk
name = "Mohawk"
icon_state = "hair_d"
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
glasses_over = 1
/datum/sprite_accessory/hair/jensen
@@ -338,7 +338,7 @@
/datum/sprite_accessory/hair/spiky
name = "Spiky"
icon_state = "hair_spikey"
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
glasses_over = 1
/datum/sprite_accessory/hair/kusanagi
@@ -1535,7 +1535,7 @@
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People")
species_allowed = list("Human", "Felinid", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People")
/datum/sprite_accessory/facial_hair/watson
name = "Watson Mustache"
@@ -1576,7 +1576,7 @@
/datum/sprite_accessory/facial_hair/elvis
name = "Elvis Sideburns"
icon_state = "facial_elvis"
species_allowed = list("Human", "Slime People", "Unathi")
species_allowed = list("Human", "Felinid", "Slime People", "Unathi")
/datum/sprite_accessory/facial_hair/abe
name = "Abraham Lincoln Beard"
@@ -1813,7 +1813,7 @@
/datum/sprite_accessory/skin/human
name = "Default human skin"
icon_state = "default"
species_allowed = list("Human")
species_allowed = list("Human", "Felinid")
/datum/sprite_accessory/skin/human/human_tatt01
name = "Tatt01 human skin"
@@ -1848,13 +1848,13 @@
///////////////////////////
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/underwear/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
/datum/sprite_accessory/underwear/male
gender = MALE
@@ -1974,13 +1974,13 @@
////////////////////////////
/datum/sprite_accessory/undershirt
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/undershirt/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
//plain color shirts
/datum/sprite_accessory/undershirt/shirt_white
@@ -2210,13 +2210,13 @@
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
/datum/sprite_accessory/socks/white_norm
name = "Normal White"
@@ -2342,7 +2342,7 @@
/datum/sprite_accessory/head_accessory/none
name = "None"
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Kidan", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Grey", "Kidan", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/head_accessory/unathi
@@ -2595,7 +2595,7 @@
/datum/sprite_accessory/body_markings/none
name = "None"
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox", "Kidan")
species_allowed = list("Human", "Felinid", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox", "Kidan")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/tiger
@@ -2863,7 +2863,7 @@
models_allowed = list("Xion Manufacturing Group alt.")
/datum/sprite_accessory/body_markings/tattoo // Tattoos applied post-round startup with tattoo guns in item_defines.dm
species_allowed = list("Human", "Unathi", "Vulpkanin", "Tajaran", "Skrell")
species_allowed = list("Human", "Felinid", "Unathi", "Vulpkanin", "Tajaran", "Skrell")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/tattoo/elliot
@@ -2873,7 +2873,7 @@
/datum/sprite_accessory/body_markings/tattoo/tiger_body
name = "Tiger-stripe Tattoo"
species_allowed = list("Human", "Unathi", "Vulpkanin", "Tajaran", "Skrell")
species_allowed = list("Human", "Felinid", "Unathi", "Vulpkanin", "Tajaran", "Skrell")
icon_state = "markings_tiger"
/datum/sprite_accessory/body_markings/tattoo/heart
+2 -12
View File
@@ -52,23 +52,13 @@
return
/mob/proc/EarDamage()
return
/mob/proc/SetEarDamage()
/mob/proc/RestoreEars()
return
/mob/proc/AdjustEarDamage()
return
/mob/proc/EarDeaf()
return
/mob/proc/SetEarDeaf()
return
/mob/proc/AdjustEarDeaf()
/mob/proc/MinimumDeafTicks()
return
+1 -1
View File
@@ -35,7 +35,7 @@
// Procs that give information about the status of the mob
/mob/proc/can_hear()
return 1
. = 1
/mob/proc/has_vision(information_only = FALSE)
return 1
@@ -543,21 +543,23 @@
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
if(prob(80))
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes)
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/internal/eyes/E = C.get_int_organ(/obj/item/organ/internal/eyes)
if(istype(E))
E.heal_internal_damage(1)
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears))
ears.AdjustEarDamage(-1)
if(ears.ear_damage < 25 && prob(30))
ears.deaf = 0
update_flags |= M.AdjustEyeBlurry(-1, FALSE)
update_flags |= M.AdjustEarDamage(-1, FALSE)
update_flags |= M.AdjustEarDamage(-1)
if(prob(50))
update_flags |= M.CureNearsighted(FALSE)
if(prob(30))
update_flags |= M.CureBlind(FALSE)
update_flags |= M.SetEyeBlind(0, FALSE)
if(M.ear_damage <= 25)
if(prob(30))
M.SetEarDeaf(0)
return ..() | update_flags
/datum/reagent/medicine/atropine
@@ -283,16 +283,19 @@ datum/chemical_reaction/flash_powder
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.AdjustEarDamage(rand(0, 5))
M.EarDeaf(15)
if(M.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(M.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.disabilities |= DEAF
else
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
M.AdjustEarDamage(rand(0, 5), 15)
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears))
if(ears.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(ears.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.BecomeDeaf()
else
if(ears.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
holder.remove_reagent("sonic_powder", created_volume)
/datum/chemical_reaction/sonic_powder_deafen
@@ -318,16 +321,20 @@ datum/chemical_reaction/flash_powder
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.AdjustEarDamage(rand(0, 5))
M.EarDeaf(15)
if(M.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(M.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.BecomeDeaf()
else
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
M.AdjustEarDamage(rand(0, 5), 15)
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears))
if(ears.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(ears.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.BecomeDeaf()
else
if(ears.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
/datum/chemical_reaction/phlogiston
name = "phlogiston"
+76
View File
@@ -0,0 +1,76 @@
/obj/item/organ/internal/ears
name = "ears"
icon_state = "ears"
gender = PLURAL
organ_tag = "ears"
parent_organ = "head"
slot = "ears"
// `deaf` measures "ticks" of deafness. While > 0, the person is deaf.
var/deaf = 0
// `ear_damage` measures long term damage to the ears, if too high,
// the person will not have either `deaf` or `ear_damage` decrease
// without external aid (earmuffs, drugs)
var/ear_damage = 0
/obj/item/organ/internal/ears/on_life()
if(!iscarbon(owner))
return
var/mob/living/carbon/C = owner
// genetic deafness prevents the body from using the ears, even if healthy
if(C.disabilities & DEAF)
deaf = max(deaf, 1)
else
if(ishuman(C))
var/mob/living/carbon/human/H = C
if((H.l_ear && H.l_ear.flags_2 & HEALS_EARS_2) || (H.r_ear && H.r_ear.flags_2 & HEALS_EARS_2))
deaf = max(deaf - 1, 1)
ear_damage = max(ear_damage - 0.10, 0)
// if higher than UNHEALING_EAR_DAMAGE, no natural healing occurs.
if(ear_damage < UNHEALING_EAR_DAMAGE)
ear_damage = max(ear_damage - 0.05, 0)
deaf = max(deaf - 1, 0)
/obj/item/organ/internal/ears/proc/RestoreEars()
deaf = 0
ear_damage = 0
var/mob/living/carbon/C = owner
if(istype(C) && C.disabilities & DEAF)
deaf = 1
/obj/item/organ/internal/ears/proc/AdjustEarDamage(ddmg, ddeaf)
ear_damage = max(ear_damage + ddmg, 0)
deaf = max(deaf + ddeaf, 0)
/obj/item/organ/internal/ears/proc/MinimumDeafTicks(value)
deaf = max(deaf, value)
// Mob procs
/mob/living/carbon/RestoreEars()
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(ears)
ears.RestoreEars()
/mob/living/carbon/AdjustEarDamage(ddmg, ddeaf)
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(ears)
ears.AdjustEarDamage(ddmg, ddeaf)
/mob/living/carbon/MinimumDeafTicks(value)
var/obj/item/organ/internal/ears/ears = get_int_organ(/obj/item/organ/internal/ears)
if(ears)
ears.MinimumDeafTicks(value)
// Kitty ears!!
/obj/item/organ/internal/ears/cat
name = "cat ears"
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "kitty"
color = "#aa4444"
transform = matrix(0.7, 0, 0, 0, 0.7, 0)
/obj/item/organ/internal/ears/cat/render()
. = mutable_appearance('icons/mob/head.dmi', "kitty", layer = -HEAD_ACC_OVER_LAYER)
@@ -64,6 +64,7 @@
log_runtime(EXCEPTION("[src] attempted to remove from a [parent_organ], but [parent_organ] didn't exist! [atom_loc_line(M)]"), src)
else
parent.internal_organs -= src
H.update_int_organs()
for(var/X in actions)
var/datum/action/A = X
@@ -105,6 +106,10 @@
insert(H)
return 1
// Rendering!
/obj/item/organ/internal/proc/render()
return
/obj/item/reagent_containers/food/snacks/organ
name = "appendix"
icon_state = "appendix"
@@ -247,7 +252,7 @@
to_chat(owner, "<font color='red' size='7'>HONK</font>")
owner.SetSleeping(0)
owner.Stuttering(20)
owner.AdjustEarDeaf(30)
owner.MinimumDeafTicks(30)
owner.Weaken(3)
owner << 'sound/items/AirHorn.ogg'
if(prob(30))
+1 -1
View File
@@ -122,7 +122,7 @@ var/static/regex/multispin_words = regex("like a record baby")
var/mob/living/list/listeners = list()
for(var/mob/living/L in get_mobs_in_view(8, owner, TRUE))
if(!L.ear_deaf && !L.null_rod_check() && L != owner && L.stat != DEAD)
if(L.can_hear() && !L.null_rod_check() && L != owner && L.stat != DEAD)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))