diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 9f3e6b4db0..aea7d42be6 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -97,6 +97,7 @@ #define NO_DNA_COPY 14 #define DRINKSBLOOD 15 #define NOEYES 16 +#define MARKINGS 17 #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index f642791224..c7daff49ed 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -93,6 +93,7 @@ #define MUTCOLORS3 36 #define NOAROUSAL 37 //Stops all arousal effects #define NOGENITALS 38 //Cannot create, use, or otherwise have genitals +#define MATRIXED 39 //if icon is color matrix'd //Citadel istypes #define isborer(A) (istype(A, /mob/living/simple_animal/borer)) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 7301284ee4..709a4daeba 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -51,10 +51,11 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s //Human Overlays Indexes///////// //LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS -#define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc -#define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer -#define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts -#define BODYPARTS_LAYER 27 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag +#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc +#define GENITALS_BEHIND_LAYER 30 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer +#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts +#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag +#define MARKING_LAYER 27 //Matrixed body markings because clashing with snouts? #define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts #define GENITALS_ADJ_LAYER 25 #define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup) @@ -82,7 +83,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define HANDS_LAYER 3 #define BODY_FRONT_LAYER 2 #define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 30 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; //Human Overlay Index Shortcuts for alternate_worn_layer, layers //Because I *KNOW* somebody will think layer+1 means "above" diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index 9e38d9cf1e..b6c968b163 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -37,6 +37,7 @@ GLOBAL_LIST_EMPTY(mam_ears_list) GLOBAL_LIST_EMPTY(mam_tails_list) GLOBAL_LIST_EMPTY(mam_tails_animated_list) GLOBAL_LIST_EMPTY(taur_list) +GLOBAL_LIST_EMPTY(mam_snouts_list) //Exotic Species GLOBAL_LIST_EMPTY(exotic_tails_list) @@ -242,7 +243,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) if("Wolf") hdna.features["mam_tail"] = "Wolf" hdna.features["mam_ears"] = "Wolf" - hdna.features["snout"] = "Wolf" + hdna.features["mam_snouts"] = "Wolf" hdna.features["mam_body_markings"] = "Wolf" hdna.features["mcolor"] = "555" hdna.features["mcolor2"] = "999" @@ -250,7 +251,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) if("Fox") hdna.features["mam_tail"] = "Fox" hdna.features["mam_ears"] = "Fox" - hdna.features["snout"] = "Fox, Long" + hdna.features["mam_snouts"] = "Fox, Long" hdna.features["mam_body_markings"] = "Fox" hdna.features["mcolor"] = "f60" hdna.features["mcolor2"] = "fff" @@ -258,6 +259,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) if("Fennec") hdna.features["mam_tail"] = "Fennec" hdna.features["mam_ears"] = "Fennec" - hdna.features["snout"] = "Fox, Short" + hdna.features["mam_snouts"] = "Fox, Short" hdna.features["mam_body_markings"] = "Fox" H.regenerate_icons() diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index c590c844eb..7d578337bc 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -511,6 +511,13 @@ var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common +/proc/GetHexColors(const/hexa) + return list( + GetRedPart(hexa)/ 255, + GetGreenPart(hexa)/ 255, + GetBluePart(hexa)/ 255 + ) + /proc/GetRedPart(const/hexa) return hex2num(copytext(hexa, 2, 4)) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 4a7f2fdbc1..f6ef08fe0d 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -37,13 +37,9 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list) - //avian bodyparts (i swear this isn't starbound) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks/avian, GLOB.avian_beaks_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/avian, GLOB.avian_tails_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_wings, GLOB.avian_wings_list) -// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_open_wings, GLOB.avian_open_wings_list) //xeno parts (hiss?) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index d2cb3baa6a..5fb64004c0 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -712,7 +712,19 @@ world var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") #define BLANK icon(flat_template) - #define SET_SELF(SETVAR) var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null);if(A.alpha<255)SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);if(A.color)SELF_ICON.Blend(A.color,ICON_MULTIPLY);;##SETVAR=SELF_ICON; + #define SET_SELF(SETVAR) do { \ + var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ + if(A.alpha<255) { \ + SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ + } \ + if(A.color) { \ + if(islist(A.color)){ \ + SELF_ICON.MapColors(arglist(A.color))} \ + else{ \ + SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ + } \ + ##SETVAR=SELF_ICON;\ + } while (0) #define INDEX_X_LOW 1 #define INDEX_X_HIGH 2 @@ -860,7 +872,11 @@ world flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) if(A.color) - flat.Blend(A.color, ICON_MULTIPLY) + if(islist(A.color)) + flat.MapColors(arglist(A.color)) + else + flat.Blend(A.color, ICON_MULTIPLY) + if(A.alpha < 255) flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 92132b092e..eff6f54653 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -91,6 +91,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list) if(!GLOB.mam_ears_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list) + if(!GLOB.mam_snouts_list.len) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list) // if(ishuman(src)) // var/mob/living/carbon/human/H = src @@ -113,11 +115,11 @@ "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail_lizard" = pick(GLOB.tails_list_lizard), - "tail_human" = "None", + "tail_human" = pick(GLOB.tails_list_human), "wings" = "None", "snout" = pick(GLOB.snouts_list), "horns" = pick(GLOB.horns_list), - "ears" = "None", + "ears" = pick(GLOB.ears_list), "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), @@ -127,6 +129,7 @@ "taur" = "None", "mam_body_markings" = pick(GLOB.mam_body_markings_list), "mam_ears" = pick(GLOB.mam_ears_list), + "mam_snouts" = pick(GLOB.mam_snouts_list), "mam_tail" = pick(GLOB.mam_tails_list), "mam_tail_animated" = "None", "xenodorsal" = "Standard", diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 358f2bfe29..4c501a3e7f 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -463,4 +463,3 @@ // so just reset the user mob's machine var if(src && src.mob) src.mob.unset_machine() - return diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index c85eb95b05..7216b73af6 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -72,4 +72,6 @@ var/list/credits //lazy list of all credit object bound to this client - var/datum/player_details/player_details //these persist between logins/logouts during the same round. \ No newline at end of file + var/datum/player_details/player_details //these persist between logins/logouts during the same round. + + var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen. diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 85d1b4f150..f93b799e8d 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -454,6 +454,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) GLOB.ahelp_tickets.ClientLogout(src) GLOB.directory -= ckey GLOB.clients -= src + QDEL_LIST_ASSOC_VAL(char_render_holders) if(movingmob != null) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) @@ -877,3 +878,23 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) /client/proc/AnnouncePR(announcement) if(prefs && prefs.chat_toggles & CHAT_PULLR) to_chat(src, announcement) + +/client/proc/show_character_previews(mutable_appearance/MA) + var/pos = 0 + for(var/D in GLOB.cardinals) + pos++ + var/obj/screen/O = LAZYACCESS(char_render_holders, "[D]") + if(!O) + O = new + LAZYSET(char_render_holders, "[D]", O) + screen |= O + O.appearance = MA + O.dir = D + O.screen_loc = "character_preview_map:0,[pos]" + +/client/proc/clear_character_previews() + for(var/index in char_render_holders) + var/obj/screen/S = char_render_holders[index] + screen -= S + qdel(S) + char_render_holders = null diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 53a8d84af2..30d6306b0f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -74,17 +74,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race var/list/features = list("mcolor" = "FFF", - "tail_lizard" = "Smooth", "tail_human" = "None", - "snout" = "Round", "horns" = "None", "ears" = "None", + "tail_lizard" = "Smooth", "tail_human" = "Cat", + "snout" = "Round", "horns" = "None", "ears" = "Cat", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "moth_wings" = "Plain") var/list/custom_names = list() var/prefered_security_department = SEC_DEPT_RANDOM - //Mob preview - var/icon/preview_icon = null - //Quirk list var/list/positive_quirks = list() var/list/negative_quirks = list() @@ -155,17 +152,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) menuoptions = list() return -#define APPEARANCE_CATEGORY_COLUMN "" +#define APPEARANCE_CATEGORY_COLUMN "" #define MAX_MUTANT_ROWS 4 /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return - if(current_tab == 2) //CITADEL EDIT, for muh nudies - update_preview_icon(nude=TRUE) - else - update_preview_icon(nude=FALSE) //EDIT END - user << browse_rsc(preview_icon, "previewicon.png") + update_preview_icon() var/list/dat = list("
") dat += "Character Settings" @@ -210,14 +203,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" - dat += "
" if(jobban_isbanned(user, "appearance")) dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.
" - dat += "Random Name " - dat += "Always Random Name: [be_random_name ? "Yes" : "No"]
" + dat += "Random Name " + dat += "Always Random Name:[be_random_name ? "Yes" : "No"]
" - dat += "Name: " + dat += "Name:" dat += "[real_name]
" dat += "Gender: [gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" - dat += "Age: [age]
" + dat += "Age: [age]
" dat += "Special Names:
" var/old_group @@ -233,19 +226,32 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Custom job preferences:
" dat += "Prefered security department: [prefered_security_department]
" - - dat += "
" - - dat += "
" + dat += "" //Character Appearance if(2) - update_preview_icon(nude=TRUE) - user << browse_rsc(preview_icon, "previewicon.png") + if(path) + var/savefile/S = new /savefile(path) + if(S) + dat += "
" + var/name + var/unspaced_slots = 0 + for(var/i=1, i<=max_save_slots, i++) + unspaced_slots++ + if(unspaced_slots > 4) + dat += "
" + unspaced_slots = 0 + S.cd = "/character[i]" + S["real_name"] >> name + if(!name) + name = "Character[i]" + dat += "[name] " + dat += "
" + + update_preview_icon() dat += "" + mutant_category = 0 + if("mam_snouts" in pref_species.default_features) + if(!mutant_category) + dat += APPEARANCE_CATEGORY_COLUMN + + dat += "

Snout

" + + dat += "[features["mam_snouts"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -451,7 +475,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Legs

" - dat += "[features["legs"]]
" + dat += "[features["legs"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -463,7 +487,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Moth wings

" - dat += "[features["moth_wings"]]
" + dat += "[features["moth_wings"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -475,7 +499,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tauric Body

" - dat += "[features["taur"]]
" + dat += "[features["taur"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -487,7 +511,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Wings

" - dat += "[features["wings"]]
" + dat += "[features["wings"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -499,7 +523,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Caste Head

" - dat += "[features["xenohead"]]
" + dat += "[features["xenohead"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -511,7 +535,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tail

" - dat += "[features["xenotail"]]
" + dat += "[features["xenotail"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -523,7 +547,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Dorsal Spines

" - dat += "[features["xenodorsal"]]
" + dat += "[features["xenodorsal"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -535,7 +559,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Screen

" - dat += "[features["ipc_screen"]]
" + dat += "[features["ipc_screen"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -547,7 +571,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Antenna

" - dat += "[features["ipc_antenna"]]
" + dat += "[features["ipc_antenna"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -560,53 +584,69 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" - dat += "
" - dat += "Set Flavor Text
" + dat += "

Flavor Text

" + dat += "Set Examine Text
" if(lentext(features["flavor_text"]) <= 40) if(!lentext(features["flavor_text"])) dat += "\[...\]" @@ -254,10 +260,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += "[TextPreview(features["flavor_text"])]...
" dat += "

Body

" - dat += "Gender: [gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" - dat += "Species:[pref_species.id]
" - dat += "Random Body
" - dat += "Always Random Body: [be_random_body ? "Yes" : "No"]
" + dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" + dat += "Species:[pref_species.id]
" + dat += "Random Body
" + dat += "Always Random Body:[be_random_body ? "Yes" : "No"]
" var/use_skintones = pref_species.use_skintones if(use_skintones) @@ -265,17 +271,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Skin Tone

" - dat += "[skin_tone]
" + dat += "[skin_tone]
" var/mutant_colors if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits)) if(!use_skintones) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Body Colors


" - dat += "Primary Color:     Change
" - dat += "Secondary Color:     Change
" - dat += "Tertiary Color:     Change
" + dat += "

Body Colors

" + + dat += "Primary Color:
" + dat += "    Change
" + + dat += "Secondary Color:
" + dat += "    Change
" + + dat += "Tertiary Color:
" + dat += "    Change
" mutant_colors = TRUE if((EYECOLOR in pref_species.species_traits) && !(NOEYES in pref_species.species_traits)) @@ -297,13 +309,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Hair Style

" - dat += "[hair_style]
" + dat += "[hair_style]" dat += "< >
" dat += "    Change
" dat += "

Facial Hair Style

" - dat += "[facial_hair_style]
" + dat += "[facial_hair_style]" dat += "< >
" dat += "    Change
" @@ -317,7 +329,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tail

" - dat += "[features["tail_lizard"]]
" + dat += "[features["tail_lizard"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -330,7 +342,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tail

" - dat += "[features["mam_tail"]]
" + dat += "[features["mam_tail"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -342,7 +354,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Tail

" - dat += "[features["tail_human"]]
" + dat += "[features["tail_human"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -354,7 +366,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Snout

" - dat += "[features["snout"]]
" + dat += "[features["snout"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -366,7 +378,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Horns

" - dat += "[features["horns"]]
" + dat += "[features["horns"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -377,7 +389,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Frills

" - dat += "[features["frills"]]
" + dat += "[features["frills"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -390,7 +402,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Spines

" - dat += "[features["spines"]]
" + dat += "[features["spines"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -403,7 +415,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Body Markings

" - dat += "[features["body_markings"]]
" + dat += "[features["body_markings"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -415,7 +427,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Species Markings

" - dat += "[features["mam_body_markings"]]
" + dat += "[features["mam_body_markings"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -427,7 +439,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Ears

" - dat += "[features["mam_ears"]]
" + dat += "[features["mam_ears"]]" mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) @@ -439,7 +451,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Ears

" - dat += "[features["ears"]]
" + dat += "[features["ears"]]" + + mutant_category++ + if(mutant_category >= MAX_MUTANT_ROWS) + dat += "
" - dat += "" - + dat += "" + dat += "" - dat += "Underwear:[underwear]
" - dat += "Undershirt:[undershirt]
" - dat += "Socks:[socks]
" - dat += "Backpack:[backbag]
" - dat += "Uplink Location:[uplink_spawn_loc]
" - - dat += "

Genitals

" + dat +="" + dat += APPEARANCE_CATEGORY_COLUMN + dat += "Has Breasts:" + dat += "[features["has_breasts"] == TRUE ? "Yes" : "No"]" if(features["has_breasts"]) if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "Color:   (Skin tone overriding)
" + dat += "Color:" + dat += "   (Skin tone overriding)
" else - dat += "Color:   Change
" - dat += "Cup Size:[features["breasts_size"]]
" - dat += "Breast Shape:[features["breasts_shape"]]
" - dat += "
" dat += "

Clothing & Equipment

" + dat += "Underwear:[underwear]" + dat += "Undershirt:[undershirt]" + dat += "Socks:[socks]" + dat += "Backpack:[backbag]" + dat += "Uplink Location:[uplink_spawn_loc]" + dat += "
" if(NOGENITALS in pref_species.species_traits) dat += "Your species ([pref_species.name]) does not support genitals!
" else if(pref_species.use_skintones) - dat += "Genitals use skintone:[features["genitals_use_skintone"] == TRUE ? "Yes" : "No"]
" - dat += "Has Penis:[features["has_cock"] == TRUE ? "Yes" : "No"]
" + dat += "Genitals use skintone:[features["genitals_use_skintone"] == TRUE ? "Yes" : "No"]" + dat += "Has Penis:" + dat += "[features["has_cock"] == TRUE ? "Yes" : "No"]" if(features["has_cock"] == TRUE) if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "Penis Color:   (Skin tone overriding)
" + dat += "Penis Color:" + dat += "   (Skin tone overriding)
" else - dat += "Penis Color:    Change
" - dat += "Penis Shape: [features["cock_shape"]]
" - dat += "Penis Length: [features["cock_length"]] inch(es)
" - dat += "Has Testicles:[features["has_balls"] == TRUE ? "Yes" : "No"]
" + dat += "Penis Color:" + dat += "    Change
" + dat += "Penis Shape: [features["cock_shape"]]" + dat += "Penis Length: [features["cock_length"]] inch(es)" + dat += "Has Testicles:[features["has_balls"] == TRUE ? "Yes" : "No"]" if(features["has_balls"] == TRUE) if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "Testicles Color:   (Skin tone overriding)
" + dat += "Testicles Color:" + dat += "   (Skin tone overriding)
" else - dat += "Testicles Color:    Change
" - dat += "Has Vagina:[features["has_vag"] == TRUE ? "Yes" : "No"]
" + dat += "Testicles Color:" + dat += "    Change
" + dat += APPEARANCE_CATEGORY_COLUMN + dat += "Has Vagina:" + dat += "[features["has_vag"] == TRUE ? "Yes" : "No"]" if(features["has_vag"]) - dat += "Vagina Type: [features["vag_shape"]]
" + dat += "Vagina Type: [features["vag_shape"]]" if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "Vagina Color:   (Skin tone overriding)
" + dat += "Vagina Color:" + dat += "   (Skin tone overriding)
" else - dat += "Vagina Color:    Change
" - dat += "Has Womb:[features["has_womb"] == TRUE ? "Yes" : "No"]
" - dat += "Has Breasts:[features["has_breasts"] == TRUE ? "Yes" : "No"]
" + dat += "Vagina Color:" + dat += "    Change
" + dat += "Has Womb:[features["has_womb"] == TRUE ? "Yes" : "No"]" + dat += "
" + dat += "Color:" + dat += "    Change
" + dat += "Cup Size:[features["breasts_size"]]" + dat += "Breast Shape:[features["breasts_shape"]]" + dat += "" + dat += "" + dat += "" if (1) // Game Preferences dat += "" + + dat +="" dat += "
" @@ -646,6 +686,21 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "Combo HUD Lighting: [(toggles & COMBOHUD_LIGHTING)?"Full-bright":"No Change"]
" dat += "
" + dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. + dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" + dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
" + dat += "Voracious MediHound sleepers: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
" + dat += "Hear Vore Sounds: [(cit_toggles & EATING_NOISES) ? "Yes" : "No"]
" + dat += "Hear Vore Digestion Sounds: [(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]
" + dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
" + dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
" + dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
" + if (user && user.client && !user.client.prefs.screenshake==0) + dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" + dat += "
" + dat += "
" if(unlock_content) dat += "Ghost Form: [ghost_form]
" @@ -731,18 +786,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Enabled" : "Disabled"]
" dat += "
" - dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. - dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" - dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
" - dat += "Voracious MediHound sleepers: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
" - dat += "Hear Vore Sounds: [(cit_toggles & EATING_NOISES) ? "Yes" : "No"]
" - dat += "Hear Vore Digestion Sounds: [(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]
" - dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
" - dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
" - dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
" - if (user && user.client && !user.client.prefs.screenshake==0) - dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" - dat += "
" if(3) if(!gear_tab) @@ -804,9 +847,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Reset Setup" dat += "
" - var/datum/browser/popup = new(user, "preferences", "
Character Setup
", 640, 770) + winshow(user, "preferences_window", TRUE) + var/datum/browser/popup = new(user, "preferences_browser", "
Character Setup
", 640, 770) popup.set_content(dat.Join()) - popup.open(0) + popup.open(FALSE) + onclose(user, "preferences_window", src) #undef APPEARANCE_CATEGORY_COLUMN #undef MAX_MUTANT_ROWS @@ -932,12 +977,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) HTML += "

[message]
" HTML += "
Reset Preferences
" - user << browse(null, "window=preferences") var/datum/browser/popup = new(user, "mob_occupation", "
Occupation Preferences
", width, height) popup.set_window_options("can_close=0") popup.set_content(HTML) - popup.open(0) - return + popup.open(FALSE) /datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level) if (!job) @@ -1126,12 +1169,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) [has_quirk ? "Lose" : "Take"] ([quirk_cost] pts.)
" dat += "
Reset Traits
" - user << browse(null, "window=preferences") var/datum/browser/popup = new(user, "mob_occupation", "
Quirk Preferences
", 900, 600) //no reason not to reuse the occupation window, as it's cleaner that way popup.set_window_options("can_close=0") popup.set_content(dat.Join()) - popup.open(0) - return + popup.open(FALSE) /datum/preferences/proc/GetQuirkBalance() var/bal = 0 @@ -1140,6 +1181,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) bal -= initial(T.value) return bal +/datum/preferences/Topic(href, href_list, hsrc) //yeah, gotta do this I guess.. + . = ..() + if(href_list["close"]) + var/client/C = usr.client + if(C) + C.clear_character_previews() + /datum/preferences/proc/process_link(mob/user, list/href_list) if(href_list["jobbancheck"]) var/job = sanitizeSQL(href_list["jobbancheck"]) @@ -1412,6 +1460,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(result) var/newtype = GLOB.species_list[result] pref_species = new newtype() + //let's ensure that no weird shit happens on species swapping. + if(!("body_markings" in pref_species.default_features)) + features["body_markings"] = "None" + if(!("mam_body_markings" in pref_species.default_features)) + features["mam_body_markings"] = "None" + if("mam_body_markings" in pref_species.default_features && features["mam_body_markings"] == "None") + features["mam_body_markings"] = "Plain" + if("tail_lizard" in pref_species.default_features) + features["tail_lizard"] = "Smooth" + if("mam_tail" in pref_species.default_features) + features["mam_tail"] = "None" + if("mam_ears" in pref_species.default_features) + features["mam_ears"] = "None" + if(pref_species.id == "felinid") + features["mam_tail"] = "Cat" + features["mam_ears"] = "Cat" + //Now that we changed our species, we must verify that the mutant colour is still allowed. var/temp_hsv = RGBtoHSV(features["mcolor"]) if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) @@ -1427,8 +1492,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor"] = pref_species.default_color + update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor"] = sanitize_hexcolor(new_mutantcolor) + update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1438,8 +1505,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor2"] = pref_species.default_color + update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor2"] = sanitize_hexcolor(new_mutantcolor) + update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1449,8 +1518,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/temp_hsv = RGBtoHSV(new_mutantcolor) if(new_mutantcolor == "#000000") features["mcolor3"] = pref_species.default_color + update_preview_icon() else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin features["mcolor3"] = sanitize_hexcolor(new_mutantcolor) + update_preview_icon() else to_chat(user, "Invalid color. Your color is not bright enough.") @@ -1516,6 +1587,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_snout) features["snout"] = new_snout + if("mam_snouts") + var/new_mam_snouts + new_mam_snouts = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.mam_snouts_list + if(new_mam_snouts) + features["mam_snouts"] = new_mam_snouts + if("horns") var/new_horns new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list @@ -1551,12 +1628,16 @@ GLOBAL_LIST_EMPTY(preferences_datums) new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list if(new_body_markings) features["body_markings"] = new_body_markings + if(new_body_markings != "None") + features["mam_body_markings"] = "None" + update_preview_icon() if("legs") var/new_legs new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list if(new_legs) features["legs"] = new_legs + update_preview_icon() if("moth_wings") var/new_moth_wings @@ -1625,6 +1706,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list if(new_mam_body_markings) features["mam_body_markings"] = new_mam_body_markings + if(new_mam_body_markings != "None") + features["body_markings"] = "None" + else if(new_mam_body_markings == "None") + features["mam_body_markings"] = "Plain" + features["body_markings"] = "None" + update_preview_icon() //Xeno Bodyparts if("xenohead")//Head or caste type diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index dbf782c5fe..c3b2c15bdb 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -301,6 +301,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_mam_ears"] >> features["mam_ears"] S["feature_mam_tail_animated"] >> features["mam_tail_animated"] S["feature_taur"] >> features["taur"] + S["feature_mam_snouts"] >> features["mam_snouts"] //Xeno features S["feature_xeno_tail"] >> features["xenotail"] S["feature_xeno_dors"] >> features["xenodorsal"] diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index c9710a5457..6b67ada775 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -20,17 +20,19 @@ features = random_features() age = rand(AGE_MIN,AGE_MAX) -/datum/preferences/proc/update_preview_icon(nude = FALSE) +/datum/preferences/proc/update_preview_icon() // Silicons only need a very basic preview since there is no customization for them. +// var/wide_icon = FALSE //CITDEL THINGS +// if(features["taur"] != "None") +// wide_icon = TRUE + if(job_engsec_high) switch(job_engsec_high) if(AI_JF) - preview_icon = icon('icons/mob/ai.dmi', "AI", SOUTH) - preview_icon.Scale(64, 64) + parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = "AI", dir = SOUTH)) return if(CYBORG) - preview_icon = icon('icons/mob/robots.dmi', "robot", SOUTH) - preview_icon.Scale(64, 64) + parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH)) return // Set up the dummy for its photoshoot @@ -57,30 +59,11 @@ previewJob = job break - if(previewJob && !nude) - mannequin.job = previewJob.title - previewJob.equip(mannequin, TRUE) - COMPILE_OVERLAYS(mannequin) - CHECK_TICK - preview_icon = icon('icons/effects/effects.dmi', "nothing") - preview_icon.Scale(48+32, 16+32) - CHECK_TICK - mannequin.setDir(NORTH) + if(previewJob) + if(current_tab != 2) + mannequin.job = previewJob.title + previewJob.equip(mannequin, TRUE) - var/icon/stamp = getFlatIcon(mannequin) - CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17) - CHECK_TICK - mannequin.setDir(WEST) - stamp = getFlatIcon(mannequin) - CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9) - CHECK_TICK - mannequin.setDir(SOUTH) - stamp = getFlatIcon(mannequin) - CHECK_TICK - preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1) - CHECK_TICK - preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. - CHECK_TICK + COMPILE_OVERLAYS(mannequin) + parent.show_character_previews(new /mutable_appearance(mannequin)) unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 76fa1cefe1..2778e3e29c 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1522,18 +1522,3 @@ /datum/sprite_accessory/moth_wings/snow name = "Snow" icon_state = "snow" - -//Lunasune -/datum/sprite_accessory/mam_ears/lunasune - name = "lunasune" - icon_state = "lunasune" - hasinner = 1 - extra = TRUE - extra_color_src = MUTCOLORS2 - ckeys_allowed = list("invader4352") - -/datum/sprite_accessory/mam_tails/lunasune - name = "lunasune" - icon_state = "lunasune" - extra = TRUE - ckeys_allowed = list("invader4352") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index aee1daa449..b4c6bd9c52 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -317,9 +317,9 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD) if(!HD) //Decapitated return - if(H.has_trait(TRAIT_HUSK)) return + var/datum/sprite_accessory/S var/list/standing = list() @@ -351,7 +351,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.facial_hair_style && (FACEHAIR in species_traits) && (!facialhair_hidden || dynamic_fhair_suffix)) S = GLOB.facial_hair_styles_list[H.facial_hair_style] if(S) - //List of all valid dynamic_fhair_suffixes var/static/list/fextensions if(!fextensions) @@ -410,7 +409,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) else if(H.hair_style && (HAIR in species_traits)) S = GLOB.hair_styles_list[H.hair_style] if(S) - //List of all valid dynamic_hair_suffixes var/static/list/extensions if(!extensions) @@ -612,6 +610,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) 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) 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) + bodyparts_to_add -= "mam_snouts" + if("taur" in mutant_bodyparts) if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR))) bodyparts_to_add -= "taur" @@ -696,13 +698,19 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer) + accessory_overlay.color = null //just because. reee. + //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" || bodypart == "mam_waggingtail") + else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human") bodypart = "waggingtail" + if(bodypart == "mam_waggingtail") + bodypart = "tailwag" if(bodypart == "mam_ears" || bodypart == "ears") bodypart = "ears" + if(bodypart == "mam_snouts" || bodypart == "snout") + bodypart = "snout" if(bodypart == "xenohead") bodypart = "xhead" @@ -714,6 +722,15 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(S.center) accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) + 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) + 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) @@ -732,6 +749,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) accessory_overlay.color = "#[fixed_mut_color3]" else accessory_overlay.color = "#[H.dna.features["mcolor3"]]" + + if(MATRIXED) + accessory_overlay.color = list(colorlist) + if(HAIR) if(hair_color == "mutcolor") accessory_overlay.color = "#[H.dna.features["mcolor"]]" @@ -743,6 +764,21 @@ GLOBAL_LIST_EMPTY(roundstart_races) accessory_overlay.color = "#[H.eye_color]" else accessory_overlay.color = forced_colour + else + if(bodypart == "ears") + accessory_overlay.icon_state = "m_ears_none_[layertext]" + if(bodypart == "tail") + accessory_overlay.icon_state = "m_tail_husk_[layertext]" + if(MATRIXED) + var/list/husklist = list() + husklist += ReadRGB("#a3a3a3") + husklist += ReadRGB("#a3a3a3") + husklist += ReadRGB("#a3a3a3") + husklist += list(0,0,0) + for(var/index=1, index<=husklist.len, index++) + husklist[index] = husklist[index]/255 + accessory_overlay.color = husklist + standing += accessory_overlay if(S.hasinner) diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm index 7207a4f49d..1ee697d66c 100644 --- a/code/modules/mob/living/carbon/human/species_types/felinid.dm +++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm @@ -4,8 +4,8 @@ id = "felinid" limbs_id = "human" - mutant_bodyparts = list("ears", "tail_human") - default_features = list("mcolor" = "FFF", "tail_human" = "Cat", "ears" = "Cat", "wings" = "None") + mutant_bodyparts = list("mam_ears", "mam_tail") + default_features = list("mcolor" = "FFF", "mam_tail" = "Cat", "mam_ears" = "Cat", "wings" = "None") mutantears = /obj/item/organ/ears/cat mutanttail = /obj/item/organ/tail/cat @@ -23,38 +23,39 @@ stop_wagging_tail(H) . = ..() + /datum/species/human/felinid/can_wag_tail(mob/living/carbon/human/H) - return ("tail_human" in mutant_bodyparts) || ("waggingtail_human" in mutant_bodyparts) + return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts) /datum/species/human/felinid/is_wagging_tail(mob/living/carbon/human/H) - return ("waggingtail_human" in mutant_bodyparts) + return ("mam_waggingtail" in mutant_bodyparts) /datum/species/human/felinid/start_wagging_tail(mob/living/carbon/human/H) - if("tail_human" in mutant_bodyparts) - mutant_bodyparts -= "tail_human" - mutant_bodyparts |= "waggingtail_human" + if("mam_tail" in mutant_bodyparts) + mutant_bodyparts -= "mam_tail" + mutant_bodyparts |= "mam_waggingtail" H.update_body() /datum/species/human/felinid/stop_wagging_tail(mob/living/carbon/human/H) - if("waggingtail_human" in mutant_bodyparts) - mutant_bodyparts -= "waggingtail_human" - mutant_bodyparts |= "tail_human" + if("mam_waggingtail" in mutant_bodyparts) + mutant_bodyparts -= "mam_waggingtail" + mutant_bodyparts |= "mam_tail" H.update_body() /datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) if(ishuman(C)) var/mob/living/carbon/human/H = C if(!pref_load) //Hah! They got forcefully purrbation'd. Force default felinid parts on them if they have no mutant parts in those areas! - if(H.dna.features["tail_human"] == "None") - H.dna.features["tail_human"] = "Cat" - if(H.dna.features["ears"] == "None") - H.dna.features["ears"] = "Cat" - if(H.dna.features["ears"] == "Cat") + if(H.dna.features["mam_tail"] == "None") + H.dna.features["mam_tail"] = "Cat" + if(H.dna.features["mam_ears"] == "None") + H.dna.features["mam_ears"] = "Cat" + if(H.dna.features["mam_ears"] == "Cat") var/obj/item/organ/ears/cat/ears = new ears.Insert(H, drop_if_replaced = FALSE) else mutantears = /obj/item/organ/ears - if(H.dna.features["tail_human"] == "Cat") + if(H.dna.features["mam_tail"] == "Cat") var/obj/item/organ/tail/cat/tail = new tail.Insert(H, drop_if_replaced = FALSE) else diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 72052f0fa1..71717bfc16 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -359,7 +359,6 @@ There are several things that need to be remembered: apply_overlay(BELT_LAYER) - /mob/living/carbon/human/update_inv_wear_suit() remove_overlay(SUIT_LAYER) @@ -391,8 +390,6 @@ There are several things that need to be remembered: else if(S.taurmode == NOT_TAURIC && S.adjusted == NORMAL_STYLE) S.alternate_worn_icon = null - - overlays_standing[SUIT_LAYER] = S.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = ((wear_suit.alternate_worn_icon) ? S.alternate_worn_icon : 'icons/mob/suit.dmi')) var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] if(OFFSET_SUIT in dna.species.offset_features) @@ -477,7 +474,6 @@ There are several things that need to be remembered: out += overlays_standing[i] return out - //human HUD updates for items in our inventory //update whether our head item appears on our hud. @@ -614,7 +610,7 @@ generate/load female uniform sprites matching all previously decided variables else if(dna.species.fixed_mut_color) . += "-coloured-[dna.species.fixed_mut_color]" else if(dna.features["mcolor"]) - . += "-coloured-[dna.features["mcolor"]]" + . += "-coloured-[dna.features["mcolor"]]-[dna.features["mcolor2"]]-[dna.features["mcolor3"]]" else . += "-not_coloured" @@ -644,6 +640,8 @@ generate/load female uniform sprites matching all previously decided variables . += "-digitigrade[BP.use_digitigrade]" if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" + if(BP.body_markings) + . += "-[BP.body_markings]" if(has_trait(TRAIT_HUSK)) . += "-husk" diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index be98d1bfab..43abe7c825 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -261,11 +261,13 @@ if(!has_trait(TRAIT_HUSK)) remove_trait(TRAIT_DISFIGURED, "husk") update_body() + return TRUE /mob/living/proc/become_husk(source) if(!has_trait(TRAIT_HUSK)) add_trait(TRAIT_DISFIGURED, "husk") update_body() + . = TRUE add_trait(TRAIT_HUSK, source) /mob/living/proc/cure_fakedeath(list/sources) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 8d0547d2c5..5beb9e87d8 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -45,6 +45,10 @@ var/species_color = "" var/mutation_color = "" var/no_update = 0 + var/list/body_markings = list() //for bodypart markings + var/list/markings_color = list() + var/auxmarking + var/list/auxmarking_color = list() var/animal_origin = null //for nonhuman bodypart (e.g. monkey) var/dismemberable = 1 //whether it can be dismembered with a weapon. @@ -285,6 +289,7 @@ should_draw_gender = FALSE should_draw_greyscale = FALSE no_update = TRUE + body_markings = "husk" // reeee if(no_update) return @@ -298,6 +303,16 @@ should_draw_citadel = S.should_draw_citadel // Citadel Addition species_flags_list = H.dna.species.species_traits + //body marking memes + 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) + for(var/index=1, index<=colorlist.len, index++) + colorlist[index] = colorlist[index]/255 + if(S.use_skintones) skin_tone = H.skin_tone should_draw_greyscale = TRUE @@ -316,6 +331,17 @@ else species_color = "" + if("mam_body_markings" in S.default_features) + if(H.dna.features.["mam_body_markings"] != "None") + body_markings = lowertext(H.dna.features.["mam_body_markings"]) + if(MATRIXED) + markings_color = list(colorlist) + else + markings_color = (H.dna.features.["mcolor"]) + else + body_markings = "None" + markings_color = "" + if(!dropping_limb && H.dna.check_mutation(HULK)) mutation_color = "00aa00" else @@ -346,6 +372,7 @@ //Gives you a proper icon appearance for the dismembered limb /obj/item/bodypart/proc/get_limb_icon(dropped) + cut_overlays() icon_state = "" //to erase the default sprite, we're building the visual aspects of the bodypart through overlays alone. . = list() @@ -358,9 +385,17 @@ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_[brutestate]0", -DAMAGE_LAYER, image_dir) if(burnstate) . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) + if(body_markings) + if(use_digitigrade == NOT_DIGITIGRADE) + . += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + else + . += image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux + var/image/marking + var/image/auxmarking + . += limb if(animal_origin) @@ -403,11 +438,31 @@ limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" else limb.icon_state = "[species_id]_[body_zone]" + + // Body markings + if(body_markings) + if(species_id == "husk") + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + else if(species_id == "husk" && use_digitigrade) + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + + else if(!use_digitigrade) + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + else + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += marking + // Citadel End if(aux_zone) aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir) . += aux + if(body_markings) + if(species_id == "husk") + auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[aux_zone]", -aux_layer, image_dir) + else + auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir) + . += auxmarking else limb.icon = icon @@ -416,17 +471,45 @@ else limb.icon_state = "[body_zone]" if(aux_zone) - aux = image(limb.icon, "[aux_zone]", -aux_layer, image_dir) + aux = image(limb.icon, "[species_id]_[aux_zone]", -aux_layer, image_dir) . += aux + if(body_markings) + if(species_id == "husk") + auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[aux_zone]", -aux_layer, image_dir) + else + auxmarking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[aux_zone]", -aux_layer, image_dir) + . += auxmarking + + if(body_markings) + if(species_id == "husk") + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + else if(species_id == "husk" && use_digitigrade) + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + + else if(!use_digitigrade) + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + else + marking = image('modular_citadel/icons/mob/mam_markings.dmi', "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += marking return if(should_draw_greyscale) + marking.color = null var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) if(draw_color) limb.color = "#[draw_color]" if(aux_zone) aux.color = "#[draw_color]" + if(body_markings) + auxmarking.color = list(markings_color) + + if(body_markings) + if(species_id == "husk") + marking.color = "#141414" + else + marking.color = list(markings_color) + /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 9d9e26c6fa..9cc56a6ca8 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -288,6 +288,7 @@ O.drop_limb(1) qdel(O) N.attach_limb(src) + if(body_plan_changed && ishuman(src)) var/mob/living/carbon/human/H = src if(H.w_uniform) @@ -311,4 +312,4 @@ S.adjusted = NORMAL_STYLE else S.adjusted = ALT_STYLE - H.update_inv_wear_suit() \ No newline at end of file + H.update_inv_wear_suit() diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index f162d36633..47ef8e816f 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 99850c34ba..65f4a22664 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -268,3 +268,30 @@ window "statwindow" is-default = true saved-params = "" + window "preferences_window" + elem "preferences_window" + type = MAIN + pos = 372,0 + size = 1120x1000 + anchor1 = none + anchor2 = none + background-color = none + is-visible = false + saved-params = "pos;size;is-minimized;is-maximized" + statusbar = false + elem "preferences_browser" + type = BROWSER + pos = -8,-8 + size = 896x1008 + anchor1 = 0,0 + anchor2 = 90,100 + background-color = none + saved-params = "" + elem "character_preview_map" + type = MAP + pos = 887,0 + size = 313x1000 + anchor1 = 90,0 + anchor2 = 100,100 + right-click = true + saved-params = "zoom;letterbox;zoom-mode" diff --git a/modular_citadel/code/init.dm b/modular_citadel/code/init.dm index 6df5be02eb..2c2b5b811f 100644 --- a/modular_citadel/code/init.dm +++ b/modular_citadel/code/init.dm @@ -9,6 +9,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list) diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm index 927d324e23..358208c1d7 100644 --- a/modular_citadel/code/modules/client/preferences.dm +++ b/modular_citadel/code/modules/client/preferences.dm @@ -40,6 +40,7 @@ "mcolor3" = "FFF", "mam_body_markings" = "None", "mam_ears" = "None", + "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm index 8f65e47d2b..209d46db61 100644 --- a/modular_citadel/code/modules/client/preferences_savefile.dm +++ b/modular_citadel/code/modules/client/preferences_savefile.dm @@ -40,6 +40,7 @@ WRITE_FILE(S["feature_mam_ears"], features["mam_ears"]) WRITE_FILE(S["feature_mam_tail_animated"], features["mam_tail_animated"]) WRITE_FILE(S["feature_taur"], features["taur"]) + WRITE_FILE(S["feature_mam_snouts"], features["mam_snouts"]) //Xeno features WRITE_FILE(S["feature_xeno_tail"], features["xenotail"]) WRITE_FILE(S["feature_xeno_dors"], features["xenodorsal"]) diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm index 38343838e9..b22989024e 100644 --- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -7,12 +7,6 @@ var/extra2_color_src = MUTCOLORS3 var/list/ckeys_allowed -/* tbi eventually idk -/datum/sprite_accessory/legs/digitigrade_mam - name = "Anthro Digitigrade Legs" - icon = 'modular_citadel/icons/mob/mam_tails.dmi' -*/ - /datum/sprite_accessory/moth_wings/none name = "None" icon_state = "none" @@ -29,14 +23,146 @@ name = "None" icon_state = "None" + +/datum/sprite_accessory/tails/lizard/axolotl + name = "Axolotl" + icon_state = "axolotl" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/datum/sprite_accessory/tails_animated/lizard/axolotl + name = "Axolotl" + icon_state = "axolotl" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_tails.dmi' + +/************* Lizard compatable snoots ************/ +/datum/sprite_accessory/snouts/bird + name = "Beak" + icon_state = "bird" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/bigbeak + name = "Big Beak" + icon_state = "bigbeak" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/bug + name = "Bug" + icon_state = "bug" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/snouts/elephant + name = "Elephant" + icon_state = "elephant" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/snouts/lcanid + name = "Mammal, Long" + icon_state = "lcanid" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/lcanidalt + name = "Mammal, Long ALT" + icon_state = "lcanidalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/scanid + name = "Mammal, Short" + icon_state = "scanid" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/scanidalt + name = "Mammal, Short ALT" + icon_state = "scanidalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/wolf + name = "Mammal, Thick" + icon_state = "wolf" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/wolfalt + name = "Mammal, Thick ALT" + icon_state = "wolfalt" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/redpanda + name = "WahCoon" + icon_state = "wah" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/rhino + name = "Horn" + icon_state = "rhino" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + extra = TRUE + extra = MUTCOLORS3 + +/datum/sprite_accessory/snouts/rodent + name = "Rodent" + icon_state = "rodent" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/husky + name = "Husky" + icon_state = "husky" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/otie + name = "Otie" + icon_state = "otie" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/pede + name = "Scolipede" + icon_state = "pede" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/sergal + name = "Sergal" + icon_state = "sergal" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + +/datum/sprite_accessory/snouts/shark + name = "Shark" + icon_state = "shark" + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + +/datum/sprite_accessory/snouts/toucan + name = "Toucan" + icon_state = "toucan" + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' + color_src = MATRIXED + /****************************************** ************ Human Ears/Tails ************* *******************************************/ /datum/sprite_accessory/tails/human/ailurus name = "Red Panda" - icon_state = "ailurus" - color_src = 0 + icon_state = "wah" icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/axolotl @@ -49,7 +175,7 @@ icon_state = "axolotl" icon = 'modular_citadel/icons/mob/mam_tails.dmi' -/datum/sprite_accessory/tails_animated/axolotl +/datum/sprite_accessory/tails_animated/human/axolotl name = "Axolotl" icon_state = "axolotl" icon = 'modular_citadel/icons/mob/mam_tails.dmi' @@ -58,6 +184,7 @@ name = "Bear" icon_state = "bear" icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/bear name = "Bear" @@ -83,7 +210,7 @@ name = "Cow" icon_state = "cow" icon = 'modular_citadel/icons/mob/mam_ears.dmi' - gender_specific = 1 + color_src = MATRIXED /datum/sprite_accessory/tails/human/cow name = "Cow" @@ -105,6 +232,7 @@ name = "Eevee" icon_state = "eevee" icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/eevee name = "Eevee" @@ -120,12 +248,13 @@ name = "Elephant" icon_state = "elephant" icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/ears/fennec name = "Fennec" icon_state = "fennec" icon = 'modular_citadel/icons/mob/mam_ears.dmi' - hasinner = 1 + color_src = MATRIXED /datum/sprite_accessory/tails/human/fennec name = "Fennec" @@ -141,39 +270,33 @@ name = "Fish" icon_state = "fish" icon = 'modular_citadel/icons/mob/mam_ears.dmi' - color_src = MUTCOLORS3 + color_src = MATRIXED /datum/sprite_accessory/tails/human/fish name = "Fish" icon_state = "fish" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE - extra_color_src = MUTCOLORS3 /datum/sprite_accessory/tails_animated/human/fish name = "Fish" icon_state = "fish" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE - extra_color_src = MUTCOLORS3 /datum/sprite_accessory/ears/fox name = "Fox" icon_state = "fox" - hasinner = 1 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/tails/human/fox name = "Fox" icon_state = "fox" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE /datum/sprite_accessory/tails_animated/human/fox name = "Fox" icon_state = "fox" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE /datum/sprite_accessory/tails/human/horse name = "Horse" @@ -191,15 +314,13 @@ name = "Husky" icon_state = "husky" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE /datum/sprite_accessory/tails_animated/human/husky name = "Husky" icon_state = "husky" icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra = TRUE - /datum/sprite_accessory/tails/human/insect +/datum/sprite_accessory/tails/human/insect name = "Insect" icon_state = "insect" icon = 'modular_citadel/icons/mob/mam_tails.dmi' @@ -217,188 +338,199 @@ /datum/sprite_accessory/tails/human/kitsune name = "Kitsune" icon_state = "kitsune" - extra = TRUE - extra_color_src = MUTCOLORS2 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/kitsune name = "Kitsune" icon_state = "kitsune" - extra = TRUE - extra_color_src = MUTCOLORS2 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/lab name = "Dog, Floppy" icon_state = "lab" - hasinner = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/ears/murid name = "Murid" icon_state = "murid" icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/murid name = "Murid" icon_state = "murid" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/murid name = "Murid" icon_state = "murid" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/otie name = "Otusian" icon_state = "otie" - hasinner= 1 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/tails/human/otie name = "Otusian" icon_state = "otie" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/otie name = "Otusian" icon_state = "otie" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails/orca name = "Orca" icon_state = "orca" - extra = TRUE + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/orca name = "Orca" icon_state = "orca" - extra = TRUE + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/pede name = "Scolipede" icon_state = "pede" icon = 'modular_citadel/icons/mob/mam_ears.dmi' - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 + color_src = MATRIXED /datum/sprite_accessory/tails/human/pede name = "Scolipede" icon_state = "pede" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/pede name = "Scolipede" icon_state = "pede" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/rabbit name = "Rabbit" icon_state = "rabbit" - hasinner= 1 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/tails/human/rabbit name = "Rabbit" icon_state = "rabbit" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/rabbit name = "Rabbit" icon_state = "rabbit" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/sergal name = "Sergal" icon_state = "sergal" - hasinner= 1 icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/sergal name = "Sergal" icon_state = "sergal" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/sergal name = "Sergal" icon_state = "sergal" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/human/skunk name = "skunk" icon_state = "skunk" icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/skunk name = "skunk" icon_state = "skunk" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/skunk name = "skunk" icon_state = "skunk" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails/human/shark name = "Shark" icon_state = "shark" - color_src = MUTCOLORS + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails/human/shark/datashark name = "datashark" icon_state = "datashark" - color_src = 0 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/squirrel name = "Squirrel" icon_state = "squirrel" - hasinner= 1 icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/tails/human/squirrel name = "Squirrel" icon_state = "squirrel" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/squirrel name = "Squirrel" icon_state = "squirrel" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails/human/yentacle name = "Tentacle" icon_state = "tentacle" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/tentacle name = "Tentacle" icon_state = "tentacle" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_ears.dmi' /datum/sprite_accessory/tails/human/wolf name = "Wolf" icon_state = "wolf" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/tails_animated/human/wolf name = "Wolf" icon_state = "wolf" + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' /****************************************** @@ -406,126 +538,253 @@ *******************************************/ /datum/sprite_accessory/mam_ears - extra = TRUE - extra2 = TRUE icon = 'modular_citadel/icons/mob/mam_ears.dmi' - extra_icon = 'modular_citadel/icons/mob/mam_ears.dmi' - extra2_icon = 'modular_citadel/icons/mob/mam_ears.dmi' + color_src = MATRIXED /datum/sprite_accessory/mam_ears/none name = "None" icon_state = "none" /datum/sprite_accessory/mam_tails - extra = TRUE - extra2 = TRUE + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/mam_tails/none name = "None" icon_state = "none" /datum/sprite_accessory/mam_tails_animated - extra = TRUE - extra2 = TRUE + color_src = MATRIXED icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra_icon = 'modular_citadel/icons/mob/mam_tails.dmi' - extra2_icon = 'modular_citadel/icons/mob/mam_tails.dmi' /datum/sprite_accessory/mam_tails_animated/none name = "None" icon_state = "none" + color_src = MATRIXED -/datum/sprite_accessory/snouts +/datum/sprite_accessory/mam_snouts + color_src = MATRIXED + icon = 'modular_citadel/icons/mob/mam_snouts.dmi' -/datum/sprite_accessory/snouts/none +/datum/sprite_accessory/mam_snouts/none name = "None" icon_state = "none" - extra_icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra2_icon = 'modular_citadel/icons/mob/mam_snouts.dmi' /****************************************** **************** Snouts ******************* *******************************************/ -/datum/sprite_accessory/snouts/bird +/datum/sprite_accessory/mam_snouts/bird name = "Beak" icon_state = "bird" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - color_src = MUTCOLORS3 -/datum/sprite_accessory/snouts/bigbeak +/datum/sprite_accessory/mam_snouts/bigbeak name = "Big Beak" icon_state = "bigbeak" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - color_src = MUTCOLORS3 -/datum/sprite_accessory/snouts/elephant +/datum/sprite_accessory/mam_snouts/bug + name = "Bug" + icon_state = "bug" + color_src = MUTCOLORS + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/elephant name = "Elephant" icon_state = "elephant" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' extra = TRUE extra_color_src = MUTCOLORS3 -/datum/sprite_accessory/snouts/lcanid - name = "Fox, Long" +/datum/sprite_accessory/mam_snouts/lcanid + name = "Mammal, Long" icon_state = "lcanid" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE -/datum/sprite_accessory/snouts/scanid - name = "Fox, Short" +/datum/sprite_accessory/mam_snouts/lcanidalt + name = "Mammal, Long ALT" + icon_state = "lcanidalt" + +/datum/sprite_accessory/mam_snouts/scanid + name = "Mammal, Short" icon_state = "scanid" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE -/datum/sprite_accessory/snouts/wolf - name = "Wolf" +/datum/sprite_accessory/mam_snouts/scanidalt + name = "Mammal, Short ALT" + icon_state = "scanidalt" + +/datum/sprite_accessory/mam_snouts/wolf + name = "Mammal, Thick" icon_state = "wolf" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE -/datum/sprite_accessory/snouts/rhino +/datum/sprite_accessory/mam_snouts/wolfalt + name = "Mammal, Thick ALT" + icon_state = "wolfalt" + +/datum/sprite_accessory/mam_snouts/redpanda + name = "WahCoon" + icon_state = "wah" + +/datum/sprite_accessory/mam_snouts/rhino name = "Horn" icon_state = "rhino" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' extra = TRUE extra = MUTCOLORS3 -/datum/sprite_accessory/snouts/husky +/datum/sprite_accessory/mam_snouts/rodent + name = "Rodent" + icon_state = "rodent" + +/datum/sprite_accessory/mam_snouts/husky name = "Husky" icon_state = "husky" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE -/datum/sprite_accessory/snouts/otie +/datum/sprite_accessory/mam_snouts/otie name = "Otie" icon_state = "otie" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE -/datum/sprite_accessory/snouts/pede +/datum/sprite_accessory/mam_snouts/pede name = "Scolipede" icon_state = "pede" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - extra = TRUE - color_src = MUTCOLORS - extra_color_src = MUTCOLORS2 -/datum/sprite_accessory/snouts/sergal +/datum/sprite_accessory/mam_snouts/sergal name = "Sergal" icon_state = "sergal" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - color_src = MUTCOLORS2 -/datum/sprite_accessory/snouts/toucan +/datum/sprite_accessory/mam_snouts/shark + name = "Shark" + icon_state = "shark" + +/datum/sprite_accessory/mam_snouts/toucan name = "Toucan" icon_state = "toucan" - icon = 'modular_citadel/icons/mob/mam_snouts.dmi' - color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/sharp + name = "Sharp" + icon_state = "sharp" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/round + name = "Round" + icon_state = "round" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/sharplight + name = "Sharp + Light" + icon_state = "sharplight" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/roundlight + name = "Round + Light" + icon_state = "roundlight" + color_src = MUTCOLORS + + +/****************************************** +**************** Snouts ******************* +*************but higher up*****************/ + +/datum/sprite_accessory/mam_snouts/fbird + name = "Beak (Top)" + icon_state = "fbird" + +/datum/sprite_accessory/mam_snouts/fbigbeak + name = "Big Beak (Top)" + icon_state = "fbigbeak" + +/datum/sprite_accessory/mam_snouts/fbug + name = "Bug (Top)" + icon_state = "fbug" + color_src = MUTCOLORS + extra2 = TRUE + extra2_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/felephant + name = "Elephant (Top)" + icon_state = "felephant" + extra = TRUE + extra_color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/flcanid + name = "Mammal, Long (Top)" + icon_state = "flcanid" + +/datum/sprite_accessory/mam_snouts/flcanidalt + name = "Mammal, Long ALT (Top)" + icon_state = "flcanidalt" + +/datum/sprite_accessory/mam_snouts/fscanid + name = "Mammal, Short (Top)" + icon_state = "fscanid" + +/datum/sprite_accessory/mam_snouts/fscanidalt + name = "Mammal, Short ALT (Top)" + icon_state = "fscanidalt" + +/datum/sprite_accessory/mam_snouts/fwolf + name = "Mammal, Thick (Top)" + icon_state = "fwolf" + +/datum/sprite_accessory/mam_snouts/fwolfalt + name = "Mammal, Thick ALT (Top)" + icon_state = "fwolfalt" + +/datum/sprite_accessory/mam_snouts/fredpanda + name = "WahCoon (Top)" + icon_state = "fwah" + +/datum/sprite_accessory/mam_snouts/frhino + name = "Horn (Top)" + icon_state = "frhino" + extra = TRUE + extra = MUTCOLORS3 + +/datum/sprite_accessory/mam_snouts/frodent + name = "Rodent (Top)" + icon_state = "frodent" + +/datum/sprite_accessory/mam_snouts/fhusky + name = "Husky (Top)" + icon_state = "fhusky" + +/datum/sprite_accessory/mam_snouts/fotie + name = "Otie (Top)" + icon_state = "fotie" + +/datum/sprite_accessory/mam_snouts/fpede + name = "Scolipede (Top)" + icon_state = "fpede" + +/datum/sprite_accessory/mam_snouts/fsergal + name = "Sergal (Top)" + icon_state = "fsergal" + +/datum/sprite_accessory/mam_snouts/fshark + name = "Shark (Top)" + icon_state = "fshark" + +/datum/sprite_accessory/mam_snouts/ftoucan + name = "Toucan (Top)" + icon_state = "ftoucan" + +/datum/sprite_accessory/mam_snouts/fsharp + name = "Sharp (Top)" + icon_state = "fsharp" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/fround + name = "Round (Top)" + icon_state = "fround" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/fsharplight + name = "Sharp + Light (Top)" + icon_state = "fsharplight" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_snouts/froundlight + name = "Round + Light (Top)" + icon_state = "froundlight" + color_src = MUTCOLORS /****************************************** ***************** Ears ******************** @@ -539,18 +798,47 @@ name = "Bear" icon_state = "bear" +/datum/sprite_accessory/mam_ears/bigwolf + name = "Big Wolf" + icon_state = "bigwolf" + +/datum/sprite_accessory/mam_ears/bigwolfinner + name = "Big Wolf (ALT)" + icon_state = "bigwolfinner" + hasinner = 1 + +/datum/sprite_accessory/mam_ears/bigwolfdark + name = "Dark Big Wolf" + icon_state = "bigwolfdark" + +/datum/sprite_accessory/mam_ears/bigwolfinnerdark + name = "Dark Big Wolf (ALT)" + icon_state = "bigwolfinnerdark" + hasinner = 1 + +/datum/sprite_accessory/mam_ears/cat + name = "Cat" + icon_state = "cat" + hasinner = 1 + color_src = HAIR + /datum/sprite_accessory/mam_ears/catbig name = "Cat, Big" icon_state = "catbig" - hasinner = 1 /datum/sprite_accessory/mam_ears/cow name = "Cow" icon_state = "cow" +/datum/sprite_accessory/mam_ears/curled + name = "Curled Horn" + icon_state = "horn1" + color_src = MUTCOLORS3 + /datum/sprite_accessory/mam_ears/deer name = "Deer" icon_state = "deer" + color_src = MUTCOLORS3 /datum/sprite_accessory/mam_ears/eevee name = "Eevee" @@ -563,17 +851,14 @@ /datum/sprite_accessory/mam_ears/fennec name = "Fennec" icon_state = "fennec" - hasinner = 1 /datum/sprite_accessory/mam_ears/fish name = "Fish" icon_state = "fish" - color_src = MUTCOLORS3 /datum/sprite_accessory/mam_ears/fox name = "Fox" icon_state = "fox" - hasinner = 1 /datum/sprite_accessory/mam_ears/husky name = "Husky" @@ -583,6 +868,11 @@ name = "kangaroo" icon_state = "kangaroo" +/datum/sprite_accessory/mam_ears/jellyfish + name = "Jellyfish" + icon_state = "jellyfish" + color_src = HAIR + /datum/sprite_accessory/mam_ears/lab name = "Dog, Long" icon_state = "lab" @@ -591,37 +881,25 @@ name = "Murid" icon_state = "murid" -/datum/sprite_accessory/mam_ears/neko - name = "Neko" - icon_state = "cat" - hasinner = 1 - color_src = HAIR - /datum/sprite_accessory/mam_ears/otie name = "Otusian" icon_state = "otie" - hasinner= 1 /datum/sprite_accessory/mam_ears/squirrel name = "Squirrel" icon_state = "squirrel" - hasinner= 1 /datum/sprite_accessory/mam_ears/pede name = "Scolipede" icon_state = "pede" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 /datum/sprite_accessory/mam_ears/rabbit name = "Rabbit" icon_state = "rabbit" - hasinner= 1 /datum/sprite_accessory/mam_ears/sergal name = "Sergal" icon_state = "sergal" - hasinner= 1 /datum/sprite_accessory/mam_ears/skunk name = "skunk" @@ -630,20 +908,19 @@ /datum/sprite_accessory/mam_ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 /****************************************** *********** Tails and Things ************** *******************************************/ /datum/sprite_accessory/mam_tails/ailurus - name = "Ailurus" - icon_state = "ailurus" + name = "Red Panda" + icon_state = "wah" extra = TRUE /datum/sprite_accessory/mam_tails_animated/ailurus - name = "Ailurus" - icon_state = "ailurus" + name = "Red Panda" + icon_state = "wah" extra = TRUE /datum/sprite_accessory/mam_tails/axolotl @@ -662,6 +939,16 @@ name = "Bear" icon_state = "bear" +/datum/sprite_accessory/mam_tails/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/mam_tails_animated/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + /datum/sprite_accessory/mam_tails/catbig name = "Cat, Big" icon_state = "catbig" @@ -670,6 +957,14 @@ name = "Cat, Big" icon_state = "catbig" +/datum/sprite_accessory/mam_tails/corvid + name = "Corvid" + icon_state = "crow" + +/datum/sprite_accessory/mam_tails_animated/corvid + name = "Corvid" + icon_state = "crow" + /datum/sprite_accessory/mam_tail/cow name = "Cow" icon_state = "cow" @@ -678,19 +973,13 @@ name = "Cow" icon_state = "cow" -/datum/sprite_accessory/mam_ears/curled - name = "Curled Horn" - icon_state = "horn1" - /datum/sprite_accessory/mam_tails/eevee name = "Eevee" icon_state = "eevee" - extra = TRUE /datum/sprite_accessory/mam_tails_animated/eevee name = "Eevee" icon_state = "eevee" - extra = TRUE /datum/sprite_accessory/mam_tails/fennec name = "Fennec" @@ -703,24 +992,18 @@ /datum/sprite_accessory/mam_tails/human/fish name = "Fish" icon_state = "fish" - extra = TRUE - extra_color_src = MUTCOLORS3 /datum/sprite_accessory/mam_tails_animated/human/fish name = "Fish" icon_state = "fish" - extra = TRUE - extra_color_src = MUTCOLORS3 /datum/sprite_accessory/mam_tails/fox name = "Fox" icon_state = "fox" - extra = TRUE /datum/sprite_accessory/mam_tails_animated/fox name = "Fox" icon_state = "fox" - extra = TRUE /datum/sprite_accessory/mam_tails/hawk name = "Hawk" @@ -743,12 +1026,10 @@ /datum/sprite_accessory/mam_tails/husky name = "Husky" icon_state = "husky" - extra = TRUE /datum/sprite_accessory/mam_tails_animated/husky name = "Husky" icon_state = "husky" - extra = TRUE datum/sprite_accessory/mam_tails/insect name = "Insect" @@ -766,20 +1047,13 @@ datum/sprite_accessory/mam_tails/insect name = "kangaroo" icon_state = "kangaroo" -/datum/sprite_accessory/mam_ears/jellyfish - name = "Jellyfish" - icon_state = "jellyfish" - color_src = HAIR - /datum/sprite_accessory/mam_tails/kitsune name = "Kitsune" icon_state = "kitsune" - extra = TRUE /datum/sprite_accessory/mam_tails_animated/kitsune name = "Kitsune" icon_state = "kitsune" - extra = TRUE /datum/sprite_accessory/mam_tails/lab name = "Lab" @@ -792,22 +1066,10 @@ datum/sprite_accessory/mam_tails/insect /datum/sprite_accessory/mam_tails/murid name = "Murid" icon_state = "murid" - color_src = 0 /datum/sprite_accessory/mam_tails_animated/murid name = "Murid" icon_state = "murid" - color_src = 0 - -/datum/sprite_accessory/mam_tails/neko - name = "Neko" - icon_state = "cat" - color_src = HAIR - -/datum/sprite_accessory/mam_tails_animated/neko - name = "Neko" - icon_state = "cat" - color_src = HAIR /datum/sprite_accessory/mam_tails/otie name = "Otusian" @@ -820,12 +1082,10 @@ datum/sprite_accessory/mam_tails/insect /datum/sprite_accessory/mam_tails/orca name = "Orca" icon_state = "orca" - extra = TRUE /datum/sprite_accessory/mam_tails_animated/orca name = "Orca" icon_state = "orca" - extra = TRUE /datum/sprite_accessory/mam_tails/pede name = "Scolipede" @@ -852,38 +1112,36 @@ datum/sprite_accessory/mam_tails/insect icon_state = "sergal" /datum/sprite_accessory/mam_tails/skunk - name = "skunk" + name = "Skunk" icon_state = "skunk" - color_src = 0 - extra = TRUE /datum/sprite_accessory/mam_tails_animated/skunk - name = "skunk" + name = "Skunk" icon_state = "skunk" - color_src = 0 - extra = TRUE /datum/sprite_accessory/mam_tails/shark name = "Shark" icon_state = "shark" - color_src = MUTCOLORS /datum/sprite_accessory/mam_tails_animated/shark name = "Shark" icon_state = "shark" - color_src = MUTCOLORS /datum/sprite_accessory/mam_tails/shepherd name = "Shepherd" icon_state = "shepherd" - extra = TRUE - extra2 = TRUE /datum/sprite_accessory/mam_tails_animated/shepherd name = "Shepherd" icon_state = "shepherd" - extra = TRUE - extra2 = TRUE + +/datum/sprite_accessory/mam_tails/straighttail + name = "Straight Tail" + icon_state = "straighttail" + +/datum/sprite_accessory/mam_tails_animated/straighttail + name = "Straight Tail" + icon_state = "straighttail" /datum/sprite_accessory/mam_tails/squirrel name = "Squirrel" @@ -893,7 +1151,7 @@ datum/sprite_accessory/mam_tails/insect name = "Squirrel" icon_state = "squirrel" -datum/sprite_accessory/mam_tails/tentacle +/datum/sprite_accessory/mam_tails/tentacle name = "Tentacle" icon_state = "tentacle" @@ -901,6 +1159,14 @@ datum/sprite_accessory/mam_tails/tentacle name = "Tentacle" icon_state = "tentacle" +/datum/sprite_accessory/mam_tails/tiger + name = "Tiger" + icon_state = "tiger" + +/datum/sprite_accessory/mam_tails_animated/tiger + name = "Tiger" + icon_state = "tiger" + /datum/sprite_accessory/mam_tails/wolf name = "Wolf" icon_state = "wolf" @@ -914,150 +1180,168 @@ datum/sprite_accessory/mam_tails/tentacle *******************************************/ /datum/sprite_accessory/mam_body_markings - extra = TRUE - extra2 = TRUE - icon = 'modular_citadel/icons/mob/mam_body_markings.dmi' + extra = FALSE + extra2 = FALSE + color_src = MATRIXED + gender_specific = 0 + icon = 'modular_citadel/icons/mob/mam_markings.dmi' /datum/sprite_accessory/mam_body_markings/none name = "None" icon_state = "none" + color_src = MUTCOLORS + +/datum/sprite_accessory/mam_body_markings/plain + name = "Plain" + icon_state = "plain" /datum/sprite_accessory/mam_body_markings/ailurus - name = "Red Panda" - icon_state = "ailurus" - gender_specific = 1 - -/datum/sprite_accessory/mam_body_markings/belly - name = "Bee" - icon_state = "bee" - color_src = MUTCOLORS3 - gender_specific = 1 + name = "Redpanda" + icon_state = "wah" /datum/sprite_accessory/mam_body_markings/bee + name = "Bee" + icon_state = "bee" + +/datum/sprite_accessory/mam_body_markings/belly name = "Belly" icon_state = "belly" - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/bellyslim + name = "Bellyslim" + icon_state = "bellyslim" /datum/sprite_accessory/mam_body_markings/corgi name = "Corgi" icon_state = "corgi" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/cow - name = "Cow" - icon_state = "cow" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 + name = "Bovine" + icon_state = "bovine" /datum/sprite_accessory/mam_body_markings/corvid - name = "Crow" + name = "Corvid" icon_state = "corvid" - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/dalmation + name = "Dalmation" + icon_state = "dalmation" /datum/sprite_accessory/mam_body_markings/deer name = "Deer" icon_state = "deer" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" - color_src = MUTCOLORS3 + +/datum/sprite_accessory/mam_body_markings/hippo + name = "Hippo" + icon_state = "hippo" /datum/sprite_accessory/mam_body_markings/fennec name = "Fennec" icon_state = "Fennec" - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/frog name = "Frog" icon_state = "frog" - gender_specific = 1 - color_src = MUTCOLORS2 + +/datum/sprite_accessory/mam_body_markings/goat + name = "Goat" + icon_state = "goat" + +/datum/sprite_accessory/mam_body_markings/handsfeet + name = "Handsfeet" + icon_state = "handsfeet" /datum/sprite_accessory/mam_body_markings/hawk name = "Hawk" icon_state = "hawk" - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/husky name = "Husky" icon_state = "husky" - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/hyena + name = "Hyena" + icon_state = "hyena" + +/datum/sprite_accessory/mam_body_markings/lab + name = "Lab" + icon_state = "lab" /datum/sprite_accessory/mam_body_markings/moth name = "Moth" icon_state = "moth" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/otie name = "Otie" icon_state = "otie" - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/otter + name = "Otter" + icon_state = "otter" /datum/sprite_accessory/mam_body_markings/orca name = "Orca" icon_state = "orca" - color_src = MUTCOLORS2 - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/panther + name = "Panther" + icon_state = "panther" + +/datum/sprite_accessory/mam_body_markings/possum + name = "Possum" + icon_state = "possum" + +/datum/sprite_accessory/mam_body_markings/raccoon + name = "Raccoon" + icon_state = "raccoon" /datum/sprite_accessory/mam_body_markings/pede name = "Scolipede" - icon_state = "pede" - extra = TRUE - extra_color_src = MUTCOLORS3 - color_src = MUTCOLORS2 - gender_specific = 1 + icon_state = "scolipede" /datum/sprite_accessory/mam_body_markings/shark name = "Shark" icon_state = "shark" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/skunk + name = "Skunk" + icon_state = "skunk" + +/datum/sprite_accessory/mam_body_markings/sergal + name = "Sergal" + icon_state = "sergal" /datum/sprite_accessory/mam_body_markings/shepherd name = "Shepherd" icon_state = "shepherd" - gender_specific = 1 + +/datum/sprite_accessory/mam_body_markings/tajaran + name = "Tajaran" + icon_state = "tajaran" /datum/sprite_accessory/mam_body_markings/tiger - name = "Tiger Stripes" - color_src = MUTCOLORS3 + name = "Tiger" icon_state = "tiger" /datum/sprite_accessory/mam_body_markings/turian name = "Turian" - extra = TRUE - color_src = MUTCOLORS - extra_color_src = MUTCOLORS2 icon_state = "turian" - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/wolf name = "Wolf" icon_state = "wolf" - color_src = MUTCOLORS2 - gender_specific = 1 /datum/sprite_accessory/mam_body_markings/xeno name = "Xeno" icon_state = "xeno" - color_src = MUTCOLORS2 - extra_color_src = MUTCOLORS3 - gender_specific = 1 /****************************************** @@ -1072,6 +1356,7 @@ datum/sprite_accessory/mam_tails/tentacle center = TRUE dimension_x = 64 var/taur_mode = NOT_TAURIC + color_src = MATRIXED /datum/sprite_accessory/taur/none name = "None" @@ -1090,11 +1375,13 @@ datum/sprite_accessory/mam_tails/tentacle /datum/sprite_accessory/taur/drider name = "Drider" icon_state = "drider" + color_src = MUTCOLORS /datum/sprite_accessory/taur/eevee name = "Eevee" icon_state = "eevee" taur_mode = PAW_TAURIC + color_src = MUTCOLORS /datum/sprite_accessory/taur/fox name = "Fox" @@ -1130,6 +1417,7 @@ datum/sprite_accessory/mam_tails/tentacle name = "Scolipede" icon_state = "pede" taur_mode = PAW_TAURIC + color_src = MUTCOLORS /datum/sprite_accessory/taur/panther name = "Panther" @@ -1141,15 +1429,16 @@ datum/sprite_accessory/mam_tails/tentacle icon_state = "shepherd" taur_mode = PAW_TAURIC -/datum/sprite_accessory/taur/tajaran - name = "Tajaran" - icon_state = "tajaran" - taur_mode = PAW_TAURIC - /datum/sprite_accessory/taur/tentacle name = "Tentacle" icon_state = "tentacle" taur_mode = SNEK_TAURIC + color_src = MUTCOLORS + +/datum/sprite_accessory/taur/tiger + name = "Tiger" + icon_state = "tiger" + taur_mode = PAW_TAURIC /datum/sprite_accessory/taur/wolf name = "Wolf" @@ -1365,17 +1654,15 @@ datum/sprite_accessory/mam_tails/tentacle /datum/sprite_accessory/body_markings/guilmon name = "Guilmon" icon_state = "guilmon" - gender_specific = 1 + color_src = MATRIXED /datum/sprite_accessory/tails/lizard/guilmon name = "Guilmon" icon_state = "guilmon" - extra = TRUE /datum/sprite_accessory/tails_animated/lizard/guilmon name = "Guilmon" icon_state = "guilmon" - extra = TRUE /datum/sprite_accessory/horns/guilmon name = "Guilmon" @@ -1385,52 +1672,41 @@ datum/sprite_accessory/mam_tails/tentacle /datum/sprite_accessory/snout/guilmon name = "Guilmon" icon_state = "guilmon" + color_src = MATRIXED /datum/sprite_accessory/mam_tails/shark/datashark name = "DataShark" icon_state = "datashark" - color_src = 0 ckeys_allowed = list("rubyflamewing") /datum/sprite_accessory/mam_tails_animated/shark/datashark name = "DataShark" icon_state = "datashark" - color_src = 0 /datum/sprite_accessory/mam_body_markings/shark/datashark name = "DataShark" icon_state = "datashark" - color_src = MUTCOLORS2 ckeys_allowed = list("rubyflamewing") - //Sabresune /datum/sprite_accessory/mam_ears/sabresune name = "sabresune" icon_state = "sabresune" - hasinner = 1 - extra = TRUE - extra_color_src = MUTCOLORS3 ckeys_allowed = list("poojawa") /datum/sprite_accessory/mam_tails/sabresune name = "sabresune" icon_state = "sabresune" - extra = TRUE ckeys_allowed = list("poojawa") /datum/sprite_accessory/mam_tails_animated/sabresune name = "sabresune" icon_state = "sabresune" - extra = TRUE /datum/sprite_accessory/mam_body_markings/sabresune name = "Sabresune" icon_state = "sabresune" - color_src = MUTCOLORS2 - extra = FALSE - extra2 = FALSE ckeys_allowed = list("poojawa") @@ -1438,21 +1714,16 @@ datum/sprite_accessory/mam_tails/tentacle /datum/sprite_accessory/mam_ears/lunasune name = "lunasune" icon_state = "lunasune" - hasinner = 1 - extra = TRUE - extra_color_src = MUTCOLORS2 ckeys_allowed = list("invader4352") /datum/sprite_accessory/mam_tails/lunasune name = "lunasune" icon_state = "lunasune" - extra = TRUE ckeys_allowed = list("invader4352") /datum/sprite_accessory/mam_tails_animated/lunasune name = "lunasune" icon_state = "lunasune" - extra = TRUE /*************** VIRGO PORTED HAIRS ****************************/ #define VHAIR(_name, new_state) /datum/sprite_accessory/hair/##new_state/icon_state=#new_state;/datum/sprite_accessory/hair/##new_state/name = "Virgo - " + #_name diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm index 1dd6276140..73a50dccf0 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm @@ -98,6 +98,8 @@ return GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] if("mam_ears") return GLOB.mam_ears_list[H.dna.features["mam_ears"]] + if("mam_snouts") + return GLOB.mam_snouts_list[H.dna.features["mam_snouts"]] if("taur") return GLOB.taur_list[H.dna.features["taur"]] if("xenodorsal") diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 16c5460174..edc36ae3af 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -5,8 +5,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur", "legs") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "snout" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs") + mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "legs") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs") attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -46,6 +46,7 @@ /datum/species/mammal/qualifies_for_rank(rank, list/features) return TRUE + //AVIAN// /datum/species/avian name = "Avian" @@ -55,8 +56,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("snout", "wings", "taur", "mam_tail", "mam_body_markings", "taur") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "snout" = "Beak", "wings" = "None", "taur" = "None", "mam_body_markings" = "Hawk", "mam_tail" = "Hawk") + mutant_bodyparts = list("mam_snouts", "wings", "taur", "mam_tail", "mam_body_markings", "taur") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Beak", "mam_body_markings" = "Hawk", "wings" = "None", "taur" = "None", "mam_tail" = "Hawk") attack_verb = "peck" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -101,8 +102,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("mam_tail", "mam_body_markings", "mam_ears", "taur", "legs") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_body_markings" = "Shark", "mam_ears" = "None", "snout" = "Round", "taur" = "None", "legs" = "Normal Legs") + mutant_bodyparts = list("mam_tail", "mam_ears","mam_body_markings", "taur", "legs", "mam_snouts") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_ears" = "None", "mam_body_markings" = "Shark", "mam_snouts" = "Round", "taur" = "None", "legs" = "Normal Legs") attack_verb = "bite" attack_sound = 'sound/weapons/bite.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -148,8 +149,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG) - mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur", "moth_wings") - default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "Moth", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "snout" = "None", "taur" = "None") + mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings", "mam_snouts") + default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "mam_snouts" = "Bug", "mam_body_markings" = "Moth", "taur" = "None") attack_verb = "flutter" //wat? attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -196,8 +197,8 @@ should_draw_citadel = TRUE species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur", "mam_body_markings") - default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None","mam_body_markings" = "Xeno") + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur") + default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/modular_citadel/icons/mob/citadel_refs/mam_body_markings Matrixed Ref.dmi b/modular_citadel/icons/mob/citadel_refs/mam_body_markings Matrixed Ref.dmi new file mode 100644 index 0000000000..7cf2c599ee Binary files /dev/null and b/modular_citadel/icons/mob/citadel_refs/mam_body_markings Matrixed Ref.dmi differ diff --git a/modular_citadel/icons/mob/mam_body_markings.dmi b/modular_citadel/icons/mob/mam_body_markings.dmi deleted file mode 100644 index 99f4d0624c..0000000000 Binary files a/modular_citadel/icons/mob/mam_body_markings.dmi and /dev/null differ diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi index 51ffd28bbc..b3946b546c 100644 Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi new file mode 100644 index 0000000000..1d64bb857f Binary files /dev/null and b/modular_citadel/icons/mob/mam_markings.dmi differ diff --git a/modular_citadel/icons/mob/mam_snouts.dmi b/modular_citadel/icons/mob/mam_snouts.dmi index 98b62f929d..0bcfab6905 100644 Binary files a/modular_citadel/icons/mob/mam_snouts.dmi and b/modular_citadel/icons/mob/mam_snouts.dmi differ diff --git a/modular_citadel/icons/mob/mam_tails OLD.dmi b/modular_citadel/icons/mob/mam_tails OLD.dmi new file mode 100644 index 0000000000..7627b71b35 Binary files /dev/null and b/modular_citadel/icons/mob/mam_tails OLD.dmi differ diff --git a/modular_citadel/icons/mob/mam_tails.dmi b/modular_citadel/icons/mob/mam_tails.dmi index 7627b71b35..8c97b869d6 100644 Binary files a/modular_citadel/icons/mob/mam_tails.dmi and b/modular_citadel/icons/mob/mam_tails.dmi differ diff --git a/modular_citadel/icons/mob/mam_taur.dmi b/modular_citadel/icons/mob/mam_taur.dmi index 5591636886..ebaa0123ae 100644 Binary files a/modular_citadel/icons/mob/mam_taur.dmi and b/modular_citadel/icons/mob/mam_taur.dmi differ diff --git a/modular_citadel/icons/mob/markings_notmammals.dmi b/modular_citadel/icons/mob/markings_notmammals.dmi new file mode 100644 index 0000000000..4161ea2cea Binary files /dev/null and b/modular_citadel/icons/mob/markings_notmammals.dmi differ diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index 7dcff09747..f369f21afb 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/modular_citadel/interface/skin.dmf b/modular_citadel/interface/skin.dmf index eca2dda112..39626ef912 100644 --- a/modular_citadel/interface/skin.dmf +++ b/modular_citadel/interface/skin.dmf @@ -287,3 +287,30 @@ window "statwindow" prefix-color = #ebebeb suffix-color = #ebebeb +window "preferences_window" + elem "preferences_window" + type = MAIN + pos = 372,0 + size = 1120x1000 + anchor1 = none + anchor2 = none + background-color = none + is-visible = false + saved-params = "pos;size;is-minimized;is-maximized" + statusbar = false + elem "preferences_browser" + type = BROWSER + pos = -8,-8 + size = 896x1008 + anchor1 = 0,0 + anchor2 = 90,100 + background-color = none + saved-params = "" + elem "character_preview_map" + type = MAP + pos = 887,0 + size = 313x1000 + anchor1 = 90,0 + anchor2 = 100,100 + right-click = true + saved-params = "zoom;letterbox;zoom-mode" \ No newline at end of file diff --git a/tools/HumanScissors/!README.txt b/tools/HumanScissors/!README.txt new file mode 100644 index 0000000000..d8396c8b85 --- /dev/null +++ b/tools/HumanScissors/!README.txt @@ -0,0 +1,7 @@ +This small Byond program takes all the icons in SpritesToSnip.dmi, +cuts them using all the icons in CookieCutter.dmi, and produces a file save +dialog for you to download the resulting DMI. + +Useful for cutting up species sprites from full body ones. Or whatever else. + +--Arokha/Aronai \ No newline at end of file diff --git a/tools/HumanScissors/CookieCutter.dmi b/tools/HumanScissors/CookieCutter.dmi new file mode 100644 index 0000000000..f0fcf87617 Binary files /dev/null and b/tools/HumanScissors/CookieCutter.dmi differ diff --git a/tools/HumanScissors/HumanScissors.dm b/tools/HumanScissors/HumanScissors.dm new file mode 100644 index 0000000000..28a9f804af --- /dev/null +++ b/tools/HumanScissors/HumanScissors.dm @@ -0,0 +1,56 @@ +/* + These are simple defaults for your project. + */ + +world + fps = 25 // 25 frames per second + icon_size = 32 // 32x32 icon size by default + + view = 6 // show up to 6 tiles outward from center (13x13 view) + + +// Make objects move 8 pixels per tick when walking +//usr << ftp(usr.working,"[usr.outfile].dmi") +mob + step_size = 8 + +obj + step_size = 8 + + + +client/verb/split_sprites() + set name = "Begin The Decimation" + set desc = "Loads SpritesToSnip.dmi and cuts them with CookieCutter.dmi" + set category = "Here" + + var/icon/SpritesToSnip = icon('SpritesToSnip.dmi') + var/icon/CookieCutter = icon('CookieCutter.dmi') + + var/icon/RunningOutput = new () + + //For each original project + for(var/OriginalState in icon_states(SpritesToSnip)) + //For each piece we're going to cut + for(var/CutterState in icon_states(CookieCutter)) + + //The fully assembled icon to cut + var/icon/Original = icon(SpritesToSnip,OriginalState) + + //Our cookie cutter sprite + var/icon/Cutter = icon(CookieCutter,CutterState) + + //We have to make these all black to cut with + Cutter.Blend(rgb(0,0,0),ICON_MULTIPLY) + + //Blend with AND to cut + Original.Blend(Cutter,ICON_AND) //AND, not ADD + + //Make a useful name + var/good_name = "[OriginalState]_[CutterState]" + + //Add to the output with the good name + RunningOutput.Insert(Original,good_name) + + //Give the output + usr << ftp(RunningOutput,"CutUpPeople.dmi") diff --git a/tools/HumanScissors/HumanScissors.dme b/tools/HumanScissors/HumanScissors.dme new file mode 100644 index 0000000000..86377f1c57 --- /dev/null +++ b/tools/HumanScissors/HumanScissors.dme @@ -0,0 +1,18 @@ +// DM Environment file for HumanScissors.dme. +// All manual changes should be made outside the BEGIN_ and END_ blocks. +// New source code should be placed in .dm files: choose File/New --> Code File. + +// BEGIN_INTERNALS +// END_INTERNALS + +// BEGIN_FILE_DIR +#define FILE_DIR . +// END_FILE_DIR + +// BEGIN_PREFERENCES +// END_PREFERENCES + +// BEGIN_INCLUDE +#include "HumanScissors.dm" +// END_INCLUDE + diff --git a/tools/HumanScissors/SpritesToSnip.dmi b/tools/HumanScissors/SpritesToSnip.dmi new file mode 100644 index 0000000000..f4dbfb6b81 Binary files /dev/null and b/tools/HumanScissors/SpritesToSnip.dmi differ