This commit is contained in:
zerothebigboy
2021-05-20 18:57:51 -04:00
55 changed files with 948 additions and 282 deletions

View File

@@ -41,7 +41,6 @@
H.dna.features["horns"] = pick(GLOB.horns_list)
H.dna.features["frills"] = pick(GLOB.frills_list)
H.dna.features["spines"] = pick(GLOB.spines_list)
H.dna.features["body_markings"] = pick(GLOB.body_markings_list)
H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list)
H.dna.features["deco_wings"] = pick(GLOB.deco_wings_list)
H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list)

View File

@@ -238,3 +238,9 @@
/proc/__nan()
var/list/L = json_decode("{\"value\":NaN}")
return L["value"]
/**
* Wrapper to return a copy of contents, as SDQL2 can't tell an internal list from a normal list.
*/
/atom/proc/_contents()
return contents.Copy()

View File

@@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(antagonists)
var/datum/skill_modifier/job/M = GLOB.skill_modifiers[GET_SKILL_MOD_ID(A, type)]
if(istype(M))
M.name = "[name] Training"
owner.AddComponent(/datum/component/activity)
owner.current.AddComponent(/datum/component/activity)
SEND_SIGNAL(owner.current, COMSIG_MOB_ANTAG_ON_GAIN, src)
/datum/antagonist/proc/is_banned(mob/M)

View File

@@ -229,8 +229,8 @@
flags_inv = NONE
flags_cover = NONE
desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing."
item_flags = EXAMINE_SKIP
armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
obj_flags = NONE | EXAMINE_SKIP
/obj/item/clothing/suit/hooded/cultrobes/void
name = "void cloak"
@@ -253,9 +253,10 @@
//We need to account for the hood shenanigans, and that way we can make sure items always fit, even if one of the slots is used by the fucking hood.
if(suittoggled)
to_chat(carbon_user,"<span class='notice'>The light shifts around you making the cloak invisible!</span>")
else
obj_flags |= EXAMINE_SKIP
else if(obj_flags & EXAMINE_SKIP) // ensures that it won't toggle visibility if raising the hood failed
to_chat(carbon_user,"<span class='notice'>The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!</span>")
item_flags = suittoggled ? EXAMINE_SKIP : ~EXAMINE_SKIP
obj_flags ^= EXAMINE_SKIP
else
to_chat(carbon_user,"<span class='danger'>You can't force the hood onto your head!</span>")

View File

@@ -172,13 +172,15 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
/// bumper object, the thing that starts actual teleport
var/obj/effect/gateway_portal_bumper/portal
/// Visual object for handling the viscontents
var/obj/effect/gateway_portal_effect/portal_visuals
/// DISABLED DUE TO BYOND BUG CAUSING STACK OVERFLOWS OF ANY HUMAN INSTANTIATION NEAR AN ACTIVATED GATEWAY.
/// Probably due to it referencing each other through the gateway (there's a deep loop, maybe BYOND isn't catching something when it usually would)
// var/obj/effect/gateway_portal_effect/portal_visuals
/obj/machinery/gateway/Initialize()
generate_destination()
update_icon()
portal_visuals = new
vis_contents += portal_visuals
// portal_visuals = new
// vis_contents += portal_visuals
return ..()
/obj/machinery/gateway/proc/generate_destination()
@@ -195,7 +197,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
if(use_power == ACTIVE_POWER_USE)
use_power = IDLE_POWER_USE
update_icon()
portal_visuals.reset_visuals()
// portal_visuals.reset_visuals()
/obj/machinery/gateway/process()
if((stat & (NOPOWER)) && use_power)
@@ -215,7 +217,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
return
target = D
target.activate(destination)
portal_visuals.setup_visuals(target)
// portal_visuals.setup_visuals(target)
generate_bumper()
use_power = ACTIVE_POWER_USE
update_icon()

View File

@@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/eye_type = DEFAULT_EYES_TYPE //Eye type
var/split_eye_colors = FALSE
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
var/custom_speech_verb = "default" //if your say_mod is to be something other than your races
var/custom_tongue = "default" //if your tongue is to be something other than your races
@@ -514,7 +514,76 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "</td>"
mutant_category = 0
// rp marking selection
// assume you can only have mam markings or regular markings or none, never both
var/marking_type
if(parent.can_have_part("mam_body_markings"))
marking_type = "mam_body_markings"
if(marking_type)
dat += APPEARANCE_CATEGORY_COLUMN
dat += "<h3>[GLOB.all_mutant_parts[marking_type]]</h3>" // give it the appropriate title for the type of marking
dat += "<a href='?_src_=prefs;preference=marking_add;marking_type=[marking_type];task=input'>Add marking</a>"
// list out the current markings you have
if(length(features[marking_type]))
dat += "<table>"
var/list/markings = features[marking_type]
if(!islist(markings))
// something went terribly wrong
markings = list()
var/list/reverse_markings = reverseList(markings)
for(var/list/marking_list in reverse_markings)
var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here
var/limb_value = marking_list[1]
var/actual_name = GLOB.bodypart_names[num2text(limb_value)] // get the actual name from the bitflag representing the part the marking is applied to
var/color_marking_dat = ""
var/number_colors = 1
var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]]
var/matrixed_sections = S.covered_limbs[actual_name]
if(S && matrixed_sections)
// if it has nothing initialize it to white
if(length(marking_list) == 2)
var/first = "#FFFFFF"
var/second = "#FFFFFF"
var/third = "#FFFFFF"
if(features["mcolor"])
first = "#[features["mcolor"]]"
if(features["mcolor2"])
second = "#[features["mcolor2"]]"
if(features["mcolor3"])
third = "#[features["mcolor3"]]"
marking_list += list(list(first, second, third)) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values
// index magic
var/primary_index = 1
var/secondary_index = 2
var/tertiary_index = 3
switch(matrixed_sections)
if(MATRIX_GREEN)
primary_index = 2
if(MATRIX_BLUE)
primary_index = 3
if(MATRIX_RED_BLUE)
secondary_index = 2
if(MATRIX_GREEN_BLUE)
primary_index = 2
secondary_index = 3
// we know it has one matrixed section at minimum
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][primary_index]];'>&nbsp;&nbsp;&nbsp;</span>"
// if it has a second section, add it
if(matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE || matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_ALL)
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][secondary_index]];'>&nbsp;&nbsp;&nbsp;</span>"
number_colors = 2
// if it has a third section, add it
if(matrixed_sections == MATRIX_ALL)
color_marking_dat += "<span style='border: 1px solid #161616; background-color: [marking_list[3][tertiary_index]];'>&nbsp;&nbsp;&nbsp;</span>"
number_colors = 3
color_marking_dat += " <a href='?_src_=prefs;preference=marking_color;marking_index=[marking_index];marking_type=[marking_type];number_colors=[number_colors];task=input'>Change</a><BR>"
dat += "<tr><td>[marking_list[2]] - [actual_name]</td> <td><a href='?_src_=prefs;preference=marking_down;task=input;marking_index=[marking_index];marking_type=[marking_type];'>&#708;</a> <a href='?_src_=prefs;preference=marking_up;task=input;marking_index=[marking_index];marking_type=[marking_type]'>&#709;</a> <a href='?_src_=prefs;preference=marking_remove;task=input;marking_index=[marking_index];marking_type=[marking_type]'>X</a> [color_marking_dat]</td></tr>"
dat += "</table>"
for(var/mutant_part in GLOB.all_mutant_parts)
if(mutant_part == "mam_body_markings")
continue
if(parent.can_have_part(mutant_part))
if(!mutant_category)
dat += APPEARANCE_CATEGORY_COLUMN
@@ -533,8 +602,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(accessory)
if(accessory.color_src == MATRIXED || accessory.color_src == MUTCOLORS || accessory.color_src == MUTCOLORS2 || accessory.color_src == MUTCOLORS3) //mutcolors1-3 are deprecated now, please don't rely on these in the future
var/mutant_string = accessory.mutant_part_string
if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings))
continue
var/primary_feature = "[mutant_string]_primary"
var/secondary_feature = "[mutant_string]_secondary"
var/tertiary_feature = "[mutant_string]_tertiary"
@@ -1726,13 +1793,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
pref_species = new newtype()
//let's ensure that no weird shit happens on species swapping.
custom_species = null
if(!parent.can_have_part("body_markings"))
features["body_markings"] = "None"
if(!parent.can_have_part("mam_body_markings"))
features["mam_body_markings"] = "None"
features["mam_body_markings"] = list()
if(parent.can_have_part("mam_body_markings"))
if(features["mam_body_markings"] == "None")
features["mam_body_markings"] = "Plain"
features["mam_body_markings"] = list()
if(parent.can_have_part("tail_lizard"))
features["tail_lizard"] = "Smooth"
if(pref_species.id == "felinid")
@@ -1961,14 +2026,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_spines)
features["spines"] = new_spines
if("body_markings")
var/new_body_markings
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"
if("legs")
var/new_legs
new_legs = input(user, "Choose your character's legs:", "Character Preference") as null|anything in GLOB.legs_list
@@ -2088,26 +2145,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(new_ears)
features["mam_ears"] = new_ears
if("mam_body_markings")
var/list/snowflake_markings_list = list()
for(var/path in GLOB.mam_body_markings_list)
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(!show_mismatched_markings && S.recommended_species && !S.recommended_species.Find(pref_species.id))
continue
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_markings_list[S.name] = path
var/new_mam_body_markings
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"
//Xeno Bodyparts
if("xenohead")//Head or caste type
var/new_head
@@ -2133,7 +2170,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["xenodorsal"] = new_dors
//every single primary/secondary/tertiary colouring done at once
if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","body_markings_primary","body_markings_secondary","body_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary")
if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary")
var/the_feature = features[href_list["preference"]]
if(!the_feature)
features[href_list["preference"]] = "FFFFFF"
@@ -2390,6 +2427,111 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids
if(selected_body_sprite)
chosen_limb_id = selected_body_sprite //this gets sanitized before loading
if("marking_down")
// move the specified marking down
var/index = text2num(href_list["marking_index"])
var/marking_type = href_list["marking_type"]
if(index && marking_type && features[marking_type] && index != length(features[marking_type]))
var/index_down = index + 1
var/markings = features[marking_type]
var/first_marking = markings[index]
var/second_marking = markings[index_down]
markings[index] = second_marking
markings[index_down] = first_marking
if("marking_up")
// move the specified marking up
var/index = text2num(href_list["marking_index"])
var/marking_type = href_list["marking_type"]
if(index && marking_type && features[marking_type] && index != 1)
var/index_up = index - 1
var/markings = features[marking_type]
var/first_marking = markings[index]
var/second_marking = markings[index_up]
markings[index] = second_marking
markings[index_up] = first_marking
if("marking_remove")
// move the specified marking up
var/index = text2num(href_list["marking_index"])
var/marking_type = href_list["marking_type"]
if(index && marking_type && features[marking_type])
// because linters are just absolutely awful:
var/list/L = features[marking_type]
L.Cut(index, index + 1)
if("marking_add")
// add a marking
var/marking_type = href_list["marking_type"]
if(marking_type && features[marking_type])
var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "All")
if(selected_limb)
var/list/marking_list = GLOB.mam_body_markings_list
var/list/snowflake_markings_list = list()
for(var/path in marking_list)
var/datum/sprite_accessory/S = marking_list[path]
if(istype(S))
if(istype(S, /datum/sprite_accessory/mam_body_markings))
var/datum/sprite_accessory/mam_body_markings/marking = S
if(!(selected_limb in marking.covered_limbs) && selected_limb != "All")
continue
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey)))
snowflake_markings_list[S.name] = path
var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list
if(selected_marking)
if(selected_limb != "All")
var/limb_value = text2num(GLOB.bodypart_values[selected_limb])
features[marking_type] += list(list(limb_value, selected_marking))
else
var/datum/sprite_accessory/mam_body_markings/S = marking_list[selected_marking]
for(var/limb in S.covered_limbs)
var/limb_value = text2num(GLOB.bodypart_values[limb])
features[marking_type] += list(list(limb_value, selected_marking))
if("marking_color")
var/index = text2num(href_list["marking_index"])
var/marking_type = href_list["marking_type"]
if(index && marking_type && features[marking_type])
// work out the input options to show the user
var/list/options = list("Primary")
var/number_colors = text2num(href_list["number_colors"])
var/color_number = 1 // 1-3 which color are we editing
if(number_colors >= 2)
options += "Secondary"
if(number_colors == 3)
options += "Tertiary"
var/color_option = input(user, "Select the colour you wish to edit") as null|anything in options
if(color_option)
if(color_option == "Secondary") color_number = 2
if(color_option == "Tertiary") color_number = 3
// perform some magic on the color number
var/list/marking_list = features[marking_type][index]
var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]]
var/matrixed_sections = S.covered_limbs[GLOB.bodypart_names[num2text(marking_list[1])]]
if(color_number == 1)
switch(matrixed_sections)
if(MATRIX_GREEN)
color_number = 2
if(MATRIX_BLUE)
color_number = 3
else if(color_number == 2)
switch(matrixed_sections)
if(MATRIX_RED_BLUE)
color_number = 3
if(MATRIX_GREEN_BLUE)
color_number = 3
var/color_list = features[marking_type][index][3]
var/new_marking_color = input(user, "Choose your character's marking color:", "Character Preference","#"+color_list[color_number]) as color|null
if(new_marking_color)
var/temp_hsv = RGBtoHSV(new_marking_color)
if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright, but only if they affect the skin
color_list[color_number] = "#[sanitize_hexcolor(new_marking_color, 6)]"
else
to_chat(user, "<span class='danger'>Invalid color. Your color is not bright enough.</span>")
else
switch(href_list["preference"])
//CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj

View File

@@ -5,7 +5,7 @@
// You do not need to raise this if you are adding new values that have sane defaults.
// Only raise this value when changing the meaning/format/name/layout of an existing value
// where you would want the updater procs below to run
#define SAVEFILE_VERSION_MAX 51
#define SAVEFILE_VERSION_MAX 52
/*
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
@@ -283,7 +283,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
qdel(temporary_gear_item)
//it's double packed into a list because += will union the two lists contents
S["loadout"] = safe_json_encode(loadout_data)
S["loadout"] = loadout_data
if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake
S["unlockable_loadout"] = list()
@@ -299,6 +299,47 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(S["species"] == SPECIES_HUMAN)
features["legs"] = "Plantigrade"
if(current_version < 52) // rp markings means markings are now stored as a list, lizard markings now mam like the rest
var/marking_type
var/species_id = S["species"]
var/datum/species/actual_species = GLOB.species_datums[species_id]
// convert lizard markings to lizard markings
if(species_id == SPECIES_LIZARD && S["feature_lizard_body_markings"])
features["mam_body_markings"] = features["body_markings"]
// convert mam body marking data to the new rp marking data
if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings"
if(marking_type)
var/old_marking_value = S[marking_type]
var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF")
if(S["feature_mcolor"]) color_list[1] = "#" + S["feature_mcolor"]
if(S["feature_mcolor2"]) color_list[2] = "#" + S["feature_mcolor2"]
if(S["feature_mcolor3"]) color_list[3] = "#" + S["feature_mcolor3"]
var/list/marking_list = list()
for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD))
var/list/copied_color_list = color_list.Copy()
var/datum/sprite_accessory/mam_body_markings/mam_marking = GLOB.mam_body_markings_list[old_marking_value]
var/part_name = GLOB.bodypart_names[num2text(part)]
if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part_name])
var/matrixed_sections = mam_marking.covered_limbs[part_name]
// just trust me this is fine
switch(matrixed_sections)
if(MATRIX_GREEN)
copied_color_list[1] = copied_color_list[2]
if(MATRIX_BLUE)
copied_color_list[1] = copied_color_list[3]
if(MATRIX_RED_BLUE)
copied_color_list[2] = copied_color_list[3]
if(MATRIX_GREEN_BLUE)
copied_color_list[1] = copied_color_list[2]
copied_color_list[2] = copied_color_list[3]
marking_list += list(list(part, old_marking_value, copied_color_list))
features["mam_body_markings"] = marking_list
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
if(!ckey)
return
@@ -583,7 +624,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
var/savefile/S = new /savefile(path)
if(!S)
return FALSE
features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING)
S.cd = "/"
if(!slot)
@@ -653,7 +694,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_lizard_horns"] >> features["horns"]
S["feature_lizard_frills"] >> features["frills"]
S["feature_lizard_spines"] >> features["spines"]
S["feature_lizard_body_markings"] >> features["body_markings"]
S["feature_lizard_legs"] >> features["legs"]
S["feature_human_tail"] >> features["tail_human"]
S["feature_human_ears"] >> features["ears"]
@@ -722,7 +762,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"]
S["feature_mcolor2"] >> features["mcolor2"]
S["feature_mcolor3"] >> features["mcolor3"]
S["feature_mam_body_markings"] >> features["mam_body_markings"]
// note safe json decode will runtime the first time it migrates but this is fine and it solves itself don't worry about it if you see it error
features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"])
S["feature_mam_tail"] >> features["mam_tail"]
S["feature_mam_ears"] >> features["mam_ears"]
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
@@ -852,7 +893,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list)
features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list)
features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list)
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade")
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None")
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
@@ -1021,7 +1061,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["feature_human_ears"] , features["ears"])
WRITE_FILE(S["feature_lizard_frills"] , features["frills"])
WRITE_FILE(S["feature_lizard_spines"] , features["spines"])
WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"])
WRITE_FILE(S["feature_lizard_legs"] , features["legs"])
WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"])
WRITE_FILE(S["feature_horns_color"] , features["horns_color"])

View File

@@ -305,6 +305,15 @@
/obj/item/reagent_containers/food/drinks/bottle/hcider/empty
list_reagents = null
/obj/item/reagent_containers/food/drinks/bottle/amaretto
name = "Luini Amaretto"
desc = "A gentle and syrup-like drink that tastes of almonds and apricots."
icon_state = "disaronno"
list_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 100)
/obj/item/reagent_containers/food/drinks/bottle/amaretto/empty
list_reagents = null
/obj/item/reagent_containers/food/drinks/bottle/grappa
name = "Phillipes well-aged Grappa"
desc = "Bottle of Grappa."
@@ -615,6 +624,10 @@
icon_state = "hcider"
name = "Sealed Cider"
/obj/item/export/bottle/amaretto
icon_state = "disaronno"
name = "Sealed Amaretto"
/obj/item/export/bottle/cognac
icon_state = "cognacbottle"
name = "Sealed Cognac"

View File

@@ -29,6 +29,7 @@
id = /datum/reagent/consumable/nuka_cola
results = list(/datum/reagent/consumable/nuka_cola = 6)
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/consumable/space_cola = 6)
mix_message = "The bitter-sweet smell of radiation almost makes you wish for a space winter."
/datum/chemical_reaction/moonshine
name = "Moonshine"
@@ -36,6 +37,7 @@
results = list(/datum/reagent/consumable/ethanol/moonshine = 10)
required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
mix_message = "As the moisture in the glass settles, your entire face burns from the reaction's alcoholic virility."
/datum/chemical_reaction/wine
name = "Wine"
@@ -112,6 +114,7 @@
id = /datum/reagent/consumable/ethanol/screwdrivercocktail
results = list(/datum/reagent/consumable/ethanol/screwdrivercocktail = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/orangejuice = 1)
mix_message = "The mixture billows a sweet scent of orange, promptly drowned out by a thick nose-scrunching cloud of potato liquor."
/datum/chemical_reaction/bloody_mary
name = "Bloody Mary"
@@ -142,18 +145,21 @@
id = /datum/reagent/consumable/ethanol/toxins_special
results = list(/datum/reagent/consumable/ethanol/toxins_special = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vermouth = 1, /datum/reagent/toxin/plasma = 2)
mix_message = "The surface of the mixture sets ablaze as toxic gas erupts into a mystical cloud of fire, shortly settling to but a humble - albeit eternal blaze."
/datum/chemical_reaction/beepsky_smash
name = "Beepksy Smash"
id = /datum/reagent/consumable/ethanol/beepsky_smash
results = list(/datum/reagent/consumable/ethanol/beepsky_smash = 5)
required_reagents = list(/datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/ethanol/quadruple_sec = 2, /datum/reagent/iron = 1)
mix_message = "You can hear the law nearby."
/datum/chemical_reaction/doctor_delight
name = "The Doctor's Delight"
id = /datum/reagent/consumable/doctor_delight
results = list(/datum/reagent/consumable/doctor_delight = 5)
required_reagents = list(/datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/cryoxadone = 1)
mix_message = "<span class='warning'>The scent of medicine hits you like a truck!</span>"
/datum/chemical_reaction/irish_cream
name = "Irish Cream"
@@ -166,6 +172,7 @@
id = /datum/reagent/consumable/ethanol/manly_dorf
results = list(/datum/reagent/consumable/ethanol/manly_dorf = 3)
required_reagents = list (/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/ale = 2)
mix_message = "You can feel the hair growing on your chest!"
/datum/chemical_reaction/greenbeer
name = "Green Beer"
@@ -233,6 +240,7 @@
id = /datum/reagent/consumable/ethanol/hiveminderaser
results = list(/datum/reagent/consumable/ethanol/hiveminderaser = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/black_russian = 2, /datum/reagent/consumable/ethanol/thirteenloko = 1, /datum/reagent/consumable/grenadine = 1)
mix_message = "Your head throbs as the purple-colored mixture swirls with alien-like vigor!"
/datum/chemical_reaction/manhattan
name = "Manhattan"
@@ -269,6 +277,8 @@
id = /datum/reagent/consumable/ethanol/singulo
results = list(/datum/reagent/consumable/ethanol/singulo = 10)
required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/radium = 1, /datum/reagent/consumable/ethanol/wine = 5)
mix_message = "<span class='warning'>A horrible screeching fills your ears, and a wave of dread washes over you...</span>"
mix_sound = 'sound/effects/supermatter.ogg'
/datum/chemical_reaction/alliescocktail
name = "Allies Cocktail"
@@ -447,6 +457,8 @@
id = /datum/reagent/consumable/ethanol/syndicatebomb
results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1)
mix_message = "<span class='warning'>You can hear beeping coming from behind you.</span>"
mix_sound = 'sound/items/timer.ogg'
/datum/chemical_reaction/erikasurprise
name = "Erika Surprise"
@@ -459,30 +471,38 @@
id = /datum/reagent/consumable/ethanol/devilskiss
results = list(/datum/reagent/consumable/ethanol/devilskiss = 3)
required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/rum = 1)
mix_message = "You can hear faint whispering in your ear and a burning on your cheeks as the mixture blends together into with a fiery swirl."
/datum/chemical_reaction/hippiesdelight
name = "Hippies Delight"
id = /datum/reagent/consumable/ethanol/hippies_delight
results = list(/datum/reagent/consumable/ethanol/hippies_delight = 2)
required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 1, /datum/reagent/consumable/ethanol/gargle_blaster = 1)
mix_message = "You can like... Smell the flowers, man - as the drink mixes."
/datum/chemical_reaction/bananahonk
name = "Banana Honk"
id = /datum/reagent/consumable/ethanol/bananahonk
results = list(/datum/reagent/consumable/ethanol/bananahonk = 2)
required_reagents = list(/datum/reagent/consumable/laughter = 1, /datum/reagent/consumable/cream = 1)
mix_message = "The mixture honks. Honk!"
mix_sound = 'sound/items/bikehorn.ogg'
/datum/chemical_reaction/silencer
name = "Silencer"
id = /datum/reagent/consumable/ethanol/silencer
results = list(/datum/reagent/consumable/ethanol/silencer = 3)
required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/sugar = 1)
mix_message = "As the drink mixes, you can hear nothing..."
mix_sound = null
/datum/chemical_reaction/driestmartini
name = "Driest Martini"
id = /datum/reagent/consumable/ethanol/driestmartini
results = list(/datum/reagent/consumable/ethanol/driestmartini = 2)
required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/ethanol/gin = 1)
mix_message = "You feel like a prune beneath a sun as the mixture yanks the moisture from your tongue - yet, it's all so silent."
mix_sound = null
/datum/chemical_reaction/thirteenloko
name = "Thirteen Loko"
@@ -519,12 +539,14 @@
id = /datum/reagent/consumable/gibbfloats
results = list(/datum/reagent/consumable/gibbfloats = 15)
required_reagents = list(/datum/reagent/consumable/dr_gibb = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/cream = 5)
mix_message = "As the cream floats to the top of the glass, you can feel your cholesterol levels rising just looking at it."
/datum/chemical_reaction/triple_citrus
name = "triple_citrus"
id = /datum/reagent/consumable/triple_citrus
results = list(/datum/reagent/consumable/triple_citrus = 5)
required_reagents = list(/datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/orangejuice = 1)
mix_message = "The glass's contents shift colors from a rainbow of fruity twinges before settling with a distinct flowery smell."
/datum/chemical_reaction/grape_soda
name = "grape soda"
@@ -567,6 +589,7 @@
results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/hooch = 1, /datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/manly_dorf = 1, /datum/reagent/consumable/ethanol/syndicatebomb = 1)
mix_message = "<span class='warning'>The mixture turns to a sickening froth.</span>"
mix_sound = 'sound/FermiChem/bufferadd.ogg'
/datum/chemical_reaction/lemonade
name = "Lemonade"
@@ -601,7 +624,7 @@
id = /datum/reagent/consumable/ethanol/cogchamp
results = list(/datum/reagent/consumable/ethanol/cogchamp = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1)
mix_message = "You hear faint sounds of gears turning as it mixes."
mix_message = "You hear faint sounds of gears turning as the mixture gives off virulent plumes of steam."
mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg'
/datum/chemical_reaction/pinotmort
@@ -744,18 +767,22 @@
id = /datum/reagent/consumable/pwr_game
results = list(/datum/reagent/consumable/pwr_game = 5)
required_reagents = list(/datum/reagent/consumable/sodawater = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1, /datum/reagent/consumable/sodiumchloride = 1)
mix_message = "The mixture froths as it turns black, rousing a nauseating aroma of sweat and salt before settling to an eerie purple color."
/datum/chemical_reaction/pinkmilk
name = "Strawberry Milk"
id = /datum/reagent/consumable/pinkmilk
results = list(/datum/reagent/consumable/pinkmilk = 2)
required_reagents = list(/datum/reagent/consumable/strawberryjuice = 1, /datum/reagent/consumable/milk = 1)
mix_message = "You feel a sweet aroma drift up your nose as the lactic mixture swirls. It reminds you of... a cafeteria."
/datum/chemical_reaction/blank_paper
name = "Blank Paper"
id = /datum/reagent/consumable/ethanol/blank_paper
results = list(/datum/reagent/consumable/ethanol/blank_paper = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/silencer = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nuka_cola = 1)
mix_message = "As the drink mixes, you can hear nothing..."
mix_sound = null
/datum/chemical_reaction/wizz_fizz
name = "Wizz Fizz"
@@ -785,18 +812,22 @@
id = /datum/reagent/consumable/ethanol/turbo
results = list(/datum/reagent/consumable/ethanol/turbo = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/moonshine = 2, /datum/reagent/nitrous_oxide = 1, /datum/reagent/consumable/ethanol/sugar_rush = 1, /datum/reagent/consumable/pwr_game = 1)
mix_message = "The mixture pops and fizzles, it's going to bl- oh, nevermind."
/datum/chemical_reaction/old_timer
name = "Old Timer"
id = /datum/reagent/consumable/ethanol/old_timer
results = list(/datum/reagent/consumable/ethanol/old_timer = 6)
required_reagents = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3, /datum/reagent/consumable/parsnipjuice = 2, /datum/reagent/consumable/ethanol/alexander = 1)
mix_message = "You hear a faded record playing in the distance. Then, you hear nothing."
mix_sound = null
/datum/chemical_reaction/rubberneck
name = "Rubberneck"
id = /datum/reagent/consumable/ethanol/rubberneck
results = list(/datum/reagent/consumable/ethanol/rubberneck = 10)
required_reagents = list(/datum/reagent/consumable/ethanol = 4, /datum/reagent/consumable/grey_bull = 5, /datum/reagent/consumable/astrotame = 1)
mix_message = "The mixture boils and bubbles as the faint scent of rubber and heart disease hits your nose."
/datum/chemical_reaction/duplex
name = "Duplex"
@@ -809,6 +840,7 @@
id = /datum/reagent/consumable/ethanol/trappist
results = list(/datum/reagent/consumable/ethanol/trappist = 5)
required_reagents = list(/datum/reagent/consumable/ethanol/ale = 2, /datum/reagent/water/holywater = 2, /datum/reagent/consumable/sugar = 1)
mix_message = "As the mixture froths, you swear you can hear a distant holy choir."
/datum/chemical_reaction/cream_soda
name = "Cream Soda"
@@ -821,6 +853,8 @@
id = /datum/reagent/consumable/ethanol/blazaam
results = list(/datum/reagent/consumable/ethanol/blazaam = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/peachjuice = 1, /datum/reagent/bluespace = 1)
mix_message = "The mixture- hey, where'd all the liquid go? Oh, there it is."
mix_sound = 'sound/magic/Teleport_app.ogg'
/datum/chemical_reaction/planet_cracker
name = "Planet Cracker"
@@ -841,6 +875,7 @@
results = list(/datum/reagent/consumable/ethanol/gunfire = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/tea = 3)
mix_message = "A loud popping begins to fill the air as the drink is mixed."
mix_sound = 'sound/effects/wounds/sizzle1.ogg'
/datum/chemical_reaction/hellfire
name = "Hellfire"
@@ -848,6 +883,7 @@
results = list(/datum/reagent/consumable/ethanol/hellfire = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/ethanol/crevice_spike = 1)
mix_message = "The liquid begins to churn as it changes to an amber orange and catches on fire."
mix_sound = 'sound/FermiChem/bufferadd.ogg'
/datum/chemical_reaction/sins_delight
name = "Sins Delight"
@@ -861,6 +897,7 @@
id = /datum/reagent/consumable/ethanol/strawberry_daiquiri
results = list(/datum/reagent/consumable/ethanol/strawberry_daiquiri = 7)
required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/strawberryjuice = 2, /datum/reagent/consumable/ice = 1)
mix_message = "The mixture settles as a nostril-flaring waft of strawberry hits your nose."
/datum/chemical_reaction/miami_vice
name = "Miami Vice"
@@ -879,18 +916,22 @@
id = /datum/reagent/consumable/ethanol/liz_fizz
results = list(/datum/reagent/consumable/ethanol/liz_fizz = 5)
required_reagents = list(/datum/reagent/consumable/triple_citrus = 3, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1)
mix_message = "The smell of cream and lime hits your nose as everything feels very real for a split moment. You want to lick your eye."
/datum/chemical_reaction/hotlime_miami
name = "Hotlime Miami"
id = /datum/reagent/consumable/ethanol/hotlime_miami
results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2)
required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/consumable/ethanol/pina_colada = 1)
mix_message = "<span class='warning'>You can hear synthwave in the distance as you can feel your blood boiling with rage.</span>"
/datum/chemical_reaction/mauna_loa
name = "Mauna Loa"
id = /datum/reagent/consumable/ethanol/mauna_loa
results = list(/datum/reagent/consumable/ethanol/mauna_loa = 5)
required_reagents = list(/datum/reagent/consumable/capsaicin = 2, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/bahama_mama = 2)
mix_message = "The drink erupts as a plume of lava sprays all over the place! Oh, wait, it's just luke-warm liquor."
mix_sound = 'sound/effects/wounds/sizzle2.ogg'
/datum/chemical_reaction/commander_and_chief
name = "Commander and Chief"
@@ -899,6 +940,22 @@
required_reagents = list(/datum/reagent/consumable/ethanol/alliescocktail = 50, /datum/reagent/consumable/ethanol/champagne = 20, /datum/reagent/consumable/doctor_delight = 10, /datum/reagent/consumable/ethanol/quintuple_sec = 10, /datum/reagent/consumable/ethanol/screwdrivercocktail = 10)
mix_message = "When your powers combine, I am Captain Pl-..."
/datum/chemical_reaction/godfather
results = list(/datum/reagent/consumable/ethanol/godfather = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/whiskey = 1)
/datum/chemical_reaction/godmother
results = list(/datum/reagent/consumable/ethanol/godmother = 2)
required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/vodka = 1)
/datum/chemical_reaction/amaretto_alexander
results = list(/datum/reagent/consumable/ethanol/amaretto_alexander = 3)
required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/creme_de_cacao = 1, /datum/reagent/consumable/cream = 1)
/datum/chemical_reaction/ginger_amaretto
results = list(/datum/reagent/consumable/ethanol/ginger_amaretto = 4)
required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/sol_dry = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/lemonjuice = 1)
////////////////////////////////////////// Tea Base Drinks //////////////////////////////////////
/datum/chemical_reaction/mush
@@ -906,6 +963,7 @@
id = /datum/reagent/consumable/tea/mush
results = list(/datum/reagent/consumable/tea/mush = 3)
required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 3, /datum/reagent/consumable/tea = 3)
mix_message = "The liquid stirs with a mixture of psychedelic colors that makes stars peek from the corner of your vision."
/datum/chemical_reaction/foresttea1
name = "Forest Tea"
@@ -967,7 +1025,7 @@
id = /datum/reagent/consumable/catnip_tea
results = list(/datum/reagent/consumable/catnip_tea = 3)
required_reagents = list(/datum/reagent/consumable/tea = 5, /datum/reagent/pax/catnip = 2)
mix_message = "The mixture seems to purr aloud as it stirs together."
////////////////////////////////////////// Race Base Drinks //////////////////////////////////////
@@ -976,54 +1034,65 @@
id = /datum/reagent/consumable/ethanol/species_drink/coldscales
results = list(/datum/reagent/consumable/ethanol/species_drink/coldscales = 3)
required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/toxin/slimejelly = 1, /datum/reagent/consumable/menthol = 1)
mix_message = "Bubbles erupt from the glass and spill all over the place as it mixes, before settling with the faint smell of a reptile enclosure."
/datum/chemical_reaction/oil_drum
name = "Oil Drum"
id = /datum/reagent/consumable/ethanol/species_drink/oil_drum
results = list(/datum/reagent/consumable/ethanol/species_drink/oil_drum = 3)
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/oil = 1, /datum/reagent/consumable/ethanol/champagne = 12)
mix_message = "You can taste oil in your mouth as the newly-formed mixture floats to the top of the glass."
/datum/chemical_reaction/nord_king
name = "Nord King"
id = /datum/reagent/consumable/ethanol/species_drink/nord_king
results = list(/datum/reagent/consumable/ethanol/species_drink/nord_king = 10)
required_reagents = list(/datum/reagent/consumable/ethanol = 5, /datum/reagent/consumable/honey = 1, /datum/reagent/consumable/ethanol/red_mead = 10)
mix_message = "You can feel hair growing on places it shouldn't be as the smell of salt water and flame burns into your senses."
/datum/chemical_reaction/velvet_kiss
name = "Velvet Kiss"
id = /datum/reagent/consumable/ethanol/species_drink/velvet_kiss
results = list(/datum/reagent/consumable/ethanol/species_drink/velvet_kiss = 15) //Limited races use this
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/consumable/tea = 1, /datum/reagent/consumable/ethanol/wine = 10)
mix_message = "The taste of blood rolls off your tongue as the mixture oozes a crimson secretion."
/datum/chemical_reaction/abduction_fruit
name = "Abduction Fruit"
id = /datum/reagent/consumable/ethanol/species_drink/abduction_fruit
results = list(/datum/reagent/consumable/ethanol/species_drink/abduction_fruit = 3)
required_reagents = list(/datum/reagent/consumable/limejuice = 10, /datum/reagent/consumable/strawberryjuice = 5, /datum/reagent/consumable/watermelonjuice = 10)
mix_message = "The mixture forms with a green cloud of smoke, carrying with a smell of bovines and medicine."
/datum/chemical_reaction/bug_zapper
name = "Bug Zapper"
id = /datum/reagent/consumable/ethanol/species_drink/bug_zapper
results = list(/datum/reagent/consumable/ethanol/species_drink/bug_zapper = 20) //Harder to make
required_reagents = list(/datum/reagent/consumable/lemonjuice = 10, /datum/reagent/teslium = 1, /datum/reagent/copper = 10)
mix_message = "The mixture comes to life with a spark and a zap - shortly after, you can hear the faint buzzing of moths circling your head."
mix_sound = 'sound/weapons/taser.ogg'
/datum/chemical_reaction/mush_crush
name = "Mush Crush"
id = /datum/reagent/consumable/ethanol/species_drink/mush_crush
results = list(/datum/reagent/consumable/ethanol/species_drink/mush_crush = 10)
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/ash = 5, /datum/reagent/toxin/coffeepowder = 10)
mix_message = "The mixture sputters and coughs as a mushroom suddenly emerges from the glass!"
/datum/chemical_reaction/darkbrew
name = "Darkbrew"
id = /datum/reagent/consumable/ethanol/species_drink/darkbrew
results = list(/datum/reagent/consumable/ethanol/species_drink/darkbrew = 20)//Limited races use this
required_reagents = list(/datum/reagent/liquid_dark_matter = 5, /datum/reagent/toxin/bungotoxin = 5, /datum/reagent/toxin/coffeepowder = 10)
mix_message = "As the glass turns into a shadowy pit, you can smell... nothing."
/datum/chemical_reaction/hollow_bone
name = "Hollow Bone"
id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone
results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10)
required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10)
mix_message = "<span class='warning'>Your bones feel weak.</span>"
mix_sound = 'sound/effects/wounds/crack1.ogg'
/datum/chemical_reaction/frisky_kitty
name = "Frisky Kitty"
@@ -1031,6 +1100,7 @@
results = list(/datum/reagent/consumable/ethanol/species_drink/frisky_kitty = 2)
required_reagents = list(/datum/reagent/consumable/catnip_tea = 1, /datum/reagent/consumable/milk = 1)
required_temp = 296 //Just above room temp (22.85'C)
mix_message = "The drink bubbles over the rim as it settles, and the smell of wet fur and felines makes it feel like you're in heat."
/datum/chemical_reaction/jell_wyrm
name = "Jell Wyrm"
@@ -1038,6 +1108,7 @@
results = list(/datum/reagent/consumable/ethanol/species_drink/jell_wyrm = 2)
required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/toxin/carpotoxin = 1, /datum/reagent/carbondioxide = 5)
required_temp = 333 // (59.85'C)
mix_message = "The smell of toxins scrunches your nose as your limbs grow limp and feel like jelly."
/datum/chemical_reaction/laval_spit
name = "Laval Spit"
@@ -1045,3 +1116,5 @@
results = list(/datum/reagent/consumable/ethanol/species_drink/laval_spit = 20) //Limited use
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/ethanol/mauna_loa = 10, /datum/reagent/sulfur = 5)
required_temp = 900 // (626.85'C)
mix_message = "The room grows warm as burning rock rockets over the edge of the drink before settling."
mix_sound = 'sound/effects/wounds/sizzle2.ogg'

View File

@@ -3,6 +3,15 @@
////////////////////////////////////////////////BREAD////////////////////////////////////////////////
/datum/crafting_recipe/food/bread
name = "Bread"
reqs = list(
/obj/item/reagent_containers/food/snacks/breadslice/plain = 5,
)
tools = list(/obj/item/kitchen/efink)
result = /obj/item/reagent_containers/food/snacks/store/bread/plain
subcategory = CAT_BREAD
/datum/crafting_recipe/food/banananutbread
name = "Banana nut bread"
reqs = list(

View File

@@ -66,6 +66,16 @@
////////////////////////////////////////////////MISC RECIPE's////////////////////////////////////////////////
/datum/crafting_recipe/food/meatslab
name = "Meat Slab"
reqs = list(
/obj/item/reagent_containers/food/snacks/meat/rawcutlet = 3,
)
tools = list(/obj/item/kitchen/efink)
result = /obj/item/reagent_containers/food/snacks/meat/slab
subcategory = CAT_MEAT
/datum/crafting_recipe/food/ribs
name = "BBQ Ribs"
reqs = list(

View File

@@ -47,6 +47,24 @@
/////////////////////////////////MISC/////////////////////////////////////
/datum/crafting_recipe/food/dough
name = "Dough"
reqs = list(
/obj/item/reagent_containers/food/snacks/doughslice = 3,
)
tools = list(/obj/item/kitchen/efink)
result = /obj/item/reagent_containers/food/snacks/flatdough
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/Pineapple
name = "Pineapple"
reqs = list(
/obj/item/reagent_containers/food/snacks/pineappleslice = 3,
)
tools = list(/obj/item/kitchen/efink)
result = /obj/item/reagent_containers/food/snacks/grown/pineapple
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/beans
name = "Beans"
time = 40

View File

@@ -194,6 +194,15 @@
////////////////////////////////////////////OTHER////////////////////////////////////////////
/datum/crafting_recipe/food/piedough
name = "Pie Dough"
reqs = list(
/obj/item/reagent_containers/food/snacks/rawpastrybase = 3,
)
tools = list(/obj/item/kitchen/efink)
result = /obj/item/reagent_containers/food/snacks/piedough
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/chococornet
name = "Choco cornet"
reqs = list(

View File

@@ -8,6 +8,10 @@
area_flags = BLOBS_ALLOWED | UNIQUE_AREA
flags_1 = CAN_BE_DIRTY_1
/area/survivalpod/nonpowered
name = "\proper Emergency Shelter"
requires_power = TRUE
//Survival Capsule
/obj/item/survivalcapsule
name = "bluespace shelter capsule"
@@ -81,6 +85,10 @@
desc = "A luxury bar in a capsule. Bartender required and not included."
template_id = "shelter_charlie"
/obj/item/survivalcapsule/luxury/empty
name = "large empty capsule"
desc = "An extremly large capsule which requires power. Useful for projects all over."
template_id = "shelter_delta"
//Pod objects
//Window

View File

@@ -994,7 +994,6 @@
H.dna.features["wings"] = "None"
H.dna.features["frills"] = "None"
H.dna.features["spines"] = "Long"
H.dna.features["body_markings"] = "Dark Tiger Body"
H.dna.features["legs"] = "Digitigrade"
H.dna.features["taur_body"] = "None"
H.left_eye_color = "fee5a3"

View File

@@ -56,6 +56,7 @@
new /datum/data/mining_equipment("Ice hiking boots", /obj/item/clothing/shoes/winterboots/ice_boots, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxury/elitebar, 10000),
new /datum/data/mining_equipment("Empty Capsule", /obj/item/survivalcapsule/luxury/empty, 5000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),

View File

@@ -73,3 +73,15 @@
. = ..()
whitelisted_turfs = typecacheof(/turf/closed/mineral)
banned_objects = typecacheof(/obj/structure/stone_tile)
/datum/map_template/shelter/delta
name = "Shelter Delta"
shelter_id = "shelter_delta"
description = "A massive but barebones survival capsule useful\
for projects that require great deals of space."
mappath = "_maps/templates/shelter_4.dmm"
/datum/map_template/shelter/delta/New()
. = ..()
whitelisted_turfs = typecacheof(/turf/closed/mineral)
banned_objects = typecacheof(/obj/structure/stone_tile)

View File

@@ -54,6 +54,8 @@
mannequin.job = previewJob.title
previewJob.equip(mannequin, TRUE, preference_source = parent)
mannequin.regenerate_icons()
COMPILE_OVERLAYS(mannequin)
parent.show_character_previews(new /mutable_appearance(mannequin))
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)

View File

@@ -12,6 +12,7 @@
name = "DataShark"
icon_state = "datashark"
ckeys_allowed = list("rubyflamewing")
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
//Sabresune
/datum/sprite_accessory/ears/mam_ears/sabresune
@@ -39,6 +40,7 @@
name = "Sabresune"
icon_state = "sabresune"
ckeys_allowed = list("poojawa")
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
//Lunasune
/datum/sprite_accessory/ears/mam_ears/lunasune

View File

@@ -1,39 +1,3 @@
/******************************************
************* Lizard Markings *************
*******************************************/
/datum/sprite_accessory/body_markings
icon = 'icons/mob/mutant_bodyparts.dmi'
relevant_layers = list(BODY_ADJ_LAYER)
mutant_part_string = "body_markings"
/datum/sprite_accessory/body_markings/none
name = "None"
icon_state = "none"
relevant_layers = null
/datum/sprite_accessory/body_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
gender_specific = 1
/datum/sprite_accessory/body_markings/guilmon
name = "Guilmon"
icon_state = "guilmon"
color_src = MATRIXED
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
matrixed_sections = MATRIX_ALL
/datum/sprite_accessory/body_markings/ltiger
name = "Light Tiger Body"
icon_state = "ltiger"
gender_specific = 1
/datum/sprite_accessory/body_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
gender_specific = 1
/******************************************
************ Furry Markings ***************
*******************************************/
@@ -49,7 +13,8 @@
gender_specific = 0
icon = 'modular_citadel/icons/mob/mam_markings.dmi'
recommended_species = list("mammal", "xeno", "slimeperson", "podweak")
matrixed_sections = MATRIX_ALL
matrixed_sections = MATRIX_ALL // this value is used if there is no value in covered_limbs, don't rely on it, it's a backup value
var/list/covered_limbs = list("Head", "Chest", "Left Leg", "Right Leg", "Left Arm", "Right Arm")
/datum/sprite_accessory/mam_body_markings/none
name = "None"
@@ -62,87 +27,107 @@
/datum/sprite_accessory/mam_body_markings/redpanda
name = "Redpanda"
icon_state = "redpanda"
covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/bat
name = "Bat"
icon_state = "bat"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/bee
name = "Bee"
icon_state = "bee"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/belly
name = "Belly"
icon_state = "belly"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/bellyslim
name = "Bellyslim"
icon_state = "bellyslim"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/cow
name = "Bovine"
icon_state = "bovine"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/corgi
name = "Corgi"
icon_state = "corgi"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/corvid
name = "Corvid"
icon_state = "corvid"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/dalmation
name = "Dalmation"
icon_state = "dalmation"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/deer
name = "Deer"
icon_state = "deer"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/dog
name = "Dog"
icon_state = "dog"
covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL)
/datum/sprite_accessory/mam_body_markings/eevee
name = "Eevee"
icon_state = "eevee"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/fennec
name = "Fennec"
icon_state = "Fennec"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/fox
name = "Fox"
icon_state = "fox"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE)
/datum/sprite_accessory/mam_body_markings/frog
name = "Frog"
icon_state = "frog"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/goat
name = "Goat"
icon_state = "goat"
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE)
/datum/sprite_accessory/mam_body_markings/handsfeet
name = "Handsfeet"
icon_state = "handsfeet"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/hawk
name = "Hawk"
icon_state = "hawk"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/husky
name = "Husky"
icon_state = "husky"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/hyena
name = "Hyena"
icon_state = "hyena"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/insect
name = "Insect"
@@ -152,78 +137,118 @@
/datum/sprite_accessory/mam_body_markings/lab
name = "Lab"
icon_state = "lab"
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/orca
name = "Orca"
icon_state = "orca"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/otie
name = "Otie"
icon_state = "otie"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL)
/datum/sprite_accessory/mam_body_markings/otter
name = "Otter"
icon_state = "otter"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/panther
name = "Panther"
icon_state = "panther"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/plain
name = "Plain"
icon_state = "plain"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/possum
name = "Possum"
icon_state = "possum"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE)
/datum/sprite_accessory/mam_body_markings/raccoon
name = "Raccoon"
icon_state = "raccoon"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/sergal
name = "Sergal"
icon_state = "sergal"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/pede
name = "Scolipede"
icon_state = "scolipede"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_GREEN, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/shark
name = "Shark"
icon_state = "shark"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN)
/datum/sprite_accessory/mam_body_markings/shepherd
name = "Shepherd"
icon_state = "shepherd"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/skunk
name = "Skunk"
icon_state = "skunk"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/tajaran
name = "Tajaran"
icon_state = "tajaran"
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/tiger
name = "Tiger"
icon_state = "tiger"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE)
/datum/sprite_accessory/mam_body_markings/turian
name = "Turian"
icon_state = "turian"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/wolf
name = "Wolf"
icon_state = "wolf"
covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE)
/datum/sprite_accessory/mam_body_markings/xeno
name = "Xeno"
icon_state = "xeno"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_BLUE, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN)
// sticking old lizard markings here for now
/datum/sprite_accessory/mam_body_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/guilmon
name = "Guilmon"
icon_state = "guilmon"
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_BLUE, "Right Leg" = MATRIX_BLUE, "Left Arm" = MATRIX_GREEN_BLUE, "Right Arm" = MATRIX_GREEN_BLUE)
/datum/sprite_accessory/mam_body_markings/ltiger
name = "Light Tiger Body"
icon_state = "ltiger"
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/datum/sprite_accessory/mam_body_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED)
/******************************************
************* Insect Markings *************

View File

@@ -32,20 +32,20 @@
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
name = "Synthetic Lizard - Pecs"
icon_state = "synthlizpecs"
matrixed_sections = MATRIX_GREEN
covered_limbs = list("Chest" = MATRIX_GREEN)
/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
name = "Synthetic Lizard - Pecs Light"
icon_state = "synthlizpecslight"
matrixed_sections = MATRIX_GREEN_BLUE
covered_limbs = list("Chest" = MATRIX_GREEN_BLUE)
/datum/sprite_accessory/mam_body_markings/synthliz
recommended_species = list("synthliz")
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
name = "Synthetic Lizard - Plates"
icon_state = "synthlizscutes"
matrixed_sections = MATRIX_GREEN
covered_limbs = list("Chest" = MATRIX_GREEN)
//Synth tails
/datum/sprite_accessory/tails/mam_tails/synthliz

View File

@@ -41,10 +41,10 @@
. += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]."
//head
if(head && !(head.item_flags & EXAMINE_SKIP))
if(head && !(head.obj_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head."
//suit/armor
if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP))
if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP))
. += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]."
//suit/armor storage
if(s_store && !(SLOT_S_STORE in obscured))

View File

@@ -5,7 +5,7 @@
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "deco_wings" = "None",
"mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian")
"mam_body_markings" = list(), "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian")
attack_verb = "claw"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'

View File

@@ -11,7 +11,7 @@
coldmod = 1.5
heatmod = 0.67
mutant_bodyparts = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "mam_snouts" = "Round",
"horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None",
"horns" = "None", "frills" = "None", "spines" = "None", "mam_body_markings" = list(),
"legs" = "Digitigrade", "taur" = "None", "deco_wings" = "None")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'

View File

@@ -74,7 +74,7 @@
name = "Anthropomorphic Plant"
id = SPECIES_POD_WEAK
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = list(), "taur" = "None", "legs" = "Normal Legs")
limbs_id = SPECIES_POD
light_nutrition_gain_factor = 3
light_bruteheal = -0.2

View File

@@ -5,7 +5,7 @@
say_mod = "hisses"
default_color = "00FF00"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None")
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = list(),"mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'

View File

@@ -729,11 +729,8 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if
. += "-[BP.digitigrade_type]"
if(BP.dmg_overlay_type)
. += "-[BP.dmg_overlay_type]"
if(BP.body_markings)
. += "-[BP.body_markings]"
if(length(BP.markings_color) && length(BP.markings_color[1]))
for(var/color in BP.markings_color[1])
. += "-[color]"
if(BP.body_markings_list)
. += "-[safe_json_encode(BP.body_markings_list)]"
if(BP.icon)
. += "-[BP.icon]"
else

View File

@@ -134,7 +134,7 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/bubblegum/grant_achievement(medaltype,scoretype)
. = ..()
if(.)
SSshuttle.shuttle_purchase_requirements_met |= "bubblegum"
SSshuttle.shuttle_purchase_requirements_met["bubblegum"] = TRUE
/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect)
if(!charging)

View File

@@ -360,6 +360,18 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
pH = 3.5
/datum/reagent/consumable/ethanol/amaretto
name = "Amaretto"
description = "A gentle drink that carries a sweet aroma."
color = "#E17600"
boozepwr = 25
taste_description = "fruity and nutty sweetness"
glass_icon_state = "amarettoglass"
shot_glass_icon_state = "shotglassgold"
glass_name = "glass of amaretto"
glass_desc = "A sweet and syrupy-looking drink."
pH = 3.5
/datum/reagent/consumable/ethanol/cognac
name = "Cognac"
description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
@@ -1790,6 +1802,50 @@ All effects don't start immediately, but rather get worse over time; the rate is
to_chat(L,"<span class='notice'>You notice [mighty_shield] looks worn again. Weird.</span>")
..()
/datum/reagent/consumable/ethanol/amaretto_alexander
name = "Amaretto Alexander"
description = "A weaker version of the Alexander, what it lacks in strength it makes up for in flavor."
color = "#DBD5AE"
boozepwr = 35
quality = DRINK_VERYGOOD
taste_description = "sweet, creamy cacao"
glass_icon_state = "alexanderam"
glass_name = "Amaretto Alexander"
glass_desc = "A creamy, indulgent delight that is in fact as gentle as it seems."
/datum/reagent/consumable/ethanol/ginger_amaretto
name = "Ginger Amaretto"
description = "A delightfully simple cocktail that pleases the senses."
boozepwr = 30
color = "#EFB42A"
quality = DRINK_GOOD
taste_description = "sweetness followed by a soft sourness and warmth"
glass_icon_state = "gingeramaretto"
glass_name = "Ginger Amaretto"
glass_desc = "The sprig of rosemary adds a nice aroma to the drink, and isn't just to be pretentious afterall!"
/datum/reagent/consumable/ethanol/godfather
name = "Godfather"
description = "A rough cocktail with illegal connections."
boozepwr = 50
color = "#E68F00"
quality = DRINK_GOOD
taste_description = "a delightful softened punch"
glass_icon_state = "godfather"
glass_name = "Godfather"
glass_desc = "A classic from old Italy and enjoyed by gangsters, pray the orange peel doesnt end up in your mouth."
/datum/reagent/consumable/ethanol/godmother
name = "Godmother"
description = "A twist on a classic, liked more by mature women."
boozepwr = 50
color = "#E68F00"
quality = DRINK_GOOD
taste_description = "sweetness and a zesty twist"
glass_icon_state = "godmother"
glass_name = "Godmother"
glass_desc = "A lovely fresh-smelling cocktail, a true Sicilian delight."
/datum/reagent/consumable/ethanol/sidecar
name = "Sidecar"
description = "The one ride you'll gladly give up the wheel for."

View File

@@ -13,6 +13,14 @@
build_path = /obj/item/kitchen/knife
category = list("initial","Dinnerware")
/datum/design/efink
name = "E-Fink"
id = "efink"
build_type = AUTOLATHE | NO_PUBLIC_LATHE
materials = list(/datum/material/iron = 12000)
build_path = /obj/item/kitchen/efink
category = list("initial","Dinnerware")
/datum/design/fork
name = "Fork"
id = "fork"

View File

@@ -47,10 +47,11 @@
var/species_color = ""
var/mutation_color = ""
var/no_update = 0
var/body_markings = "" //for bodypart markings
var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi'
var/body_markings = "" //for bodypart markings, deprecated
var/list/body_markings_list // stores body markings as lists, with the first value being the name of the bodypart, the second value being the name of the marking, and the third being the colour
var/marking_value // combination of old aux_marking and body_marking variables as they were always set together to the same value
var/static/default_body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi'
var/list/markings_color = list()
var/aux_marking
var/digitigrade_type
var/animal_origin = null //for nonhuman bodypart (e.g. monkey)
@@ -614,6 +615,7 @@
//we inform the bodypart of the changes that happened to the owner, or give it the informations from a source mob.
/obj/item/bodypart/proc/update_limb(dropping_limb, mob/living/carbon/source)
body_markings_list = list()
var/mob/living/carbon/C
if(source)
C = source
@@ -632,8 +634,7 @@
color_src = FALSE
base_bp_icon = DEFAULT_BODYPART_ICON
no_update = TRUE
body_markings = "husk" // reeee
aux_marking = "husk"
marking_value = "husk"
if(no_update)
return
@@ -649,11 +650,7 @@
//body marking memes
var/list/colorlist = list()
//var/advanced_color_system = (H.dna.features["color_scheme"] == ADVANCED_CHARACTER_COLORING)
colorlist.Cut()
//colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_primary"]]00") : ReadRGB("[H.dna.features["mcolor"]]00")
//colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_secondary"]]00") : ReadRGB("[H.dna.features["mcolor2"]]00")
//colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_tertiary"]]00") : ReadRGB("[H.dna.features["mcolor3"]]00")
colorlist += ReadRGB("[H.dna.features["mcolor"]]00")
colorlist += ReadRGB("[H.dna.features["mcolor2"]]00")
colorlist += ReadRGB("[H.dna.features["mcolor3"]]00")
@@ -688,21 +685,31 @@
else
digitigrade_type = null
if(S.mutant_bodyparts["mam_body_markings"])
var/datum/sprite_accessory/Smark
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
if(Smark)
body_markings_icon = Smark.icon
if(H.dna.features["mam_body_markings"] != "None")
body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
else
body_markings = "plain"
aux_marking = "plain"
if(S.mutant_bodyparts["mam_body_markings"]) // checks if the species can actually have body markings
// get all markings for this bodypart type
for(var/list/marking in H.dna.features["mam_body_markings"])
// marking is a list containing bodypart type, bodymarking name, and then the colour (colour won't be used in v1)
if(marking[1] == body_part)
var/datum/sprite_accessory/Smark
Smark = GLOB.mam_body_markings_list[marking[2]]
var/body_markings_icon = default_body_markings_icon
if(Smark)
body_markings_icon = Smark.icon
var/marking_value = "" // combination of body and aux markings from old system
if(H.dna.features["mam_body_markings"] != "None")
marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"])
else
marking_value = "plain"
var/list/color_values
if(length(marking) == 3)
color_values = marking[3]
else
color_values = list("#FFFFFF", "#FFFFFF", "#FFFFFF")
body_markings_list += list(list(body_markings_icon, marking_value, color_values))
markings_color = list(colorlist)
else
body_markings = null
aux_marking = null
marking_value = null
if(S.override_bp_icon)
base_bp_icon = S.override_bp_icon
@@ -728,8 +735,7 @@
if(is_robotic_limb())
dmg_overlay_type = "robotic"
if(is_robotic_limb(FALSE))
body_markings = null
aux_marking = null
marking_value = null
if(dropping_limb)
no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner.
@@ -765,17 +771,18 @@
. += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir)
if(!isnull(body_markings) && is_organic_limb(FALSE))
if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
. += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
for(var/list/marking_list in body_markings_list)
// marking stores icon and value for the specific bodypart
if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
. += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
. += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir)
var/list/aux = list()
var/image/marking
var/list/auxmarking = list()
. += limb
@@ -795,6 +802,7 @@
if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST))
should_draw_gender = FALSE
var/list/markings_list = list()
if(is_organic_limb())
limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi'
if(should_draw_gender)
@@ -808,21 +816,26 @@
limb.icon_state = "[species_id]_[body_zone]"
// Body markings
if(!isnull(body_markings))
if(length(body_markings_list))
if(species_id == "husk")
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
. += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
. += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
for(var/list/marking_list in body_markings_list)
// marking stores icon and value for the specific bodypart
if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir))
else
markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir))
else
markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir))
. += marking
if(color_src && length(marking_list) == 3)
var/image/I = markings_list[length(markings_list)]
I.color = marking_list[3]
. += markings_list
// Citadel End
@@ -830,11 +843,14 @@
for(var/I in aux_icons)
var/aux_layer = aux_icons[I]
aux += image(limb.icon, "[species_id]_[I]", -aux_layer, image_dir)
if(!isnull(aux_marking))
if(species_id == "husk")
auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir)
else
auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir)
if(species_id == "husk")
auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir)
else
for(var/marking_list in body_markings_list)
var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir)
if(length(marking_list) == 3)
aux_marking_image.color = marking_list[3]
auxmarking += aux_marking_image
. += aux
. += auxmarking
@@ -849,31 +865,35 @@
for(var/I in aux_icons)
var/aux_layer = aux_icons[I]
aux += image(limb.icon, "[I]", -aux_layer, image_dir)
if(!isnull(aux_marking))
if(species_id == "husk")
auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir)
else
auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir)
if(species_id == "husk")
auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir)
else
for(var/marking_list in body_markings_list)
var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir)
if(length(marking_list) == 3)
aux_marking_image.color = marking_list[3]
auxmarking += aux_marking_image
. += auxmarking
. += aux
if(!isnull(body_markings))
if(length(body_markings))
if(species_id == "husk")
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
. += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir)
else if(species_id == "husk" && use_digitigrade)
marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir)
. += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
else
marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
. += marking
for(var/list/marking_list in body_markings_list)
// marking stores icon and value for the specific bodypart
if(!use_digitigrade)
if(body_zone == BODY_ZONE_CHEST)
. += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)
else
. += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir)
else
. += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)
return
if(color_src) //TODO - add color matrix support for base species limbs
if(color_src) //TODO - add color matrix support for base species limbs (or dont because color matrixes suck)
var/draw_color = mutation_color || species_color
var/grayscale = FALSE
if(!draw_color)
@@ -891,20 +911,15 @@
if(grayscale)
I.icon_state += "_g"
I.color = draw_color
if(!isnull(aux_marking))
for(var/a in auxmarking)
var/image/I = a
if(species_id == "husk")
I.color = "#141414"
else
I.color = list(markings_color)
for(var/a in auxmarking)
var/image/I = a
if(species_id == "husk")
I.color = "#141414"
if(!isnull(body_markings))
if(species_id == "husk")
marking.color = "#141414"
else
marking.color = list(markings_color)
for(var/image/marking in markings_list)
marking.color = "#141414"
/obj/item/bodypart/deconstruct(disassembled = TRUE)
drop_organs()

View File

@@ -18,6 +18,7 @@
/obj/item/reagent_containers/food/drinks/bottle/absinthe = 5,
/obj/item/reagent_containers/food/drinks/bottle/grappa = 5,
/obj/item/reagent_containers/food/drinks/bottle/sake = 5,
/obj/item/reagent_containers/food/drinks/bottle/amaretto = 5,
/obj/item/reagent_containers/food/drinks/ale = 6,
/obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4,
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4,

View File

@@ -7,6 +7,7 @@
/obj/item/storage/bag/tray = 8,
/obj/item/kitchen/fork = 6,
/obj/item/kitchen/knife = 6,
/obj/item/kitchen/efink = 2,
/obj/item/kitchen/rollingpin = 4,
/obj/item/kitchen/unrollingpin = 4,
/obj/item/reagent_containers/food/drinks/drinkingglass = 8,