mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 23:53:47 +01:00
Invasion of the moffs (#17000)
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> Co-authored-by: mochi <1496804+dearmochi@users.noreply.github.com>
This commit is contained in:
@@ -20,6 +20,8 @@
|
||||
var/follow = 0 // Applies to HIVEMIND languages - should a follow link be included for dead mobs?
|
||||
var/english_names = 0 // Do we want English names by default, no matter what?
|
||||
var/list/scramble_cache = list()
|
||||
/// Do we want to override the word-join character for scrambled text? If null, defaults to " " or ". "
|
||||
var/join_override
|
||||
|
||||
/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4)
|
||||
if(!syllables || !syllables.len || english_names)
|
||||
@@ -62,7 +64,9 @@
|
||||
capitalize = 0
|
||||
scrambled_text += next
|
||||
var/chance = rand(100)
|
||||
if(chance <= 5)
|
||||
if(join_override)
|
||||
scrambled_text += join_override
|
||||
else if(chance <= 5)
|
||||
scrambled_text += ". "
|
||||
capitalize = 1
|
||||
else if(chance > 5 && chance <= space_chance)
|
||||
@@ -70,7 +74,7 @@
|
||||
|
||||
scrambled_text = trim(scrambled_text)
|
||||
var/ending = copytext(scrambled_text, length(scrambled_text))
|
||||
if(ending == ".")
|
||||
if(ending == "." || ending == "-")
|
||||
scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1)
|
||||
var/input_ending = copytext(input, input_size)
|
||||
if(input_ending in list("!","?","."))
|
||||
@@ -353,6 +357,28 @@
|
||||
new_name += "-[pick(list("Hoorm","Viisk","Saar","Mnoo","Oumn","Fmong","Gnii","Vrrm","Oorm","Dromnn","Ssooumn","Ovv", "Hoorb","Vaar","Gaar","Goom","Ruum","Rumum"))]"
|
||||
return new_name
|
||||
|
||||
/datum/language/moth
|
||||
name = "Tkachi"
|
||||
desc = "The language of the Nianae mothpeople borders on complete unintelligibility."
|
||||
speech_verb = "buzzes"
|
||||
ask_verb = "flaps"
|
||||
exclaim_verbs = list("chatters")
|
||||
colour = "moth"
|
||||
key = "#"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
join_override = "-"
|
||||
syllables = list("år", "i", "går", "sek", "mo", "ff", "ok", "gj", "ø", "gå", "la", "le",
|
||||
"lit", "ygg", "van", "dår", "næ", "møt", "idd", "hvo", "ja", "på", "han",
|
||||
"så", "ån", "det", "att", "nå", "gö", "bra", "int", "tyc", "om", "när", "två",
|
||||
"må", "dag", "sjä", "vii", "vuo", "eil", "tun", "käyt", "teh", "vä", "hei",
|
||||
"huo", "suo", "ää", "ten", "ja", "heu", "stu", "uhr", "kön", "we", "hön")
|
||||
|
||||
/datum/language/moth/get_random_name()
|
||||
var/new_name = "[pick(list("Abbot","Archer","Arkwright","Baker","Bard","Biologist","Broker","Caller","Chamberlain","Clerk","Cooper","Culinarian","Dean","Director","Duke","Energizer","Excavator","Explorer","Fletcher","Gatekeeper","Guardian","Guide","Healer","Horner","Keeper","Knight","Laidler","Mapper","Marshall","Mechanic","Miller","Navigator","Pilot","Prior","Seeker","Seer","Smith","Stargazer","Teacher","Tech Whisperer","Tender","Thatcher","Voidcrafter","Voidhunter","Voidwalker","Ward","Watcher","Weaver","Webster","Wright"))]"
|
||||
new_name += "[pick(list(" of"," for"," in Service of",", Servant of"," for the Good of",", Student of"," to"))]"
|
||||
new_name += " [pick(list("Alkaid","Andromeda","Antlia","Apus","Auriga","Caelum","Camelopardalis","Canes Venatici","Carinae","Cassiopeia","Centauri","Circinus","Cygnus","Dorado","Draco","Eridanus","Errakis","Fornax","Gliese","Grus","Horologium","Hydri","Lacerta","Leo Minor","Lupus","Lynx","Maffei","Megrez","Messier","Microscopium","Monocerotis","Muscae","Ophiuchi","Orion","Pegasi","Persei","Perseus","Polaris","Pyxis","Sculptor","Syrma","Telescopium","Tianyi","Triangulum","Trifid","Tucana","Tycho","Vir","Volans","Zavyava"))]"
|
||||
return new_name
|
||||
|
||||
/datum/language/common
|
||||
name = "Galactic Common"
|
||||
desc = "The common galactic tongue."
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!head_accessory_style || !H || H.ha_style == head_accessory_style || !(head_accessory_style in GLOB.head_accessory_styles_list))
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_HUMAN_CHANGE_HEAD_ACCESSORY, head_accessory_style) & COMSIG_HUMAN_NO_CHANGE_APPEARANCE)
|
||||
return FALSE
|
||||
|
||||
H.ha_style = head_accessory_style
|
||||
|
||||
@@ -103,6 +105,8 @@
|
||||
var/found
|
||||
if(!body_accessory_style || (body_accessory && body_accessory.name == body_accessory_style))
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_HUMAN_CHANGE_BODY_ACCESSORY, body_accessory_style) & COMSIG_HUMAN_NO_CHANGE_APPEARANCE)
|
||||
return FALSE
|
||||
|
||||
for(var/B in GLOB.body_accessory_by_name)
|
||||
if(B == body_accessory_style)
|
||||
@@ -114,7 +118,8 @@
|
||||
|
||||
m_styles["tail"] = "None"
|
||||
update_tail_layer()
|
||||
return 1
|
||||
update_wing_layer()
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/change_alt_head(alternate_head)
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
@@ -468,17 +473,18 @@
|
||||
return sortTim(valid_markings, /proc/cmp_text_asc)
|
||||
|
||||
/mob/living/carbon/human/proc/generate_valid_body_accessories()
|
||||
var/list/valid_body_accessories = new()
|
||||
var/list/valid_body_accessories = list()
|
||||
for(var/B in GLOB.body_accessory_by_name)
|
||||
var/datum/body_accessory/A = GLOB.body_accessory_by_name[B]
|
||||
if(check_rights(R_ADMIN, 0, src))
|
||||
if(isnull(A))
|
||||
continue
|
||||
else if(check_rights(R_ADMIN, FALSE, src))
|
||||
valid_body_accessories = GLOB.body_accessory_by_name.Copy()
|
||||
else
|
||||
if(!istype(A))
|
||||
valid_body_accessories["None"] = "None" //The only null entry should be the "None" option.
|
||||
continue
|
||||
if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
valid_body_accessories += B
|
||||
break
|
||||
else if(dna.species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
|
||||
valid_body_accessories += B
|
||||
if(dna.species.optional_body_accessory)
|
||||
valid_body_accessories += "None"
|
||||
|
||||
return sortTim(valid_body_accessories, /proc/cmp_text_asc)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
GLOBAL_LIST_INIT(body_accessory_by_name, list("None" = null))
|
||||
GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
GLOBAL_LIST_INIT(body_accessory_by_species, list())
|
||||
|
||||
/proc/initialize_body_accessory_by_species()
|
||||
for(var/B in GLOB.body_accessory_by_name)
|
||||
@@ -8,8 +8,9 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
if(!istype(accessory)) continue
|
||||
|
||||
for(var/species in accessory.allowed_species)
|
||||
if(!GLOB.body_accessory_by_species["[species]"]) GLOB.body_accessory_by_species["[species]"] = list()
|
||||
GLOB.body_accessory_by_species["[species]"] += accessory
|
||||
if(!GLOB.body_accessory_by_species["[species]"])
|
||||
GLOB.body_accessory_by_species["[species]"] = list()
|
||||
GLOB.body_accessory_by_species["[species]"]["[accessory.name]"] = accessory
|
||||
|
||||
if(GLOB.body_accessory_by_species.len)
|
||||
return TRUE
|
||||
@@ -45,8 +46,11 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
|
||||
var/list/allowed_species = list()
|
||||
|
||||
/// If true, adds an underlay (in addition to the regular overlay!) to the character sprite, with the state "[icon_state]_BEHIND".
|
||||
var/has_behind = FALSE
|
||||
|
||||
/datum/body_accessory/proc/try_restrictions(mob/living/carbon/human/H)
|
||||
return TRUE
|
||||
return (H.dna.species.name in allowed_species)
|
||||
|
||||
/datum/body_accessory/proc/get_animated_icon() //return animated if it has it, return static if it does not.
|
||||
if(animated_icon)
|
||||
@@ -74,9 +78,9 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
animated_icon_state = "null"
|
||||
|
||||
/datum/body_accessory/tail/try_restrictions(mob/living/carbon/human/H)
|
||||
if(!H.wear_suit || !(H.wear_suit.flags_inv & HIDETAIL))
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDETAIL))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
//Tajaran
|
||||
/datum/body_accessory/tail/wingler_tail // Jay wingler fluff tail
|
||||
@@ -121,4 +125,86 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
name = "Bee Tail"
|
||||
icon_state = "wryntail"
|
||||
allowed_species = list("Wryn")
|
||||
|
||||
|
||||
//Moth wings
|
||||
/datum/body_accessory/wing
|
||||
icon = 'icons/mob/sprite_accessories/moth/moth_wings.dmi'
|
||||
animated_icon = null
|
||||
name = "Plain Wings"
|
||||
icon_state = "plain"
|
||||
allowed_species = list("Nian")
|
||||
has_behind = TRUE
|
||||
|
||||
/datum/body_accessory/wing/plain
|
||||
|
||||
/datum/body_accessory/wing/monarch
|
||||
name = "Monarch Wings"
|
||||
icon_state = "monarch"
|
||||
|
||||
/datum/body_accessory/wing/luna
|
||||
name = "Luna Wings"
|
||||
icon_state = "luna"
|
||||
|
||||
/datum/body_accessory/wing/atlas
|
||||
name = "Atlas Wings"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/body_accessory/wing/reddish
|
||||
name = "Reddish Wings"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/body_accessory/wing/royal
|
||||
name = "Royal Wings"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/body_accessory/wing/gothic
|
||||
name = "Gothic Wings"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/body_accessory/wing/lovers
|
||||
name = "Lovers Wings"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/body_accessory/wing/whitefly
|
||||
name = "White Fly Wings"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/body_accessory/wing/burnt_off
|
||||
name = "Burnt Off Wings"
|
||||
icon_state = "burnt_off"
|
||||
|
||||
/datum/body_accessory/wing/firewatch
|
||||
name = "Firewatch Wings"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/body_accessory/wing/deathhead
|
||||
name = "Deathshead Wings"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/body_accessory/wing/poison
|
||||
name = "Poison Wings"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/body_accessory/wing/ragged
|
||||
name = "Ragged Wings"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/body_accessory/wing/moonfly
|
||||
name = "Moon Fly Wings"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/body_accessory/wing/snow
|
||||
name = "Snow Wings"
|
||||
icon_state = "snow"
|
||||
|
||||
/datum/body_accessory/wing/oakworm
|
||||
name = "Oak Worm Wings"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/body_accessory/wing/jungle
|
||||
name = "Jungle Wings"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/body_accessory/wing/witchwing
|
||||
name = "Witch Wing Wings"
|
||||
icon_state = "witchwing"
|
||||
|
||||
@@ -124,6 +124,11 @@
|
||||
else //Everyone else fails, skip the emote attempt
|
||||
return
|
||||
|
||||
if("flap", "flaps", "aflap", "aflaps","flutter", "flutters")
|
||||
if(!ismoth(src))
|
||||
return
|
||||
on_CD = handle_emote_CD()
|
||||
|
||||
if("scream", "screams")
|
||||
on_CD = handle_emote_CD(50) //longer cooldown
|
||||
if("fart", "farts", "flip", "flips", "snap", "snaps")
|
||||
@@ -283,11 +288,10 @@
|
||||
m_type = 1
|
||||
|
||||
if("wag", "wags")
|
||||
if(body_accessory)
|
||||
if(istype(body_accessory, /datum/body_accessory/tail))
|
||||
if(body_accessory.try_restrictions(src))
|
||||
message = "<B>[src]</B> starts wagging [p_their()] tail."
|
||||
start_tail_wagging()
|
||||
|
||||
else if(dna.species.bodyflags & TAIL_WAGGING)
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL))
|
||||
message = "<B>[src]</B> starts wagging [p_their()] tail."
|
||||
@@ -299,7 +303,7 @@
|
||||
m_type = 1
|
||||
|
||||
if("swag", "swags")
|
||||
if(dna.species.bodyflags & TAIL_WAGGING || body_accessory)
|
||||
if((dna.species.bodyflags & TAIL_WAGGING) || istype(body_accessory, /datum/body_accessory/tail))
|
||||
message = "<B>[src]</B> stops wagging [p_their()] tail."
|
||||
stop_tail_wagging()
|
||||
else
|
||||
@@ -392,11 +396,16 @@
|
||||
to_chat(usr, "You need your hands working in order to clap.")
|
||||
|
||||
if("flap", "flaps")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> flaps [p_their()] wings."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
message = "<B>[src]</B> flaps [p_their()] wings."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("flutter", "flutters")
|
||||
message = "<B>[src]</B> flutters [p_their()] wings."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("flip", "flips")
|
||||
m_type = 1
|
||||
@@ -456,11 +465,10 @@
|
||||
spin(20, 1)
|
||||
|
||||
if("aflap", "aflaps")
|
||||
if(!restrained())
|
||||
message = "<B>[src]</B> flaps [p_their()] wings ANGRILY!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
message = "<B>[src]</B> flaps [p_their()] wings ANGRILY!"
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if("drool", "drools")
|
||||
message = "<B>[src]</B> drools."
|
||||
@@ -959,13 +967,13 @@
|
||||
return
|
||||
|
||||
if("help")
|
||||
var/emotelist = "aflap(s), airguitar, blink(s), blink(s)_r, blush(es), bow(s)-none/mob, burp(s), choke(s), chuckle(s), clap(s), collapse(s), cough(s), cry, cries, custom, dance, dap(s)-none/mob," \
|
||||
+ " deathgasp(s), drool(s), eyebrow, fart(s), faint(s), flap(s), flip(s), frown(s), gasp(s), giggle(s), glare(s)-none/mob, grin(s), groan(s), grumble(s), grin(s)," \
|
||||
var/emotelist = "airguitar, blink(s), blink(s)_r, blush(es), bow(s)-none/mob, burp(s), choke(s), chuckle(s), clap(s), collapse(s), cough(s), cry, cries, custom, dance, dap(s)-none/mob," \
|
||||
+ " deathgasp(s), drool(s), eyebrow, fart(s), faint(s), flip(s), frown(s), gasp(s), giggle(s), glare(s)-none/mob, grin(s), groan(s), grumble(s), grin(s)," \
|
||||
+ " handshake-mob, hug(s)-none/mob, hem, highfive, johnny, jump, kiss(es), laugh(s), look(s)-none/mob, moan(s), mumble(s), nod(s), pale(s), point(s)-atom, quiver(s), raise(s), salute(s)-none/mob, scream(s), shake(s)," \
|
||||
+ " shiver(s), shrug(s), sigh(s), signal(s)-#1-10, slap(s), smile(s),snap(s), sneeze(s), sniff(s), snore(s), spin(s) stare(s)-none/mob, tremble(s), twitch(es), twitch(es)_s," \
|
||||
+ " wave(s), whimper(s), wink(s), yawn(s)"
|
||||
|
||||
switch(dna.species.name)
|
||||
switch(dna.species.name) //dear future coders, do not use strings like this
|
||||
if("Diona")
|
||||
emotelist += "\n<u>Diona specific emotes</u> :- creak(s)"
|
||||
if("Drask")
|
||||
@@ -986,6 +994,8 @@
|
||||
emotelist += "\n<u>Plasmaman specific emotes</u> :- rattle(s)-none/mob"
|
||||
if("Skeleton")
|
||||
emotelist += "\n<u>Skeleton specific emotes</u> :- rattle(s)-none/mob"
|
||||
if("Nian")
|
||||
emotelist += "\n<u>Nian specific emotes</u> :- aflap(s), flap(s), flutter(s)"
|
||||
|
||||
if(ismachineperson(src))
|
||||
emotelist += "\n<u>Machine specific emotes</u> :- beep(s)-none/mob, buzz(es)-none/mob, no-none/mob, ping(s)-none/mob, yes-none/mob, buzz2-none/mob"
|
||||
|
||||
@@ -170,6 +170,11 @@
|
||||
/mob/living/carbon/human/stok/Initialize(mapload)
|
||||
. = ..(mapload, /datum/species/monkey/unathi)
|
||||
|
||||
/mob/living/carbon/human/moth/Initialize(mapload)
|
||||
. = ..(mapload, /datum/species/moth)
|
||||
if(!body_accessory)
|
||||
change_body_accessory("Plain Wings")
|
||||
|
||||
/mob/living/carbon/human/Stat()
|
||||
..()
|
||||
statpanel("Status")
|
||||
@@ -1256,6 +1261,8 @@
|
||||
|
||||
tail = dna.species.tail
|
||||
|
||||
wing = dna.species.wing
|
||||
|
||||
maxHealth = dna.species.total_health
|
||||
|
||||
if(dna.species.language)
|
||||
@@ -1387,7 +1394,10 @@
|
||||
|
||||
m_styles = DEFAULT_MARKING_STYLES //Wipes out markings, setting them all to "None".
|
||||
m_colours = DEFAULT_MARKING_COLOURS //Defaults colour to #00000 for all markings.
|
||||
body_accessory = null
|
||||
if(dna.species.bodyflags & HAS_BODY_ACCESSORY)
|
||||
body_accessory = GLOB.body_accessory_by_name[dna.species.default_bodyacc]
|
||||
else
|
||||
body_accessory = null
|
||||
|
||||
dna.real_name = real_name
|
||||
|
||||
@@ -1947,6 +1957,11 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
/mob/living/carbon/human/proc/get_perceived_trauma()
|
||||
return min(health, maxHealth - getStaminaLoss())
|
||||
|
||||
/mob/living/carbon/human/WakeUp(updating = TRUE)
|
||||
if(dna.species.spec_WakeUp(src))
|
||||
return
|
||||
..()
|
||||
|
||||
/**
|
||||
* Helper to get the mobs runechat colour span
|
||||
*
|
||||
|
||||
@@ -68,7 +68,10 @@
|
||||
var/fire_sprite = "Standing"
|
||||
|
||||
var/datum/body_accessory/body_accessory = null
|
||||
var/tail // Name of tail image in species effects icon file.
|
||||
/// Name of tail image in species effects icon file.
|
||||
var/tail
|
||||
/// Same as tail but wing
|
||||
var/wing
|
||||
|
||||
var/list/splinted_limbs = list() //limbs we know are splinted
|
||||
var/original_eye_color = "#000000"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
|
||||
|
||||
if(..())
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
//Do we have a working jetpack?
|
||||
var/obj/item/tank/jetpack/thrust
|
||||
@@ -18,8 +18,10 @@
|
||||
thrust = C.jetpack
|
||||
if(thrust)
|
||||
if((movement_dir || thrust.stabilizers) && thrust.allow_thrust(0.01, src))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
if(dna.species.spec_Process_Spacemove(src))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/mob_has_gravity()
|
||||
. = ..()
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
|
||||
var/datum/species/primitive_form = null // Lesser form, if any (ie. monkey for humans)
|
||||
var/datum/species/greater_form = null // Greater form, if any, ie. human for monkeys.
|
||||
var/tail // Name of tail image in species effects icon file.
|
||||
/// Name of tail image in species effects icon file.
|
||||
var/tail
|
||||
/// like tail but wings
|
||||
var/wing
|
||||
var/datum/unarmed_attack/unarmed //For empty hand harm-intent attack
|
||||
var/unarmed_type = /datum/unarmed_attack
|
||||
|
||||
@@ -138,6 +141,9 @@
|
||||
var/default_headacc //Default head accessory style for newly created humans unless otherwise set.
|
||||
var/default_headacc_colour
|
||||
|
||||
/// Name of default body accessory if any.
|
||||
var/default_bodyacc
|
||||
|
||||
//Defining lists of icon skin tones for species that have them.
|
||||
var/list/icon_skin_tones = list()
|
||||
|
||||
@@ -171,6 +177,9 @@
|
||||
// Species specific boxes
|
||||
var/speciesbox
|
||||
|
||||
/// Whether the presence of a body accessory on this species is optional or not.
|
||||
var/optional_body_accessory = TRUE
|
||||
|
||||
/datum/species/New()
|
||||
unarmed = new unarmed_type()
|
||||
|
||||
@@ -266,7 +275,8 @@
|
||||
. += (health_deficiency / 75)
|
||||
else
|
||||
. += (health_deficiency / 25)
|
||||
. += 2 * H.stance_damage //damaged/missing feet or legs is slow
|
||||
if(H.dna.species.spec_movement_delay()) //Species overrides for slowdown due to feet/legs
|
||||
. += 2 * H.stance_damage //damaged/missing feet or legs is slow
|
||||
|
||||
if((hungry >= 70) && !flight)
|
||||
. += hungry/50
|
||||
@@ -952,6 +962,18 @@ It'll return null if the organ doesn't correspond, so include null checks when u
|
||||
if(istype(ears) && !HAS_TRAIT(H, TRAIT_DEAF))
|
||||
. = TRUE
|
||||
|
||||
/datum/species/proc/spec_Process_Spacemove(mob/living/carbon/human/H)
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/spec_thunk(mob/living/carbon/human/H)
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/spec_movement_delay()
|
||||
return TRUE
|
||||
|
||||
/datum/species/proc/spec_WakeUp(mob/living/carbon/human/H)
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
* Species-specific runechat colour handler
|
||||
*
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
species_traits = list(LIPS, IS_WHITELISTED, CAN_WINGDINGS, NO_HAIR)
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = HAS_BODY_MARKINGS
|
||||
bodyflags = HAS_BODY_MARKINGS | HAS_BODYACC_COLOR
|
||||
dietflags = DIET_HERB
|
||||
has_gender = FALSE
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
species_traits = list(IS_WHITELISTED, NO_HAIR)
|
||||
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_BUG
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS
|
||||
bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_BODYACC_COLOR
|
||||
eyes = "kidan_eyes_s"
|
||||
dietflags = DIET_HERB
|
||||
flesh_color = "#ba7814"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
female_scream_sound = 'sound/goonstation/voice/monkey_scream.ogg'
|
||||
|
||||
tail = "chimptail"
|
||||
bodyflags = HAS_TAIL
|
||||
bodyflags = HAS_TAIL | HAS_BODYACC_COLOR
|
||||
reagent_tag = PROCESS_ORG
|
||||
//Has standard darksight of 2.
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
base_color = "#000000"
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
bodyflags = HAS_TAIL
|
||||
bodyflags = HAS_TAIL | HAS_BODYACC_COLOR
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/internal/heart/unathi,
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
#define COCOON_WEAVE_DELAY 5 SECONDS
|
||||
#define COCOON_EMERGE_DELAY 15 SECONDS
|
||||
#define COCOON_HARM_AMOUNT 50
|
||||
#define COCOON_NUTRITION_AMOUNT -200
|
||||
#define FLYSWATTER_DAMAGE_MULTIPLIER 9
|
||||
|
||||
/datum/species/moth
|
||||
name = "Nian"
|
||||
name_plural = "Nianae"
|
||||
language = "Tkachi"
|
||||
icobase = 'icons/mob/human_races/r_moth.dmi'
|
||||
inherent_factions = list("nian")
|
||||
species_traits = list(NO_HAIR)
|
||||
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_BUG
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
|
||||
bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_WING | BALD
|
||||
reagent_tag = PROCESS_ORG
|
||||
dietflags = DIET_HERB
|
||||
tox_mod = 1.5
|
||||
blood_color = "#b9ae9c"
|
||||
unarmed_type = /datum/unarmed_attack/claws
|
||||
scream_verb = "buzzes"
|
||||
male_scream_sound = 'sound/voice/scream_moth.ogg'
|
||||
female_scream_sound = 'sound/voice/scream_moth.ogg'
|
||||
default_headacc = "Plain Antennae"
|
||||
default_bodyacc = "Plain Wings"
|
||||
wing = "plain"
|
||||
eyes = "moth_eyes_s"
|
||||
butt_sprite = "nian"
|
||||
siemens_coeff = 1.5
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/internal/heart/nian,
|
||||
"lungs" = /obj/item/organ/internal/lungs/nian,
|
||||
"liver" = /obj/item/organ/internal/liver/nian,
|
||||
"kidneys" = /obj/item/organ/internal/kidneys/nian,
|
||||
"brain" = /obj/item/organ/internal/brain/nian,
|
||||
"eyes" = /obj/item/organ/internal/eyes/nian
|
||||
)
|
||||
|
||||
optional_body_accessory = FALSE
|
||||
|
||||
var/datum/action/innate/cocoon/cocoon
|
||||
|
||||
suicide_messages = list(
|
||||
"is attempting to nibble their antenna off!",
|
||||
"is twisting their own abdomen!",
|
||||
"is cracking their exoskeleton!",
|
||||
"is ripping their wings off!",
|
||||
"is holding their breath!"
|
||||
)
|
||||
|
||||
|
||||
/datum/species/moth/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
cocoon = new()
|
||||
cocoon.Grant(H)
|
||||
RegisterSignal(H, COMSIG_LIVING_FIRE_TICK, .proc/check_burn_wings)
|
||||
RegisterSignal(H, COMSIG_LIVING_AHEAL, .proc/on_aheal)
|
||||
RegisterSignal(H, COMSIG_HUMAN_CHANGE_BODY_ACCESSORY, .proc/on_change_body_accessory)
|
||||
RegisterSignal(H, COMSIG_HUMAN_CHANGE_HEAD_ACCESSORY, .proc/on_change_head_accessory)
|
||||
|
||||
/datum/species/moth/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
cocoon.Remove(H)
|
||||
UnregisterSignal(H, COMSIG_LIVING_FIRE_TICK)
|
||||
UnregisterSignal(H, COMSIG_LIVING_AHEAL)
|
||||
UnregisterSignal(H, COMSIG_HUMAN_CHANGE_BODY_ACCESSORY)
|
||||
UnregisterSignal(H, COMSIG_HUMAN_CHANGE_HEAD_ACCESSORY)
|
||||
H.remove_status_effect(STATUS_EFFECT_BURNT_WINGS)
|
||||
|
||||
/datum/species/moth/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "pestkiller")
|
||||
H.adjustToxLoss(3)
|
||||
H.reagents.remove_reagent(R.id, REAGENTS_METABOLISM)
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/moth/get_species_runechat_color(mob/living/carbon/human/H)
|
||||
return H.m_colours["body"]
|
||||
|
||||
/datum/species/moth/spec_attacked_by(obj/item/I, mob/living/user, obj/item/organ/external/affecting, intent, mob/living/carbon/human/H)
|
||||
if(istype(I, /obj/item/melee/flyswatter) && I.force)
|
||||
apply_damage(I.force * FLYSWATTER_DAMAGE_MULTIPLIER, I.damtype, affecting, FALSE, H) //making flyswatters do 10x damage to moff
|
||||
|
||||
/datum/species/moth/spec_Process_Spacemove(mob/living/carbon/human/H)
|
||||
var/turf/A = get_turf(H)
|
||||
if(isspaceturf(A))
|
||||
return FALSE
|
||||
if(H.has_status_effect(STATUS_EFFECT_BURNT_WINGS))
|
||||
return FALSE
|
||||
var/datum/gas_mixture/current = A.return_air()
|
||||
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
|
||||
return TRUE
|
||||
|
||||
/datum/species/moth/spec_thunk(mob/living/carbon/human/H)
|
||||
if(!H.has_status_effect(STATUS_EFFECT_BURNT_WINGS))
|
||||
return TRUE
|
||||
|
||||
/datum/species/moth/spec_movement_delay()
|
||||
return FALSE
|
||||
|
||||
/datum/species/moth/spec_WakeUp(mob/living/carbon/human/H)
|
||||
if(H.has_status_effect(STATUS_EFFECT_COCOONED))
|
||||
return TRUE //Cocooned mobs dont get to wake up
|
||||
|
||||
/datum/species/moth/proc/check_burn_wings(mob/living/carbon/human/H) //do not go into the extremely hot light. you will not survive
|
||||
SIGNAL_HANDLER
|
||||
if(H.on_fire && !H.has_status_effect(STATUS_EFFECT_BURNT_WINGS) && H.bodytemperature >= 400 && H.fire_stacks > 0)
|
||||
to_chat(H, "<span class='warning'>Your precious wings burn to a crisp!</span>")
|
||||
H.apply_status_effect(STATUS_EFFECT_BURNT_WINGS)
|
||||
|
||||
/datum/species/moth/proc/on_aheal(mob/living/carbon/human/H)
|
||||
SIGNAL_HANDLER
|
||||
H.remove_status_effect(STATUS_EFFECT_BURNT_WINGS)
|
||||
|
||||
/datum/species/moth/proc/on_change_body_accessory(mob/living/carbon/human/H)
|
||||
SIGNAL_HANDLER
|
||||
if(H.has_status_effect(STATUS_EFFECT_BURNT_WINGS))
|
||||
return COMSIG_HUMAN_NO_CHANGE_APPEARANCE
|
||||
|
||||
/datum/species/moth/proc/on_change_head_accessory(mob/living/carbon/human/H)
|
||||
SIGNAL_HANDLER
|
||||
if(H.has_status_effect(STATUS_EFFECT_BURNT_WINGS))
|
||||
return COMSIG_HUMAN_NO_CHANGE_APPEARANCE
|
||||
|
||||
/datum/action/innate/cocoon
|
||||
name = "Cocoon"
|
||||
desc = "Restore your wings and antennae, and heal some damage. If your cocoon is broken externally you will take heavy damage!"
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_CONSCIOUS|AB_CHECK_TURF
|
||||
icon_icon = 'icons/effects/effects.dmi'
|
||||
button_icon_state = "cocoon1"
|
||||
|
||||
/datum/action/innate/cocoon/Activate()
|
||||
var/mob/living/carbon/human/moth/H = owner
|
||||
if(H.nutrition < COCOON_NUTRITION_AMOUNT)
|
||||
to_chat(H, "<span class='warning'>You are too hungry to cocoon!</span>")
|
||||
return
|
||||
H.visible_message("<span class='notice'>[H] begins to hold still and concentrate on weaving a cocoon...</span>", "<span class='notice'>You begin to focus on weaving a cocoon... (This will take [COCOON_WEAVE_DELAY / 10] seconds, and you must hold still.)</span>")
|
||||
if(do_after(H, COCOON_WEAVE_DELAY, FALSE, H))
|
||||
if(H.incapacitated(ignore_lying = TRUE))
|
||||
to_chat(H, "<span class='warning'>You cannot weave a cocoon in your current state.</span>")
|
||||
return
|
||||
H.visible_message("<span class='notice'>[H] finishes weaving a cocoon!</span>", "<span class='notice'>You finish weaving your cocoon.</span>")
|
||||
var/obj/structure/moth/cocoon/C = new(get_turf(H))
|
||||
H.forceMove(C)
|
||||
C.preparing_to_emerge = TRUE
|
||||
H.apply_status_effect(STATUS_EFFECT_COCOONED)
|
||||
H.KnockOut()
|
||||
addtimer(CALLBACK(src, .proc/emerge, C), COCOON_EMERGE_DELAY, TIMER_UNIQUE)
|
||||
else
|
||||
to_chat(H, "<span class='warning'>You need to hold still in order to weave a cocoon!</span>")
|
||||
|
||||
/**
|
||||
* Removes moth from cocoon, restores burnt wings
|
||||
*/
|
||||
/datum/action/innate/cocoon/proc/emerge(obj/structure/moth/cocoon/C)
|
||||
for(var/mob/living/carbon/human/H in C.contents)
|
||||
H.remove_status_effect(STATUS_EFFECT_COCOONED)
|
||||
H.remove_status_effect(STATUS_EFFECT_BURNT_WINGS)
|
||||
C.preparing_to_emerge = FALSE
|
||||
qdel(C)
|
||||
|
||||
/obj/structure/moth/cocoon
|
||||
name = "\improper Nian cocoon"
|
||||
desc = "Someone wrapped in a Nian cocoon."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "cocoon1"
|
||||
color = COLOR_PALE_YELLOW //So tiders (hopefully) don't decide to immediately bust them open
|
||||
max_integrity = 60
|
||||
var/preparing_to_emerge
|
||||
|
||||
/obj/structure/moth/cocoon/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("cocoon1", "cocoon2", "cocoon3")
|
||||
|
||||
/obj/structure/moth/cocoon/Destroy()
|
||||
if(!preparing_to_emerge)
|
||||
visible_message("<span class='danger'>[src] splits open from within!</span>")
|
||||
else
|
||||
visible_message("<span class='danger'>[src] is smashed open, harming the Nian within!</span>")
|
||||
for(var/mob/living/carbon/human/H in contents)
|
||||
H.adjustBruteLoss(COCOON_HARM_AMOUNT)
|
||||
H.adjustFireLoss(COCOON_HARM_AMOUNT)
|
||||
H.AdjustWeakened(5)
|
||||
|
||||
for(var/mob/living/carbon/human/H in contents)
|
||||
H.remove_status_effect(STATUS_EFFECT_COCOONED)
|
||||
H.adjust_nutrition(COCOON_NUTRITION_AMOUNT)
|
||||
H.WakeUp()
|
||||
H.forceMove(loc)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/burnt_wings
|
||||
id = "burnt_wings"
|
||||
alert_type = null
|
||||
|
||||
/datum/status_effect/burnt_wings/on_creation(mob/living/new_owner, ...)
|
||||
var/mob/living/carbon/human/H = new_owner
|
||||
if(istype(H))
|
||||
H.change_body_accessory("Burnt Off Wings")
|
||||
H.change_head_accessory("Burnt Off Antennae")
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/burnt_wings/on_remove()
|
||||
owner.UpdateAppearance()
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/cocooned
|
||||
id = "cocooned"
|
||||
alert_type = null
|
||||
|
||||
#undef COCOON_WEAVE_DELAY
|
||||
#undef COCOON_EMERGE_DELAY
|
||||
#undef COCOON_HARM_AMOUNT
|
||||
#undef COCOON_NUTRITION_AMOUNT
|
||||
#undef FLYSWATTER_DAMAGE_MULTIPLIER
|
||||
@@ -26,7 +26,7 @@
|
||||
inherent_traits = list(TRAIT_NOGERMS, TRAIT_NODECAY)
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS //Species-fitted 'em all.
|
||||
dietflags = DIET_OMNI
|
||||
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS
|
||||
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS | HAS_BODYACC_COLOR
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
|
||||
@@ -277,6 +277,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
apply_overlay(BODY_LAYER)
|
||||
//tail
|
||||
update_tail_layer()
|
||||
update_wing_layer()
|
||||
update_int_organs()
|
||||
//head accessory
|
||||
update_head_accessory()
|
||||
@@ -527,6 +528,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
UpdateDamageIcon()
|
||||
force_update_limbs()
|
||||
update_tail_layer()
|
||||
update_wing_layer()
|
||||
update_halo_layer()
|
||||
overlays.Cut() // Force all overlays to regenerate
|
||||
update_fire()
|
||||
@@ -898,6 +900,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
|
||||
apply_overlay(SUIT_LAYER)
|
||||
update_tail_layer()
|
||||
update_wing_layer()
|
||||
update_collar()
|
||||
|
||||
/mob/living/carbon/human/update_inv_pockets()
|
||||
@@ -1069,6 +1072,31 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
I.screen_loc = ui_back
|
||||
client.screen += I
|
||||
|
||||
/mob/living/carbon/human/proc/update_wing_layer()
|
||||
remove_overlay(WING_UNDERLIMBS_LAYER)
|
||||
remove_overlay(WING_LAYER)
|
||||
if(!istype(body_accessory, /datum/body_accessory/wing))
|
||||
if(dna.species.optional_body_accessory)
|
||||
return
|
||||
else
|
||||
body_accessory = GLOB.body_accessory_by_name[dna.species.default_bodyacc]
|
||||
|
||||
if(!body_accessory.try_restrictions(src))
|
||||
return
|
||||
|
||||
var/mutable_appearance/wings = mutable_appearance(body_accessory.icon, body_accessory.icon_state, layer = -WING_LAYER)
|
||||
wings.pixel_x = body_accessory.pixel_x_offset
|
||||
wings.pixel_y = body_accessory.pixel_y_offset
|
||||
overlays_standing[WING_LAYER] = wings
|
||||
|
||||
if(body_accessory.has_behind)
|
||||
var/mutable_appearance/under_wing = mutable_appearance(body_accessory.icon, "[body_accessory.icon_state]_BEHIND", layer = -WING_UNDERLIMBS_LAYER)
|
||||
under_wing.pixel_x = body_accessory.pixel_x_offset
|
||||
under_wing.pixel_y = body_accessory.pixel_y_offset
|
||||
overlays_standing[WING_UNDERLIMBS_LAYER] = under_wing
|
||||
|
||||
apply_overlay(WING_UNDERLIMBS_LAYER)
|
||||
apply_overlay(WING_LAYER)
|
||||
|
||||
/mob/living/carbon/human/proc/update_tail_layer()
|
||||
remove_overlay(TAIL_UNDERLIMBS_LAYER) // SEW direction icons, overlayed by LIMBS_LAYER.
|
||||
@@ -1142,6 +1170,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
overlays_standing[TAIL_LAYER] = mutable_appearance(over, layer = -TAIL_LAYER)
|
||||
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
|
||||
overlays_standing[TAIL_LAYER] = mutable_appearance(tail_s, layer = -TAIL_LAYER)
|
||||
|
||||
apply_overlay(TAIL_LAYER)
|
||||
apply_overlay(TAIL_UNDERLIMBS_LAYER)
|
||||
|
||||
@@ -1242,6 +1271,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
/mob/living/carbon/human/handle_transform_change()
|
||||
..()
|
||||
update_tail_layer()
|
||||
update_wing_layer()
|
||||
|
||||
//Adds a collar overlay above the helmet layer if the suit has one
|
||||
// Suit needs an identically named sprite in icons/mob/clothing/collar.dmi
|
||||
|
||||
@@ -494,6 +494,7 @@
|
||||
human_mob.decaylevel = 0
|
||||
human_mob.remove_all_embedded_objects()
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_AHEAL)
|
||||
restore_all_organs()
|
||||
surgeries.Cut() //End all surgeries.
|
||||
if(stat == DEAD)
|
||||
|
||||
@@ -207,6 +207,7 @@
|
||||
return FALSE
|
||||
var/turf/location = get_turf(src)
|
||||
location.hotspot_expose(700, 50, 1)
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_FIRE_TICK)
|
||||
return TRUE
|
||||
|
||||
/mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
|
||||
|
||||
@@ -198,6 +198,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
|
||||
add_language("Chittin", 1)
|
||||
add_language("Bubblish", 1)
|
||||
add_language("Clownish", 1)
|
||||
add_language("Tkachi", 1)
|
||||
|
||||
if(!safety)//Only used by AIize() to successfully spawn an AI.
|
||||
if(!B)//If there is no player/brain inside.
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
user.add_language("Orluum")
|
||||
user.add_language("Clownish")
|
||||
user.add_language("Neo-Russkiya")
|
||||
user.add_language("Tkachi")
|
||||
else
|
||||
user.remove_language("Sinta'unathi")
|
||||
user.remove_language("Siik'tajr")
|
||||
@@ -67,6 +68,7 @@
|
||||
user.remove_language("Orluum")
|
||||
user.remove_language("Clownish")
|
||||
user.remove_language("Neo-Russkiya")
|
||||
user.remove_language("Tkachi")
|
||||
|
||||
/datum/pai_software/translator/is_active(mob/living/silicon/pai/user)
|
||||
return user.translator_on
|
||||
|
||||
@@ -261,6 +261,7 @@
|
||||
R.add_language("Bubblish", 0)
|
||||
R.add_language("Orluum", 0)
|
||||
R.add_language("Clownish", 0)
|
||||
R.add_language("Tkachi", 0)
|
||||
|
||||
/// Adds anything in `subsystems` to the robot's verbs, and grants any actions that are in `module_actions`.
|
||||
/obj/item/robot_module/proc/add_subsystems_and_actions(mob/living/silicon/robot/R)
|
||||
@@ -527,6 +528,7 @@
|
||||
R.add_language("Bubblish", 1)
|
||||
R.add_language("Clownish",1)
|
||||
R.add_language("Neo-Russkiya", 1)
|
||||
R.add_language("Tkachi", 1)
|
||||
|
||||
/obj/item/robot_module/butler/handle_death(mob/living/silicon/robot/R, gibbed)
|
||||
var/obj/item/storage/bag/tray/cyborg/T = locate(/obj/item/storage/bag/tray/cyborg) in modules
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/datum/sprite_accessory/body_markings/moth
|
||||
icon = 'icons/mob/sprite_accessories/moth/moth_body_markings.dmi'
|
||||
species_allowed = list("Nian")
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/reddish
|
||||
name = "Reddish Markings"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/royal
|
||||
name = "Royal Markings"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/gothic
|
||||
name = "Gothic Markings"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/whitefly
|
||||
name = "White Fly Markings"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/lovers
|
||||
name = "Lovers Markings"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/burnt_off
|
||||
name = "Burnt Off Markings"
|
||||
icon_state = "burnt_off"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/firewatch
|
||||
name = "Firewatch Markings"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/deathhead
|
||||
name = "Deathshead Markings"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/poison
|
||||
name = "Poison Markings"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/ragged
|
||||
name = "Ragged Markings"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/moonfly
|
||||
name = "Moon Fly Markings"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/oakworm
|
||||
name = "Oak Worm Markings"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/jungle
|
||||
name = "Jungle Markings"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/body_markings/moth/witchwing
|
||||
name = "Witch Wing Markings"
|
||||
icon_state = "witchwing"
|
||||
@@ -0,0 +1,73 @@
|
||||
/datum/sprite_accessory/head_accessory/moth
|
||||
icon = 'icons/mob/sprite_accessories/moth/moth_head_accessories.dmi'
|
||||
species_allowed = list("Nian")
|
||||
over_hair = TRUE
|
||||
do_colouration = FALSE
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/plain
|
||||
name = "Plain Antennae"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/reddish
|
||||
name = "Reddish Antennae"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/royal
|
||||
name = "Royal Antennae"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/gothic
|
||||
name = "Gothic Antennae"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/whitefly
|
||||
name = "White Fly Antennae"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/lovers
|
||||
name = "Lovers Antennae"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/burnt_off
|
||||
name = "Burnt Off Antennae"
|
||||
icon_state = "burnt_off"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/firewatch
|
||||
name = "Firewatch Antennae"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/deathhead
|
||||
name = "Deathshead Antennae"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/poison
|
||||
name = "Poison Antennae"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/moonfly
|
||||
name = "Moon Fly Antennae"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/oakworm
|
||||
name = "Oak Worm Antennae"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/jungle
|
||||
name = "Jungle Antennae"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/witchwing
|
||||
name = "Witch Wing Antennae"
|
||||
icon_state = "witchwing"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/regal
|
||||
name = "Regal Antennae"
|
||||
icon_state = "regal"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/mothra
|
||||
name = "Mothra Antennae"
|
||||
icon_state = "mothra"
|
||||
|
||||
/datum/sprite_accessory/head_accessory/moth/mothra
|
||||
name = "Snow Antennae"
|
||||
icon_state = "snow"
|
||||
@@ -0,0 +1,59 @@
|
||||
/datum/sprite_accessory/body_markings/head/moth
|
||||
icon = 'icons/mob/sprite_accessories/moth/moth_head_markings.dmi'
|
||||
species_allowed = list("Nian")
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/reddish
|
||||
name = "Reddish Head Markings"
|
||||
icon_state = "reddish"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/royal
|
||||
name = "Royal Head Markings"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/gothic
|
||||
name = "Gothic Head Markings"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/whitefly
|
||||
name = "White Fly Head Markings"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/lovers
|
||||
name = "Lovers Head Markings"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/burnt_off
|
||||
name = "Burnt Off Head Markings"
|
||||
icon_state = "burnt_off"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/firewatch
|
||||
name = "Firewatch Head Markings"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/deathhead
|
||||
name = "Deathshead Head Markings"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/poison
|
||||
name = "Poison Head Markings"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/ragged
|
||||
name = "Ragged Head Markings"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/moonfly
|
||||
name = "Moon Fly Head Markings"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/oakworm
|
||||
name = "Oak Worm Head Markings"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/jungle
|
||||
name = "Jungle Head Markings"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/body_markings/head/moth/witchwing
|
||||
name = "Witch Wing Head Markings"
|
||||
icon_state = "witchwing"
|
||||
@@ -70,7 +70,7 @@
|
||||
icon = 'icons/mob/human_face.dmi' // Keep bald hair here, as for some reason, putting it elsewhere lead to it being colourable - Also it make sense as it is shared by everyone.
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran")
|
||||
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran", "Nian")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/facial_hair
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/datum/sprite_accessory/body_markings
|
||||
icon = 'icons/mob/sprite_accessories/human/human_body_markings.dmi'
|
||||
species_allowed = list("Unathi", "Tajaran", "Vulpkanin", "Machine", "Vox", "Kidan")
|
||||
species_allowed = list("Unathi", "Tajaran", "Vulpkanin", "Machine", "Vox", "Kidan", "Nian")
|
||||
icon_state = "accessory_none"
|
||||
marking_location = "body"
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
///////////////////////////
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/clothing/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/underwear.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi'
|
||||
@@ -178,7 +178,7 @@
|
||||
/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", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
|
||||
/datum/sprite_accessory/underwear/male
|
||||
gender = MALE
|
||||
@@ -298,7 +298,7 @@
|
||||
////////////////////////////
|
||||
/datum/sprite_accessory/undershirt
|
||||
icon = 'icons/mob/clothing/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/underwear.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/underwear.dmi')
|
||||
@@ -307,7 +307,7 @@
|
||||
/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", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
|
||||
//plain color shirts
|
||||
/datum/sprite_accessory/undershirt/shirt_white
|
||||
@@ -537,14 +537,14 @@
|
||||
///////////////////////
|
||||
/datum/sprite_accessory/socks
|
||||
icon = 'icons/mob/clothing/underwear.dmi'
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
|
||||
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
sprite_sheets = list("Vox" = 'icons/mob/clothing/species/vox/underwear.dmi')
|
||||
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", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian")
|
||||
|
||||
/datum/sprite_accessory/socks/white_norm
|
||||
name = "Normal White"
|
||||
|
||||
Reference in New Issue
Block a user