Merge branch 'master' into fuckatmos
This commit is contained in:
@@ -25,7 +25,6 @@
|
||||
// var/wide_icon = FALSE //CITDEL THINGS
|
||||
// if(features["taur"] != "None")
|
||||
// wide_icon = TRUE
|
||||
|
||||
if(job_engsec_high)
|
||||
switch(job_engsec_high)
|
||||
if(AI_JF)
|
||||
@@ -37,6 +36,8 @@
|
||||
|
||||
// Set up the dummy for its photoshoot
|
||||
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
||||
mannequin.cut_overlays()
|
||||
mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER))
|
||||
copy_to(mannequin)
|
||||
|
||||
// Determine what job is marked as 'High' priority, and dress them up as such.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
|
||||
Hello and welcome to sprite_accessories: For sprite accessories, such as hair,
|
||||
facial hair, and possibly tattoos and stuff somewhere along the line. This file is
|
||||
intended to be friendly for people with little to no actual coding experience.
|
||||
The process of adding in new hairstyles has been made pain-free and easy to do.
|
||||
Enjoy! - Doohl
|
||||
|
||||
|
||||
Notice: This all gets automatically compiled in a list in dna.dm, so you do not
|
||||
have to define any UI values for sprite accessories manually for hair and facial
|
||||
hair. Just add in new hair types and the game will naturally adapt.
|
||||
|
||||
!!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
|
||||
to the point where you may completely corrupt a server's savefiles. Please refrain
|
||||
from doing this unless you absolutely know what you are doing, and have defined a
|
||||
conversion in savefile.dm
|
||||
*/
|
||||
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
|
||||
if(!istype(L))
|
||||
L = list()
|
||||
if(!istype(male))
|
||||
male = list()
|
||||
if(!istype(female))
|
||||
female = list()
|
||||
|
||||
for(var/path in typesof(prototype))
|
||||
if(path == prototype)
|
||||
continue
|
||||
if(roundstart)
|
||||
var/datum/sprite_accessory/P = path
|
||||
if(initial(P.locked))
|
||||
continue
|
||||
var/datum/sprite_accessory/D = new path()
|
||||
|
||||
if(D.icon_state)
|
||||
L[D.name] = D
|
||||
else
|
||||
L += D.name
|
||||
|
||||
switch(D.gender)
|
||||
if(MALE)
|
||||
male += D.name
|
||||
if(FEMALE)
|
||||
female += D.name
|
||||
else
|
||||
male += D.name
|
||||
female += D.name
|
||||
return L
|
||||
|
||||
/datum/sprite_accessory
|
||||
var/icon //the icon file the accessory is located in
|
||||
var/icon_state //the icon_state of the accessory
|
||||
var/name //the preview name of the accessory
|
||||
var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
|
||||
var/gender_specific //Something that can be worn by either gender, but looks different on each
|
||||
var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none.
|
||||
var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears.
|
||||
var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects
|
||||
var/dimension_x = 32
|
||||
var/dimension_y = 32
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
@@ -0,0 +1,25 @@
|
||||
//////////.//////////////////
|
||||
// MutantParts Definitions //
|
||||
/////////////////////////////
|
||||
|
||||
/datum/sprite_accessory/body_markings
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/body_markings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/body_markings/dtiger
|
||||
name = "Dark Tiger Body"
|
||||
icon_state = "dtiger"
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/body_markings/ltiger
|
||||
name = "Light Tiger Body"
|
||||
icon_state = "ltiger"
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/body_markings/lbelly
|
||||
name = "Light Belly"
|
||||
icon_state = "lbelly"
|
||||
gender_specific = 1
|
||||
@@ -0,0 +1,7 @@
|
||||
datum/sprite_accessory/caps
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/caps/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
@@ -0,0 +1,12 @@
|
||||
/datum/sprite_accessory/ears
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/ears/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
color_src = HAIR
|
||||
@@ -0,0 +1,18 @@
|
||||
/datum/sprite_accessory/frills
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/frills/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/frills/simple
|
||||
name = "Simple"
|
||||
icon_state = "simple"
|
||||
|
||||
/datum/sprite_accessory/frills/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/frills/aquatic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
@@ -0,0 +1,89 @@
|
||||
/////////////////////////////
|
||||
// Facial Hair Definitions //
|
||||
/////////////////////////////
|
||||
/datum/sprite_accessory/facial_hair
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/facial_hair/abe
|
||||
name = "Beard (Abraham Lincoln)"
|
||||
icon_state = "facial_abe"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/brokenman
|
||||
name = "Beard (Broken Man)"
|
||||
icon_state = "facial_brokenman"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/chinstrap
|
||||
name = "Beard (Chinstrap)"
|
||||
icon_state = "facial_chin"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/dwarf
|
||||
name = "Beard (Dwarf)"
|
||||
icon_state = "facial_dwarf"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/fiveoclock
|
||||
name = "Beard (Five o Clock Shadow)"
|
||||
icon_state = "facial_fiveoclock"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/fullbeard
|
||||
name = "Beard (Full)"
|
||||
icon_state = "facial_fullbeard"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/gt
|
||||
name = "Beard (Goatee)"
|
||||
icon_state = "facial_gt"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/hip
|
||||
name = "Beard (Hipster)"
|
||||
icon_state = "facial_hip"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/jensen
|
||||
name = "Beard (Jensen)"
|
||||
icon_state = "facial_jensen"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/neckbeard
|
||||
name = "Beard (Neckbeard)"
|
||||
icon_state = "facial_neckbeard"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/vlongbeard
|
||||
name = "Beard (Very Long)"
|
||||
icon_state = "facial_wise"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/longbeard
|
||||
name = "Beard (Long)"
|
||||
icon_state = "facial_longbeard"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/fu
|
||||
name = "Moustache (Fu Manchu)"
|
||||
icon_state = "facial_fumanchu"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/hogan
|
||||
name = "Moustache (Hulk Hogan)"
|
||||
icon_state = "facial_hogan" //-Neek
|
||||
|
||||
/datum/sprite_accessory/facial_hair/selleck
|
||||
name = "Moustache (Selleck)"
|
||||
icon_state = "facial_selleck"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/chaplin
|
||||
name = "Moustache (Square)"
|
||||
icon_state = "facial_chaplin"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/vandyke
|
||||
name = "Moustache (Van Dyke)"
|
||||
icon_state = "facial_vandyke"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/watson
|
||||
name = "Moustache (Watson)"
|
||||
icon_state = "facial_watson"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/shaved
|
||||
name = "Shaved"
|
||||
icon_state = null
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/facial_hair/elvis
|
||||
name = "Sideburns (Elvis)"
|
||||
icon_state = "facial_elvis"
|
||||
@@ -0,0 +1,460 @@
|
||||
//////////////////////
|
||||
// Hair Definitions //
|
||||
//////////////////////
|
||||
/datum/sprite_accessory/hair
|
||||
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
|
||||
|
||||
// please make sure they're sorted alphabetically and, where needed, categorized
|
||||
// try to capitalize the names please~
|
||||
// try to spell
|
||||
// you do not need to define _s or _l sub-states, game automatically does this for you
|
||||
|
||||
/datum/sprite_accessory/hair/afro
|
||||
name = "Afro"
|
||||
icon_state = "hair_afro"
|
||||
|
||||
/datum/sprite_accessory/hair/afro2
|
||||
name = "Afro 2"
|
||||
icon_state = "hair_afro2"
|
||||
|
||||
/datum/sprite_accessory/hair/afro_large
|
||||
name = "Afro (Large)"
|
||||
icon_state = "hair_bigafro"
|
||||
|
||||
/datum/sprite_accessory/hair/antenna
|
||||
name = "Ahoge"
|
||||
icon_state = "hair_antenna"
|
||||
|
||||
/datum/sprite_accessory/hair/bald
|
||||
name = "Bald"
|
||||
icon_state = null
|
||||
|
||||
/datum/sprite_accessory/hair/balding
|
||||
name = "Balding Hair"
|
||||
icon_state = "hair_e"
|
||||
|
||||
/datum/sprite_accessory/hair/bedhead
|
||||
name = "Bedhead"
|
||||
icon_state = "hair_bedhead"
|
||||
|
||||
/datum/sprite_accessory/hair/bedhead2
|
||||
name = "Bedhead 2"
|
||||
icon_state = "hair_bedheadv2"
|
||||
|
||||
/datum/sprite_accessory/hair/bedhead3
|
||||
name = "Bedhead 3"
|
||||
icon_state = "hair_bedheadv3"
|
||||
|
||||
/datum/sprite_accessory/hair/beehive
|
||||
name = "Beehive"
|
||||
icon_state = "hair_beehive"
|
||||
|
||||
/datum/sprite_accessory/hair/beehive2
|
||||
name = "Beehive 2"
|
||||
icon_state = "hair_beehivev2"
|
||||
|
||||
/datum/sprite_accessory/hair/bob
|
||||
name = "Bob Hair"
|
||||
icon_state = "hair_bob"
|
||||
|
||||
/datum/sprite_accessory/hair/bob2
|
||||
name = "Bob Hair 2"
|
||||
icon_state = "hair_bob2"
|
||||
|
||||
/datum/sprite_accessory/hair/bob3
|
||||
name = "Bob Hair 3"
|
||||
icon_state = "hair_bobcut"
|
||||
|
||||
/datum/sprite_accessory/hair/bobcurl
|
||||
name = "Bobcurl"
|
||||
icon_state = "hair_bobcurl"
|
||||
|
||||
/datum/sprite_accessory/hair/boddicker
|
||||
name = "Boddicker"
|
||||
icon_state = "hair_boddicker"
|
||||
|
||||
/datum/sprite_accessory/hair/bowl
|
||||
name = "Bowl"
|
||||
icon_state = "hair_bowlcut"
|
||||
|
||||
/datum/sprite_accessory/hair/braid
|
||||
name = "Braid (Floorlength)"
|
||||
icon_state = "hair_braid"
|
||||
|
||||
/datum/sprite_accessory/hair/braided
|
||||
name = "Braided"
|
||||
icon_state = "hair_braided"
|
||||
|
||||
/datum/sprite_accessory/hair/front_braid
|
||||
name = "Braided Front"
|
||||
icon_state = "hair_braidfront"
|
||||
|
||||
/datum/sprite_accessory/hair/not_floorlength_braid
|
||||
name = "Braid (High)"
|
||||
icon_state = "hair_braid2"
|
||||
|
||||
/datum/sprite_accessory/hair/lowbraid
|
||||
name = "Braid (Low)"
|
||||
icon_state = "hair_hbraid"
|
||||
|
||||
/datum/sprite_accessory/hair/shortbraid
|
||||
name = "Braid (Short)"
|
||||
icon_state = "hair_shortbraid"
|
||||
|
||||
/datum/sprite_accessory/hair/braidtail
|
||||
name = "Braided Tail"
|
||||
icon_state = "hair_braidtail"
|
||||
|
||||
/datum/sprite_accessory/hair/bun
|
||||
name = "Bun Head"
|
||||
icon_state = "hair_bun"
|
||||
|
||||
/datum/sprite_accessory/hair/bun2
|
||||
name = "Bun Head 2"
|
||||
icon_state = "hair_bunhead2"
|
||||
|
||||
/datum/sprite_accessory/hair/largebun
|
||||
name = "Bun (Large)"
|
||||
icon_state = "hair_largebun"
|
||||
|
||||
/datum/sprite_accessory/hair/business
|
||||
name = "Business Hair"
|
||||
icon_state = "hair_business"
|
||||
|
||||
/datum/sprite_accessory/hair/business2
|
||||
name = "Business Hair 2"
|
||||
icon_state = "hair_business2"
|
||||
|
||||
/datum/sprite_accessory/hair/business3
|
||||
name = "Business Hair 3"
|
||||
icon_state = "hair_business3"
|
||||
|
||||
/datum/sprite_accessory/hair/business4
|
||||
name = "Business Hair 4"
|
||||
icon_state = "hair_business4"
|
||||
|
||||
/datum/sprite_accessory/hair/buzz
|
||||
name = "Buzzcut"
|
||||
icon_state = "hair_buzzcut"
|
||||
|
||||
/datum/sprite_accessory/hair/combover
|
||||
name = "Combover"
|
||||
icon_state = "hair_combover"
|
||||
|
||||
/datum/sprite_accessory/hair/crew
|
||||
name = "Crewcut"
|
||||
icon_state = "hair_crewcut"
|
||||
|
||||
/datum/sprite_accessory/hair/curls
|
||||
name = "Curls"
|
||||
icon_state = "hair_curls"
|
||||
|
||||
/datum/sprite_accessory/hair/cut
|
||||
name = "Cut Hair"
|
||||
icon_state = "hair_c"
|
||||
|
||||
/datum/sprite_accessory/hair/devillock
|
||||
name = "Devil Lock"
|
||||
icon_state = "hair_devilock"
|
||||
|
||||
/datum/sprite_accessory/hair/dreadlocks
|
||||
name = "Dreadlocks"
|
||||
icon_state = "hair_dreads"
|
||||
|
||||
/datum/sprite_accessory/hair/drillhair
|
||||
name = "Drill Hair"
|
||||
icon_state = "hair_drillhair"
|
||||
|
||||
/datum/sprite_accessory/hair/drillhairextended
|
||||
name = "Drill Hair (Extended)"
|
||||
icon_state = "hair_drillhairextended"
|
||||
|
||||
/datum/sprite_accessory/hair/emo
|
||||
name = "Emo"
|
||||
icon_state = "hair_emo"
|
||||
|
||||
/datum/sprite_accessory/hair/feather
|
||||
name = "Feather"
|
||||
icon_state = "hair_feather"
|
||||
|
||||
/datum/sprite_accessory/hair/sargeant
|
||||
name = "Flat Top"
|
||||
icon_state = "hair_sargeant"
|
||||
|
||||
/datum/sprite_accessory/hair/bigflattop
|
||||
name = "Flat Top (Big)"
|
||||
icon_state = "hair_bigflattop"
|
||||
|
||||
/datum/sprite_accessory/hair/fag
|
||||
name = "Flow Hair"
|
||||
icon_state = "hair_f"
|
||||
|
||||
/datum/sprite_accessory/hair/gelled
|
||||
name = "Gelled Back"
|
||||
icon_state = "hair_gelled"
|
||||
|
||||
/datum/sprite_accessory/hair/gentle
|
||||
name = "Gentle"
|
||||
icon_state = "hair_gentle"
|
||||
|
||||
/datum/sprite_accessory/hair/halfbang
|
||||
name = "Half-banged Hair"
|
||||
icon_state = "hair_halfbang"
|
||||
|
||||
/datum/sprite_accessory/hair/halfbang2
|
||||
name = "Half-banged Hair 2"
|
||||
icon_state = "hair_halfbang2"
|
||||
|
||||
/datum/sprite_accessory/hair/hedgehog
|
||||
name = "Hedgehog Hair"
|
||||
icon_state = "hair_hedgehog"
|
||||
|
||||
/datum/sprite_accessory/hair/himecut
|
||||
name = "Hime Cut"
|
||||
icon_state = "hair_himecut"
|
||||
|
||||
/datum/sprite_accessory/hair/himecut2
|
||||
name = "Hime Cut 2"
|
||||
icon_state = "hair_himecut2"
|
||||
|
||||
/datum/sprite_accessory/hair/himeup
|
||||
name = "Hime Updo"
|
||||
icon_state = "hair_himeup"
|
||||
|
||||
/datum/sprite_accessory/hair/hitop
|
||||
name = "Hitop"
|
||||
icon_state = "hair_hitop"
|
||||
|
||||
/datum/sprite_accessory/hair/jensen
|
||||
name = "Jensen Hair"
|
||||
icon_state = "hair_jensen"
|
||||
|
||||
/datum/sprite_accessory/hair/keanu
|
||||
name = "Keanu Hair"
|
||||
icon_state = "hair_keanu"
|
||||
|
||||
/datum/sprite_accessory/hair/kusangi
|
||||
name = "Kusanagi Hair"
|
||||
icon_state = "hair_kusanagi"
|
||||
|
||||
/datum/sprite_accessory/hair/long
|
||||
name = "Long Hair 1"
|
||||
icon_state = "hair_long"
|
||||
|
||||
/datum/sprite_accessory/hair/long2
|
||||
name = "Long Hair 2"
|
||||
icon_state = "hair_long2"
|
||||
|
||||
/datum/sprite_accessory/hair/long3
|
||||
name = "Long Hair 3"
|
||||
icon_state = "hair_long3"
|
||||
|
||||
/datum/sprite_accessory/hair/long_over_eye
|
||||
name = "Long Over Eye"
|
||||
icon_state = "hair_longovereye"
|
||||
|
||||
/datum/sprite_accessory/hair/longbangs
|
||||
name = "Long Bangs"
|
||||
icon_state = "hair_lbangs"
|
||||
|
||||
/datum/sprite_accessory/hair/longemo
|
||||
name = "Long Emo"
|
||||
icon_state = "hair_longemo"
|
||||
|
||||
/datum/sprite_accessory/hair/longfringe
|
||||
name = "Long Fringe"
|
||||
icon_state = "hair_longfringe"
|
||||
|
||||
/datum/sprite_accessory/hair/sidepartlongalt
|
||||
name = "Long Side Part"
|
||||
icon_state = "hair_longsidepart"
|
||||
|
||||
/datum/sprite_accessory/hair/megaeyebrows
|
||||
name = "Mega Eyebrows"
|
||||
icon_state = "hair_megaeyebrows"
|
||||
|
||||
/datum/sprite_accessory/hair/messy
|
||||
name = "Messy"
|
||||
icon_state = "hair_messy"
|
||||
|
||||
/datum/sprite_accessory/hair/mohawk
|
||||
name = "Mohawk"
|
||||
icon_state = "hair_d"
|
||||
|
||||
/datum/sprite_accessory/hair/reversemohawk
|
||||
name = "Mohawk (Reverse)"
|
||||
icon_state = "hair_reversemohawk"
|
||||
|
||||
/datum/sprite_accessory/hair/odango
|
||||
name = "Odango"
|
||||
icon_state = "hair_odango"
|
||||
|
||||
/datum/sprite_accessory/hair/ombre
|
||||
name = "Ombre"
|
||||
icon_state = "hair_ombre"
|
||||
|
||||
/datum/sprite_accessory/hair/oneshoulder
|
||||
name = "One Shoulder"
|
||||
icon_state = "hair_oneshoulder"
|
||||
|
||||
/datum/sprite_accessory/hair/over_eye
|
||||
name = "Over Eye"
|
||||
icon_state = "hair_shortovereye"
|
||||
|
||||
//Donator item - fractious
|
||||
/datum/sprite_accessory/hair/over_eye_fr
|
||||
name = "Over Eye (fract)"
|
||||
icon_state = "hair_shortovereye_1f"
|
||||
ckeys_allowed = list("fractious")
|
||||
|
||||
/datum/sprite_accessory/hair/parted
|
||||
name = "Parted"
|
||||
icon_state = "hair_parted"
|
||||
|
||||
/datum/sprite_accessory/hair/partedside
|
||||
name = "Parted (Side)"
|
||||
icon_state = "hair_part"
|
||||
|
||||
/datum/sprite_accessory/hair/kagami
|
||||
name = "Pigtails"
|
||||
icon_state = "hair_kagami"
|
||||
|
||||
/datum/sprite_accessory/hair/pigtail
|
||||
name = "Pigtails 2"
|
||||
icon_state = "hair_pigtails"
|
||||
|
||||
/datum/sprite_accessory/hair/pigtail2
|
||||
name = "Pigtails 3"
|
||||
icon_state = "hair_pigtails2"
|
||||
|
||||
/datum/sprite_accessory/hair/pixie
|
||||
name = "Pixie Cut"
|
||||
icon_state = "hair_pixie"
|
||||
|
||||
/datum/sprite_accessory/hair/pompadour
|
||||
name = "Pompadour"
|
||||
icon_state = "hair_pompadour"
|
||||
|
||||
/datum/sprite_accessory/hair/bigpompadour
|
||||
name = "Pompadour (Big)"
|
||||
icon_state = "hair_bigpompadour"
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail1
|
||||
name = "Ponytail"
|
||||
icon_state = "hair_ponytail"
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail2
|
||||
name = "Ponytail 2"
|
||||
icon_state = "hair_ponytail2"
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail3
|
||||
name = "Ponytail 3"
|
||||
icon_state = "hair_ponytail3"
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail4
|
||||
name = "Ponytail 4"
|
||||
icon_state = "hair_ponytail4"
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail5
|
||||
name = "Ponytail 5"
|
||||
icon_state = "hair_ponytail5"
|
||||
|
||||
/datum/sprite_accessory/hair/highponytail
|
||||
name = "Ponytail (High)"
|
||||
icon_state = "hair_highponytail"
|
||||
|
||||
/datum/sprite_accessory/hair/longponytail
|
||||
name = "Ponytail (Long)"
|
||||
icon_state = "hair_longstraightponytail"
|
||||
|
||||
/datum/sprite_accessory/hair/sidetail
|
||||
name = "Ponytail (Side)"
|
||||
icon_state = "hair_sidetail"
|
||||
|
||||
/datum/sprite_accessory/hair/sidetail2
|
||||
name = "Ponytail (Side) 2"
|
||||
icon_state = "hair_sidetail2"
|
||||
|
||||
/datum/sprite_accessory/hair/sidetail3
|
||||
name = "Ponytail (Side) 3"
|
||||
icon_state = "hair_sidetail3"
|
||||
|
||||
/datum/sprite_accessory/hair/sidetail4
|
||||
name = "Ponytail (Side) 4"
|
||||
icon_state = "hair_sidetail4"
|
||||
|
||||
/datum/sprite_accessory/hair/quiff
|
||||
name = "Quiff"
|
||||
icon_state = "hair_quiff"
|
||||
|
||||
/datum/sprite_accessory/hair/short
|
||||
name = "Short Hair"
|
||||
icon_state = "hair_a"
|
||||
|
||||
/datum/sprite_accessory/hair/shorthair2
|
||||
name = "Short Hair 2"
|
||||
icon_state = "hair_shorthair2"
|
||||
|
||||
/datum/sprite_accessory/hair/shorthair3
|
||||
name = "Short Hair 3"
|
||||
icon_state = "hair_shorthair3"
|
||||
|
||||
/datum/sprite_accessory/hair/shoulderlength
|
||||
name = "Shoulder-length Hair"
|
||||
icon_state = "hair_b"
|
||||
|
||||
/datum/sprite_accessory/hair/sidecut
|
||||
name = "Sidecut"
|
||||
icon_state = "hair_sidecut"
|
||||
|
||||
/datum/sprite_accessory/hair/skinhead
|
||||
name = "Skinhead"
|
||||
icon_state = "hair_skinhead"
|
||||
|
||||
/datum/sprite_accessory/hair/protagonist
|
||||
name = "Slightly Long Hair"
|
||||
icon_state = "hair_protagonist"
|
||||
|
||||
/datum/sprite_accessory/hair/spiky
|
||||
name = "Spiky"
|
||||
icon_state = "hair_spikey"
|
||||
|
||||
/datum/sprite_accessory/hair/spiky2
|
||||
name = "Spiky 2"
|
||||
icon_state = "hair_spiky"
|
||||
|
||||
/datum/sprite_accessory/hair/spiky3
|
||||
name = "Spiky 3"
|
||||
icon_state = "hair_spiky2"
|
||||
|
||||
/datum/sprite_accessory/hair/swept
|
||||
name = "Swept Back Hair"
|
||||
icon_state = "hair_swept"
|
||||
|
||||
/datum/sprite_accessory/hair/swept2
|
||||
name = "Swept Back Hair 2"
|
||||
icon_state = "hair_swept2"
|
||||
|
||||
/datum/sprite_accessory/hair/tressshoulder
|
||||
name = "Tress Shoulder"
|
||||
icon_state = "hair_tressshoulder"
|
||||
|
||||
/datum/sprite_accessory/hair/updo
|
||||
name = "Updo"
|
||||
icon_state = "hair_updo"
|
||||
|
||||
/datum/sprite_accessory/hair/longer
|
||||
name = "Very Long Hair"
|
||||
icon_state = "hair_vlong"
|
||||
|
||||
/datum/sprite_accessory/hair/longest
|
||||
name = "Very Long Hair 2"
|
||||
icon_state = "hair_longest"
|
||||
|
||||
/datum/sprite_accessory/hair/longest2
|
||||
name = "Very Long Over Eye"
|
||||
icon_state = "hair_longest2"
|
||||
|
||||
/datum/sprite_accessory/hair/longestalt
|
||||
name = "Very Long with Fringe"
|
||||
icon_state = "hair_vlongfringe"
|
||||
@@ -0,0 +1,26 @@
|
||||
/datum/sprite_accessory/horns
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/horns/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/horns/simple
|
||||
name = "Simple"
|
||||
icon_state = "simple"
|
||||
|
||||
/datum/sprite_accessory/horns/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/horns/curled
|
||||
name = "Curled"
|
||||
icon_state = "curled"
|
||||
|
||||
/datum/sprite_accessory/horns/ram
|
||||
name = "Ram"
|
||||
icon_state = "ram"
|
||||
|
||||
/datum/sprite_accessory/horns/angler
|
||||
name = "Angeler"
|
||||
icon_state = "angler"
|
||||
@@ -0,0 +1,8 @@
|
||||
/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
|
||||
icon = null //These datums exist for selecting legs on preference, and little else
|
||||
|
||||
/datum/sprite_accessory/legs/none
|
||||
name = "Normal Legs"
|
||||
|
||||
/datum/sprite_accessory/legs/digitigrade_lizard
|
||||
name = "Digitigrade Legs"
|
||||
@@ -0,0 +1,68 @@
|
||||
/datum/sprite_accessory/moth_wings
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
color_src = null
|
||||
|
||||
/datum/sprite_accessory/moth_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/monarch
|
||||
name = "Monarch"
|
||||
icon_state = "monarch"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/luna
|
||||
name = "Luna"
|
||||
icon_state = "luna"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
locked = TRUE
|
||||
|
||||
/datum/sprite_accessory/moth_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/moth_wings/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
@@ -0,0 +1,53 @@
|
||||
/datum/sprite_accessory/spines
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/spines_animated
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/spines/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/spines/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/spines/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
|
||||
/datum/sprite_accessory/spines/long
|
||||
name = "Long"
|
||||
icon_state = "long"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/long
|
||||
name = "Long"
|
||||
icon_state = "long"
|
||||
|
||||
/datum/sprite_accessory/spines/longmeme
|
||||
name = "Long + Membrane"
|
||||
icon_state = "longmeme"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/longmeme
|
||||
name = "Long + Membrane"
|
||||
icon_state = "longmeme"
|
||||
|
||||
/datum/sprite_accessory/spines/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
@@ -0,0 +1,18 @@
|
||||
/datum/sprite_accessory/snouts
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/snouts/sharp
|
||||
name = "Sharp"
|
||||
icon_state = "sharp"
|
||||
|
||||
/datum/sprite_accessory/snouts/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
|
||||
/datum/sprite_accessory/snouts/sharplight
|
||||
name = "Sharp + Light"
|
||||
icon_state = "sharplight"
|
||||
|
||||
/datum/sprite_accessory/snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
@@ -0,0 +1,96 @@
|
||||
///////////////////////
|
||||
// Socks Definitions //
|
||||
///////////////////////
|
||||
|
||||
/datum/sprite_accessory/socks
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
|
||||
/datum/sprite_accessory/socks/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/socks/black_knee
|
||||
name = "Knee-high (Black)"
|
||||
icon_state = "black_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/commie_knee
|
||||
name = "Knee-High (Commie)"
|
||||
icon_state = "commie_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/usa_knee
|
||||
name = "Knee-High (Freedom)"
|
||||
icon_state = "assblastusa_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_knee
|
||||
name = "Knee-high (Rainbow)"
|
||||
icon_state = "rainbow_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/striped_knee
|
||||
name = "Knee-high (Striped)"
|
||||
icon_state = "striped_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/thin_knee
|
||||
name = "Knee-high (Thin)"
|
||||
icon_state = "thin_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/uk_knee
|
||||
name = "Knee-High (UK)"
|
||||
icon_state = "uk_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/white_knee
|
||||
name = "Knee-high (White)"
|
||||
icon_state = "white_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/black_norm
|
||||
name = "Normal (Black)"
|
||||
icon_state = "black_norm"
|
||||
|
||||
/datum/sprite_accessory/socks/white_norm
|
||||
name = "Normal (White)"
|
||||
icon_state = "white_norm"
|
||||
|
||||
/datum/sprite_accessory/socks/pantyhose
|
||||
name = "Pantyhose"
|
||||
icon_state = "pantyhose"
|
||||
|
||||
/datum/sprite_accessory/socks/black_short
|
||||
name = "Short (Black)"
|
||||
icon_state = "black_short"
|
||||
|
||||
/datum/sprite_accessory/socks/white_short
|
||||
name = "Short (White)"
|
||||
icon_state = "white_short"
|
||||
|
||||
/datum/sprite_accessory/socks/black_thigh
|
||||
name = "Thigh-high (Black)"
|
||||
icon_state = "black_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/commie_thigh
|
||||
name = "Thigh-high (Commie)"
|
||||
icon_state = "commie_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/usa_thigh
|
||||
name = "Thigh-high (Freedom)"
|
||||
icon_state = "assblastusa_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_thigh
|
||||
name = "Thigh-high (Rainbow)"
|
||||
icon_state = "rainbow_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/striped_thigh
|
||||
name = "Thigh-high (Striped)"
|
||||
icon_state = "striped_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/thin_thigh
|
||||
name = "Thigh-high (Thin)"
|
||||
icon_state = "thin_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/uk_thigh
|
||||
name = "Thigh-high (UK)"
|
||||
icon_state = "uk_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/white_thigh
|
||||
name = "Thigh-high (White)"
|
||||
icon_state = "white_thigh"
|
||||
@@ -0,0 +1,55 @@
|
||||
/datum/sprite_accessory/tails
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails/human/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
/*
|
||||
/datum/sprite_accessory/tails/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR*/
|
||||
@@ -0,0 +1,308 @@
|
||||
////////////////////////////
|
||||
// Undershirt Definitions //
|
||||
////////////////////////////
|
||||
|
||||
/datum/sprite_accessory/undershirt
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/undershirt/bluejersey
|
||||
name = "Shirt, Jersey - Blue"
|
||||
icon_state = "shirt_bluejersey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redjersey
|
||||
name = "Shirt, Jersey - Red"
|
||||
icon_state = "shirt_redjersey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/bluepolo
|
||||
name = "Shirt, Polo - Blue"
|
||||
icon_state = "bluepolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/grayyellowpolo
|
||||
name = "Shirt, Polo - Gray, Yellow"
|
||||
icon_state = "grayyellowpolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redpolo
|
||||
name = "Shirt, Polo - Red"
|
||||
icon_state = "redpolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whitepolo
|
||||
name = "Shirt, Polo - White"
|
||||
icon_state = "whitepolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/alienshirt
|
||||
name = "Shirt - Alien"
|
||||
icon_state = "shirt_alien"
|
||||
|
||||
/datum/sprite_accessory/undershirt/mondmondjaja
|
||||
name = "Shirt - Band"
|
||||
icon_state = "band"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_black
|
||||
name = "Shirt - Black"
|
||||
icon_state = "shirt_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshirt
|
||||
name = "Shirt - Blue"
|
||||
icon_state = "shirt_blue"
|
||||
|
||||
/datum/sprite_accessory/undershirt/clownshirt
|
||||
name = "Shirt - Clown"
|
||||
icon_state = "shirt_clown"
|
||||
|
||||
/datum/sprite_accessory/undershirt/commie
|
||||
name = "Shirt - Commie"
|
||||
icon_state = "shirt_commie"
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshirt
|
||||
name = "Shirt - Green"
|
||||
icon_state = "shirt_green"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_grey
|
||||
name = "Shirt - Grey"
|
||||
icon_state = "shirt_grey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ian
|
||||
name = "Shirt - Ian"
|
||||
icon_state = "ian"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ilovent
|
||||
name = "Shirt - I Love NT"
|
||||
icon_state = "ilovent"
|
||||
|
||||
/datum/sprite_accessory/undershirt/lover
|
||||
name = "Shirt - Lover"
|
||||
icon_state = "lover"
|
||||
|
||||
/datum/sprite_accessory/undershirt/matroska
|
||||
name = "Shirt - Matroska"
|
||||
icon_state = "matroska"
|
||||
|
||||
/datum/sprite_accessory/undershirt/meat
|
||||
name = "Shirt - Meat"
|
||||
icon_state = "shirt_meat"
|
||||
|
||||
/datum/sprite_accessory/undershirt/nano
|
||||
name = "Shirt - Nanotrasen"
|
||||
icon_state = "shirt_nano"
|
||||
|
||||
/datum/sprite_accessory/undershirt/peace
|
||||
name = "Shirt - Peace"
|
||||
icon_state = "peace"
|
||||
|
||||
/datum/sprite_accessory/undershirt/pacman
|
||||
name = "Shirt - Pogoman"
|
||||
icon_state = "pogoman"
|
||||
|
||||
/datum/sprite_accessory/undershirt/question
|
||||
name = "Shirt - Question"
|
||||
icon_state = "shirt_question"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redshirt
|
||||
name = "Shirt - Red"
|
||||
icon_state = "shirt_red"
|
||||
|
||||
/datum/sprite_accessory/undershirt/skull
|
||||
name = "Shirt - Skull"
|
||||
icon_state = "shirt_skull"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ss13
|
||||
name = "Shirt - SS13"
|
||||
icon_state = "shirt_ss13"
|
||||
|
||||
/datum/sprite_accessory/undershirt/stripe
|
||||
name = "Shirt - Striped"
|
||||
icon_state = "shirt_stripes"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tiedye
|
||||
name = "Shirt - Tie-dye"
|
||||
icon_state = "shirt_tiedye"
|
||||
|
||||
/datum/sprite_accessory/undershirt/uk
|
||||
name = "Shirt - UK"
|
||||
icon_state = "uk"
|
||||
|
||||
/datum/sprite_accessory/undershirt/usa
|
||||
name = "Shirt - USA"
|
||||
icon_state = "shirt_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_white
|
||||
name = "Shirt - White"
|
||||
icon_state = "shirt_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blackshortsleeve
|
||||
name = "Shirt, Short Sleeved - Black"
|
||||
icon_state = "blackshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshortsleeve
|
||||
name = "Shirt, Short Sleeved - Blue"
|
||||
icon_state = "blueshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshortsleeve
|
||||
name = "Shirt, Short Sleeved - Green"
|
||||
icon_state = "greenshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/purpleshortsleeve
|
||||
name = "Shirt, Short Sleeved - Purple"
|
||||
icon_state = "purpleshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whiteshortsleeve
|
||||
name = "Shirt, Short Sleeved - White"
|
||||
icon_state = "whiteshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshirtsport
|
||||
name = "Shirt, Sports - Blue"
|
||||
icon_state = "blueshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshirtsport
|
||||
name = "Shirt, Sports - Green"
|
||||
icon_state = "greenshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/redshirtsport
|
||||
name = "Shirt, Sports - Red"
|
||||
icon_state = "redshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/redtop
|
||||
name = "Shirt, Short - Red"
|
||||
icon_state = "redtop"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whitetop
|
||||
name = "Shirt, Short - White"
|
||||
icon_state = "whitetop"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_blue
|
||||
name = "T-Shirt - Blue"
|
||||
icon_state = "blueshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_green
|
||||
name = "T-Shirt - Green"
|
||||
icon_state = "greenshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_red
|
||||
name = "T-Shirt - Red"
|
||||
icon_state = "redshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/yellowshirt
|
||||
name = "T-Shirt - Yellow"
|
||||
icon_state = "yellowshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_black
|
||||
name = "Tank Top - Black"
|
||||
icon_state = "tank_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tankfire
|
||||
name = "Tank Top - Fire"
|
||||
icon_state = "tank_fire"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_grey
|
||||
name = "Tank Top - Grey"
|
||||
icon_state = "tank_grey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_midriff
|
||||
name = "Tank Top - Midriff"
|
||||
icon_state = "tank_midriff"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_red
|
||||
name = "Tank Top - Red"
|
||||
icon_state = "tank_red"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tankstripe
|
||||
name = "Tank Top - Striped"
|
||||
icon_state = "tank_stripes"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_white
|
||||
name = "Tank Top - White"
|
||||
icon_state = "tank_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_red
|
||||
name = "Bra - Red"
|
||||
icon_state = "bra_red"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_pink
|
||||
name = "Bra - Pink"
|
||||
icon_state = "bra_pink"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_kinky
|
||||
name = "Bra - Kinky Black"
|
||||
icon_state = "bra_kinky"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_green
|
||||
name = "Bra - Green"
|
||||
icon_state = "bra_green"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_commie
|
||||
name = "Bra - Freedom"
|
||||
icon_state = "bra_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_commie
|
||||
name = "Bra - Commie"
|
||||
icon_state = "bra_commie"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_babyblue
|
||||
name = "Bra, Baby Blue"
|
||||
icon_state = "bra_babyblue"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_black
|
||||
name = "Bra - Black"
|
||||
icon_state = "bra_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_uk
|
||||
name = "Bra - UK"
|
||||
icon_state = "bra_uk"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_white
|
||||
name = "Bra - White"
|
||||
icon_state = "bra_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_white_neko
|
||||
name = "Bra, Neko - white"
|
||||
icon_state = "bra_neko_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_black_neko
|
||||
name = "Bra, Neko - Black"
|
||||
icon_state = "bra_neko_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_blackalt
|
||||
name = "Bra, Sports - Black"
|
||||
icon_state = "bra_sports_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/sports_bra
|
||||
name = "Bra, Sports 1 - White"
|
||||
icon_state = "sports_bra"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_whitealt
|
||||
name = "Bra, Sports 2 - White"
|
||||
icon_state = "bra_sports_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/sports_bra2
|
||||
name = "Bra, Sports 3 - White"
|
||||
icon_state = "sports_bra_alt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_yellow
|
||||
name = "Bra - Yellow"
|
||||
icon_state = "bra_yellow"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_thong
|
||||
name = "Bra, Strapless - Pink"
|
||||
icon_state = "bra_strapless_pink"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_blue
|
||||
name = "Bra, Strapless - Blue"
|
||||
icon_state = "bra_blue"
|
||||
|
||||
/datum/sprite_accessory/undershirt/swimsuit_green
|
||||
name = "Swimsuit, Top - Green"
|
||||
icon_state = "bra_swimming_green"
|
||||
|
||||
/datum/sprite_accessory/undershirt/swimsuit_purple
|
||||
name = "Swimsuit, Top - Purple"
|
||||
icon_state = "bra_swimming_purple"
|
||||
@@ -0,0 +1,171 @@
|
||||
///////////////////////////
|
||||
// Underwear Definitions //
|
||||
///////////////////////////
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/underwear/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
/datum/sprite_accessory/underwear/mankini
|
||||
name = "Mankini - Green"
|
||||
icon_state = "mankini_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_kinky
|
||||
name = "Jockstrap - White"
|
||||
icon_state = "jockstrap_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_white
|
||||
name = "Briefs - White"
|
||||
icon_state = "briefs_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_black
|
||||
name = "Briefs - Black"
|
||||
icon_state = "briefs_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_grey
|
||||
name = "Briefs - Grey"
|
||||
icon_state = "briefs_grey"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_red
|
||||
name = "Briefs - Red"
|
||||
icon_state = "briefs_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_green
|
||||
name = "Briefs - Green"
|
||||
icon_state = "briefs_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_blue
|
||||
name = "Briefs - Blue"
|
||||
icon_state = "briefs_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_blackalt
|
||||
name = "Boxers - Black"
|
||||
icon_state = "boxers_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_greyalt
|
||||
name = "Boxers - Grey"
|
||||
icon_state = "boxers_grey"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_hearts
|
||||
name = "Boxers - Heart"
|
||||
icon_state = "boxers_heart"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_stripe
|
||||
name = "Boxers - Striped"
|
||||
icon_state = "boxers_striped"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_commie
|
||||
name = "Boxers - Striped Communist"
|
||||
icon_state = "boxers_commie"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_usastripe
|
||||
name = "Boxers - Striped Freedom"
|
||||
icon_state = "boxers_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_uk
|
||||
name = "Boxers - Striped UK"
|
||||
icon_state = "boxers_uk"
|
||||
|
||||
|
||||
/datum/sprite_accessory/underwear/female_whitealt
|
||||
name = "Boxer Briefs - White"
|
||||
icon_state = "boxer_briefs_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_blackalt
|
||||
name = "Boxer Briefs - Black"
|
||||
icon_state = "boxer_briefs_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_pink
|
||||
name = "Boxer Briefs - Pink"
|
||||
icon_state = "boxer_briefs_pink"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_babyblue
|
||||
name = "Boxer Briefs - Baby Blue"
|
||||
icon_state = "boxer_briefs_babyblue"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_yellow
|
||||
name = "Boxer Briefs - Yellow"
|
||||
icon_state = "boxer_briefs_yellow"
|
||||
|
||||
|
||||
/datum/sprite_accessory/underwear/female_black
|
||||
name = "Panties - Black"
|
||||
icon_state = "panties_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_blue
|
||||
name = "Panties - Blue"
|
||||
icon_state = "panties_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_commie
|
||||
name = "Panties - Commie"
|
||||
icon_state = "panties_commie"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_usastripe
|
||||
name = "Panties - Freedom"
|
||||
icon_state = "panties_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_green
|
||||
name = "Panties - Green"
|
||||
icon_state = "panties_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_kinky
|
||||
name = "Panties - Kinky Black"
|
||||
icon_state = "panties_kinky"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_red
|
||||
name = "Panties - Red"
|
||||
icon_state = "panties_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_uk
|
||||
name = "Panties - UK"
|
||||
icon_state = "panties_uk"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_white
|
||||
name = "Panties - White"
|
||||
icon_state = "panties_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_white_neko
|
||||
name = "Panties, Neko - White"
|
||||
icon_state = "panties_neko_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_black_neko
|
||||
name = "Panties, Neko - Black"
|
||||
icon_state = "panties_neko_black"
|
||||
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_red
|
||||
name = "Swimsuit, One Piece - Red"
|
||||
icon_state = "swimming_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit
|
||||
name = "Swimsuit, One Piece - Black"
|
||||
icon_state = "swimming_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_blue
|
||||
name = "Swimsuit, One Piece - Striped Blue"
|
||||
icon_state = "swimming_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_green
|
||||
name = "Swimsuit, Bottom - Green"
|
||||
icon_state = "panties_swimming_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_purple
|
||||
name = "Swimsuit, Bottom - Purple"
|
||||
icon_state = "panties_swimming_purple"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_thong_black
|
||||
name = "Thong - Black"
|
||||
icon_state = "thong_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_thong
|
||||
name = "Thong - Pink"
|
||||
icon_state = "thong_pink"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_babydoll
|
||||
name = "Babydoll - Black"
|
||||
icon_state = "babydoll"
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/datum/sprite_accessory/wings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/wings_open
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
|
||||
/datum/sprite_accessory/wings_open/angel
|
||||
name = "Angel"
|
||||
icon_state = "angel"
|
||||
color_src = 0
|
||||
dimension_x = 46
|
||||
center = TRUE
|
||||
dimension_y = 34
|
||||
|
||||
/datum/sprite_accessory/wings
|
||||
icon = 'icons/mob/wings.dmi'
|
||||
|
||||
/datum/sprite_accessory/wings/angel
|
||||
name = "Angel"
|
||||
icon_state = "angel"
|
||||
color_src = 0
|
||||
dimension_x = 46
|
||||
center = TRUE
|
||||
dimension_y = 34
|
||||
locked = TRUE
|
||||
@@ -21,6 +21,7 @@
|
||||
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
|
||||
layer = MOB_LAYER
|
||||
max_integrity = 100
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
|
||||
var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/mob/living/carbon/human/dummy
|
||||
real_name = "Test Dummy"
|
||||
status_flags = GODMODE|CANPUSH
|
||||
mouse_drag_pointer = MOUSE_INACTIVE_POINTER
|
||||
var/in_use = FALSE
|
||||
|
||||
INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
|
||||
@@ -39,6 +39,19 @@
|
||||
restraint_check = TRUE
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/human/mawp
|
||||
key = "mawp"
|
||||
key_third_person = "mawps"
|
||||
message = "mawps annoyingly."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/human/mawp/run_emote(mob/living/user, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(ishuman(user))
|
||||
if(prob(10))
|
||||
user.adjustEarDamage(-5, -5)
|
||||
|
||||
/datum/emote/living/carbon/human/mumble
|
||||
key = "mumble"
|
||||
key_third_person = "mumbles"
|
||||
|
||||
@@ -18,6 +18,16 @@
|
||||
var/list/obscured = check_obscured_slots()
|
||||
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
|
||||
|
||||
if(ishuman(src)) //user just returned, y'know, the user's own species. dumb.
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/datum/species/pref_species = H.dna.species
|
||||
if(get_visible_name() == "Unknown") // same as flavor text, but hey it works.
|
||||
msg += "You can't make out what species they are.\n"
|
||||
else if(skipface)
|
||||
msg += "You can't make out what species they are.\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!\n"
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
|
||||
//accessory
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
|
||||
var/nameless = FALSE //For drones of both the insectoid and robotic kind. And other types of nameless critters.
|
||||
|
||||
var/custom_species = null
|
||||
|
||||
var/datum/personal_crafting/handcrafting
|
||||
var/datum/physiology/physiology
|
||||
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
/mob/living/carbon/human/say_mod(input, message_mode)
|
||||
verb_say = dna.species.say_mod
|
||||
if(slurring)
|
||||
return "slurs"
|
||||
else
|
||||
. = ..()
|
||||
switch(slurring)
|
||||
if(10 to 25)
|
||||
return "jumbles"
|
||||
if(25 to 50)
|
||||
return "slurs"
|
||||
if(50 to INFINITY)
|
||||
return "garbles"
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/human/treat_message(message)
|
||||
message = dna.species.handle_speech(message,src)
|
||||
|
||||
@@ -300,6 +300,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else
|
||||
if(C.client)
|
||||
C.canbearoused = C.client.prefs.arousable
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(NOGENITALS in H.dna.species.species_traits)
|
||||
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
|
||||
|
||||
// EDIT ENDS
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load)
|
||||
@@ -557,7 +562,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
bodyparts_to_add -= "waggingspines"
|
||||
|
||||
if("snout" in mutant_bodyparts) //Take a closer look at that snout!
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) || (H.head && (H.head.flags_inv & HIDEFACE)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "snout"
|
||||
|
||||
if("frills" in mutant_bodyparts)
|
||||
@@ -569,7 +574,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
bodyparts_to_add -= "horns"
|
||||
|
||||
if("ears" in mutant_bodyparts)
|
||||
if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
if(!H.dna.features["ears"] || H.dna.features["ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "ears"
|
||||
|
||||
if("wings" in mutant_bodyparts)
|
||||
@@ -607,11 +612,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
bodyparts_to_add -= "mam_waggingtail"
|
||||
|
||||
if("mam_ears" in mutant_bodyparts)
|
||||
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEEARS) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEEARS)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_ears"
|
||||
|
||||
if("mam_snouts" in mutant_bodyparts) //Take a closer look at that snout!
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) || (H.head && (H.head.flags_inv & HIDEFACE)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_snouts"
|
||||
|
||||
if("taur" in mutant_bodyparts)
|
||||
@@ -691,8 +696,29 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
S = GLOB.moth_wings_list[H.dna.features["moth_wings"]]
|
||||
if("caps")
|
||||
S = GLOB.caps_list[H.dna.features["caps"]]
|
||||
else
|
||||
S = citadel_mutant_bodyparts(bodypart, H)
|
||||
if("ipc_screen")
|
||||
S = GLOB.ipc_screens_list[H.dna.features["ipc_screen"]]
|
||||
if("ipc_antenna")
|
||||
S = GLOB.ipc_antennas_list[H.dna.features["ipc_antenna"]]
|
||||
if("mam_tail")
|
||||
S = GLOB.mam_tails_list[H.dna.features["mam_tail"]]
|
||||
if("mam_waggingtail")
|
||||
S = GLOB.mam_tails_animated_list[H.dna.features["mam_tail"]]
|
||||
if("mam_body_markings")
|
||||
S = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
if("mam_ears")
|
||||
S = GLOB.mam_ears_list[H.dna.features["mam_ears"]]
|
||||
if("mam_snouts")
|
||||
S = GLOB.mam_snouts_list[H.dna.features["mam_snouts"]]
|
||||
if("taur")
|
||||
S = GLOB.taur_list[H.dna.features["taur"]]
|
||||
if("xenodorsal")
|
||||
S = GLOB.xeno_dorsal_list[H.dna.features["xenodorsal"]]
|
||||
if("xenohead")
|
||||
S = GLOB.xeno_head_list[H.dna.features["xenohead"]]
|
||||
if("xenotail")
|
||||
S = GLOB.xeno_tail_list[H.dna.features["xenotail"]]
|
||||
|
||||
if(!S || S.icon_state == "none")
|
||||
continue
|
||||
|
||||
@@ -703,9 +729,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
//A little rename so we don't have to use tail_lizard or tail_human when naming the sprites.
|
||||
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "mam_tail" || bodypart == "xenotail")
|
||||
bodypart = "tail"
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human")
|
||||
else if(bodypart == "waggingtail_lizard")
|
||||
bodypart = "waggingtail"
|
||||
if(bodypart == "mam_waggingtail")
|
||||
if(bodypart == "mam_waggingtail" || bodypart == "waggingtail_human")
|
||||
bodypart = "tailwag"
|
||||
if(bodypart == "mam_ears" || bodypart == "ears")
|
||||
bodypart = "ears"
|
||||
@@ -724,16 +750,18 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
var/list/colorlist = list()
|
||||
colorlist.Cut()
|
||||
colorlist += ReadRGB(H.dna.features["mcolor"])
|
||||
colorlist += ReadRGB(H.dna.features["mcolor2"])
|
||||
colorlist += ReadRGB(H.dna.features["mcolor3"])
|
||||
colorlist += list(0,0,0)
|
||||
colorlist += ReadRGB("[H.dna.features["mcolor"]]0")
|
||||
colorlist += ReadRGB("[H.dna.features["mcolor2"]]0")
|
||||
colorlist += ReadRGB("[H.dna.features["mcolor3"]]0")
|
||||
colorlist += list(0,0,0, hair_alpha)
|
||||
for(var/index=1, index<=colorlist.len, index++)
|
||||
colorlist[index] = colorlist[index]/255
|
||||
|
||||
if(!(H.has_trait(TRAIT_HUSK)))
|
||||
if(!forced_colour)
|
||||
switch(S.color_src)
|
||||
if(SKINTONE)
|
||||
accessory_overlay.color = "#[skintone2hex(H.skin_tone)]"
|
||||
if(MUTCOLORS)
|
||||
if(fixed_mut_color)
|
||||
accessory_overlay.color = "#[fixed_mut_color]"
|
||||
@@ -774,11 +802,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += list(0,0,0)
|
||||
husklist += list(0,0,0, hair_alpha)
|
||||
for(var/index=1, index<=husklist.len, index++)
|
||||
husklist[index] = husklist[index]/255
|
||||
accessory_overlay.color = husklist
|
||||
|
||||
standing += accessory_overlay
|
||||
|
||||
if(S.hasinner)
|
||||
@@ -1143,15 +1170,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.add_trait(TRAIT_FAT, OBESITY)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
|
||||
if(H.noisy && H.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
if(prob(10))
|
||||
playsound(get_turf(H),"hunger_sounds",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
|
||||
else if(H.noisy && H.nutrition <= NUTRITION_LEVEL_HUNGRY)
|
||||
if(prob(10))
|
||||
playsound(get_turf(H),"hunger_sounds",15,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
|
||||
|
||||
|
||||
// nutrition decrease and satiety
|
||||
if (H.nutrition > 0 && H.stat != DEAD && !H.has_trait(TRAIT_NOHUNGER))
|
||||
// THEY HUNGER
|
||||
@@ -1437,25 +1456,52 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
target.forcesay(GLOB.hit_appends)
|
||||
|
||||
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
// CITADEL EDIT slap mouthy gits
|
||||
var/aim_for_mouth = user.zone_selected == "mouth"
|
||||
var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item()
|
||||
// CITADEL EDIT slap mouthy gits and booty
|
||||
var/aim_for_mouth = user.zone_selected == "mouth"
|
||||
var/target_on_help = target.a_intent == INTENT_HELP
|
||||
var/target_aiming_for_mouth = target.zone_selected == "mouth"
|
||||
var/target_restrained = target.restrained()
|
||||
if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message("<span class='danger'>[user] slaps [target] in the face!</span>",
|
||||
"<span class='notice'>You slap [target] in the face! </span>",\
|
||||
"You hear a slap.")
|
||||
stop_wagging_tail(target)
|
||||
return FALSE
|
||||
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
|
||||
return FALSE
|
||||
else if(target.check_block()) //END EDIT
|
||||
var/same_dir = (target.dir & user.dir)
|
||||
var/aim_for_groin = user.zone_selected == "groin"
|
||||
var/target_aiming_for_groin = target.zone_selected == "groin"
|
||||
|
||||
if(target.check_block()) //END EDIT
|
||||
target.visible_message("<span class='warning'>[target] blocks [user]'s disarm attempt!</span>")
|
||||
return 0
|
||||
if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted!</span>")
|
||||
return FALSE
|
||||
|
||||
else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target] in the face!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "yourself" : target] in the face! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target]'s ass!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "your" : target + "'s"] ass! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return 1
|
||||
else
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "abductor"
|
||||
say_mod = "gibbers"
|
||||
sexes = FALSE
|
||||
species_traits = list(NOBLOOD,NOEYES)
|
||||
species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
mutanttongue = /obj/item/organ/tongue/abductor
|
||||
var/scientist = FALSE // vars to not pollute spieces list with castes
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Android"
|
||||
id = "android"
|
||||
say_mod = "states"
|
||||
species_traits = list(NOBLOOD)
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
meat = null
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
attack_sound = 'sound/weapons/resonator_blast.ogg'
|
||||
blacklisted = 1
|
||||
use_skintones = 0
|
||||
species_traits = list(NOBLOOD,EYECOLOR)
|
||||
species_traits = list(NOBLOOD,EYECOLOR,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
sexes = 0
|
||||
@@ -2,7 +2,7 @@
|
||||
// Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
|
||||
name = "Golem"
|
||||
id = "iron golem"
|
||||
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR)
|
||||
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
|
||||
mutant_organs = list(/obj/item/organ/adamantine_resonator)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
id = "human"
|
||||
default_color = "FFFFFF"
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS_PARTSONLY)
|
||||
mutant_bodyparts = list("mam_ears", "mam_tail", "wings", "taur") // CITADEL EDIT gives humans snowflake parts
|
||||
default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "wings" = "None", "taur" = "None")
|
||||
mutant_bodyparts = list("ears", "tail_human", "wings", "taur") // CITADEL EDIT gives humans snowflake parts
|
||||
default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF","tail_human" = "None", "ears" = "None", "wings" = "None", "taur" = "None")
|
||||
use_skintones = 1
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
disliked_food = GROSS | RAW
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
default_color = "00FF90"
|
||||
say_mod = "chirps"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "taur") //CIT CHANGE
|
||||
default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") //CIT CHANGE
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_snouts", "taur") //CIT CHANGE
|
||||
default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_snouts" = "None", "taur" = "None") //CIT CHANGE
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime
|
||||
exotic_blood = "slimejelly"
|
||||
|
||||
@@ -94,4 +94,9 @@
|
||||
inherent_traits = list(TRAIT_NOGUNS)
|
||||
mutantlungs = /obj/item/organ/lungs/ashwalker
|
||||
burnmod = 0.9
|
||||
brutemod = 0.9
|
||||
brutemod = 0.9
|
||||
|
||||
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
|
||||
C.dna.features["tail"] = "Smooth"
|
||||
return ..()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
nojumpsuit = TRUE
|
||||
|
||||
say_mod = "poofs" //what does a mushroom sound like
|
||||
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR)
|
||||
species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_NOBREATH)
|
||||
speedmod = 1.5 //faster than golems but not by much
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
say_mod = "rattles"
|
||||
sexes = 0
|
||||
meat = /obj/item/stack/sheet/mineral/plasma
|
||||
species_traits = list(NOBLOOD,NOTRANSSTING)
|
||||
species_traits = list(NOBLOOD,NOTRANSSTING,NOGENITALS)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER)
|
||||
inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID)
|
||||
mutantlungs = /obj/item/organ/lungs/plasmaman
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
disliked_food = MEAT | DAIRY
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
var/light_nutrition_gain_factor = 10
|
||||
var/light_toxheal = 1
|
||||
var/light_oxyheal = 1
|
||||
var/light_burnheal = 1
|
||||
var/light_bruteheal = 1
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
@@ -30,13 +35,13 @@
|
||||
if(isturf(H.loc)) //else, there's considered to be no light
|
||||
var/turf/T = H.loc
|
||||
light_amount = min(1,T.get_lumcount()) - 0.5
|
||||
H.nutrition += light_amount * 10
|
||||
H.nutrition += light_amount * light_nutrition_gain_factor
|
||||
if(H.nutrition > NUTRITION_LEVEL_FULL)
|
||||
H.nutrition = NUTRITION_LEVEL_FULL
|
||||
if(light_amount > 0.2) //if there's enough light, heal
|
||||
H.heal_overall_damage(1,1)
|
||||
H.adjustToxLoss(-1)
|
||||
H.adjustOxyLoss(-1)
|
||||
H.heal_overall_damage(light_bruteheal, light_burnheal)
|
||||
H.adjustToxLoss(-light_toxheal)
|
||||
H.adjustOxyLoss(-light_oxyheal)
|
||||
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||
H.take_overall_damage(2,0)
|
||||
@@ -64,3 +69,11 @@
|
||||
H.show_message("<span class='userdanger'>The radiation beam singes you!</span>")
|
||||
if(/obj/item/projectile/energy/florayield)
|
||||
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
|
||||
|
||||
/datum/species/pod/pseudo_weak
|
||||
id = "podweak"
|
||||
limbs_id = "pod"
|
||||
light_nutrition_gain_factor = 7.5
|
||||
light_bruteheal = 0.2
|
||||
light_burnheal = 0.2
|
||||
light_toxheal = 0.7
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
burnmod = 1.5
|
||||
blacklisted = TRUE
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
|
||||
mutant_organs = list(/obj/item/organ/heart/nightmare)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
blacklisted = 1
|
||||
sexes = 0
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
|
||||
species_traits = list(NOBLOOD)
|
||||
species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH)
|
||||
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
|
||||
mutanttongue = /obj/item/organ/tongue/bone
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "synth"
|
||||
say_mod = "beep boops" //inherited from a user's real species
|
||||
sexes = 0
|
||||
species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
|
||||
species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
dangerous_existence = 1
|
||||
|
||||
@@ -324,13 +324,22 @@ There are several things that need to be remembered:
|
||||
/mob/living/carbon/human/update_inv_head()
|
||||
..()
|
||||
update_mutant_bodyparts()
|
||||
var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER]
|
||||
if(head_overlay)
|
||||
if(head)
|
||||
remove_overlay(HEAD_LAYER)
|
||||
var/obj/item/clothing/head/H = head
|
||||
if(H.mutantrace_variation)
|
||||
if(H.muzzle_var == ALT_STYLE)
|
||||
H.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_helmet.dmi'
|
||||
else
|
||||
H.alternate_worn_icon = null
|
||||
|
||||
overlays_standing[HEAD_LAYER] = H.build_worn_icon(state = H.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.alternate_worn_icon) ? H.alternate_worn_icon : 'icons/mob/head.dmi'))
|
||||
var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER]
|
||||
|
||||
if(OFFSET_HEAD in dna.species.offset_features)
|
||||
head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1]
|
||||
head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2]
|
||||
overlays_standing[HEAD_LAYER] = head_overlay
|
||||
overlays_standing[HEAD_LAYER] = head_overlay
|
||||
apply_overlay(HEAD_LAYER)
|
||||
|
||||
/mob/living/carbon/human/update_inv_belt()
|
||||
@@ -429,13 +438,22 @@ There are several things that need to be remembered:
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_mask()
|
||||
..()
|
||||
var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER]
|
||||
if(mask_overlay)
|
||||
if(wear_mask)
|
||||
var/obj/item/clothing/mask/M = wear_mask
|
||||
remove_overlay(FACEMASK_LAYER)
|
||||
if(M.mutantrace_variation)
|
||||
if(M.muzzle_var == ALT_STYLE)
|
||||
M.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_mask.dmi'
|
||||
else
|
||||
M.alternate_worn_icon = null
|
||||
|
||||
overlays_standing[FACEMASK_LAYER] = M.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.alternate_worn_icon) ? M.alternate_worn_icon : 'icons/mob/mask.dmi'))
|
||||
var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER]
|
||||
|
||||
if(OFFSET_FACEMASK in dna.species.offset_features)
|
||||
mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1]
|
||||
mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2]
|
||||
overlays_standing[FACEMASK_LAYER] = mask_overlay
|
||||
overlays_standing[FACEMASK_LAYER] = mask_overlay
|
||||
apply_overlay(FACEMASK_LAYER)
|
||||
update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout
|
||||
|
||||
|
||||
@@ -529,8 +529,8 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
if(stuttering)
|
||||
stuttering = max(stuttering-1, 0)
|
||||
|
||||
if(slurring)
|
||||
slurring = max(slurring-1,0)
|
||||
if(slurring || drunkenness)
|
||||
slurring = max(slurring-1,0,drunkenness)
|
||||
|
||||
if(cultslurring)
|
||||
cultslurring = max(cultslurring-1, 0)
|
||||
@@ -548,16 +548,11 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
|
||||
drunkenness = max(drunkenness - (drunkenness * 0.04), 0)
|
||||
if(drunkenness >= 6)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk)
|
||||
if(prob(25))
|
||||
slurring += 2
|
||||
jitteriness = max(jitteriness - 3, 0)
|
||||
if(has_trait(TRAIT_DRUNK_HEALING))
|
||||
adjustBruteLoss(-0.12, FALSE)
|
||||
adjustFireLoss(-0.06, FALSE)
|
||||
|
||||
if(drunkenness >= 11 && slurring < 5)
|
||||
slurring += 1.2
|
||||
|
||||
if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director"))
|
||||
if(SSresearch.science_tech)
|
||||
if(drunkenness >= 12.9 && drunkenness <= 13.8)
|
||||
|
||||
@@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
message = stutter(message)
|
||||
|
||||
if(slurring)
|
||||
message = slur(message)
|
||||
message = slur(message,slurring)
|
||||
|
||||
if(cultslurring)
|
||||
message = cultslur(message)
|
||||
|
||||
@@ -505,3 +505,33 @@
|
||||
to_chat(user, "<span class='notice'>You unbolt [src]'s energy swords</span>")
|
||||
for(var/IS in 1 to swordamt)
|
||||
new /obj/item/melee/transforming/energy/sword/saber(Tsec)
|
||||
|
||||
//Firebot Assembly
|
||||
/obj/item/bot_assembly/firebot
|
||||
name = "incomplete firebot assembly"
|
||||
desc = "A fire extinguisher with an arm attached to it."
|
||||
icon_state = "firebot_arm"
|
||||
created_name = "Firebot"
|
||||
|
||||
/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
switch(build_step)
|
||||
if(ASSEMBLY_FIRST_STEP)
|
||||
if(istype(I, /obj/item/clothing/head/hardhat/red))
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
return
|
||||
to_chat(user,"<span class='notice'>You add the [I] to [src]!</span>")
|
||||
icon_state = "firebot_helmet"
|
||||
desc = "An incomplete firebot assembly with a fire helmet."
|
||||
qdel(I)
|
||||
build_step++
|
||||
|
||||
if(ASSEMBLY_SECOND_STEP)
|
||||
if(isprox(I))
|
||||
if(!can_finish_build(I, user))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You add the [I] to [src]! Beep Boop!</span>")
|
||||
var/mob/living/simple_animal/bot/firebot/F = new(drop_location())
|
||||
F.name = created_name
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
|
||||
@@ -0,0 +1,325 @@
|
||||
//Firebot
|
||||
|
||||
#define SPEECH_INTERVAL 300 // Time between idle speeches
|
||||
#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts
|
||||
#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam
|
||||
|
||||
/mob/living/simple_animal/bot/firebot
|
||||
name = "\improper Firebot"
|
||||
desc = "A little fire extinguishing bot. He looks rather anxious."
|
||||
icon = 'icons/mob/aibots.dmi'
|
||||
icon_state = "firebot"
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
spacewalk = TRUE
|
||||
|
||||
radio_key = /obj/item/encryptionkey/headset_eng
|
||||
radio_channel = "Engineering"
|
||||
bot_type = FIRE_BOT
|
||||
model = "Firebot"
|
||||
bot_core = /obj/machinery/bot_core/firebot
|
||||
window_id = "autoextinguisher"
|
||||
window_name = "Mobile Fire Extinguisher v1.0"
|
||||
path_image_color = "#FFA500"
|
||||
|
||||
var/atom/target_fire
|
||||
var/atom/old_target_fire
|
||||
|
||||
var/obj/item/extinguisher/internal_ext
|
||||
|
||||
var/last_found = 0
|
||||
|
||||
var/speech_cooldown = 0
|
||||
var/detected_cooldown = 0
|
||||
var/foam_cooldown = 0
|
||||
|
||||
var/extinguish_people = TRUE
|
||||
var/extinguish_fires = TRUE
|
||||
var/stationary_mode = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
var/datum/job/engineer/J = new/datum/job/engineer
|
||||
access_card.access += J.get_access()
|
||||
prev_access = access_card.access
|
||||
|
||||
create_extinguisher()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/bot_reset()
|
||||
create_extinguisher()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/create_extinguisher()
|
||||
internal_ext = new /obj/item/extinguisher(src)
|
||||
internal_ext.safety = FALSE
|
||||
internal_ext.precision = TRUE
|
||||
internal_ext.max_water = INFINITY
|
||||
internal_ext.refill()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A)
|
||||
if(!on)
|
||||
return
|
||||
if(internal_ext)
|
||||
internal_ext.afterattack(A, src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A)
|
||||
if(!on)
|
||||
return
|
||||
if(internal_ext)
|
||||
internal_ext.afterattack(A, src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/turn_on()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/turn_off()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/bot_reset()
|
||||
..()
|
||||
target_fire = null
|
||||
old_target_fire = null
|
||||
ignore_list = list()
|
||||
anchored = FALSE
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/soft_reset()
|
||||
path = list()
|
||||
target_fire = null
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/set_custom_texts()
|
||||
text_hack = "You corrupt [name]'s safety protocols."
|
||||
text_dehack = "You detect errors in [name] and reset his programming."
|
||||
text_dehack_fail = "[name] is not responding to reset commands!"
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/get_controls(mob/user)
|
||||
var/dat
|
||||
dat += hack(user)
|
||||
dat += showpai(user)
|
||||
dat += "<TT><B>Mobile Fire Extinguisher v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=[REF(src)];power=1'>[on ? "On" : "Off"]</A><BR>"
|
||||
dat += "Maintenance panel panel is [open ? "opened" : "closed"]<BR>"
|
||||
|
||||
dat += "Behaviour controls are [locked ? "locked" : "unlocked"]<BR>"
|
||||
if(!locked || issilicon(user) || IsAdminGhost(user))
|
||||
dat += "Extinguish Fires: <A href='?src=[REF(src)];operation=extinguish_fires'>[extinguish_fires ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Extinguish People: <A href='?src=[REF(src)];operation=extinguish_people'>[extinguish_people ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Patrol Station: <A href='?src=[REF(src)];operation=patrol'>[auto_patrol ? "Yes" : "No"]</A><BR>"
|
||||
dat += "Stationary Mode: <a href='?src=[REF(src)];operation=stationary_mode'>[stationary_mode ? "Yes" : "No"]</a><br>"
|
||||
|
||||
return dat
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/emag_act(mob/user)
|
||||
..()
|
||||
if(emagged == 1)
|
||||
if(user)
|
||||
to_chat(user, "<span class='danger'>[src] buzzes and beeps.</span>")
|
||||
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
|
||||
playsound(src, "sparks", 75, TRUE)
|
||||
if(user)
|
||||
old_target_fire = user
|
||||
extinguish_fires = FALSE
|
||||
extinguish_people = TRUE
|
||||
|
||||
internal_ext.chem = "clf3" //Refill the internal extinguisher with liquid fire
|
||||
internal_ext.power = 3
|
||||
internal_ext.safety = FALSE
|
||||
internal_ext.precision = FALSE
|
||||
internal_ext.max_water = INFINITY
|
||||
internal_ext.refill()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/Topic(href, href_list)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
switch(href_list["operation"])
|
||||
if("extinguish_fires")
|
||||
extinguish_fires = !extinguish_fires
|
||||
if("extinguish_people")
|
||||
extinguish_people = !extinguish_people
|
||||
if("stationary_mode")
|
||||
stationary_mode = !stationary_mode
|
||||
|
||||
update_controls()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target)
|
||||
if(ismob(target))
|
||||
var/mob/living/M = target
|
||||
if(M.on_fire || (emagged == 1 && !M.on_fire))
|
||||
return TRUE
|
||||
|
||||
else if(isturf(target))
|
||||
var/turf/open/T = target
|
||||
if(T.active_hotspot)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/handle_automated_action()
|
||||
if(!..())
|
||||
return
|
||||
|
||||
if(IsStun())
|
||||
old_target_fire = target_fire
|
||||
target_fire = null
|
||||
mode = BOT_IDLE
|
||||
return
|
||||
|
||||
if(prob(1) && target_fire == null)
|
||||
var/list/messagevoice = list("No fires detected." = 'sound/voice/firebot/nofires.ogg',
|
||||
"Only you can prevent station fires." = 'sound/voice/firebot/onlyyou.ogg',
|
||||
"Temperature nominal." = 'sound/voice/firebot/tempnominal.ogg',
|
||||
"Keep it cool." = 'sound/voice/firebot/keepitcool.ogg')
|
||||
var/message = pick(messagevoice)
|
||||
speak(message)
|
||||
playsound(src, messagevoice[message], 50)
|
||||
|
||||
// Couldn't reach the target, reset and try again ignoring the old one
|
||||
if(frustration > 8)
|
||||
old_target_fire = target_fire
|
||||
soft_reset()
|
||||
|
||||
// We extinguished our target or it was deleted
|
||||
if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire))
|
||||
target_fire = null
|
||||
var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE)
|
||||
|
||||
if(extinguish_people)
|
||||
target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first
|
||||
|
||||
if(target_fire == null && extinguish_fires)
|
||||
target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second
|
||||
|
||||
old_target_fire = target_fire
|
||||
|
||||
// Target reached ENGAGE WATER CANNON
|
||||
if(target_fire && (get_dist(src, target_fire) <= (emagged == 1 ? 1 : 2))) // Make the bot spray water from afar when not emagged
|
||||
if((speech_cooldown + SPEECH_INTERVAL) < world.time)
|
||||
if(ishuman(target_fire))
|
||||
speak("Stop, drop and roll!")
|
||||
playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, 0)
|
||||
else
|
||||
speak("Extinguishing!")
|
||||
playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, 0)
|
||||
speech_cooldown = world.time
|
||||
|
||||
flick("firebot1_use", src)
|
||||
spray_water(target_fire, src)
|
||||
|
||||
soft_reset()
|
||||
|
||||
// Target ran away
|
||||
else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2))
|
||||
path = list()
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
|
||||
else if(target_fire && stationary_mode)
|
||||
soft_reset()
|
||||
return
|
||||
|
||||
if(target_fire && (get_dist(src, target_fire) > 2))
|
||||
|
||||
path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card)
|
||||
mode = BOT_MOVING
|
||||
if(!path.len)
|
||||
soft_reset()
|
||||
|
||||
if(path.len > 0 && target_fire)
|
||||
if(!bot_move(path[path.len]))
|
||||
old_target_fire = target_fire
|
||||
soft_reset()
|
||||
return
|
||||
|
||||
// We got a target but it's too far away from us
|
||||
if(path.len > 8 && target_fire)
|
||||
frustration++
|
||||
|
||||
if(auto_patrol && !target_fire && !stationary_mode)
|
||||
if(mode == BOT_IDLE || mode == BOT_START_PATROL)
|
||||
start_patrol()
|
||||
|
||||
if(mode == BOT_PATROL)
|
||||
bot_patrol()
|
||||
|
||||
|
||||
//Look for burning people or turfs around the bot
|
||||
/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target)
|
||||
var/result
|
||||
|
||||
if(scan_target == src)
|
||||
return result
|
||||
|
||||
if(is_burning(scan_target))
|
||||
if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time)
|
||||
speak("Fire detected!")
|
||||
playsound(src, "sound/voice/firebot/detected.ogg", 50, 0)
|
||||
detected_cooldown = world.time
|
||||
result = scan_target
|
||||
|
||||
return result
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time)
|
||||
new /obj/effect/particle_effect/foam/firefighting(loc)
|
||||
foam_cooldown = world.time
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user)
|
||||
if(stationary_mode)
|
||||
flick("firebots_use", user)
|
||||
else
|
||||
flick("firebot1_use", user)
|
||||
internal_ext.afterattack(target, user, null)
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/update_icon()
|
||||
if(!on)
|
||||
icon_state = "firebot0"
|
||||
return
|
||||
if(IsStun())
|
||||
icon_state = "firebots1"
|
||||
else if(stationary_mode) //Bot has yellow light to indicate stationary mode.
|
||||
icon_state = "firebots1"
|
||||
else
|
||||
icon_state = "firebot1"
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/firebot/explode()
|
||||
on = FALSE
|
||||
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
|
||||
|
||||
var/atom/Tsec = drop_location()
|
||||
|
||||
new /obj/item/assembly/prox_sensor(Tsec)
|
||||
new /obj/item/clothing/head/hardhat/red(Tsec)
|
||||
|
||||
var/turf/T = get_turf(Tsec)
|
||||
|
||||
if(isopenturf(T))
|
||||
var/turf/open/theturf = T
|
||||
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
|
||||
|
||||
if(prob(50))
|
||||
drop_part(robot_arm, Tsec)
|
||||
|
||||
do_sparks(3, TRUE, src)
|
||||
..()
|
||||
|
||||
/obj/machinery/bot_core/firebot
|
||||
req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS)
|
||||
|
||||
#undef SPEECH_INTERVAL
|
||||
#undef DETECTED_VOICE_INTERVAL
|
||||
#undef FOAM_INTERVAL
|
||||
|
||||
@@ -345,7 +345,20 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/AttackingTarget()
|
||||
in_melee = TRUE
|
||||
return target.attack_animal(src)
|
||||
if(vore_active)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.Adjacent(src) && L.devourable) // aggressive check to ensure vore attacks can be made
|
||||
if(prob(voracious_chance))
|
||||
vore_attack(src,L,src)
|
||||
else
|
||||
return L.attack_animal(src)
|
||||
else
|
||||
return L.attack_animal(src) //literally every single fucking one of these need this I guess.
|
||||
else
|
||||
return target.attack_animal(src)
|
||||
else
|
||||
return target.attack_animal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/Aggro()
|
||||
vision_range = aggro_vision_range
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
var/obj/belly/megafauna/dragon/maw/maw = new(src)
|
||||
var/obj/belly/megafauna/dragon/gullet/gullet = new(src)
|
||||
var/obj/belly/megafauna/dragon/gut/gut = new(src)
|
||||
// for(var/obj/belly/X in list(maw, gullet, gut))
|
||||
// vore_organs[X.name] = X
|
||||
// Connect 'stomachs' together
|
||||
maw.transferlocation = gullet
|
||||
gullet.transferlocation = gut
|
||||
@@ -49,6 +47,6 @@
|
||||
vore_sound = "Tauric Swallow"
|
||||
desc = "With a rush of burning ichor greeting you, you're introduced to the Drake's stomach. Wrinkled walls greedily grind against you, acidic slimes working into your body as you become fuel and nutriton for a superior predator. All that's left is your body's willingness to resist your destiny."
|
||||
digest_mode = DM_DRAGON
|
||||
digest_burn = 5
|
||||
digest_burn = 2
|
||||
swallow_time = 100 // costs extra time to eat directly to here
|
||||
escapechance = 0
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
OpenFire()
|
||||
if(L.Adjacent(src) && (L.stat != CONSCIOUS))
|
||||
if(vore_active && L.devourable == TRUE)
|
||||
dragon_feeding(src,L)
|
||||
vore_attack(src,L,src)
|
||||
LoseTarget()
|
||||
else
|
||||
devour(L)
|
||||
|
||||
@@ -187,12 +187,12 @@
|
||||
var/mob/living/carbon/C = L
|
||||
var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
|
||||
if(S && S.resistance_flags & GOLIATH_RESISTANCE)
|
||||
L.Stun(75)
|
||||
L.Stun(25)
|
||||
else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
|
||||
L.Stun(125)
|
||||
L.Stun(115)
|
||||
else
|
||||
L.Stun(100)
|
||||
L.adjustBruteLoss(rand(10,15))
|
||||
L.Stun(75)
|
||||
L.adjustBruteLoss(rand(15,20)) // Less stun more harm
|
||||
latched = TRUE
|
||||
if(!latched)
|
||||
retract()
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
mask = /obj/item/clothing/mask/gas/explorer
|
||||
if(prob(20))
|
||||
suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 6, /obj/item/clothing/suit/hooded/cloak/goliath = 2, /obj/item/clothing/suit/hooded/exo = 6, /obj/item/clothing/suit/hooded/seva = 6))
|
||||
suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer/standard = 6, /obj/item/clothing/suit/hooded/cloak/goliath = 2, /obj/item/clothing/suit/hooded/explorer/exo = 6, /obj/item/clothing/suit/hooded/explorer/seva = 6))
|
||||
if(prob(30))
|
||||
r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ))
|
||||
if(prob(10))
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
|
||||
if(!Proj)
|
||||
return
|
||||
if(prob(50))
|
||||
if(prob(25))
|
||||
return ..()
|
||||
else
|
||||
visible_message("<span class='danger'>[src] blocks [Proj] with its shield!</span>")
|
||||
|
||||
@@ -1,21 +1,29 @@
|
||||
#define VORACIOUS_CHANCE 40
|
||||
#define VORE_SWALLOW_TIME 50
|
||||
|
||||
/mob/living/simple_animal
|
||||
// List of targets excluded (for now) from being eaten by this mob.
|
||||
var/list/prey_exclusions = list()
|
||||
devourable = FALSE //insurance because who knows.
|
||||
digestable = TRUE //I mean, if it's devourable it should also be digestible
|
||||
var/vore_active = FALSE // If vore behavior is enabled for this mob
|
||||
//Specific vore behaviors
|
||||
var/vore_active = FALSE // If vore behavior is enabled for this mob
|
||||
var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species?
|
||||
var/swallowTime = VORE_SWALLOW_TIME //How long it takes to eat Human and other Simple_animal prey in 1/10 of a second. The default is 5 seconds.
|
||||
var/list/prey_excludes = list() //For excluding people from being eaten.
|
||||
var/voracious_chance = VORACIOUS_CHANCE //Mob AI Engagement probability when rolling between regular melee strike and a vore attempt, default 40%
|
||||
|
||||
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
||||
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
|
||||
var/vore_escape_chance = 25 // Chance of resisting out of mob
|
||||
var/vore_absorb_chance = 0 // chance of absorbtion by mob
|
||||
// Vore belly interactions
|
||||
// Most mobs are only going to have the one gut. Multi-gut set ups should refer to Ash Drake's dragon_vore.dm for set up.
|
||||
|
||||
var/vore_stomach_name // The name for the first belly if not "stomach"
|
||||
var/vore_stomach_flavor // The flavortext for the first belly if not the default
|
||||
|
||||
var/vore_fullness = 0 // How "full" the belly is (controls icons)
|
||||
var/list/living_mobs = list()
|
||||
var/vore_default_sound = "Gulp" // Default vore sound
|
||||
var/vore_default_release = "Splatter" // Default release sound
|
||||
var/vore_wetness = TRUE // Default for a wet belly
|
||||
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
||||
var/vore_digest_chance = VORACIOUS_CHANCE // Chance to switch to digest mode if resisted, default 40%
|
||||
var/vore_escape_chance = VORACIOUS_CHANCE // Chance of resisting out of mob, default 40%
|
||||
var/vore_absorb_chance = 0 // chance of absorbtion by mob, default 0%
|
||||
var/vore_stomach_name // The name for the first belly if not "stomach"
|
||||
var/vore_stomach_flavor // The flavortext for the first belly if not the default
|
||||
|
||||
//Icon Memes
|
||||
var/vore_fullness = 0 // How "full" the belly is (controls icons)
|
||||
|
||||
// Release belly contents before being gc'd!
|
||||
/mob/living/simple_animal/Destroy()
|
||||
@@ -34,35 +42,19 @@
|
||||
|
||||
vore_fullness = new_fullness
|
||||
|
||||
/*
|
||||
/mob/living/simple_animal/proc/swallow_check()
|
||||
for(var/I in vore_organs)
|
||||
var/obj/belly/B = vore_organs[I]
|
||||
if(vore_active)
|
||||
update_fullness()
|
||||
if(!vore_fullness)
|
||||
// Nothing
|
||||
return
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/swallow_mob), B.swallow_time)
|
||||
|
||||
/mob/living/simple_animal/proc/swallow_mob()
|
||||
for(var/I in vore_organs)
|
||||
var/obj/belly/B = vore_organs[I]
|
||||
for(var/mob/living/M in B.contents)
|
||||
B.transfer_contents(M, transferlocation)
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/death()
|
||||
release_vore_contents(silent = TRUE)
|
||||
. = ..()
|
||||
|
||||
// Simple animals have only one belly. This creates it (if it isn't already set up)
|
||||
/mob/living/simple_animal/proc/init_belly()
|
||||
/mob/living/simple_animal/init_vore()
|
||||
vore_init = TRUE
|
||||
if(vore_organs.len)
|
||||
return
|
||||
if(no_vore) //If it can't vore, let's not give it a stomach.
|
||||
return
|
||||
if(vore_active && !IsAdvancedToolUser()) //vore active, but doesn't have thumbs to grab people with.
|
||||
verbs |= /mob/living/simple_animal/proc/animal_nom
|
||||
|
||||
var/obj/belly/B = new /obj/belly(src)
|
||||
vore_selected = B
|
||||
@@ -70,6 +62,9 @@
|
||||
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
|
||||
B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
|
||||
B.digest_mode = vore_default_mode
|
||||
B.vore_sound = vore_default_sound
|
||||
B.release_sound = vore_default_release
|
||||
B.is_wet = vore_wetness
|
||||
B.escapable = vore_escape_chance > 0
|
||||
B.escapechance = vore_escape_chance
|
||||
B.digestchance = vore_digest_chance
|
||||
@@ -97,21 +92,41 @@
|
||||
"The juices pooling beneath you sizzle against your sore skin.",
|
||||
"The churning walls slowly pulverize you into meaty nutrients.",
|
||||
"The stomach glorps and gurgles as it tries to work you into slop.")
|
||||
/* B.emote_lists[DM_ITEMWEAK] = list(
|
||||
"The burning acids eat away at your form.",
|
||||
"The muscular stomach flesh grinds harshly against you.",
|
||||
"The caustic air stings your chest when you try to breathe.",
|
||||
"The slimy guts squeeze inward to help the digestive juices soften you up.",
|
||||
"The onslaught against your body doesn't seem to be letting up; you're food now.",
|
||||
"The predator's body ripples and crushes against you as digestive enzymes pull you apart.",
|
||||
"The juices pooling beneath you sizzle against your sore skin.",
|
||||
"The churning walls slowly pulverize you into meaty nutrients.",
|
||||
"The stomach glorps and gurgles as it tries to work you into slop.")*/
|
||||
|
||||
//Grab = Nomf
|
||||
/*
|
||||
/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity)
|
||||
. = ..()
|
||||
//
|
||||
// Simple proc for animals to have their digestion toggled on/off externally
|
||||
//
|
||||
/mob/living/simple_animal/verb/toggle_digestion()
|
||||
set name = "Toggle Animal's Digestion"
|
||||
set desc = "Enables digestion on this mob for 20 minutes."
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(a_intent == I_GRAB && isliving(A) && !has_hands)
|
||||
animal_nom(A)*/
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(!istype(user) || user.stat) return
|
||||
|
||||
if(vore_selected.digest_mode == DM_HOLD)
|
||||
var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel")
|
||||
if(confirm == "Enable")
|
||||
vore_selected.digest_mode = DM_DIGEST
|
||||
sleep(20 MINUTES)
|
||||
vore_selected.digest_mode = vore_default_mode
|
||||
else
|
||||
var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel")
|
||||
if(confirm == "Disable")
|
||||
vore_selected.digest_mode = DM_HOLD
|
||||
|
||||
//
|
||||
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
|
||||
//
|
||||
/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1))
|
||||
set name = "Animal Nom"
|
||||
set category = "Vore"
|
||||
set desc = "Since you can't grab, you get a verb!"
|
||||
|
||||
if (stat != CONSCIOUS)
|
||||
return
|
||||
if (T.devourable == FALSE)
|
||||
to_chat(usr, "<span class='warning'>You can't eat this!</span>")
|
||||
return
|
||||
return vore_attack(usr,T,usr)
|
||||
|
||||
@@ -61,6 +61,8 @@
|
||||
var/mood = "" // To show its face
|
||||
var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime
|
||||
var/force_stasis = FALSE
|
||||
|
||||
do_footstep = TRUE
|
||||
|
||||
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
|
||||
///////////TIME FOR SUBSPECIES
|
||||
|
||||
@@ -64,7 +64,8 @@
|
||||
p++
|
||||
return sanitize(t)
|
||||
|
||||
/proc/slur(n)
|
||||
/proc/slur(n,var/strength=50)
|
||||
strength = min(strength,50)
|
||||
var/phrase = html_decode(n)
|
||||
var/leng = lentext(phrase)
|
||||
var/counter=lentext(phrase)
|
||||
@@ -72,7 +73,7 @@
|
||||
var/newletter=""
|
||||
while(counter>=1)
|
||||
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
|
||||
if(rand(1,3)==3)
|
||||
if(rand(1,100)<=strength*0.5)
|
||||
if(lowertext(newletter)=="o")
|
||||
newletter="u"
|
||||
if(lowertext(newletter)=="s")
|
||||
@@ -83,17 +84,17 @@
|
||||
newletter="oo"
|
||||
if(lowertext(newletter)=="c")
|
||||
newletter="k"
|
||||
if(rand(1,20)==20)
|
||||
if(rand(1,100) <= strength*0.25)
|
||||
if(newletter==" ")
|
||||
newletter="...huuuhhh..."
|
||||
if(newletter==".")
|
||||
newletter=" *BURP*."
|
||||
switch(rand(1,20))
|
||||
if(1)
|
||||
if(rand(1,100) <= strength*0.5)
|
||||
if(rand(1,5) == 1)
|
||||
newletter+="'"
|
||||
if(10)
|
||||
if(rand(1,5) == 1)
|
||||
newletter+="[newletter]"
|
||||
if(20)
|
||||
if(rand(1,5) == 1)
|
||||
newletter+="[newletter][newletter]"
|
||||
newphrase+="[newletter]";counter-=1
|
||||
return newphrase
|
||||
|
||||
Reference in New Issue
Block a user