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
+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