From 32b7deb869cc4322cc276c0732e4406b0a60636c Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 10 Apr 2025 01:15:44 +0300 Subject: [PATCH 01/31] visual bellies for taur characters weh --- .../code/modules/mob/living/species.dm | 7 ++ .../code/modules/mob/living/taur_belly.dm | 77 ++++++++++++++++++ .../genitals/taur_belly/taur_belly_drake.dmi | Bin 0 -> 10436 bytes code/__DEFINES/DNA.dm | 2 + code/__DEFINES/citadel_defines.dm | 12 ++- code/__HELPERS/_cit_helpers.dm | 6 ++ code/__HELPERS/global_lists.dm | 1 + code/__HELPERS/mobs.dm | 11 +++ code/modules/arousal/genitals.dm | 14 ++++ .../arousal/genitals_sprite_accessories.dm | 16 ++++ code/modules/client/preferences.dm | 57 ++++++++++++- code/modules/client/preferences_savefile.dm | 27 +++++- .../code/modules/arousal/arousalhud.dm | 5 ++ tgstation.dme | 1 + 14 files changed, 229 insertions(+), 7 deletions(-) create mode 100644 GainStation13/code/modules/mob/living/taur_belly.dm create mode 100644 GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi diff --git a/GainStation13/code/modules/mob/living/species.dm b/GainStation13/code/modules/mob/living/species.dm index 12fff6fc92..3c812443e8 100644 --- a/GainStation13/code/modules/mob/living/species.dm +++ b/GainStation13/code/modules/mob/living/species.dm @@ -5,6 +5,7 @@ var/obj/item/organ/genital/butt/butt = H.getorganslot(ORGAN_SLOT_BUTT) var/obj/item/organ/genital/belly/belly = H.getorganslot(ORGAN_SLOT_BELLY) var/obj/item/organ/genital/breasts/breasts = H.getorganslot(ORGAN_SLOT_BREASTS) + var/obj/item/organ/genital/taur_belly/tbelly = H.getorganslot(ORGAN_SLOT_TAUR_BELLY) //GS13 TAUR BELLY EDIT if(butt) if(butt.max_size > 0) @@ -18,6 +19,12 @@ belly.modify_size(size_change) else belly.modify_size(size_change) + if(tbelly) //GS13 TAUR BELLY EDIT + if(tbelly.max_size > 0) + if((tbelly.size + size_change) <= tbelly.max_size) + tbelly.modify_size(size_change) + else + tbelly.modify_size(size_change) if(breasts) if(breasts.max_size > 0) if((breasts.cached_size + size_change) <= breasts.max_size) diff --git a/GainStation13/code/modules/mob/living/taur_belly.dm b/GainStation13/code/modules/mob/living/taur_belly.dm new file mode 100644 index 0000000000..3ad4c92a90 --- /dev/null +++ b/GainStation13/code/modules/mob/living/taur_belly.dm @@ -0,0 +1,77 @@ +/obj/item/organ/genital/taur_belly //I know, I know a this is just a copy of belly.dm code. + name = "taur belly" + desc = "You see a belly on their taur body." + icon_state = "belly" + icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' //drake belly as placeholder + zone = BODY_ZONE_CHEST // ugh... I think this is a target on a health doll + slot = ORGAN_SLOT_TAUR_BELLY + w_class = 3 + size = 0 + var/max_size = 0 + shape = TAUR_BELLY_SHAPE_DEF//"taur_belly" + var/statuscheck = FALSE + genital_flags = UPDATE_OWNER_APPEARANCE|GENITAL_CAN_TAUR + masturbation_verb = "massage" + var/sent_full_message = TRUE //defaults to 1 since they're full to start + //var/inflatable = FALSE //For inflation connoisseurs not implemented yet + var/size_cached = 0 + var/prev_size = 0 + layer_index = TAUR_BELLY_LAYER_INDEX + + +/obj/item/organ/genital/taur_belly/modify_size(modifier, min = TAUR_BELLY_SIZE_DEF, max = TAUR_BELLY_SIZE_MAX) + var/new_value = clamp(size_cached + modifier, starting_size, max) + if(new_value == size_cached) + return + prev_size = size_cached + size_cached = new_value + size = round(size_cached) + update() + ..() + +/obj/item/organ/genital/taur_belly/update_appearance() + //GS13 + // Default settings + var/datum/sprite_accessory/S = GLOB.taur_belly_shapes_list[shape] //GS13 - get belly shape + var/icon_shape_state = S ? S.icon_state : "belly" + icon_state = "[icon_shape_state]_[size]" + //var/icon_shape = S ? S.icon : "hyperstation/icons/obj/genitals/belly.dmi" //fallback to default belly in case we cant find a shape + //icon = icon_shape + +// Fullnes not implemented yet +/* + switch(owner.fullness) + if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' //We use round belly to represent stuffedness + icon_state = "belly_round_[size]" + if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' + icon_state = "belly_round_[size+1]" + if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY) + icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' + icon_state = "belly_round_[size+2]" +*/ + if(owner) + if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"]) + if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow... + var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need. + color = SKINTONE2HEX(H.skin_tone) + if(!H.dna.skin_tone_override) + icon_state += "_s" + else + color = "#[owner.dna.features["taur_belly_color"]]" + +/obj/item/organ/genital/taur_belly/get_features(mob/living/carbon/human/H) + var/datum/dna/D = H.dna + if(D.species.use_skintones && D.features["genitals_use_skintone"]) + color = SKINTONE2HEX(H.skin_tone) + else + color = "#[D.features["taur_belly_color"]]" + size = D.features["taur_belly_size"] + max_size = D.features["max_taur_belly_size"] + starting_size = D.features["belly_size"] + shape = D.features["taur_belly_shape"] + //inflatable = D.features["inflatable_belly"] + toggle_visibility(D.features["taur_belly_visibility"], FALSE) + + diff --git a/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi b/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e3cf3151fbe45b998cb12100365e4dc2d7033bcd GIT binary patch literal 10436 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 literal 0 HcmV?d00001 diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 730786b2c0..346dba8172 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -190,6 +190,8 @@ #define ORGAN_SLOT_BUTT "butt" // GS13 EDIT #define ORGAN_SLOT_BELLY "belly" +// GS13 EDIT +#define ORGAN_SLOT_TAUR_BELLY "taur_belly" ////organ defines #define STANDARD_ORGAN_THRESHOLD 100 diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index a5b36e862e..42fab39ca4 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -10,10 +10,11 @@ #define VAGINA_LAYER_INDEX 2 #define TESTICLES_LAYER_INDEX 3 #define BELLY_LAYER_INDEX 4 -#define GENITAL_LAYER_INDEX 5 -#define PENIS_LAYER_INDEX 6 +#define TAUR_BELLY_LAYER_INDEX 5 +#define GENITAL_LAYER_INDEX 6 +#define PENIS_LAYER_INDEX 7 -#define GENITAL_LAYER_INDEX_LENGTH 6 //keep it updated with each new index added, thanks. +#define GENITAL_LAYER_INDEX_LENGTH 7 //keep it updated with each new index added, thanks. //genital flags #define GENITAL_BLACKLISTED (1<<0) //for genitals that shouldn't be added to GLOB.genitals_list. @@ -72,6 +73,11 @@ #define DEF_BELLY_SHAPE "Soft Belly" //GS13 - More belly types +//GS13 EDIT TAUR BELLIES +#define TAUR_BELLY_SIZE_DEF 1 +#define TAUR_BELLY_SIZE_MAX 10 +#define TAUR_BELLY_SHAPE_DEF "Drake Belly" // GS13 - for future taur bodies... + //GS13 Port - Add back Arousal #define AROUSAL_MINIMUM_DEFAULT 0 #define AROUSAL_MAXIMUM_DEFAULT 100 diff --git a/code/__HELPERS/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm index c885a5b996..474a3dd499 100644 --- a/code/__HELPERS/_cit_helpers.dm +++ b/code/__HELPERS/_cit_helpers.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_EMPTY(cock_shapes_list) GLOBAL_LIST_EMPTY(balls_shapes_list) GLOBAL_LIST_EMPTY(butt_shapes_list) GLOBAL_LIST_EMPTY(belly_shapes_list) +GLOBAL_LIST_EMPTY(taur_belly_shapes_list) // GS13 TAUR BELLY EDIT GLOBAL_LIST_EMPTY(breasts_shapes_list) GLOBAL_LIST_EMPTY(vagina_shapes_list) //longcat memes. @@ -136,6 +137,11 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE) return TRUE return FALSE +/mob/living/carbon/proc/has_taur_belly() //GS13 EDIT TAUR BELLY + if(getorganslot(ORGAN_SLOT_TAUR_BELLY)) + return TRUE + return FALSE + /mob/living/carbon/proc/is_groin_exposed(list/L) if(!L) L = get_equipped_items() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 6d0a690672..5d7b8e1a99 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -58,6 +58,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/butt, GLOB.butt_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/belly, GLOB.belly_shapes_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/taur_belly, GLOB.taur_belly_shapes_list) //GS13 EDIT TAUR BELLY for(var/gpath in subtypesof(/obj/item/organ/genital)) var/obj/item/organ/genital/G = gpath diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fa2a7b06ae..d72ff09f1a 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -106,6 +106,8 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/ears/mam_ears, GLOB.mam_ears_list) if(!GLOB.mam_snouts_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts/mam_snouts, GLOB.mam_snouts_list) + if(!GLOB.taur_belly_shapes_list.len) //GS13 EDIT TAUR BELLY + init_sprite_accessory_subtypes(/datum/sprite_accessory/taur_belly, GLOB.taur_belly_shapes_list) //snowflake check so people's ckey features don't get randomly put on unmonkeys/spawns var/list/snowflake_mam_tails_list = list() @@ -222,6 +224,15 @@ "inflatable_belly" = FALSE, "belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), // GS13 EDIT END + // GS13 EDIT START - TAUR BELLY + "has_taur_belly" = FALSE, + "taur_belly_size" = TAUR_BELLY_SIZE_DEF, + "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, + "hide_taur_belly" = FALSE, + //"inflatable_belly" = FALSE, + "taur_belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES, + // GS13 EDIT END "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 49063c422f..76f125cf08 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -261,6 +261,8 @@ give_genital(/obj/item/organ/genital/butt) if(dna.features["has_belly"]) give_genital(/obj/item/organ/genital/belly) + if(dna.features["has_taur_belly"]) //GS13 EDIT TAUR BELLY + give_genital(/obj/item/organ/genital/taur_belly) /mob/living/carbon/human/proc/give_genital(obj/item/organ/genital/G) if(!dna || (NOGENITALS in dna.species.species_traits) || getorganslot(initial(G.slot))) @@ -322,6 +324,8 @@ S = GLOB.butt_shapes_list[G.shape] if(/obj/item/organ/genital/belly) S = GLOB.belly_shapes_list[G.shape] + if(/obj/item/organ/genital/taur_belly) //GS13 EDIT TAUR BELLY + S = GLOB.taur_belly_shapes_list[G.shape] if(!S || S.icon_state == "none") continue @@ -358,6 +362,8 @@ genital_overlay.color = "#[dna.features["butt_color"]]" if("belly_color") genital_overlay.color = "#[dna.features["belly_color"]]" + if("taur_belly_color") //GS13 EDIT TAUR BELLY + genital_overlay.color = "#[dna.features["taur_belly_color"]]" //GS13 - Because each genital's file has different naming schemes for their icon_states, // I've made it so each type is checked and the icon_state built based on which genital it is @@ -365,6 +371,9 @@ if("belly") genital_overlay.icon = G.icon genital_overlay.icon_state = "[G.icon_state]_[aroused_state]_[layertext]" + if("taur_belly") //GS13 EDIT TAUR BELLY + //genital_overlay.icon = G.icon + genital_overlay.icon_state = "[G.icon_state]_[aroused_state]_[layertext]" if("breasts") genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size][(dna.species.use_skintones && !dna.skin_tone_override) ? "-s" : ""]_[aroused_state]_[layertext]" if("penis") @@ -405,6 +414,7 @@ var/buttCheck = getorganslot(ORGAN_SLOT_BUTT) var/ballCheck = getorganslot(ORGAN_SLOT_TESTICLES) var/bellyCheck = getorganslot(ORGAN_SLOT_BELLY) + var/taurbellyCheck = getorganslot(ORGAN_SLOT_TAUR_BELLY) //GS13 EDIT TAUR BELLY if(organCheck == FALSE) if(ishuman(src) && dna.species.use_skintones) @@ -415,6 +425,7 @@ dna.features["butt_color"] = "[dna.species.fixed_mut_color]" dna.features["belly_color"] = "[dna.species.fixed_mut_color]" dna.features["testicles_color"] = "[dna.species.fixed_mut_color]" + dna.features["taur_belly_color"] = "[dna.species.fixed_mut_color]" //GS13 EDIT TAUR BELLY return //So people who haven't set stuff up don't get rainbow surprises. dna.features["cock_color"] = "[dna.features["mcolor"]]" @@ -422,6 +433,7 @@ dna.features["butt_color"] = "[dna.features["mcolor"]]" dna.features["belly_color"] = "[dna.features["mcolor"]]" dna.features["testicles_color"] = "[dna.features["mcolor"]]" + dna.features["taur_belly_color"] = "[dna.features["mcolor"]]" //GS13 EDIT TAUR BELLY else //If there's a new organ, make it the same colour. if(breastCheck == FALSE) dna.features["breasts_color"] = dna.features["cock_color"] @@ -433,4 +445,6 @@ dna.features["belly_color"] = dna.features["belly_color"] else if (ballCheck == FALSE) dna.features["testicles_color"] = dna.features["testicles_color"] + else if (taurbellyCheck == FALSE) + dna.features["taur_belly_color"] = dna.features["taur_belly_color"] //GS13 EDIT TAUR BELLY return TRUE diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm index b8d0c9e9f9..8c55ba4d58 100644 --- a/code/modules/arousal/genitals_sprite_accessories.dm +++ b/code/modules/arousal/genitals_sprite_accessories.dm @@ -152,3 +152,19 @@ icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' icon_state = "round" name = "Round Belly" + +//GS13 EDIT TAUR BELLY +/datum/sprite_accessory/taur_belly // Generic taur belly + icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' + icon_state = "drake" + name = "generic taur belly" + color_src = "taur_belly_color" + //taur_dimension_x = 64 + feat_taur = "belly_taur" + center = TRUE + dimension_x = 64 + +/datum/sprite_accessory/taur_belly/drake + taur_icon = 'GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi' + icon_state = "drake" + name = "Drake Belly" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3cb2e1c7ce..7e64fe5ec7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -134,7 +134,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", "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_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES) + 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_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, /*"taur_inflatable_belly" = FALSE,*/ "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) 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 @@ -869,8 +869,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Belly Visibility:[features["belly_visibility"]]" // GS13: tweak inflation description dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" - - + dat += "" + dat += "" + // GS13 EDIT TAUR BELLY START + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Taur Belly

" + dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" + if(features["has_taur_belly"]) + dat += "Color:
" + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" + else + dat += "#[features["taur_belly_color"]] Change
" + dat += "Belly Size: [features["taur_belly_size"]]" + dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" + dat += "Belly Shape: [features["taur_belly_shape"]]" + dat += "Belly Visibility:[features["taur_belly_visibility"]]" + //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" dat += "" dat += "" @@ -2840,7 +2855,40 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/n_vis = input(user, "Belly Visibility", "Character Preference") as null|anything in CONFIG_GET(str_list/safe_visibility_toggles) if(n_vis) features["belly_visibility"] = n_vis + //GS13 TAUR BELLY START + if("taur_belly_color") + var/new_bellycolor = input(user, "Belly Color:", "Character Preference", "#"+features["taur_belly_color"]) as color|null + if(new_bellycolor) + var/temp_hsv = RGBtoHSV(new_bellycolor) + if(new_bellycolor == "#000000") + features["taur_belly_color"] = pref_species.default_color + else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) + features["taur_belly_color"] = sanitize_hexcolor(new_bellycolor, 6) + else + to_chat(user,"Invalid color. Your color is not bright enough.") + if("taur_belly_size") //GS13 Edit here if we add more belly sprites + // GS13: Adjust sprite ranges in char setup + var/new_bellysize = input(user, "Belly size :\n(1-10)", "Character Preference") as num|null + if(new_bellysize) + features["taur_belly_size"] = clamp(round(new_bellysize), 1, 10) + + if("max_taur_belly_size") + var/new_bellymax = input(user, "Max belly fat size :\n(0-9)", "Character Preference") as num|null + if(new_bellymax) + features["max_taur_belly_size"] = clamp(round(new_bellymax), 0, 10) + + if("taur_belly_shape") //GS13 - belly shapes + var/new_shape + new_shape = input(user, "Belly Type", "Character Preference") as null|anything in GLOB.taur_belly_shapes_list + if(new_shape) + features["taur_belly_shape"] = new_shape + + if("taur_belly_visibility") + var/n_vis = input(user, "Belly Visibility", "Character Preference") as null|anything in CONFIG_GET(str_list/safe_visibility_toggles) + if(n_vis) + features["taur_belly_visibility"] = n_vis + //GS13 TAUR BELLY END if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null @@ -3157,6 +3205,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["has_belly"] = !features["has_belly"] if("inflatable_belly") features["inflatable_belly"] = !features["inflatable_belly"] + //GS13 TAUR BELLY EDIT + if("has_taur_belly") + features["has_taur_belly"] = !features["has_taur_belly"] if("widescreenpref") widescreenpref = !widescreenpref user.client.view_size.setDefault(getScreenSize(widescreenpref)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 4bf91a6e0f..326dab2f29 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -704,7 +704,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", "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, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "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, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "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, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, "taur_inflatable_belly" = FALSE, "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) S.cd = "/" if(!slot) @@ -901,6 +901,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_hide_belly"] >> features["hide_belly"] S["feature_inflatable_belly"] >> features["inflatable_belly"] + //GS13 EDIT TAUR BELLY features + S["feature_has_taur_belly"] >> features["has_taur_belly"] + S["feature_taur_belly_size"] >> features["taur_belly_size"] + S["feature_max_taur_belly_size"] >> features["max_taur_belly_size"] + S["feature_taur_belly_shape"] >> features["taur_belly_shape"] + S["feature_taur_belly_color"] >> features["taur_belly_color"] + S["feature_hide_taur_belly"] >> features["hide_taur_belly"] + //S["feature_inflatable_belly"] >> features["inflatable_belly"] + S["feature_taur_belly_visibility"] >> features["feature_taur_belly_visibility"] + // Flavor texts, Made into a standard. S["feature_flavor_text"] >> features["flavor_text"] S["feature_silicon_flavor_text"] >> features["silicon_flavor_text"] @@ -1086,6 +1096,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["butt_visibility"] = sanitize_inlist(features["butt_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) features["belly_visibility"] = sanitize_inlist(features["belly_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + //GS13 TAUR BELLY EDIT START + features["taur_belly_shape"] = sanitize_inlist(features["taur_belly_shape"], GLOB.taur_belly_shapes_list, TAUR_BELLY_SHAPE_DEF) + features["taur_belly_visibility"] = sanitize_inlist(features["taur_belly_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + //GS13 TAUR BELLY EDIT END + custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") additional_language = sanitize_inlist(additional_language, GLOB.roundstart_languages, "None") @@ -1324,6 +1339,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"]) WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences) + //GS13 TAUR BELLY EDIT START + WRITE_FILE(S["feature_has_taur_belly"], features["has_taur_belly"]) + WRITE_FILE(S["feature_taur_belly_size"], features["taur_belly_size"]) + WRITE_FILE(S["feature_max_taur_belly_size"], features["max_taur_belly_size"]) + WRITE_FILE(S["feature_taur_belly_shape"], features["taur_belly_shape"]) + WRITE_FILE(S["feature_taur_belly_color"], features["taur_belly_color"]) + WRITE_FILE(S["feature_hide_taur_belly"], features["hide_taur_belly"]) + //WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"]) + //GS13 TAUR BELLY EDIT START END + WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"]) WRITE_FILE(S["feature_color_scheme"], features["color_scheme"]) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index b6ebec95c3..43ab8461f1 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -129,6 +129,11 @@ var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") E.toggle_visibility(picked_visibility) + if(href_list["hidetaur belly"]) + var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") + var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") + X.toggle_visibility(picked_visibility) + if(href_list["hidebutt"]) var/obj/item/organ/genital/butt/A = usr.getorganslot(ORGAN_SLOT_BUTT) var/picked_visibility = input(usr, "Choose visibility", "Expose/Hide genitals", "Hidden by clothes") in list("Always visible", "Hidden by Undies", "Hidden by clothes", "Always hidden") diff --git a/tgstation.dme b/tgstation.dme index eacade08ce..5e428c8471 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4066,6 +4066,7 @@ #include "GainStation13\code\modules\mob\living\fullness.dm" #include "GainStation13\code\modules\mob\living\nutribot.dm" #include "GainStation13\code\modules\mob\living\species.dm" +#include "GainStation13\code\modules\mob\living\taur_belly.dm" #include "GainStation13\code\modules\mob\living\vore\eating\trasheat_lists.dm" #include "GainStation13\code\modules\mod\modules\modules_fat.dm" #include "GainStation13\code\modules\power\energy_harvester.dm" From 853e5b1b6850598313821359052fd64c74042b57 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 05:21:11 +0100 Subject: [PATCH 02/31] Update neutral.dm --- code/datums/traits/neutral.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 064febb2d2..b6d964dfaf 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -189,3 +189,14 @@ /datum/quirk/dullahan/post_add() quirk_holder.AddComponent(/datum/component/dullahan) + +// GS13 EDIT START +/datum/quirk/biofuel + name = "Biofuel Processor" + desc = "Your robotic body is equipped to eat and digest food the same way organic crew can." + value = 0 + mob_trait = TRAIT_BIOFUEL + +/datum/quirk/biofuel/post_add() + REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD) +// GS13 EDIT END From 70623955db7c424879857feb3bd3d8d49d576781 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 05:22:02 +0100 Subject: [PATCH 03/31] Update traits.dm --- code/__DEFINES/traits.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 98d5205a20..7c55fe07fb 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -289,6 +289,7 @@ #define TRAIT_METAL_CRUNCHER "metal_cruncher" #define TRAIT_WATER_SPONGE "water_sponge" #define TRAIT_FATROUSAL "fatrousal" +#define TRAIT_BIOFUEL "biofuel_processor" //GS13 Port #define TRAIT_HEADPAT_SLUT "headpat_slut" From ca31fc413faf213b8b4afe690d118b5bc2c0503d Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 05:55:25 +0100 Subject: [PATCH 04/31] Update neutral.dm --- code/datums/traits/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index b6d964dfaf..4db452d59c 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -198,5 +198,5 @@ mob_trait = TRAIT_BIOFUEL /datum/quirk/biofuel/post_add() - REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD) + REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, TRAIT_GENERIC) //no idea how trait source works // GS13 EDIT END From d70b94efbf7134368f8fcc2ddd76689554b7238d Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 06:05:59 +0100 Subject: [PATCH 05/31] Update neutral.dm --- code/datums/traits/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 4db452d59c..5ce4a7b30d 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -198,5 +198,5 @@ mob_trait = TRAIT_BIOFUEL /datum/quirk/biofuel/post_add() - REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, TRAIT_GENERIC) //no idea how trait source works + REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, TRAIT_SPECIES) // GS13 EDIT END From 86a696dccf9ca09e3d6600d3e7c8b6146a720223 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 06:08:21 +0100 Subject: [PATCH 06/31] Update neutral.dm --- code/datums/traits/neutral.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 5ce4a7b30d..8863e601b2 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -198,5 +198,5 @@ mob_trait = TRAIT_BIOFUEL /datum/quirk/biofuel/post_add() - REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, TRAIT_SPECIES) + REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, SPECIES_TRAIT) // GS13 EDIT END From f60cbd00c0e051bd0933ac29608a9f81dd91ff40 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 06:28:46 +0100 Subject: [PATCH 07/31] Update reagents.dm --- code/__DEFINES/reagents.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 2b0f51f230..3e8f6081bd 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -77,6 +77,8 @@ #define REAGENT_SPLITRETAINVOL (1<<7) //Retains initial volume of chem when splitting #define REAGENT_ORGANIC_PROCESS (1<<8) //Can be processed by organic carbons - will otherwise slowly dissipate #define REAGENT_ROBOTIC_PROCESS (1<<9) //Can be processed by robotic carbons - will otherwise slowly dissipate +//GS13 edit +#define REAGENT_BIOFUEL_PROCESS (1<<10) //Can be processed by robotic carbons with biofuel processor trait - should be on nutriment-type reagents and fatchems only #define REAGENT_ALL_PROCESS (REAGENT_ORGANIC_PROCESS | REAGENT_ROBOTIC_PROCESS) //expand this if you for some reason add more process flags From 0ab306c463d5fbba24fa7c79cf96b6343ee72581 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 06:37:38 +0100 Subject: [PATCH 08/31] Update reagents.dm --- code/__HELPERS/reagents.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/__HELPERS/reagents.dm b/code/__HELPERS/reagents.dm index 0ecf82b191..8c8bc75cd2 100644 --- a/code/__HELPERS/reagents.dm +++ b/code/__HELPERS/reagents.dm @@ -106,4 +106,8 @@ /proc/is_reagent_processing_invalid(datum/reagent/R, mob/living/owner) if(!R || !owner) return TRUE + //GS13 edit start + if(HAS_TRAIT(owner, TRAIT_BIOFUEL) && (R.chemical_flags & REAGENT_BIOFUEL_PROCESS)) + return FALSE + //GS13 edit end return ((HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM) && !(R.chemical_flags & REAGENT_ROBOTIC_PROCESS)) || (!HAS_TRAIT(owner, TRAIT_ROBOTIC_ORGANISM) && !(R.chemical_flags & REAGENT_ORGANIC_PROCESS))) From eb32d8f49b9657b6d39e8caebebe80ce7f7a0f9f Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 07:01:58 +0100 Subject: [PATCH 09/31] Update food_reagents.dm --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index d156f3e36b..e8149946b7 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -12,6 +12,7 @@ taste_description = "generic food" taste_mult = 4 value = REAGENT_VALUE_VERY_COMMON + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS // GS13 edit; lets robots with the biofuel trait process foodchems var/nutriment_factor = 1 * REAGENTS_METABOLISM var/max_nutrition = INFINITY var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes From 05e5f39e9c29d8146105b56fe9d034c62c613261 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 07:08:07 +0100 Subject: [PATCH 10/31] Update consumable_reagents.dm --- .../reagents/chemistry/reagents/consumable_reagents.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm index 9cef5cb2ab..8c7901bea2 100644 --- a/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm +++ b/GainStation13/code/modules/reagents/chemistry/reagents/consumable_reagents.dm @@ -8,6 +8,7 @@ reagent_state = LIQUID color = "#e2e1b1" metabolization_rate = 0.5 * REAGENTS_METABOLISM + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS /datum/reagent/consumable/lipoifier/on_mob_life(mob/living/carbon/M) M.adjust_fatness(15, FATTENING_TYPE_CHEM) @@ -22,6 +23,7 @@ // GS13 tweak metabolization_rate = 0.7 * REAGENTS_METABOLISM overdose_threshold = 105 + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS /datum/reagent/medicine/lipolicide/overdose_process(mob/living/carbon/C) . = ..() @@ -51,6 +53,7 @@ reagent_state = LIQUID taste_description = "fizziness" metabolization_rate = 2 * REAGENTS_METABOLISM + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS /datum/reagent/consumable/fizulphite/on_mob_life(mob/living/carbon/M) if(M && M?.client?.prefs.weight_gain_chems) @@ -69,6 +72,7 @@ reagent_state = LIQUID taste_description = "smoothness" metabolization_rate = 0.8 * REAGENTS_METABOLISM + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS /datum/reagent/consumable/extilphite/on_mob_life(mob/living/carbon/M) if(M && M?.client?.prefs.weight_gain_chems) @@ -91,6 +95,7 @@ reagent_state = LIQUID taste_description = "sulfury sweetness" metabolization_rate = 0.5 * REAGENTS_METABOLISM //Done by Zestyspy, Jan 2023 + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS /datum/reagent/consumable/flatulose/on_mob_life(mob/living/carbon/M) if(M && M?.client?.prefs.weight_gain_chems) @@ -136,6 +141,7 @@ taste_description = "blueberry pie" var/no_mob_color = FALSE value = 10 //it sells. Make that berry factory + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS //screw it let robots have juice why not /datum/reagent/blueberry_juice/on_mob_life(mob/living/carbon/M) if(M?.client) From b61403fe3a26d37287561fbe7733d6143211c474 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 07:38:54 +0100 Subject: [PATCH 11/31] Update bitfields.dm --- code/_globalvars/bitfields.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index c66823050b..dac68a6cca 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -100,6 +100,7 @@ DEFINE_BITFIELD(chemical_flags, list( "REAGENT_ONMOBMERGE" = REAGENT_ONMOBMERGE, "REAGENT_ORGANIC_PROCESS" = REAGENT_ORGANIC_PROCESS, "REAGENT_ROBOTIC_PROCESS" = REAGENT_ROBOTIC_PROCESS, + "REAGENT_BIOFUEL_PROCESS" = REAGENT_BIOFUEL_PROCESS, "REAGENT_SNEAKYNAME" = REAGENT_SNEAKYNAME, "REAGENT_SPLITRETAINVOL" = REAGENT_SPLITRETAINVOL, )) From 48d4516a4869f5b60c9a3b88012a44441f207231 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 08:11:07 +0100 Subject: [PATCH 12/31] Update fermi_fat.dm --- .../code/modules/reagents/chemistry/reagents/fermi_fat.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm index 2e4968752a..068adfc5b6 100644 --- a/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm +++ b/GainStation13/code/modules/reagents/chemistry/reagents/fermi_fat.dm @@ -8,6 +8,7 @@ overdose_threshold = 50 metabolization_rate = REAGENTS_METABOLISM / 4 can_synth = FALSE //DO NOT MAKE THIS SNYTHESIZABLE, THESE CHEMS ARE SUPPOSED TO NOT BE USED COMMONLY + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS overdose_threshold = 50 addiction_threshold = 100 @@ -150,6 +151,7 @@ pH = 7 metabolization_rate = REAGENTS_METABOLISM / 4 can_synth = FALSE + chemical_flags = REAGENT_ORGANIC_PROCESS | REAGENT_BIOFUEL_PROCESS overdose_threshold = 50 From b300816edc680dcf015b82260a2ac5b4e6d5eaf5 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sat, 12 Apr 2025 22:56:30 +0100 Subject: [PATCH 13/31] APC nutrition tweaks --- code/modules/surgery/organs/augments_arms.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index a99b6a926e..646adc8d52 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -378,7 +378,7 @@ A.cell.use(A.cell.charge) to_chat(H, "You siphon off as much as [A] can spare.") break - if(H.nutrition > NUTRITION_LEVEL_WELL_FED) + if(H.nutrition > NUTRITION_LEVEL_FAT) //GS13 edit; I considered uncapped but it drains APCs and fattens stupid fast. could be fun uncapped but speed would need tweaking to_chat(H, "You are now fully charged.") break in_use = FALSE @@ -397,7 +397,7 @@ C.use(siphoned_charge) do_sparks(1, FALSE, C) H.adjust_nutrition(siphoned_charge / 100) //Less efficient on a pure power basis than APC recharge. Still a very viable way of gaining nutrition. (100 nutrition / base 10k cell) - if(H.nutrition > NUTRITION_LEVEL_WELL_FED) + if(H.nutrition > NUTRITION_LEVEL_FAT) //GS13 edit, as above to_chat(H, "You are now fully charged.") break in_use = FALSE From d9be24df01d1f596d4c043bec4aa2bedbe069088 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sun, 13 Apr 2025 08:54:32 +0100 Subject: [PATCH 14/31] Update neutral.dm --- code/datums/traits/neutral.dm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 8863e601b2..064febb2d2 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -189,14 +189,3 @@ /datum/quirk/dullahan/post_add() quirk_holder.AddComponent(/datum/component/dullahan) - -// GS13 EDIT START -/datum/quirk/biofuel - name = "Biofuel Processor" - desc = "Your robotic body is equipped to eat and digest food the same way organic crew can." - value = 0 - mob_trait = TRAIT_BIOFUEL - -/datum/quirk/biofuel/post_add() - REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, SPECIES_TRAIT) -// GS13 EDIT END From 87a507c3059dfe4f680c450dbb97fbd96a58b4b1 Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sun, 13 Apr 2025 08:56:54 +0100 Subject: [PATCH 15/31] Update traits.dm --- GainStation13/code/datums/traits.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/GainStation13/code/datums/traits.dm b/GainStation13/code/datums/traits.dm index 89484a7b25..58fb96f112 100644 --- a/GainStation13/code/datums/traits.dm +++ b/GainStation13/code/datums/traits.dm @@ -148,3 +148,12 @@ species.liked_food |= MEAT else species.disliked_food &= ~MEAT + +/datum/quirk/biofuel + name = "Biofuel Processor" + desc = "Your robotic body is equipped to eat and digest food the same way organic crew can." + value = 0 + mob_trait = TRAIT_BIOFUEL + +/datum/quirk/biofuel/post_add() + REMOVE_TRAIT(quirk_holder, TRAIT_NO_PROCESS_FOOD, SPECIES_TRAIT) From b3057ba2cfab05c857bd45b798e817cd3942730f Mon Sep 17 00:00:00 2001 From: nullspace-industries <57872710+nullspace-industries@users.noreply.github.com> Date: Sun, 13 Apr 2025 09:51:41 +0100 Subject: [PATCH 16/31] New biphasic system for IPC overcharging --- code/modules/surgery/organs/augments_arms.dm | 34 ++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 646adc8d52..c4a0117b15 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -360,6 +360,12 @@ /obj/item/apc_powercord/proc/apc_powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H) H.visible_message("[H] inserts a power connector into [A].", "You begin to draw power from [A].") + + //GS13 edit + var/overcharge = FALSE + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + overcharge = TRUE + while(do_after(H, 10, target = A)) if(loc != H) to_chat(H, "You must keep your connector out while charging!") @@ -378,14 +384,25 @@ A.cell.use(A.cell.charge) to_chat(H, "You siphon off as much as [A] can spare.") break - if(H.nutrition > NUTRITION_LEVEL_FAT) //GS13 edit; I considered uncapped but it drains APCs and fattens stupid fast. could be fun uncapped but speed would need tweaking - to_chat(H, "You are now fully charged.") - break + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + if(!overcharge) //GS13 edit + to_chat(H, "You are now fully charged.") + break + else + if(H.nutrition >= NUTRITION_LEVEL_FAT) + to_chat(H, "You've packed as much extra power into your battery as it can handle.") + break in_use = FALSE H.visible_message("[H] unplugs from [A].", "You unplug from [A].") /obj/item/apc_powercord/proc/cell_powerdraw_loop(obj/item/stock_parts/cell/C, mob/living/carbon/human/H) H.visible_message("[H] connects a power cord to [C]", "You begin to draw power from [C].") + + //GS13 edit + var/overcharge = FALSE + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + overcharge = TRUE + while(do_after(H, 10, target = C)) if(loc != H) to_chat(H, "You must keep your connector out while charging!") @@ -397,8 +414,13 @@ C.use(siphoned_charge) do_sparks(1, FALSE, C) H.adjust_nutrition(siphoned_charge / 100) //Less efficient on a pure power basis than APC recharge. Still a very viable way of gaining nutrition. (100 nutrition / base 10k cell) - if(H.nutrition > NUTRITION_LEVEL_FAT) //GS13 edit, as above - to_chat(H, "You are now fully charged.") - break + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + if(!overcharge) //GS13 edit + to_chat(H, "You are now fully charged.") + break + else + if(H.nutrition >= NUTRITION_LEVEL_FAT) + to_chat(H, "You've packed as much extra power into your battery as it can handle.") + break in_use = FALSE H.visible_message("[H] disconnects [src] from [C].", "You disconnect from [C].") From ec70a693a51da8d845e40b99feef6e5a1b6bcc9f Mon Sep 17 00:00:00 2001 From: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com> Date: Sun, 13 Apr 2025 14:47:07 -0400 Subject: [PATCH 17/31] Update code/modules/surgery/organs/augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index c4a0117b15..36c348bca2 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -414,13 +414,15 @@ C.use(siphoned_charge) do_sparks(1, FALSE, C) H.adjust_nutrition(siphoned_charge / 100) //Less efficient on a pure power basis than APC recharge. Still a very viable way of gaining nutrition. (100 nutrition / base 10k cell) + // GS13 EDIT START if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) - if(!overcharge) //GS13 edit + if(!overcharge) to_chat(H, "You are now fully charged.") break else if(H.nutrition >= NUTRITION_LEVEL_FAT) to_chat(H, "You've packed as much extra power into your battery as it can handle.") break + //GS13 EDIT END in_use = FALSE H.visible_message("[H] disconnects [src] from [C].", "You disconnect from [C].") From 590ee3294f5714138bf4b24d17fc779702cb3bf8 Mon Sep 17 00:00:00 2001 From: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com> Date: Sun, 13 Apr 2025 14:47:11 -0400 Subject: [PATCH 18/31] Update code/modules/surgery/organs/augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 36c348bca2..61895f78e5 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -398,10 +398,11 @@ /obj/item/apc_powercord/proc/cell_powerdraw_loop(obj/item/stock_parts/cell/C, mob/living/carbon/human/H) H.visible_message("[H] connects a power cord to [C]", "You begin to draw power from [C].") - //GS13 edit + //GS13 EDIT START var/overcharge = FALSE if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) overcharge = TRUE + //GS13 EDIT END while(do_after(H, 10, target = C)) if(loc != H) From 8e87449d404b8d5755b3b035221cd75d12346ba0 Mon Sep 17 00:00:00 2001 From: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com> Date: Sun, 13 Apr 2025 14:47:15 -0400 Subject: [PATCH 19/31] Update code/modules/surgery/organs/augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 61895f78e5..26e01d36a8 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -384,7 +384,8 @@ A.cell.use(A.cell.charge) to_chat(H, "You siphon off as much as [A] can spare.") break - if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + //GS13 EDIT START + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) if(!overcharge) //GS13 edit to_chat(H, "You are now fully charged.") break @@ -392,6 +393,7 @@ if(H.nutrition >= NUTRITION_LEVEL_FAT) to_chat(H, "You've packed as much extra power into your battery as it can handle.") break + //GS13 EDIT END in_use = FALSE H.visible_message("[H] unplugs from [A].", "You unplug from [A].") From 667143c887056ec070ac565cfa186f11b2426e5a Mon Sep 17 00:00:00 2001 From: sheepishgoat <100518708+sheepishgoat@users.noreply.github.com> Date: Sun, 13 Apr 2025 14:47:21 -0400 Subject: [PATCH 20/31] Update code/modules/surgery/organs/augments_arms.dm --- code/modules/surgery/organs/augments_arms.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 26e01d36a8..f75fb72272 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -361,10 +361,11 @@ /obj/item/apc_powercord/proc/apc_powerdraw_loop(obj/machinery/power/apc/A, mob/living/carbon/human/H) H.visible_message("[H] inserts a power connector into [A].", "You begin to draw power from [A].") - //GS13 edit + //GS13 EDIT START var/overcharge = FALSE if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) overcharge = TRUE + //GS13 EDIT END while(do_after(H, 10, target = A)) if(loc != H) From 70cd8397a499cef7be064633e8b51ec080396121 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 15 Apr 2025 03:41:09 +0300 Subject: [PATCH 21/31] Taur belly edit Taurs belly option shows only when tauric body is selected --- code/modules/client/preferences.dm | 33 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7e64fe5ec7..00d4f3eeca 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -872,22 +872,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" dat += "" // GS13 EDIT TAUR BELLY START - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Taur Belly

" - dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" - if(features["has_taur_belly"]) - dat += "Color:
" - if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) - dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" - else - dat += "#[features["taur_belly_color"]] Change
" - dat += "Belly Size: [features["taur_belly_size"]]" - dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" - dat += "Belly Shape: [features["taur_belly_shape"]]" - dat += "Belly Visibility:[features["taur_belly_visibility"]]" - //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" - dat += "" - dat += "" + if(features["taur"] != "None") + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

Taur Belly

" + dat += "[features["has_taur_belly"] == TRUE ? "Yes" : "No"]" + if(features["has_taur_belly"]) + dat += "Color:
" + if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) + dat += "[SKINTONE2HEX(skin_tone)](Skin tone overriding)
" + else + dat += "#[features["taur_belly_color"]] Change
" + dat += "Belly Size: [features["taur_belly_size"]]" + dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" + dat += "Belly Shape: [features["taur_belly_shape"]]" + dat += "Belly Visibility:[features["taur_belly_visibility"]]" + //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" + dat += "" + dat += "" //Markings if(MARKINGS_CHAR_TAB) From 0dab092cab53f9ec9653a4d6cbf1e2075d312db5 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 22 Apr 2025 03:40:18 +0300 Subject: [PATCH 22/31] Taur belly fixes --- .../code/modules/mob/living/taur_belly.dm | 4 +-- code/__DEFINES/citadel_defines.dm | 4 +-- code/__HELPERS/mobs.dm | 2 +- code/modules/client/preferences.dm | 9 ++++-- code/modules/client/preferences_savefile.dm | 4 +-- .../code/modules/arousal/arousalhud.dm | 28 +++++++++++++++++++ 6 files changed, 42 insertions(+), 9 deletions(-) diff --git a/GainStation13/code/modules/mob/living/taur_belly.dm b/GainStation13/code/modules/mob/living/taur_belly.dm index 3ad4c92a90..d2eb5afbe0 100644 --- a/GainStation13/code/modules/mob/living/taur_belly.dm +++ b/GainStation13/code/modules/mob/living/taur_belly.dm @@ -13,7 +13,7 @@ genital_flags = UPDATE_OWNER_APPEARANCE|GENITAL_CAN_TAUR masturbation_verb = "massage" var/sent_full_message = TRUE //defaults to 1 since they're full to start - //var/inflatable = FALSE //For inflation connoisseurs not implemented yet + var/inflatable = FALSE var/size_cached = 0 var/prev_size = 0 layer_index = TAUR_BELLY_LAYER_INDEX @@ -71,7 +71,7 @@ max_size = D.features["max_taur_belly_size"] starting_size = D.features["belly_size"] shape = D.features["taur_belly_shape"] - //inflatable = D.features["inflatable_belly"] + inflatable = D.features["taur_inflatable_belly"] toggle_visibility(D.features["taur_belly_visibility"], FALSE) diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 42fab39ca4..d8fbff214e 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -9,8 +9,8 @@ #define BUTT_LAYER_INDEX 1 #define VAGINA_LAYER_INDEX 2 #define TESTICLES_LAYER_INDEX 3 -#define BELLY_LAYER_INDEX 4 -#define TAUR_BELLY_LAYER_INDEX 5 +#define TAUR_BELLY_LAYER_INDEX 4 +#define BELLY_LAYER_INDEX 5 #define GENITAL_LAYER_INDEX 6 #define PENIS_LAYER_INDEX 7 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index d72ff09f1a..48034a8f23 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -229,7 +229,7 @@ "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, "hide_taur_belly" = FALSE, - //"inflatable_belly" = FALSE, + "taur_inflatable_belly" = FALSE, "taur_belly_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES, // GS13 EDIT END diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 00d4f3eeca..0d343e2359 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -134,7 +134,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", "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_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, /*"taur_inflatable_belly" = FALSE,*/ "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) + 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_fluid" = /datum/reagent/consumable/milk, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "has_butt" = FALSE, "butt_color" = "ffffff", "butt_size" = BUTT_SIZE_DEF, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "butt_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, "belly_size" = BELLY_SIZE_DEF, "belly_shape" = DEF_BELLY_SHAPE, "inflatable_belly" = FALSE, "belly_visibility" = GEN_VISIBLE_NO_UNDIES, "taur_belly_size" = TAUR_BELLY_SIZE_DEF, "taur_belly_shape" = TAUR_BELLY_SHAPE_DEF, "taur_inflatable_belly" = FALSE, "taur_belly_visibility" = GEN_VISIBLE_NO_UNDIES) 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 @@ -886,10 +886,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Max Fat Belly Size: [features["max_taur_belly_size"]]" dat += "Belly Shape: [features["taur_belly_shape"]]" dat += "Belly Visibility:[features["taur_belly_visibility"]]" - //dat += "Inflation (climax with and manual belly size change in arousal menu):[features["inflatable_belly"] == 1 ? "Yes" : "No"]" + dat += "Inflation (climax with and manual belly size change in arousal menu):[features["taur_inflatable_belly"] == 1 ? "Yes" : "No"]" dat += "" dat += "" + //Markings if(MARKINGS_CHAR_TAB) var/iterated_markings = 0 @@ -2560,6 +2561,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["tail_human"] = "None" features["tail_lizard"] = "None" features["arachnid_spinneret"] = "None" + else + features["has_taur_belly"] = FALSE if("ears") var/list/snowflake_ears_list = list() @@ -3209,6 +3212,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) //GS13 TAUR BELLY EDIT if("has_taur_belly") features["has_taur_belly"] = !features["has_taur_belly"] + if("taur_inflatable_belly") + features["taur_inflatable_belly"] = !features["taur_inflatable_belly"] if("widescreenpref") widescreenpref = !widescreenpref user.client.view_size.setDefault(getScreenSize(widescreenpref)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 326dab2f29..5951ea8487 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -908,7 +908,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_taur_belly_shape"] >> features["taur_belly_shape"] S["feature_taur_belly_color"] >> features["taur_belly_color"] S["feature_hide_taur_belly"] >> features["hide_taur_belly"] - //S["feature_inflatable_belly"] >> features["inflatable_belly"] + S["feature_taur_inflatable_belly"] >> features["taur_inflatable_belly"] S["feature_taur_belly_visibility"] >> features["feature_taur_belly_visibility"] // Flavor texts, Made into a standard. @@ -1346,7 +1346,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_taur_belly_shape"], features["taur_belly_shape"]) WRITE_FILE(S["feature_taur_belly_color"], features["taur_belly_color"]) WRITE_FILE(S["feature_hide_taur_belly"], features["hide_taur_belly"]) - //WRITE_FILE(S["feature_inflatable_belly"], features["inflatable_belly"]) + WRITE_FILE(S["feature_taur_inflatable_belly"], features["taur_inflatable_belly"]) //GS13 TAUR BELLY EDIT START END WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"]) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index 43ab8461f1..7cc65e8b64 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -55,6 +55,14 @@ dat += "(Shrink your belly down a size)
" dat += "Increase belly size" dat += "(Bloat your belly up a size)
" + //GS13 EDIT TAUR BELLY + var/obj/item/organ/genital/taur_belly/TBelly = user.getorganslot("taur_belly") + if(TBelly) + if(TBelly.inflatable) + dat += "Decrease taur belly size" + dat += "(Shrink your taur belly down a size)
" + dat += "Increase taur belly size" + dat += "(Bloat your taur belly up a size)
" if(user.pulling) dat += "Climax over [user.pulling]" //you can cum on objects if you really want... @@ -243,6 +251,26 @@ else to_chat(usr, "Your belly is already at the maximum size! ") +//GS13 EDIT TAUR BELLY START + if(href_list["taur_shrink_belly"]) + var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") + if(X.size > 0) + to_chat(usr, "You feel your taur belly diminish.") + X.size -= 1 + H.update_genitals() + else + to_chat(usr, "Your taur belly is already at the minimum size! ") + + if(href_list["taur_inflate_belly"]) + var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") + if(X.size < 11) + to_chat(usr, "You feel your taur belly bloat out..") + X.size += 1 + H.update_genitals() + else + to_chat(usr, "Your taur belly is already at the maximum size! ") +//GS13 EDIT TAUR BELLY END + if(href_list["removeequipmentpenis"]) var/obj/item/organ/genital/penis/O = usr.getorganslot("penis") var/obj/item/I = O.equipment From 17241374c107c3f066a5e91b52ebbbcffe610a37 Mon Sep 17 00:00:00 2001 From: Belaya Date: Tue, 22 Apr 2025 17:20:06 -0500 Subject: [PATCH 23/31] Psychology job and room access level --- .../code/game/objects/effects/landmarks.dm | 3 ++ .../game/objects/items/storage/firstaid.dm | 24 ++++++++++ .../closets/secure/psychology.dm | 17 +++++++ .../modules/jobs/job_types/psychologist.dm | 43 ++++++++++++++++++ .../reagents/reagent_containers/pill.dm | 17 +++++++ code/__DEFINES/access.dm | 1 + code/__DEFINES/jobs.dm | 18 ++++---- .../modules/events/wizard/departmentrevolt.dm | 2 +- code/modules/jobs/access.dm | 10 ++-- code/modules/jobs/job_titles.dm | 3 ++ .../jobs/job_types/chief_medical_officer.dm | 4 +- .../jobs/job_types/head_of_personnel.dm | 4 +- code/modules/jobs/jobs.dm | 3 +- icons/mob/hud.dmi | Bin 22646 -> 22697 bytes strings/ion_laws.json | 1 + tgstation.dme | 5 ++ 16 files changed, 137 insertions(+), 18 deletions(-) create mode 100644 GainStation13/code/game/objects/effects/landmarks.dm create mode 100644 GainStation13/code/game/objects/items/storage/firstaid.dm create mode 100644 GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm create mode 100644 GainStation13/code/modules/jobs/job_types/psychologist.dm create mode 100644 GainStation13/code/modules/reagents/reagent_containers/pill.dm diff --git a/GainStation13/code/game/objects/effects/landmarks.dm b/GainStation13/code/game/objects/effects/landmarks.dm new file mode 100644 index 0000000000..6dce6cde1f --- /dev/null +++ b/GainStation13/code/game/objects/effects/landmarks.dm @@ -0,0 +1,3 @@ +/obj/effect/landmark/start/psychologist //GS13: Psychology job + name = "Psychologist" + icon_state = "Medical Doctor" diff --git a/GainStation13/code/game/objects/items/storage/firstaid.dm b/GainStation13/code/game/objects/items/storage/firstaid.dm new file mode 100644 index 0000000000..9198debf2c --- /dev/null +++ b/GainStation13/code/game/objects/items/storage/firstaid.dm @@ -0,0 +1,24 @@ +//Psych Pillbottles +/obj/item/storage/pill_bottle/happinesspsych + name = "happiness pill bottle" + desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction." + +/obj/item/storage/pill_bottle/happinesspsych/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/happinesspsych(src) + +/obj/item/storage/pill_bottle/lsdpsych + name = "mindbreaker toxin pill bottle" + desc = "!FOR THERAPEUTIC USE ONLY! Contains pills used to alleviate the symptoms of Reality Dissociation Syndrome." + +/obj/item/storage/pill_bottle/lsdpsych/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/lsdpsych(src) + +/obj/item/storage/pill_bottle/paxpsych + name = "pacification pill" + desc = "Contains pills used to temporarily pacify patients that are deemed a harm to themselves or others." + +/obj/item/storage/pill_bottle/paxpsych/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/paxpsych(src) diff --git a/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm b/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm new file mode 100644 index 0000000000..aeb8125a0f --- /dev/null +++ b/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm @@ -0,0 +1,17 @@ +/obj/structure/closet/secure_closet/psychology + name = "psychology locker" + req_access = list(ACCESS_PSYCH) + icon_state = "cabinet" + +/obj/structure/closet/secure_closet/psychology/PopulateContents() + . = ..() + new /obj/item/clothing/under/suit/black(src) + new /obj/item/clothing/under/suit/black/skirt(src) + new /obj/item/clothing/shoes/laceup/(src) + new /obj/item/storage/backpack/medic(src) + new /obj/item/radio/headset/headset_med(src) + new /obj/item/clipboard(src) + new /obj/item/clothing/suit/straight_jacket(src) + new /obj/item/clothing/ears/earmuffs(src) + new /obj/item/clothing/mask/muzzle(src) + new /obj/item/clothing/glasses/sunglasses/blindfold(src) diff --git a/GainStation13/code/modules/jobs/job_types/psychologist.dm b/GainStation13/code/modules/jobs/job_types/psychologist.dm new file mode 100644 index 0000000000..d083b29f45 --- /dev/null +++ b/GainStation13/code/modules/jobs/job_types/psychologist.dm @@ -0,0 +1,43 @@ +/datum/job/psychologist + title = "Psychologist" + flag = MED_PSYCH + department_head = list("Chief Medical Officer", "Head of Personnel") + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + minimal_player_age = 1 + supervisors = "the chief medical officer, and head of personnel" + selection_color = "#74b5e0" + exp_requirements = 240 + exp_type = EXP_TYPE_CREW + + outfit = /datum/outfit/job/psychologist + departments = DEPARTMENT_BITFLAG_MEDICAL + + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH) + minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH) + paycheck = PAYCHECK_MEDIUM + paycheck_department = ACCOUNT_MED + bounty_types = CIV_JOB_MED + + display_order = JOB_DISPLAY_ORDER_PSYCH + threat = 0.5 + +/datum/outfit/job/psychologist + name = "Psychologist" + jobtype = /datum/job/psychologist + + belt = /obj/item/pda/medical + ears = /obj/item/radio/headset/headset_med + uniform = /obj/item/clothing/under/suit/black + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/clipboard + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + + backpack_contents = list(/obj/item/storage/pill_bottle/mannitol, /obj/item/storage/pill_bottle/psicodine, /obj/item/storage/pill_bottle/paxpsych, /obj/item/storage/pill_bottle/happinesspsych, /obj/item/storage/pill_bottle/lsdpsych) + + chameleon_extras = /obj/item/gun/syringe diff --git a/GainStation13/code/modules/reagents/reagent_containers/pill.dm b/GainStation13/code/modules/reagents/reagent_containers/pill.dm new file mode 100644 index 0000000000..ac2ca71f0a --- /dev/null +++ b/GainStation13/code/modules/reagents/reagent_containers/pill.dm @@ -0,0 +1,17 @@ +/obj/item/reagent_containers/pill/lsdpsych + name = "antipsychotic pill" + desc = "Talk to your healthcare provider immediately if hallucinations worsen or new hallucinations emerge." + icon_state = "pill14" + list_reagents = list(/datum/reagent/toxin/mindbreaker = 5) + +/obj/item/reagent_containers/pill/happinesspsych + name = "mood stabilizer pill" + desc = "Used to temporarily alleviate anxiety and depression, take only as prescribed." + icon_state = "pill_happy" + list_reagents = list(/datum/reagent/drug/happiness = 5) + +/obj/item/reagent_containers/pill/paxpsych + name = "pacification pill" + desc = "Used to temporarily suppress violent, homicidal, or suicidal behavior in patients." + icon_state = "pill12" + list_reagents = list(/datum/reagent/pax = 5) diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index c2021a86f2..abc0670445 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -66,6 +66,7 @@ #define ACCESS_CLONING 68 //Cloning room and clone pod ejection #define ACCESS_ENTER_GENPOP 69 #define ACCESS_LEAVE_GENPOP 70 +#define ACCESS_PSYCH 71 //Psychology room doors //BEGIN CENTCOM ACCESS /*Should leave plenty of room if we need to add more access levels. diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 86383a50b2..75433d92ad 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -28,6 +28,7 @@ #define PARAMEDIC (1<<7) #define JR_DOCTOR (1<<8) #define JR_SCIENTIST (1<<9) +#define MED_PSYCH (1<<10) #define CIVILIAN (1<<2) @@ -87,14 +88,15 @@ #define JOB_DISPLAY_ORDER_CHEMIST 24 #define JOB_DISPLAY_ORDER_VIROLOGIST 25 #define JOB_DISPLAY_ORDER_GENETICIST 26 -#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 27 -#define JOB_DISPLAY_ORDER_SCIENTIST 28 -#define JOB_DISPLAY_ORDER_ROBOTICIST 29 -#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 30 -#define JOB_DISPLAY_ORDER_WARDEN 31 -#define JOB_DISPLAY_ORDER_DETECTIVE 32 -#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 33 -#define JOB_DISPLAY_ORDER_PRISONER 34 +#define JOB_DISPLAY_ORDER_PSYCH 27 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 28 +#define JOB_DISPLAY_ORDER_SCIENTIST 29 +#define JOB_DISPLAY_ORDER_ROBOTICIST 30 +#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 31 +#define JOB_DISPLAY_ORDER_WARDEN 32 +#define JOB_DISPLAY_ORDER_DETECTIVE 33 +#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 34 +#define JOB_DISPLAY_ORDER_PRISONER 35 #define DEPARTMENT_UNASSIGNED "No department assigned" diff --git a/code/modules/events/wizard/departmentrevolt.dm b/code/modules/events/wizard/departmentrevolt.dm index 20f361b775..cf5e1908d4 100644 --- a/code/modules/events/wizard/departmentrevolt.dm +++ b/code/modules/events/wizard/departmentrevolt.dm @@ -20,7 +20,7 @@ jobs_to_revolt = list("Assistant") nation_name = pick("Assa", "Mainte", "Tunnel", "Gris", "Grey", "Liath", "Grigio", "Ass", "Assi") if("white") - jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Virologist") + jobs_to_revolt = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Psychologist", "Virologist") //GS13 edit: Psychologist job nation_name = pick("Mede", "Healtha", "Recova", "Chemi", "Geneti", "Viro", "Psych") if("yellow") jobs_to_revolt = list("Chief Engineer", "Station Engineer", "Atmospheric Technician") diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 233802f3af..cc297cfefa 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -134,7 +134,7 @@ ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY, ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS, ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING) + ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_PSYCH) /proc/get_all_centcom_access() return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN) @@ -162,7 +162,7 @@ if(2) //security return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,) if(3) //medbay - return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO) + return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH) if(4) //research return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK) if(5) //engineering and maintenance @@ -329,6 +329,8 @@ return "Network Access" if(ACCESS_CLONING) return "Cloning Room" + if(ACCESS_PSYCH) + return "Psychology Office" //Psychologist role /proc/get_centcom_access_desc(A) switch(A) @@ -354,8 +356,8 @@ /proc/get_all_jobs() return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician", "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern", - "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", "Medical Resident", - "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Security Cadet", "Prisoner") //Rookie roles + "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic", "Psychologist", "Medical Resident", + "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Security Cadet", "Prisoner") //Rookie + Psychologist roles /proc/get_all_job_icons() //For all existing HUD icons return get_all_jobs() + list("Prisoner") diff --git a/code/modules/jobs/job_titles.dm b/code/modules/jobs/job_titles.dm index 4ff3bdaee2..3ceb070c44 100644 --- a/code/modules/jobs/job_titles.dm +++ b/code/modules/jobs/job_titles.dm @@ -76,6 +76,9 @@ /datum/job/paramedic alt_titles = list ("Emergency Medical Technician", "Search and Rescue Technician", "Trauma Team Responder") +/datum/job/psychologist + alt_titles = list("Therapist", "Psychiatrist") + /datum/job/junior_doctor alt_titles = list("Medical Student", "Fellow", "Trainee Pharmacy Technician", "Trainee Pharmacist", "Junior Pathologist") diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 3472052b53..2ab23b8753 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -23,10 +23,10 @@ access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) + ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH) //GS13 edit: Psychologist job minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) + ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH) paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_MED bounty_types = CIV_JOB_MED diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index c20e5284d1..ad321c5748 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -25,13 +25,13 @@ ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_VAULT, - ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY) + ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PSYCH) //GS13 edit: Psychologist job minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_VAULT, - ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY) + ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PSYCH) paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SRV bounty_types = CIV_JOB_RANDOM diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 9df04794ee..90eede88db 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(command_positions, list( "Research Director", "Chief Medical Officer", "Quartermaster")) -//GS13 edit: Trainee roles +//GS13 edit: Trainee roles + Psychologist GLOBAL_LIST_INIT(engineering_positions, list( "Chief Engineer", "Station Engineer", @@ -21,6 +21,7 @@ GLOBAL_LIST_INIT(medical_positions, list( "Virologist", "Paramedic", "Chemist", + "Psychologist", "Medical Resident")) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index b3e152e3e1e2fae055ea1b50f48f7cfaca7896b9..8d82ffa17c30f87344d8d2e697865ad4fccc484a 100644 GIT binary patch literal 22697 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 literal 22646 zcmd432UJr}yEnQMI!F@)l`1GjnvEh|1wp9_0*W*N5h$ZNE2yN1qBo-BE2L5 zM7s1QCG;u;2ql4#+@1e>-fw+p-S4h@&t2bH_pZgx?3vknW}ateo;JVDYg1!AcGlCZ z006Mx($~2Q08sE23NSN*$xhJV0RS*O3o*Cy({c87^l|m_bA@>VKu~(d2P0nrh05=p2t*^iJJmX$X4lvrw&j9_xxvM}+KaLJEgQZ%?{O%)e71!iHZzefxk zSG&`i=@dRlDkqH1G+zHQLphXx5D>-CbcN+lIp2lnlq`Z;Q`*XOv&F?_ra+V^qj8&on~95yCc?zZ}818d*yG-9sQ_q z75A@*tEo2mk9rj;MdFIXugVW7pTx zSkpy9Vh*ZM((SINn}zqU;+WZ&*$j`x6L?#z9Rr&ButJ0856LDy!FLFfujt!=NGM#lo_4T{?tS&l%wR9#*H+*e&LmVyQdGV#JSbE&lH{c z9(|?vkCaRMP3|aR!R~WXLmu~hp!`EE&h*JA%+8ongwG+)wE@?#4Moxxf@dvKUc?WP ztRwCTd~rTEDzqSSSKs}{M?=(MX{(urE|MnVGH*`2ufE4y2sQnj zV|Bv0BRGzJ4q8#57wTooT$G2Z!p>v-k9zS{J%h%6e9ZvLO4esf?@%o<+otRDx!Li+Y zl3#K5a&O4F)Q`h5?Z+x?Z#~Z5y?u$U$nxDOr-rB%LMGDi+$q1k+n2^+OG{OQzXb(H zQ#-Ej6$MKL41ZBQf1_1T8^6lUaJNE_S7rZ;>fOC*a))rb?U?wFKtu*FJEvT##J70e zCwYliKU}b=Xbii-`pruUcHE-qifcYz#znr2T-hS#fpWIzXTa%Kk{TZmP zom4`^>R;g=xsz@o>9(##>oS#=IX3cV#m?1{wfQspn!8&r_mj`{&xjuq*sSKf+{8^XO8&&3SDG>Jk|-dfIOBMb}dK-Zv2zeR2G#+5Vc@|G)`mo2)&?h)A?w?n zGL8UJEdYoDw{)(V2c`d=427Ey)o5q% z+<9_FicgoBg&&FK))$p}|Atk{s>@y~J7_gN`=Pn{6C89+p5mqb=cOK_%S4 zSJPmM-o;Z61enwJx9s23awH-_%i>yqhzw}<-sKrL-s5! z-=uBwX9K>7ZV^@Y>TPm*d~@^SKGMOv2uV)O+$kkVPqB0mBzugHrD=u1E4RtPJ@vh{j}X!SixTJHa-m{h;Z_-gXV4cN5n!8OTR@IQHF8!mfX~;jcOdusoY&6w$roRl4+~|@83JiJp=O}!(5Coot@JP9 ziC?tz-As&M`=j`@w5Y(`+`a|}HUPWF6X9jxDt-L;@%KwhZw2KuJE+jl%98Z+da&Ou z2{y$RnF=D*Z^1n?Q=uF5z&8ZJOnS{h1L*o+ASLglHWP{h(X_q6Z zlUl|PUL#iM4LPcPr)Dfi3jMNJ;I;RaJ11;{zo=n6Frfez`K43MO?ft);gpoTJh-Sn zd)hdPC|ZyqxFigXe|?UR$P9XXS~d)A8DN*SZLI>}Z*`XMzUnd;196Ykc|`f>xz>wp z>IPS)pqDJlcp&K;3$fp5V_zg-za;t!#0Nv2W*R^33Y`i&WThryUQ37u@uQ4$6((1E z-Y0{}S2;|ew?#O4s^$Kl?U54e@c7(*aAY-z$@3m0pLxs=;{E#i07YBdx(C)urkdNx zun3s4HUd3NWcB0A*0*9B7cQ~35&zJ$>nCr~ z<;*rF%URcVt@r1~NLN_qSgahK(4__n=k#_M;Ww<2Fsd{#fGb z<FTxGj>@askh0oL%Bf`xtiNYgtiEp{Di9~IUfa<3ll%tv&fQ?@f+5~(|}qA%D? z+?RqD4n<$+WpDUjh{xMTjQ-wg>psM=;>;3^w5z$jRwj<0m91s6*&ep2E|G}B*1Onp z*N9IYBi0yz{Jy9Ovk6~NyidO{$4Qw?Ah{8yiZ?YB$LOoGsHPZdtuTg{d{}a@WTLaj zs=_8}&fOcmmW>p053PU5Bqo;0X!UuzDC|TXaGs~WB0qFZA;`_Lg}MGxqxIqW0Eqdo zojK(rf@IF0&i3uc5gP2bMx^!mZ=k;(QHQ!MYp7MKq_2BOOJ%zu3Uzfc4MA4gph}8W zq|3r8SNy@PAl6;YhKh`AyY3Ev`$YC9g-JKfc=CJ66Saxtq3=gOTe6U2UnO?A8<-2`~ zdCSky%E-lUQJR>}pXS~lan?Mf%oSe+6`UF=pGsK^A}2cg!A57V&lMgKdpK-PD^af_ z_W@1HswU;%mIu*wp9%mS~#MnnLpJoUR$ZU^2h5mWLc zv;tjnbK5%OMqTw?pzjI4<(ohpI_D40a)5NmVUDynHzV0NzUc+EzU-m;K|Q7aspKBt+iAcC6nyKF4j)xIRV&9P zLiNeWM~*xv3W^CCn$u*So#zeJ*3oh5UG!KoRlaTCv*8P%4t8@&gU7Ef)TGnsIJJYt z8_&IvTd2a_Uz&b~%dp7oWTBCH4eSa~3FnR-(tU9NCAehCS?BRd0-%<8<@7sstv+to z_ph8MD$Ubxv-73usPzP(;B@qmlnQ`zVZA`j0{7cj``IhnO0-w_X6651s3a{m)P=`G zp59_ejne@uZ2JpM(y>xV$@8hmr#-DtdN-22>@>4x`;uS>TbFTDWas?jHxTn{ag1YK zF6g^(N$t*aCZWbUxDUqwmCYu5K)W!$69VL84g`If0!$AKh+cV?4-qyw-{Jdn$!qrK zaiFY8#UrK`{CTvH%0i@0<8yChYG0!9Y4BZLYzB4Jf5Cs5f>HZJSWumy2HJi4(h4)v z41`z}J0znW@M`fG+hD|t01UmUEqr3cWSwLcj6U3|i{i>&+Db!E#HFcNwik2=PWQHC z+XiELUi(R>nM6BKkA!`>Jd)vh;PR0NY-~e^5(3}-lK|ul#D5! z!6$S-yDhmr649jv(jynE^-$9^*t@tLo}h&cM2AA{I|-chp1U1uCAN~i3U;tF9GSqf zghwiM?xUAAssA)FgxU2wydv z@d?8a_yhKQjh+MP0iVWP0S&1)5T z%96b0n>MmcvxodKB zk2O;@0qMD4k=*N;rtat-2%sbq)s)lo!Byrut#}J3bZtZgUKKdZ^w=)o^F5M8782ay z2E5?%$ZO!-afd$SS-1al2o?W>yysA8&Tt>zN*47RzdBv%i%sEKxyY%mD7T~VQ$1p9pG0qjP z>Q7$=i|^bSy)T00#IC!9>B4SgNd5iBsS=YZ=B|p{A(-gs1bp%0n$C38zQKG2_V?sf zX49BSnEDcU)9Zw8|EJC4o35xllN*kjCUj@T#59QB*nfn8@#FupU219rSOuKFINv(O z?iyFLkg@FEL*4z|OM>}Th-1$FIO~Kky#4kBN#R5WM=JHucsHd7zOWZ`oqAM7SS1}+ zX<+OJt&XXSBwc3JKQ*ainc z93oqT{`AQsd0_gedpwcfArQS&NUE9^$;A!5qu%Xv?JILO0JMkO#v#Bh1$O`tR1Y!@ z=8i0frxvNAnHy94`_IKY(ok`A!1Ji@Pd{$^6~Ayt7{=@F*Cnfw1Rx1(4rzAXm~+!>;0Sh= z#Xq$cRZX#CEy?r#)@{EEzdC?>Pdwi2tDvwdwT23^#VCBp77BIVF`g}ox}MVj$2-`{zW21&fG z1mxYE-I(Jv4Bb_Ih9HF?SSE9+c-xJawM7pgMLQ?#_dS^s!g1y^{vx5%!bcdKV_gzF zaK;-qe6D)By~x4FdK#PsEXb2pBw1lyHUHd5cZTaMDRAk-2cSk0sI7^;R+{*`NkR7~ zz4oPh#D!&C!){5a%|v+BHQX-R*~;Es$dFl+*_1yuKXgY#dSVW?el5&iG7JO0CpS^Z!O5&Js%PW`pm;5KMH=ZaJNW@6cZ z>LTjgXv*at40)`DP(B~1rl~$ZhwFRtJ&D{Usd0v2mbv}39W>BQGSJdalyB`-PuuNk zoxIz~ADdsv^q6d)WqlT;(#B>bpM3THl>5+{wocOR?Xz#zN-)ALSz)hglOI9>6~bI> zqz6vey3+lQE&W6bl8Wx8EVP89`E`bjw5#TtTc$B&RJgTquHK9kfR)VP7bP8pSW)c5 z7L2qP6NLN9C*=Ut^70cv+tpPXm|o5dOjL$|j+ZySVL#{okH=3YYZU=|D&>f{T3AvV zvio#Fi(1}dbe+#m+L1VNn~*GjUsly`88uvFo$E1PIa(K}0N{K}L-#!wj8N`qTTG=u z?L0pKY}fsqQO?=`u%LY;9kASo=RR}~h5HlT0PP=@MqXgSGr5p$N43_7hZ1SP5TEDO z=r!)x;$}WNAV5r*t!f^^IXv=?I{1pc8u8akHsrttz(#(rvhN%)nVTtGd(w`)8lVVF z6Bh$0&a<0mc>OlMsfT*Z!nT^*I3k&PcMnV;fLhhVD0N`hZZulR>Kj}rWPc-iZ@=eS zn)p>K3_{}%PKycuiSy^iWL=^Q+fT>t3YQBFwl;+Y)&iDU9$3$)M@_Wp~n% z$$QyEZp+#D7%=^iikz!!<#^hOKSgB|)Og^XTFjUY@>_7V9-vyyrUA4Y4OYF6#0KXF z+jhZ32l&BG9dT_P%>ra1_{T*MC#|aVgZB)KayLtM(KlTVS#ZBR_g|d@P~Lh0(mhNl z`S6Cgkzg6hcPAAx`^D<>}c)R6OoL4*!qEOC% z1T|30O?R+;bO4u^O~hnfARQ-_6}dbq05;#U$8lKU9tOqYV>6o#h!7wy)J_Y)?#u8) zflSz>Q0$u3>s+SZ&!x%K$H`5$53;B|wn9u3T1;Vwdo2gMYw=9k{%ga35R4?7S@Ilm z{}R0R1&y2jvp-p`xJ}W6tC|rMuqNp$AN_^$OtNBRO59li6`y&j4YXSUdNZ$R^VSjr zBx-&OsD+5kQ=3H z9f4e)nkab^gV&~b59pUv7-li@N#{d;?VW-GlrXBQ3EkWEi&(ptzP`S9$nB?#@*y3U zA;1$gI_=c}cy+-Ah*elc<&s?{`#jR=nFtvt;Rf<~s{47eV0<*!BfYC%!d zTJ8E0h?G^D@HXd_jbfGunb{nfg*O)Qdx($csJkN;uezw+F#HcO>Wm?*jl5*0{$N{A z{ISAV{4cn zx1S*|eRqofZOGaCXd3sK^I_EEVmVpgny#U!8Z$yjp3Qxx+BNHh4RHH(u6?LsEB-wz;3?$yG-N*r z$DvGs?*#>#r#_K(;E{qsou&nQm1cP%)jjUsAC(ux%)$@#fEyA?V4rfu3C}m7JFrK}z%y&A&ZiS5bT3H*Si>d4741w$eVx4-0SKt-?n`}L zMP3I@#R~TSz7VFVjnElTJ8(Y@27?9;i1i*xv79!VMowfr8+^Q_`Frf_$GQ!6E5u|L zj3FD%d=4y(7uUN!6}XUS`5<0IL?kvnUGR#>pFvDL42K>qb)ZWFom&IfRDhlz2?VL^ z-BGtAe~Tfanp|#!MnGQ`%URz~c5J7c z<=nI-+l8&h=oC`&H~{d7OhhhGzvV;p_4NVM?_8^uh@%j2FSk@7sg%f=7^Ur$*O5|} zT(2^3f}_>#e4Gmaa%s^`Kbe$QBcoMl;;JuKFWRYd7Vr67$$iw`$!599Z`UE)dv(`)cLWvw+p(pfSvpxfO3GensLw(knl*{4yC4(FEpav=kNjiHJ5a+5#! zt~wCx3`QMW=^~Zi|Lgsnbv@JaBW6S18Cq+69?$qZ9L{DfUw@JYwDn=?&mJA@<6~dG zq~`-&pSwst0D!A3&~3rDeo*MB^PlDN8+C6}K;}Y!QPt_DXT_@Oqw1w^B0Td5h2XuU zvYms|k>L_ghJqYBpj(`P5j^`Ce*6G^O9N$~WpVgOsb)jeTQ=09?eMf@-lKz4=#=B! zU$Pfufj18?YhD`_QzIo@dsI71b{zY$x%ABA#v=7%Xc87%`DO$a*=7t%$t(J--qQ~) zUdHslZsP#+yawA&tY`S3fS@Gg`h1d&37?Ar25ccS{dDAeVi-MbJ@(KRAP?=?KxDT>mnoBiHP zvRiHEqz-q7Wb!4DXvEro&-Z%3jAJ`G)5`L2aha4z!n5Gbt@bc0flt~QQD2TY?>$T! zxNeP@NqN($+B3ulyOLE022RCZx-%LQX<{i{%iJvc&tN(qrAg$gv}qAxV!KJ;tJGQt zUft48lNKG~HQn(y2F?cdja-GqP3T%K(PPij9Bf7*AHi}isNBm8c?5#xbY{|L271)99y zZqC@)Un|TUc_*^rS7*6Fax3Zq&*EtQdnUs_$^V^C|DU}5y9X9nYLLCxXAzIxLdztX zu>9Olfh8xb>W`m9h+MaM9IWOV+SA=9-l;_hp|BzQ4{Wm}%JgF4hVU@*rX$e%=?+1w zePP2{b$B7s*`S%ip?Sfnpr1@eZg2smzDvJR3qooEI!6b)eG6K(L#yPPo}U&6`&x^y zAAKfeG}Sj}ntvi@>=|Mx5be9?dafnC3Oo%zsz`JoAPM7#Ps1n$dhePS6@olJZo!@L z^u$;u#we`}HOm!DuRvB}ZHcnRlF}P-}&>4##>n zkM?nMLl_TJ+eq4|yO1*`zn9}!PZz2%VGL?s&B-T!2)j0!@ob`_N!nxVOqJxOQWTpFbNA$P4qVM zeRBRcmgV_dyhD-T3q(6=6TBW@<-az2>&$zlf9&$3-I3htzk%5s=aQ$pVzr>aqw%WN zBspuax&%{s_w3oT0MOsxPwu>Y=@I~ds`YkMsT#8BB@1O?Wo6|bT`v2e(wzm6TL0SD z@NX=Dlx6ju=y(V|(ep^s0fLv0FXt8p@#hkzNPu`Zlr;83`~87NX@u~R@b{j|R?7&? zo?JEWli_+64h^teH&`9DJ)0FD|E#?H%BRntNojzP)0T;eN$X1%o(m35^hloU8`m7p z#JxLSEqj@#FIvE@9i*T4qM0K!*~sP%BKpu(oe}HZ!G=sJuD&T}d&=tvVFDW)NR&lA#x)1!UwX+tj1IEsLPF7ajoI8V3`Bo$$h( z_ZbwCx0@iq-^fyqEO$7G@7S-cYcQ9pwrCXGDsVm3EOLS~1o0yDVDc?EUslK<&fAqI zW-<}VbJu!caTm#Vc1xab1qanNI{=$Dzm}w9-xk1=r=j1{+%^3a&!AwPcAiHOwMCt4 zfrkf12`wV1_*qVDRo@(?e|{W>xdslacd_|6)e^kfT(81Cv1ZDypI$ppZggrKxkoHK zzQ34ulWk|En!)hr@*kt)QhE()Al(Of$qS8tB^=upLx5XONn6ARF@CQgD$dG zo;Ii&_V|-N;*)520x5m>jTXQ=;TzjWPQP{);LT!~-t(BOttNM!vhhCgCUmLhObnAL z{1|E^Z5>W%^`5Ouko4x$PM}twc7ebHx6h(odx5Ez5Ka7{d+%pZ>qf92hJ`x<`dPzt zs3SMHHTCEhWJ~)TM&D`6|-l+fT2IoRo>g7mEu=rnGRS)Kyf0~j? zE}`Ni^XL*RhuaHJ7#U;!>A&&zd6ywCeJuI%We9sKaBN+j*C1bB_xE5rYT=xj0qWOj z0U*1cg*M_{CaAnE3w;KIXd0^NqO%!lW*aSIkAI{np z>#A=ye=&n3j}}R)9^Z}?(TV~0;ytN@^PB)ZJpa$pA&$yuiV)P^RQ3BidM6mM*@*Pv zr)|dfiv}gQbs+HY0{~blGXa7gb+o0awbwjC4`6Hk*EW^1LAXHm4`6k$uTo~3Mx+OB z3VHbRHO~W|&(n02`9@SNy~w5{C*z>55~Q)yYco3uK1NTk(0mO$>Wab*f63jsl0wrU z8LF-K4q$IGQ}PxXfSaJ`-KpI>?S8c5+h&llG`A0C$T&`s84yH}tvEh+OK_5=Nf?%p zG__(2+k*?O*{_BHhFPy%RFNB(zt8SUhUMFz;ESLr^VoIY17k!#jusA&Zn*ZBWc3dK zSzjNC>+QOt02~w64_$$$15%LUZ_k>R$#gw zCPF*XVU7CVdJgtqJ5^i#%5id6zl=E$_k4*@6+HF%;@_K?HGk_^YSuz`@h+(+*|}AZ z!P9L%LyZXtvKsKU|MTb8>)GN{{CiefZ`uns33VUO8jTZ%ogY07CzDfu>@2`C%r9a_ zj%iX(PlGOj+bor*A5_1(ok?;KAUvD_vhTkk81aIM^L!XLN1I*kl?%va(*_bl_%o7s zM#Z9n&FK^^zk*D1d3ky1zKfHSltPn_(1CFZ${#p@STSWAhtwvK&zj^!#>R36+u7P? zZi7*EYOqNTQ9Hf4FV`;DbwC1=Ojlfg*MM$1_;DNn;CW;O_x*=z%9cwq-b)p`vcM5s zaaD!m$KbpPXKMZ3tsO`)HlY<)AT|PcBN(iI99e z+nTON?v!7l3I=FhzGJ|{wYo(|17wwJPy)O^SAU}V5-%=sQx`IyFP{!3KL~(;8p?j= zIz600nVuFRYZ**QL6uCu0+CeL&hRlF@lS9Sl>51!dGsjr7?IVJ+5CQ``&h7?r7qvm z?#fC*LT0g|0N_K|zHU2`Q4}gPo11f;kD6zcW}d=YKqCyx42WNUXsOS4q*`+BP3uia zh9j!=Cdt!opg$1lPqm{fNx8G)F_gnJ^{W4#0EGAk>2=ZEh))xsKnoHMw?>pY0wHa) zS}@y(*zIsOwhM^*)t&8GOb(KYS}^nVxnLPqk0JI%rSX@-9U8B{jX03h<^w~3mJG5z z?ZL;f@CDM1SH~L5oI5vfI|MgxX)pagdC7_S(xpr9mkf@8Z)q3K*h8}i1}}{GJ1;FR zocZW}JT5Ic-(Tp1ZSZG&N4)s6D#a@RAC7^?vkuQ1rl z^g5XDN{SSsQ_WXAgq-?DY{=*Khf7$>ST5`m?_CVwvIq5<_5XDB%Y=sq31Jn0dfNbN z<(dVIriRc_c|IMi_SYut)v5NvuFTb1jUlWmun9X_n-6;w{zCT}8~+y^LutUf5+a6F zTSCMsijN0h?g53HEk7vEXx_g9&xE*_nV~V%Y0hkbJ?=Z>^j7QcI+WSj)HtS(+{z}b z{2?phvZ>ot?zQCF-HZzm7fHiS5jJ~)1op_YdemBmE0EeZNCObxHG$_O%4=yYTO%~< zAQoYlS-?4(q4sM);;hlz27%muFw*!R`s%=EgJ&1&0M)>l8$Lb|KKWy^#P)XWxnExg z!k7+?Y-)MUUa(RI-yMGvskc=9TVG!PSJU%wNM}O)+h3=L?U#FhTh;D-DT_zeynB}q z$n|JDS!HF$r~<=u1&$%kvSP7&OdXPdk29$EXlc3x1@|!Ja>YVu|AJ~ zbMg81uk1_8?>}7?IdkJLD!<9cnG<^sxhTsN*vg=E{sRX<-w_jle4GR1bn^2pUj?|N zLdlITkYxnfT9Sp=ke-V@_`X@JT`(Q+UKted9KwU~wo{;hAK=BqpwE+q2Fn@CSeR`Y zjY#-U`ExNWJW$WIvgw-enDznSNBtO>fKh!qtdW!&d#UkQr;)k2wqtfw%&fvBI6ow^ zq8-mB$zr-26h)aqc3V`q+wL38C&GJ-sbA(c-zB>_Y2+D#+t!?A$Z1h~in`b0c!r77 z^NBxrK{MN(1!sp_)5Q=mv-irNTcz~%^*%)O?rTs8$3K!i;C=lc-~b`(Siv!Wk!S%^{+H~iK{`G5;KEtjaL#|LKLg`}jdP;xG7VI@#sU#Z?H>e2$*(NDPwL*0H_io)q9+Kgi7RB z+{F|pamyt+^nEoeU={3Ii+9fvv?20GtOUP;5~aqQm>E zQ6ZLY(+Dsutn04o^I07@!ur3me5L>5bQ%CWi$-m*0A3DezyJ>*mIlH?oMPVn047?Y zDbt#K+2_>))>}X|@*U(a>qune^{d1MZ$a{Q&`(2P)$=eM$!lOfel*X5En>G+akLdY zyE@B%@<(^og4W|S^ox_8Qn!3>HjG#U3y#z~bs?6AvVbuV*)>CtYD+&o#$Z1id8;bR zrz2~{5twg8(tv$cws~4vZD)n)OpS%fEsk9J$)`0Kryn_mKzl#GSc~kraX@%&I7=_; zv)!&atPJEy0;IaILxHOhQ2}o#*Hw~}$eO@^^zrX!KsZZkGmG~8d_vea7@z_Xy%fQN zYHOD~w886~EMPJew5R=SuIWyXNz=+*r(S`@&mQ3b9D#nC;(aQS!iv=LG z3xaKrO9H{;VX%+jVNWV}{j1QJ)~v4z#9lMiF^mo@mIRzQB!MnT-+y|Xrbp3eCOO6I zvV&ERB>@jreO;#m>1qGqt6bD81US^uuTXz9OeN8M*RA~}KBny%RQaDn?c zzzb?005#oSFb2|r(KkH6qTX$E^ndCh{vAyG9|ru#co3iF$J-7VQ9K||+60Y(6cK5X zQW+XDO^@AR(FUPoa1v9_P6Q9Fj}*8-&-K!O*VR?`m$~(|jflWBz}G<3Z{Uk*|K(M$(YXgo{Bo9#EM0w^Q;YPf~6<4OUlBXM_hEY z5m*!0MpUfmT-e7A0T0X5z z@@@>fG`7ybRJb@*xU_{)>e@~!n}}k{$t%dMSOp~X=db9LkLopVWhupAr_AN1A{wsU zSM4Yk#BIw~y5L|eSYN&?D7HG0|B{%gABlgR=7|~VAaAf+($i|RKLrn>F&R!H^&u)u)%Tf0HNWo?rW zNm|e|r?U@XoA9Hws6f2M zH@J?hDNM(8jU*8ZspiUy%33G=^P|JB21+<7>Z1=pig4(7CX6;_%{v}g7H#?kJ6Rrp z2Vd}u?9Jivf8x^gLPYP&)st3c^Z0V8%Nn3zWp-wgxK%OF&zMke>j9dGQa z51;yUj?&sZp94+|LIE*Aia)py@Zarv>Jv4#M`n|LtXR|HP8(zkZIF7a^Z>IRy?(QeeW?m1{_iuJ&0V%YR;{3LLXk;xv0yPE54nvR#{3{v`Bd{4PE>N1L7k$31 zFwBBlkpp>e#IFVREN_tx=$KMkEt_LNMRsPiA=m7>eI<@%nwXD!L1}X+2@Hj;{UJyr_Nz|S zT^yuV)pjCoBdXmqNK3wU{se_`VhxpAOL&3gQzhIu5>BDmOXlb|{==;U`swSH@P+*e z+~dE$vT7ILXdM1GIu1{jCMjmHKeXB^{PLI3&G~!yh&YLX7EBa9azVBgJ@d_ z0OEAxz^{;UL!HsY)ocKcZ_%2ki5bwHWX=Bj14!Z+N-9}P-}CyHC>672Fa%ybG-Cy< z_G(f&b1yb9c&cjk(?b8|q4b6{m~|V6qR%lb_#u>7&=`nV|8sM+%Q6kbXtvvkd#VQB z2?PCBzMWtkGITJsp+buS`m974zCq3SaE{aV@pz9`&?ylu5lk^WF_tQs#jttD@YVA0 zcRA42jbaF!YJIMW&$Vu?Jd<_hgcDjV^jg+_1$ZzTJo$4j&~Dfqz0x}3{OIfQR4GHP zvimczZEai5UA>RbWhqe{>|4kc^3l5%Et-p50@ghVBTG=xFOZb&K<)iG<=q1@5zOKD zG%{(NxL>lpTXB9P3v*bOCyb2FV4zu|vZ_};1`1_!0~Z)^RF7OW_& z8ul;fHl%v$a_$HfTGVz-jJbiWLvW7CJuf`-?Cd6DC+G2~FC)s*VE;D}oQ4>5M^-R) zVbWW1n`+^6I(tL1?TF2FHu*A9_ZdU=-uD`S@$%83O@aby$l+kO<;YigOU?dZSFU=c z?}$*+{d7JWHIWhjMb3U-;md~nq=s-(mH(1ufc3o?&k5+29}G_p@Z${&j!)To=hvd( z6C2~IsfaLNJmp=LfB){mY2(egqV`t1Tpl2S;d)HIVR1xzk&e*ZRqLwflNf6hMNahU z!Fxjw$k-nMx(E&*Ll@u6oM!LCYGECS9Bcy-ezEVIG<%???MFm@a6;Se1KT0vRjfgL zKoGAAIEP3hGKQoHt_&T%HwBz@V6;d~SRU*@U_q(-`+XW(LGorBT|Ei2y!mPfyfU+T|~`ijY2B*4(5 z$GN1e6Zt29D-_4UK7kH=Hl@gP(K?Zn`1|>07RxoAiecJ|1>J!VnP+L49$y-mJ7$qf z8G*CgoeIkDsQ0~D5;%eswI%kqr}o{tG6;;C#-x+Uc8HoJF%|y~r@lNRfr;Ry46BN#CpPK{#^7Q3 z)9x%dQR|uDbOr_RK~Y2M5{Jp%&MjIBmwEJWHU22HJS1F&*rWYPI;usaT1*@UFYy5& zZLKByMZemRuwN}-F>d%2LYdWiJW&9GF;tNhqjWoH{__51yBD9&E0tZcGm@^uF z?QDPJPI)JFtCi6(LuvB97vaIQru{-g@SitXYRJ|YA&`{B;aU7| zG4&gZU~+rpjPu0FtsM~OmLBOd?_cFBcH5Qm&?L_)g^hRpwl`RkVBo{g zQ#FbadpRhM`Yb5u5E{Zo-_!i%b7@=lnAPRUZWsPRmekW<>6gEa*V8M9PJsgJDxijMLx>G<|ind77k8F(Bmq&93d!*oIB zYU4v%;&7+_dlRR<#dV*|f70z7ddF}P>^EH&7FjZ1>P1h+4Iv*91Tj{IoE(}28%n}e zdpm-g?f^qsdnIuG3jO&EkYU8;!`!V$!|?jiP)*ye53!$g>%3t--5qP6>WDpmud1~k zoue962mpawocl1b3YL@cY;U=s!JCSJ_)FC55$wgO_g7B3LoY3L8NFzf(AGql8KI~o z14$LP}qZ*dx`s2HWNEIRD-M?2ol=Xgos(-+)?f(YD``QQ_ zNiW*tU3%dh0~>d&lO#mHw~hl`m`#Kc%kVmuxH_nx{wd{~I#-uo{wtTV*3O%u`j|D4 zC+^#p%Y~5yX?6TLFee(w@T8OKnd_wt@v%e|la2B0$2TOjH&}ZUsbQ_#WRRy68;E(R zbC2yCmT~?^cn*8;uW2tFB*X47#3}EyYY)9Cy65V3!wDtZYRp%4#_4=spPuP!V#i}x zK-qFl9dPob2j-#Lw^=P@AAIsve0;9nTl55sUYL1#C`Bva@2EKdVS;83jO2CSHr77R z6(nlkCm%*)iJCS0F14wxoza85?qhpCj^9f(`!{)Bm*tDqOB5X>s`R=wCFkW!bKn^h zbfZ7Xgik=rjqewyNU@fc+v_hM)QOy%igZI$3|^Yy>c`)p(-La9QyREAwx>loxtu$9 zZp+D#DMiQ(9su~_9FD{6miR&e(TZ=IhgB31;Q@R~I)R`LV}7#$sKK%(JnjGld;oC| zEQm+eR8>g;xZBB!L9S)-p#I<=;)eC{nQtp6QQ+UsM!UYCmib{wm$A`MX7Ebe;_s;Y zgsq5AeJZ3ThclRs^_u(3DvVg?b=p>C3S$8R@2NrxUSCA7NMmWoJRo-K*_QMI)6rEl z82wFWl&YybFf%d)+#fwu2Y}-#wEqk6(E8|$galArL^0>#0Y)s4UthDJ+zPdZe$rzr zhO(YMf=>TgHCdp~-a8!I{`I>$J-;P$!TP(Pz=i6ibt`lc+2`)>f!jUMw(ZAiA7ki< z<9Z?xAVx?nZ$TDipr;f_+p4q;ax{SA*XtSyJ3np1tjca$HX8<%f$`tDTfAcD7}|D> zpk%^Pdi|;d7nd$iu)CH3e@odvh@z0|Xj|Mn1Bc+Zn%M%;jK^WYaZ-DWA9#I^#)HM6E zuNn}dv{;Qa&5#LCXYB$-L4F4(9qS0ad4+-K1V$WG3xp;mAkpI}LS~hJTLZLnKG}sc zPQ!mu__vFZ?)0FG(8cxy@M{QDpaJK^evt9>L1$XDh-Q#NnRl9!v~M(To-v{G zQ+n1U@1)<~lS+bWjKR_+lEIfqAFi3dfNCCFzOJ>ge_c~PC9=(9P`tf~8Z4AZ7BDKj zVZKHZKz(KPEszVKZO)194vHO!{nGd0-@VovBiN;}ReTJrZm3=ogw-wu7+59+T? z^6tGE^akZ_{7TX#&$p32aFM=qC3P6{r39O=WR+>JR=Ssmf$_vsfR5kR{}7N6P(ZHH z9jmy!**6I}2KQ6GpVPr8YUOObKT%?$qc!x8=;GoO72eVhIF6zhFT5l(6HT`fyFHu< ziUX^CyZzeNv+!rO_+PGZ3CL!$(_x>O5(|x@UGqb1sezRxowbm~4eIM?tMPz@gE>6B| z6F!k3VVRDS^~z}~tO}y;u|-}y*QeIWG=Wwf4wBL&Es)Y^#mQ9Rau_sfNhFgi9CHCM zFn5=?tDkVmD*#ICOdx2p%YD^X&gxIe?p?InUs(6YAlA=uvX>uyNV_@wk|GXFR=&b< z+E~>esQ>i&R~Ck=1qrM{p@nSwkWZP>OybT~w?qP<^`gw&RUHhfdsis7()8~Sq9^KR~`^_9#Ugx3v(Y(-SV8#7j`|zt;Kx;$I-c2&%}W}MP@PH zA5}%S!*0!Lg9FyXWfx|fd^vr{c5{LPkvskQF$D_rkv7}{(%*?fyuJTL1lYBHbaR-o zCyi>PqaLfwBr1YzNm)N$54h+JI&&lYKq#=ZUM|@H21CR^e6wlKuu+{8jT4jc#aRwn z;80AFG0RsmXmnN4e(w6nv_{=&L+;p_9EZoA{>y89|1#IcOEwU9coUVT71+N*{J?(} z8JEA!>3!}d2v5&huE&PvF`LbtzA%=Ydv9gk=^4819=EjNF^P6Ac)Kq28{nJFZ3Rjm zW9Hzg>(@|{UpS?#iV^j-vD9l4tf6H~q|c=DP^0Iu>oBIxrkDOECVub%tJ*Cvz!1eGF&s7HkNI9 z4roRAwu?{)JHc_(Fj44_$8aPlO$m2v(L%DC9N}m6?{&G$v{XF^@ZHBR+2l3By+&&L zRW_VOHOlC8wdRBF#^j>0eP{TteqFp$ zDv3|}fsLFUT{a4xik;3N|9Zo@+?^Sq$9@ZzPS*Al_@_?A*0sO@x5V$qf!1Bi=!mF4 zAQ+8;1LHSrzK3J^(X9Onq*Er4$fLhSejN-2;){2UZ*E4a#40|pvSv8IdbL*SiG+UD zP|pr;O@Db@A2!o6U}I%3`~V_4LWy5I9#Smo*(u)o{mrZRq5bu|8=x_=Hd3}`{#q=b zlL8VF3e6|#j})|}d=}M6khys?tTeDO%DGt$Hg8QwhIc;F=dU{IC@+yiIc6I3^$&)C zz2{Avb{iZKDl7JO%VT|4^D=$8t6NiX&t9}oqwKq{`W*Dj(4Ff|f2!wbrQ`NZ$>j%u zh34lVP5eJ2Ek;gTh(Bcp-EwpV3Yy~yWZ4gse3ub_E>#W~`w6@|%0)x<5j^^j4meVD zhJW04V4$`31Q6N>?(;6ZKaOHg zz^GCEEayK%joPDUBuam<;yaVIt3 zAdrY{3Mm>sGl%(iCx|)?*k3p@XmI)iRCy{Fa=k|(_~>U}n64!Tz3H+eX=u`-D3XB< z+@yVeL>#}9{Szy<^bw_ZrBYa5BW{bXYvT@!HoQk*cEAxsf8t>f7zOexdy$oaXxi%^ zwhXnw$*O=twmbE_fo<|bR;1IT6Jj(3;6+O@dB`IhArY6Rg zki~}^!GSC2@PbCJtmDP9ucBQbpsv2zCU(|dFx{nsBew9>3VG%L>lHW2kBWd>=Hkk2 z4&_O-+qf-P;-V`Vx_F4#`(ELM4&x&~(j@Ke2S0m!eC^(bDiqZSz`Sx*v{W%{Ad_7f z{$l6Y(~#TTO`-EGIc8FK)jKfQ?FIx`r={On*qMlQUv;^{TDEh9L}Bo5Bi@SqwXUx} zd+Hw0LAbil<&n=Tm%(#<9QaB>gMV_X(bT^53o z9NA@M$29`l9I5l;LZv=<&=G-)^#j3Wx;mE;2FJS^L`z+)0aG+^4i#XfFY*dCI#AD@0JLwo18`f>=+m_Zi9qN5&lZF{34D+szc7%oK?9pIGPgx4Z zTq2aPaenGb6DA3Unm@0DJ;a?ZKfsprC%LUS3H)>E{?4@|!sW3j&kMtG)5#EE=hIC; zw)D~xt=OdJy2P!wTbR`lhyue9bp4=yQ^mG+l>GEAoEnz^=7j*`!dpDV&rQ)20dL*u zNfya7!8n_?*SyXYsMmBuF0K(>Av%!@|A2sNVYD`tLX>E&aQ(+ElH5q|G#t?{y#K1JcrgLWKJ()dfA=eB6V)< zYb)KsyIPKa>wRB8c-94ELfBINgkX8q?W%^;3#UV|JRg+J#RMaC{iagxZRLKbI%cxd z;|t+QWuo<<8%=l1b?N#-d(5d8?{offmwk6@>Au4uzT{0N)%kZ^byF7vFo4kC7hcP4yc@u_$7pR+fhQ}Y9#lq{1k zh+I7-_x4ALInWo_btkhoMT+qnE$6~`Z#V*{4lSt8$bAmNO1;qIXP6sq>^Z;D2!qih z@8EScFH~p18zpUIkC_HifI9~T;MXv_DivHqRz&0}x=h|B^dZcb*0v=O+OEG8em|d= z?#j1XSe)SAzaQms6e4D_Dhdi;4Znwa^r%OdD4^X}FDGo!>Bla##Os?Us)TRMLpJ6o zzy0jbzt!QU7*5xdY-pZXzg{|G@a|w}8odBG0oLWs{qz$o6K==32AEd8@6O9j?S-+9 z;s7}D)*nBe%zd8dLGQ&@X;9LTycv>XBt}U5VMiO(Xm>!pn6ZHFDC*kth03CV|mh1YT5xF?){{v zW}_S^>3Az2y1z;k;S=aJBL8~ZJWFfKM+1{*6RyKrO=R64A954`eTfO(63V03G~|Js z>+AbU$8}_=@DpWeM^O#VVH|C)8lIMCk*hQ$p+&MFM;g? zUl7qp#!2KOLUCY=;mhdIfE85ymbkm+j_d4`PCRBxHRGHM`{qc~quY#mT+fmIp{}K#0!g0w6y3T$d{>FJiOwN*UX^?e4`H0T$#9 zQHN-OUGQo!ma@X!ekX!rQr-oRtpXAS*k@Tk{rhjxfV=>lY>IC9i zNRG4*eNhl-)f*FT`H1!DFRQFJ3J$8xUlY2vW3#QBdBkhhJOyFAsl7C|om}v(@00&Z z)ivXFrVo#yEX;*~k|!xBW5Fv?>{Xt#wBRc{M?GPscQP2)dZb(oOVr|xr7IjzNv>pq?<`bj;PE((Y37e*q&p#zFu9 diff --git a/strings/ion_laws.json b/strings/ion_laws.json index 03f01b95b3..cde9b52a5c 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -333,6 +333,7 @@ "CHIEF MEDICAL OFFICERS", "MEDICAL DOCTORS", "PARAMEDICS", + "PSYCHOLOGISTS", "CHEMISTS", "GENETICISTS", "VIROLOGISTS", diff --git a/tgstation.dme b/tgstation.dme index 5e428c8471..f84035f9b6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3965,6 +3965,7 @@ #include "GainStation13\code\game\area\ruins.dm" #include "GainStation13\code\game\objects\tiles.dm" #include "GainStation13\code\game\objects\turfs.dm" +#include "GainStation13\code\game\objects\effects\landmarks.dm" #include "GainStation13\code\game\objects\effects\posters.dm" #include "GainStation13\code\game\objects\effects\decals\cleanable\misc.dm" #include "GainStation13\code\game\objects\effects\spawners\choco_slime_delivery.dm" @@ -3973,11 +3974,13 @@ #include "GainStation13\code\game\objects\items\RCD.dm" #include "GainStation13\code\game\objects\items\toys.dm" #include "GainStation13\code\game\objects\items\storage\bags.dm" +#include "GainStation13\code\game\objects\items\storage\firstaid.dm" #include "GainStation13\code\game\objects\structures\barsigns.dm" #include "GainStation13\code\game\objects\structures\crate.dm" #include "GainStation13\code\game\objects\structures\medikit.dm" #include "GainStation13\code\game\objects\structures\sofa.dm" #include "GainStation13\code\game\objects\structures\statues.dm" +#include "GainStation13\code\game\objects\structures\crates_lockers\closets\secure\psychology.dm" #include "GainStation13\code\game\turfs\closed.dm" #include "GainStation13\code\game\turfs\open.dm" #include "GainStation13\code\machinery\adipoelectric_generator.dm" @@ -4041,6 +4044,7 @@ #include "GainStation13\code\modules\hydroponics\lipoplant.dm" #include "GainStation13\code\modules\hydroponics\munchies_weed.dm" #include "GainStation13\code\modules\hydroponics\grown\berries.dm" +#include "GainStation13\code\modules\jobs\job_types\psychologist.dm" #include "GainStation13\code\modules\loadout\backpack.dm" #include "GainStation13\code\modules\loadout\gloves.dm" #include "GainStation13\code\modules\loadout\neck.dm" @@ -4080,6 +4084,7 @@ #include "GainStation13\code\modules\reagents\chemistry\recipes\others.dm" #include "GainStation13\code\modules\reagents\chemistry\recipes\ROCKANDSTONEdrinks.dm" #include "GainStation13\code\modules\reagents\reagent_containers\barrel_tank.dm" +#include "GainStation13\code\modules\reagents\reagent_containers\pill.dm" #include "GainStation13\code\modules\research\designs\autolathe.dm" #include "GainStation13\code\modules\research\designs\biogen.dm" #include "GainStation13\code\modules\research\designs\borg.dm" From 264a94de92df824994a72e9f3221d328fb149278 Mon Sep 17 00:00:00 2001 From: Belaya Date: Tue, 22 Apr 2025 20:49:41 -0500 Subject: [PATCH 24/31] Voice of God fattening and inflating commands --- code/modules/surgery/organs/vocal_cords.dm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 7cb8ce9538..b09f30c6f9 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -251,6 +251,8 @@ var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE var/static/regex/snap_words = regex("snap") //CITADEL CHANGE var/static/regex/bwoink_words = regex("what the fuck are you doing|bwoink|hey you got a moment?") //CITADEL CHANGE + var/static/regex/gain_words = regex("gain|fatten|widen|get fatter|get fat") //GS13 + var/static/regex/inflate_words = regex("blimp|balloon|inflate|bloat") //GS13 var/i = 0 //STUN @@ -581,6 +583,19 @@ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), get_turf(user), 'sound/effects/adminhelp.ogg', 300, 1), 25) //END CITADEL CHANGES + + //GS13 STUFF + else if((findtext(message, inflate_words))) + cooldown = COOLDOWN_MEME + for(var/mob/living/carbon/gainer in listeners) + gainer.fullness += 200 //this probably needs a pref lock... + + //GAIN + else if((findtext(message, gain_words))) + cooldown = COOLDOWN_MEME + for(var/mob/living/carbon/gainer in listeners) + gainer.adjust_fatness(500, FATTENING_TYPE_MAGIC) + else cooldown = COOLDOWN_NONE From 107e2295dbd69ff7328278a7ab9881d83e9fc208 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Wed, 23 Apr 2025 23:19:27 +0300 Subject: [PATCH 25/31] Taur belly Inflation fix --- hyperstation/code/modules/arousal/arousalhud.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index 7cc65e8b64..fee4d90bbb 100644 --- a/hyperstation/code/modules/arousal/arousalhud.dm +++ b/hyperstation/code/modules/arousal/arousalhud.dm @@ -256,7 +256,7 @@ var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") if(X.size > 0) to_chat(usr, "You feel your taur belly diminish.") - X.size -= 1 + X.modify_size(-1) H.update_genitals() else to_chat(usr, "Your taur belly is already at the minimum size! ") @@ -265,7 +265,7 @@ var/obj/item/organ/genital/taur_belly/X = usr.getorganslot("taur_belly") if(X.size < 11) to_chat(usr, "You feel your taur belly bloat out..") - X.size += 1 + X.modify_size(1) H.update_genitals() else to_chat(usr, "Your taur belly is already at the maximum size! ") From 14716cf9f5d72acbf51e43110da2f38956764ba7 Mon Sep 17 00:00:00 2001 From: Belaya Date: Wed, 23 Apr 2025 16:46:27 -0500 Subject: [PATCH 26/31] VOG fatten and inflate words now check if the listeners have the wg pref toggled before applying and notifying *Also fullness and adjust_fatness values have been nerfed --- code/modules/surgery/organs/vocal_cords.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index b09f30c6f9..6897002676 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -588,13 +588,17 @@ else if((findtext(message, inflate_words))) cooldown = COOLDOWN_MEME for(var/mob/living/carbon/gainer in listeners) - gainer.fullness += 200 //this probably needs a pref lock... + if(gainer.check_weight_prefs(FATTENING_TYPE_MAGIC)) //Make sure the listener(s) have magical wg enabled + gainer.fullness += 20 //We want fullness but not too much + to_chat(gainer, "As the great voice fills your ears, you start to feel more bloated...") //Can only be seen by those with the appropriate pref toggled //GAIN else if((findtext(message, gain_words))) cooldown = COOLDOWN_MEME for(var/mob/living/carbon/gainer in listeners) - gainer.adjust_fatness(500, FATTENING_TYPE_MAGIC) + if(gainer.check_weight_prefs(FATTENING_TYPE_MAGIC)) //Make sure the listener(s) have magical wg enabled + gainer.adjust_fatness(250, FATTENING_TYPE_MAGIC) //Nerfed down from 500 in oldcode + to_chat(gainer, "As the great voice fills your ears, you suddenly grow heavier!") //Can only be seen by those with the appropriate pref toggled else cooldown = COOLDOWN_NONE From 28b7dd6a06435f40ab0a516d7f853b8362974b44 Mon Sep 17 00:00:00 2001 From: Belaya Date: Wed, 23 Apr 2025 17:14:24 -0500 Subject: [PATCH 27/31] Required edit comments --- GainStation13/code/game/objects/items/storage/firstaid.dm | 2 +- .../structures/crates_lockers/closets/secure/psychology.dm | 2 +- .../code/modules/reagents/reagent_containers/pill.dm | 1 + code/__DEFINES/access.dm | 2 +- code/__DEFINES/jobs.dm | 2 +- code/modules/jobs/access.dm | 6 +++--- code/modules/jobs/job_types/chief_medical_officer.dm | 2 +- code/modules/jobs/job_types/head_of_personnel.dm | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/GainStation13/code/game/objects/items/storage/firstaid.dm b/GainStation13/code/game/objects/items/storage/firstaid.dm index 9198debf2c..20a9145169 100644 --- a/GainStation13/code/game/objects/items/storage/firstaid.dm +++ b/GainStation13/code/game/objects/items/storage/firstaid.dm @@ -1,4 +1,4 @@ -//Psych Pillbottles +//GS13: Psych Pillbottles for Psychologist /obj/item/storage/pill_bottle/happinesspsych name = "happiness pill bottle" desc = "Contains pills used as a last resort means to temporarily stabilize depression and anxiety. WARNING: side effects may include slurred speech, drooling, and severe addiction." diff --git a/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm b/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm index aeb8125a0f..2ec39e1c82 100644 --- a/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm +++ b/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm @@ -1,4 +1,4 @@ -/obj/structure/closet/secure_closet/psychology +/obj/structure/closet/secure_closet/psychology //GS13: Psychologist job equip locker name = "psychology locker" req_access = list(ACCESS_PSYCH) icon_state = "cabinet" diff --git a/GainStation13/code/modules/reagents/reagent_containers/pill.dm b/GainStation13/code/modules/reagents/reagent_containers/pill.dm index ac2ca71f0a..98c6340149 100644 --- a/GainStation13/code/modules/reagents/reagent_containers/pill.dm +++ b/GainStation13/code/modules/reagents/reagent_containers/pill.dm @@ -1,3 +1,4 @@ +//GS13: Pysch pills /obj/item/reagent_containers/pill/lsdpsych name = "antipsychotic pill" desc = "Talk to your healthcare provider immediately if hallucinations worsen or new hallucinations emerge." diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index abc0670445..d389d22d8d 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -66,7 +66,7 @@ #define ACCESS_CLONING 68 //Cloning room and clone pod ejection #define ACCESS_ENTER_GENPOP 69 #define ACCESS_LEAVE_GENPOP 70 -#define ACCESS_PSYCH 71 //Psychology room doors +#define ACCESS_PSYCH 71 //GS13: Psychology room doors //BEGIN CENTCOM ACCESS /*Should leave plenty of room if we need to add more access levels. diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 75433d92ad..1933fae180 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -88,7 +88,7 @@ #define JOB_DISPLAY_ORDER_CHEMIST 24 #define JOB_DISPLAY_ORDER_VIROLOGIST 25 #define JOB_DISPLAY_ORDER_GENETICIST 26 -#define JOB_DISPLAY_ORDER_PSYCH 27 +#define JOB_DISPLAY_ORDER_PSYCH 27 //GS13: Psychologist #define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 28 #define JOB_DISPLAY_ORDER_SCIENTIST 29 #define JOB_DISPLAY_ORDER_ROBOTICIST 30 diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index cc297cfefa..89b7c1c70c 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -134,7 +134,7 @@ ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY, ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS, ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_PSYCH) + ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_PSYCH) //GS13: Psychologist job /proc/get_all_centcom_access() return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN) @@ -162,7 +162,7 @@ if(2) //security return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,) if(3) //medbay - return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH) + return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH) //GS13: Psychologist job if(4) //research return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK) if(5) //engineering and maintenance @@ -330,7 +330,7 @@ if(ACCESS_CLONING) return "Cloning Room" if(ACCESS_PSYCH) - return "Psychology Office" //Psychologist role + return "Psychology Office" //GS13: Psychologist job /proc/get_centcom_access_desc(A) switch(A) diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 2ab23b8753..f5f70f33b1 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -26,7 +26,7 @@ ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH) //GS13 edit: Psychologist job minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, - ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH) + ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_PSYCH) //GS13 edit: Psychologist job paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_MED bounty_types = CIV_JOB_MED diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index ad321c5748..d3ca4176fc 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -31,7 +31,7 @@ ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_VAULT, - ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PSYCH) + ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PSYCH) //GS13 edit: Psychologist job paycheck = PAYCHECK_COMMAND paycheck_department = ACCOUNT_SRV bounty_types = CIV_JOB_RANDOM From fc96671505a970c1642a43f6f2f06ae0f44939c1 Mon Sep 17 00:00:00 2001 From: Belaya Date: Thu, 24 Apr 2025 18:55:07 -0500 Subject: [PATCH 28/31] to the end --- code/modules/surgery/organs/vocal_cords.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 6897002676..90a92c45d7 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -599,6 +599,7 @@ if(gainer.check_weight_prefs(FATTENING_TYPE_MAGIC)) //Make sure the listener(s) have magical wg enabled gainer.adjust_fatness(250, FATTENING_TYPE_MAGIC) //Nerfed down from 500 in oldcode to_chat(gainer, "As the great voice fills your ears, you suddenly grow heavier!") //Can only be seen by those with the appropriate pref toggled + //END GS13 CHANGES else cooldown = COOLDOWN_NONE From 4ef2741671781b6e08a101698e772e06a4251563 Mon Sep 17 00:00:00 2001 From: Belaya Date: Fri, 25 Apr 2025 17:01:02 -0500 Subject: [PATCH 29/31] Dance pole and clothesmate resupply pack in cargo --- GainStation13/code/modules/cargo/packs.dm | 15 +++++++++++++++ tgstation.dme | 1 + 2 files changed, 16 insertions(+) diff --git a/GainStation13/code/modules/cargo/packs.dm b/GainStation13/code/modules/cargo/packs.dm index 8ad82555fb..5c153e5aff 100644 --- a/GainStation13/code/modules/cargo/packs.dm +++ b/GainStation13/code/modules/cargo/packs.dm @@ -31,9 +31,24 @@ crate_name = "strange seeds crate" crate_type = /obj/structure/closet/crate/hydroponics +/datum/supply_pack/misc/stripperpole //oldcode port + name = "Stripper Pole Crate" + desc = "No private bar is complete without a stripper pole, show off the goods! Comes with a ready-to-assemble stripper pole, and a complementary wrench to get things set up!" + cost = 3550 + contains = list(/obj/item/polepack, + /obj/item/wrench) + crate_name = "stripper pole crate" + /datum/supply_pack/critter/fennec //ported from CHOMPstation2 name = "Fennec Crate" desc = "Why so ears?" cost = 5000 contains = list(/mob/living/simple_animal/pet/fox/fennec) crate_name = "fennec crate" + +/datum/supply_pack/vending/wardrobes/clothing //existing game item not in cargo for some reason + name = "ClothesMate Supply Crate" + desc = "ClothesMate missing your favorite outfit? Solve that issue today with this autodrobe refill." + cost = 1500 + contains = list(/obj/item/vending_refill/clothing) + crate_name = "clothesmate supply crate" diff --git a/tgstation.dme b/tgstation.dme index 5e428c8471..80e99c4284 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4158,6 +4158,7 @@ #include "hyperstation\code\obj\decal.dm" #include "hyperstation\code\obj\fleshlight.dm" #include "hyperstation\code\obj\kinkyclothes.dm" +#include "hyperstation\code\obj\pole.dm" #include "hyperstation\code\obj\sizeitems.dm" #include "hyperstation\code\obj\stargate_clothing.dm" #include "hyperstation\code\obj\ZaoCorp\hat.dm" From 4bcd425c828c4f32825feb23010239de40305c11 Mon Sep 17 00:00:00 2001 From: Belaya Date: Sat, 26 Apr 2025 10:17:06 -0500 Subject: [PATCH 30/31] PKA and PKC are fireproof --- code/modules/mining/equipment/kinetic_crusher.dm | 1 + code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 1 + 2 files changed, 2 insertions(+) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 6da752f17d..779f22e33a 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -8,6 +8,7 @@ name = "proto-kinetic crusher" desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club. \ While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna." + resistance_flags = FIRE_PROOF //GS13: Fireproof miner equipment force = 0 //You can't hit stuff unless wielded w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index e9b3695db9..fd352923c7 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -7,6 +7,7 @@ cell_type = /obj/item/stock_parts/cell/emproof item_flags = NONE obj_flags = UNIQUE_RENAME + resistance_flags = FIRE_PROOF //GS13: Fireproof miner equipment weapon_weight = WEAPON_LIGHT recoil = 0.5 can_flashlight = 1 From 15d919f1cda264ed32e0b59fdac2eedf628e1d44 Mon Sep 17 00:00:00 2001 From: Belaya Date: Sat, 26 Apr 2025 10:54:39 -0500 Subject: [PATCH 31/31] Ghosts can now look at the crew monitoring console --- code/game/machinery/computer/crew.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index bf690398a4..1f3233b7e4 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -15,7 +15,7 @@ /obj/machinery/computer/crew/syndie icon_keyboard = "syndie_key" -/obj/machinery/computer/crew/interact(mob/user) +/obj/machinery/computer/crew/ui_interact(mob/user) //GS13: Ghost crew monitor fix GLOB.crewmonitor.show(user,src) GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)