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) 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..20a9145169 --- /dev/null +++ b/GainStation13/code/game/objects/items/storage/firstaid.dm @@ -0,0 +1,24 @@ +//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." + +/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..2ec39e1c82 --- /dev/null +++ b/GainStation13/code/game/objects/structures/crates_lockers/closets/secure/psychology.dm @@ -0,0 +1,17 @@ +/obj/structure/closet/secure_closet/psychology //GS13: Psychologist job equip locker + 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/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/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/mob/living/species.dm b/GainStation13/code/modules/mob/living/species.dm index be06bf55c6..b71ba4816c 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..d2eb5afbe0 --- /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 + 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["taur_inflatable_belly"] + toggle_visibility(D.features["taur_belly_visibility"], FALSE) + + 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) 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 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..98c6340149 --- /dev/null +++ b/GainStation13/code/modules/reagents/reagent_containers/pill.dm @@ -0,0 +1,18 @@ +//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." + 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/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 0000000000..e3cf3151fb Binary files /dev/null and b/GainStation13/icons/obj/genitals/taur_belly/taur_belly_drake.dmi differ 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/access.dm b/code/__DEFINES/access.dm index c2021a86f2..d389d22d8d 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 //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/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index a5b36e862e..d8fbff214e 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -9,11 +9,12 @@ #define BUTT_LAYER_INDEX 1 #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 4 +#define 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/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 86383a50b2..1933fae180 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 //GS13: Psychologist +#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/__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 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 9f36dc0b92..4beec681c7 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -290,6 +290,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" 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..48034a8f23 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, + "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 "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, 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))) 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, )) 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) 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 f70c97c512..9308e8ab23 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 @@ -871,10 +871,27 @@ 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 + 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["taur_inflatable_belly"] == 1 ? "Yes" : "No"]" + dat += "" + dat += "" + //Markings if(MARKINGS_CHAR_TAB) @@ -2547,6 +2564,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() @@ -2843,7 +2862,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 @@ -3160,6 +3212,11 @@ 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("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 2836b6d7b7..400638ebef 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_taur_inflatable_belly"] >> features["taur_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"] @@ -1087,6 +1097,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") @@ -1326,6 +1341,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_taur_inflatable_belly"], features["taur_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/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..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_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) + 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 @@ -329,6 +329,8 @@ return "Network Access" if(ACCESS_CLONING) return "Cloning Room" + if(ACCESS_PSYCH) + return "Psychology Office" //GS13: Psychologist job /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..f5f70f33b1 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) //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 c20e5284d1..d3ca4176fc 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) //GS13 edit: Psychologist job 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/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 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 diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index a99b6a926e..f75fb72272 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -360,6 +360,13 @@ /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 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) to_chat(H, "You must keep your connector out while charging!") @@ -378,14 +385,28 @@ 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) - to_chat(H, "You are now fully charged.") - break + //GS13 EDIT START + 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 + //GS13 EDIT END 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 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) to_chat(H, "You must keep your connector out while charging!") @@ -397,8 +418,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) - if(H.nutrition > NUTRITION_LEVEL_WELL_FED) - to_chat(H, "You are now fully charged.") - break + // GS13 EDIT START + if(H.nutrition >= NUTRITION_LEVEL_WELL_FED) + 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].") diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 7cb8ce9538..90a92c45d7 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,24 @@ 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) + 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) + 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 diff --git a/hyperstation/code/modules/arousal/arousalhud.dm b/hyperstation/code/modules/arousal/arousalhud.dm index b6ebec95c3..fee4d90bbb 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... @@ -129,6 +137,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") @@ -238,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.modify_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.modify_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 diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index b3e152e3e1..8d82ffa17c 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ 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 6e61b5dc1d..dae6690f2f 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" @@ -4042,6 +4045,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" @@ -4067,6 +4071,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" @@ -4080,6 +4085,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" @@ -4158,6 +4164,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"