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 += "