SSoverlays for human icons, mostly works

Closer to working 100%

But legitimately /tg/ icons

Move lighting to it's own plane, fix observers

Fix humans layering over other objects incorrectly

Nyaaaaa~
This commit is contained in:
tigercat2000
2018-10-25 01:07:27 -07:00
parent 6fe492331b
commit ab032b6737
46 changed files with 581 additions and 611 deletions
+37 -33
View File
@@ -204,40 +204,44 @@
#define MFOAM_IRON 2
//Human Overlays Indexes/////////
#define MUTANTRACE_LAYER 1
#define TAIL_UNDERLIMBS_LAYER 2 //Tail split-rendering.
#define LIMBS_LAYER 3
#define MARKINGS_LAYER 4
#define UNDERWEAR_LAYER 5
#define MUTATIONS_LAYER 6
#define H_DAMAGE_LAYER 7
#define UNIFORM_LAYER 8
#define ID_LAYER 9
#define SHOES_LAYER 10
#define GLOVES_LAYER 11
#define EARS_LAYER 12
#define SUIT_LAYER 13
#define BELT_LAYER 14 //Possible make this an overlay of somethign required to wear a belt?
#define SUIT_STORE_LAYER 15
#define BACK_LAYER 16
#define HEAD_ACCESSORY_LAYER 17
#define BODY_LAYER 37
#define MUTANTRACE_LAYER 36
#define TAIL_UNDERLIMBS_LAYER 35 //Tail split-rendering.
#define LIMBS_LAYER 34
#define INTORGAN_LAYER 33
#define MARKINGS_LAYER 32
#define UNDERWEAR_LAYER 31
#define MUTATIONS_LAYER 30
#define H_DAMAGE_LAYER 29
#define UNIFORM_LAYER 28
#define ID_LAYER 27
#define SHOES_LAYER 26
#define GLOVES_LAYER 25
#define EARS_LAYER 24
#define SUIT_LAYER 23
#define BELT_LAYER 22 //Possible make this an overlay of somethign required to wear a belt?
#define SUIT_STORE_LAYER 21
#define BACK_LAYER 20
#define HEAD_ACCESSORY_LAYER 19
#define FHAIR_LAYER 18
#define GLASSES_LAYER 19
#define HAIR_LAYER 20 //TODO: make part of head layer?
#define HEAD_ACC_OVER_LAYER 21 //Select-layer rendering.
#define FHAIR_OVER_LAYER 22 //Select-layer rendering.
#define GLASSES_OVER_LAYER 23 //Select-layer rendering.
#define TAIL_LAYER 24 //bs12 specific. this hack is probably gonna come back to haunt me
#define FACEMASK_LAYER 25
#define HEAD_LAYER 26
#define COLLAR_LAYER 27
#define HANDCUFF_LAYER 28
#define LEGCUFF_LAYER 29
#define L_HAND_LAYER 30
#define R_HAND_LAYER 31
#define TARGETED_LAYER 32 //BS12: Layer for the target overlay from weapon targeting system
#define FIRE_LAYER 33 //If you're on fire
#define TOTAL_LAYERS 33
#define GLASSES_LAYER 17
#define HAIR_LAYER 16 //TODO: make part of head layer?
#define HEAD_ACC_OVER_LAYER 15 //Select-layer rendering.
#define FHAIR_OVER_LAYER 14 //Select-layer rendering.
#define GLASSES_OVER_LAYER 13 //Select-layer rendering.
#define TAIL_LAYER 12 //bs12 specific. this hack is probably gonna come back to haunt me
#define FACEMASK_LAYER 11
#define HEAD_LAYER 10
#define COLLAR_LAYER 9
#define HANDCUFF_LAYER 8
#define LEGCUFF_LAYER 7
#define L_HAND_LAYER 6
#define R_HAND_LAYER 5
#define TARGETED_LAYER 4 //BS12: Layer for the target overlay from weapon targeting system
#define FIRE_LAYER 3 //If you're on fire
#define MISC_LAYER 2
#define FROZEN_LAYER 1
#define TOTAL_LAYERS 37
///Access Region Codes///
#define REGION_ALL 0
+1
View File
@@ -143,6 +143,7 @@
#define STATUS_UPDATE_NONE 0
#define STATUS_UPDATE_ALL (~0)
#define UNHEALING_EAR_DAMAGE 100
//Human sub-species
#define isshadowling(A) (is_species(A, /datum/species/shadow/ling))
+1 -1
View File
@@ -147,7 +147,7 @@
/datum/dna/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags)
..()
M.EarDeaf(1)
M.MinimumDeafTicks(1)
/datum/dna/gene/disability/nearsighted
name="Nearsightedness"
@@ -16,8 +16,7 @@
user.radiation = 0
user.SetEyeBlind(0, FALSE)
user.SetEyeBlurry(0, FALSE)
user.SetEarDamage(0)
user.SetEarDeaf(0)
user.RestoreEars()
user.heal_overall_damage(user.getBruteLoss(), user.getFireLoss(), updating_health = FALSE)
user.CureBlind(FALSE)
user.CureDeaf()
@@ -11,7 +11,7 @@
for(var/mob/living/M in get_mobs_in_view(4, user))
if(iscarbon(M))
if(!M.mind || !M.mind.changeling)
M.AdjustEarDeaf(30)
M.MinimumDeafTicks(30)
M.AdjustConfused(20)
M.Jitter(50)
else
@@ -265,7 +265,7 @@
continue
to_chat(C, "<span class='warning'><font size='3'><b>You hear a ear piercing shriek and your senses dull!</font></b></span>")
C.Weaken(4)
C.AdjustEarDeaf(20)
C.MinimumDeafTicks(20)
C.Stuttering(20)
C.Stun(4)
C.Jitter(150)
+1 -1
View File
@@ -785,7 +785,7 @@ var/global/list/multiverse = list()
else if(istype(I,/obj/item/bikehorn))
to_chat(target, "<span class='userdanger'>HONK</span>")
target << 'sound/items/AirHorn.ogg'
target.AdjustEarDeaf(3)
target.MinimumDeafTicks(3)
GiveHint(target)
cooldown = world.time +cooldown_time
return
+1 -1
View File
@@ -212,7 +212,7 @@
to_chat(M, "<font color='red' size='7'>HONK</font>")
M.SetSleeping(0)
M.Stuttering(20)
M.AdjustEarDeaf(30)
M.MinimumDeafTicks(30)
M.Weaken(3)
if(prob(30))
M.Stun(10)
@@ -68,6 +68,6 @@
for(M in ohearers(7, T))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs) || H.ear_deaf)
if(!H.can_hear())
continue
M.emote("flip")
@@ -59,13 +59,16 @@
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.EarDeaf(15)
M.AdjustEarDamage(rand(0, 5))
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>")
+6 -4
View File
@@ -26,14 +26,15 @@ var/global/list/frozen_mob_list = list()
/mob/living/var/frozen = null //used for preventing attacks on admin-frozen mobs
/mob/living/var/admin_prev_sleeping = 0 //used for keeping track of previous sleeping value with admin freeze
/mob/living/proc/admin_Freeze(var/client/admin)
/mob/living/proc/admin_Freeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "<b><font color= red>You have been frozen by [key_name(admin)]</b></font>")
message_admins("<span class='notice'>[key_name_admin(admin)]</span> froze [key_name_admin(src)]")
log_admin("[key_name(admin)] froze [key_name(src)]")
var/obj/effect/overlay/adminoverlay/AO = new
src.overlays += AO
if(skip_overlays)
src.overlays += AO
anchored = 1
frozen = AO
@@ -42,14 +43,15 @@ var/global/list/frozen_mob_list = list()
if(!(src in frozen_mob_list))
frozen_mob_list += src
/mob/living/proc/admin_unFreeze(var/client/admin)
/mob/living/proc/admin_unFreeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
to_chat(src, "<b><font color= red>You have been unfrozen by [key_name(admin)]</b></font>")
message_admins("<span class='notice'>[key_name_admin(admin)] unfroze [key_name_admin(src)]</span>")
log_admin("[key_name(admin)] unfroze [key_name(src)]")
anchored = 0
overlays -= frozen
if(skip_overlays)
overlays -= frozen
frozen = null
SetSleeping(admin_prev_sleeping)
admin_prev_sleeping = null
@@ -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
@@ -6,6 +6,7 @@
anchored = 1
icon = LIGHTING_ICON
layer = LIGHTING_LAYER
plane = LIGHTING_PLANE
invisibility = INVISIBILITY_LIGHTING
color = LIGHTING_BASE_MATRIX
icon_state = "light1"
+1 -2
View File
@@ -48,8 +48,7 @@ var/list/image/ghost_darkness_images = list() //this is a list of images for thi
if(ishuman(body))
var/mob/living/carbon/human/H = body
icon = H.stand_icon
overlays = H.overlays_standing
appearance = H.appearance
else
icon = body.icon
icon_state = body.icon_state
@@ -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?"
@@ -7,6 +7,7 @@
var/obj/item/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call.
/mob/living/carbon/human/New(loc)
icon = null // This is now handled by overlays -- we just keep an icon for the sake of the map editor.
if(length(args) > 1)
log_runtime(EXCEPTION("human/New called with more than 1 argument (REPORT THIS ENTIRE RUNTIME TO A CODER)"))
. = ..()
@@ -264,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)
@@ -289,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)
@@ -1527,8 +1526,9 @@
var/obj/item/organ/external/head/head_organ = get_organ("head")
var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_full_list[head_organ.h_style]
var/icon/hair = new /icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
return image(get_icon_difference(get_eyecon(), hair), layer = LIGHTING_LAYER + 1) //Cut the hair's pixels from the eyes icon so eyes covered by bangs stay hidden even while on a higher layer.
var/mutable_appearance/MA = mutable_appearance(get_icon_difference(get_eyecon(), hair), layer = LIGHTING_LAYER + 1)
MA.plane = LIGHTING_PLANE
return MA //Cut the hair's pixels from the eyes icon so eyes covered by bangs stay hidden even while on a higher layer.
/*Used to check if eyes should shine in the dark. Returns the image of the eyes on the layer where they will appear to shine.
Eyes need to have significantly high darksight to shine unless the mob has the XRAY vision mutation. Eyes will not shine if they are covered in any way.*/
@@ -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
File diff suppressed because it is too large Load Diff
@@ -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))
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

+1
View File
@@ -2244,6 +2244,7 @@
#include "code\modules\surgery\organs\autoimplanter.dm"
#include "code\modules\surgery\organs\blood.dm"
#include "code\modules\surgery\organs\body_egg.dm"
#include "code\modules\surgery\organs\ears.dm"
#include "code\modules\surgery\organs\eyes.dm"
#include "code\modules\surgery\organs\heart.dm"
#include "code\modules\surgery\organs\helpers.dm"