mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 03:55:05 +01:00
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:
+37
-33
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -404,8 +404,7 @@
|
||||
CureNervous()
|
||||
SetEyeBlind(0)
|
||||
SetEyeBlurry(0)
|
||||
SetEarDamage(0)
|
||||
SetEarDeaf(0)
|
||||
RestoreEars()
|
||||
heal_overall_damage(1000, 1000)
|
||||
ExtinguishMob()
|
||||
fire_stacks = 0
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user