Merge branch 'master' of https://github.com/sheepishgoat/GS13-Citadel into maps-we-got-them

This commit is contained in:
evilew
2024-11-21 23:03:17 +01:00
714 changed files with 9588 additions and 2322 deletions
@@ -0,0 +1,19 @@
//GS13 Port
/mob/living/proc/mob_climax(forced_climax = FALSE, cause = "none")//This is just so I can test this shit without being forced to add actual content to get rid of arousal. Will be a very basic proc for a while.
set name = "Masturbate"
set category = "IC"
if(canbearoused && !restrained() && !stat)
if(mb_cd_timer <= world.time)
//start the cooldown even if it fails
mb_cd_timer = world.time + mb_cd_length
if(getArousal() >= ((max_arousal / 100) * 33))//33% arousal or greater required
src.visible_message("<span class='danger'>[src] starts masturbating!</span>", \
"<span class='userdanger'>You start masturbating.</span>")
if(do_after(src, 30, target = src))
src.visible_message("<span class='danger'>[src] relieves [p_them()]self!</span>", \
"<span class='userdanger'>You have relieved yourself.</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
setArousal(min_arousal)
else
to_chat(src, "<span class='notice'>You aren't aroused enough for that.</span>")
@@ -0,0 +1,189 @@
#define BORDER_CONTROL_DISABLED 0
#define BORDER_CONTROL_LEARNING 1
#define BORDER_CONTROL_ENFORCED 2
GLOBAL_LIST_EMPTY(whitelistedCkeys)
GLOBAL_VAR_INIT(borderControlFile, new /savefile("data/bordercontrol.db"))
GLOBAL_VAR_INIT(whitelistLoaded, FALSE)
//////////////////////////////////////////////////////////////////////////////////
proc/BC_ModeToText(mode)
switch(mode)
if(BORDER_CONTROL_DISABLED)
return "Disabled"
if(BORDER_CONTROL_LEARNING)
return "Learning"
if(BORDER_CONTROL_ENFORCED)
return "Enforced"
//////////////////////////////////////////////////////////////////////////////////
proc/BC_IsKeyAllowedToConnect(key)
key = ckey(key)
var/borderControlMode = CONFIG_GET(number/border_control)
if(borderControlMode == BORDER_CONTROL_DISABLED)
return 1
else if (borderControlMode == BORDER_CONTROL_LEARNING)
if(!BC_IsKeyWhitelisted(key))
log_and_message_admins("[key] has joined and was added to the border whitelist.")
BC_WhitelistKey(key)
return 1
else
return BC_IsKeyWhitelisted(key)
//////////////////////////////////////////////////////////////////////////////////
proc/BC_IsKeyWhitelisted(key)
key = ckey(key)
if(!GLOB.whitelistLoaded)
BC_LoadWhitelist()
if(LAZYISIN(GLOB.whitelistedCkeys, key))
return 1
else
return 0
//////////////////////////////////////////////////////////////////////////////////
//ADMIN_VERB_ADD(/client/proc/BC_WhitelistKeyVerb, R_ADMIN, FALSE)
///client/proc/BC_WhitelistKeyVerb()
/datum/admins/proc/BC_WhitelistKeyVerb()
set name = "Border Control - Whitelist Key"
set category = "Admin.Border Control"
var/key = input("CKey to Whitelist", "Whitelist Key") as null|text
if(key)
var/confirm = alert("Add [key] to the border control whitelist?", , "Yes", "No")
if(confirm == "Yes")
log_and_message_admins("added [key] to the border whitelist.")
BC_WhitelistKey(key)
//////////////////////////////////////////////////////////////////////////////////
proc/BC_WhitelistKey(key)
var/keyAsCkey = ckey(key)
if(!GLOB.whitelistLoaded)
BC_LoadWhitelist()
if(!keyAsCkey)
return 0
else
if(LAZYISIN(GLOB.whitelistedCkeys,keyAsCkey))
// Already in
return 0
else
LAZYINITLIST(GLOB.whitelistedCkeys)
ADD_SORTED(GLOB.whitelistedCkeys, keyAsCkey, /proc/cmp_text_asc)
BC_SaveWhitelist()
return 1
//////////////////////////////////////////////////////////////////////////////////
//ADMIN_VERB_ADD(/client/proc/BC_RemoveKeyVerb, R_ADMIN, FALSE)
///client/proc/BC_RemoveKeyVerb()
/datum/admins/proc/BC_RemoveKeyVerb()
set name = "Border Control - Remove Key"
set category = "Admin.Border Control"
var/keyToRemove = input("CKey to Remove", "Remove Key") as null|anything in GLOB.whitelistedCkeys
if(keyToRemove)
var/confirm = alert("Remove [keyToRemove] from the border control whitelist?", , "Yes", "No")
if(confirm == "Yes")
log_and_message_admins("removed [keyToRemove] from the border whitelist.")
BC_RemoveKey(keyToRemove)
return
//////////////////////////////////////////////////////////////////////////////////
proc/BC_RemoveKey(key)
key = ckey(key)
if(!LAZYISIN(GLOB.whitelistedCkeys, key))
return 1
else
if(GLOB.whitelistedCkeys)
GLOB.whitelistedCkeys.Remove(key)
BC_SaveWhitelist()
return 1
//////////////////////////////////////////////////////////////////////////////////
//ADMIN_VERB_ADD(/client/proc/BC_ToggleState, R_ADMIN, FALSE)
///client/proc/BC_ToggleState()
/datum/admins/proc/BC_ToggleState()
set name = "Border Control - Toggle Mode"
set category = "Admin.Border Control"
set desc="Enables or disables border control"
var/borderControlMode = CONFIG_GET(number/border_control)
var/choice = input("New State (Current state is: [BC_ModeToText(borderControlMode)])", "Border Control State") as null|anything in list("Disabled", "Learning", "Enforced")
switch(choice)
if("Disabled")
if(borderControlMode != BORDER_CONTROL_DISABLED)
borderControlMode = BORDER_CONTROL_DISABLED
log_and_message_admins("has disabled border control.")
if("Learning")
if(borderControlMode != BORDER_CONTROL_LEARNING)
borderControlMode = BORDER_CONTROL_LEARNING
log_and_message_admins("has set border control to learn new keys on connection!")
var/confirm = alert("Learn currently connected keys?", , "Yes", "No")
if(confirm == "Yes")
for(var/client/C in GLOB.clients)
if (BC_WhitelistKey(C.key))
log_and_message_admins("[key_name(usr)] added [C.key] to the border whitelist by adding all current clients.")
if("Enforced")
if(borderControlMode != BORDER_CONTROL_ENFORCED)
borderControlMode = BORDER_CONTROL_ENFORCED
log_and_message_admins("has enforced border controls. New keys can no longer join.")
CONFIG_SET(number/border_control, borderControlMode)
return
//////////////////////////////////////////////////////////////////////////////////
/hook/startup/proc/loadBorderControlWhitelistHook()
BC_LoadWhitelist()
return 1
//////////////////////////////////////////////////////////////////////////////////
/proc/BC_LoadWhitelist()
LAZYCLEARLIST(GLOB.whitelistedCkeys)
LAZYINITLIST(GLOB.whitelistedCkeys)
if(!GLOB.borderControlFile)
return 0
GLOB.borderControlFile["WhitelistedCkeys"] >> GLOB.whitelistedCkeys
GLOB.whitelistLoaded = 1
//////////////////////////////////////////////////////////////////////////////////
proc/BC_SaveWhitelist()
if(!GLOB.whitelistedCkeys)
return 0
if(!GLOB.borderControlFile)
return 0
GLOB.borderControlFile["WhitelistedCkeys"] << GLOB.whitelistedCkeys
@@ -0,0 +1,17 @@
//Roses dont exist here... Sad
// /datum/gear/head/rose
// name = "Rose"
// path = /obj/item/grown/rose
/datum/gear/head/sunflower
name = "Sunflower"
path = /obj/item/grown/sunflower
/datum/gear/head/poppy
name = "Poppy"
path = /obj/item/reagent_containers/food/snacks/grown/poppy
/datum/gear/head/harebell
name = "Harebell"
path = /obj/item/reagent_containers/food/snacks/grown/harebell
@@ -0,0 +1,3 @@
/datum/gear/uniform/modularjumpsuit
name = "Modular Jumpsuit (gray)"
path = /obj/item/clothing/under/color/grey/modular
@@ -31,6 +31,8 @@
var/fatness_vulnerable = FALSE
/// Similar to fatness_vulnerable, but with more extreme effects such as transformation/hypno.
var/extreme_fatness_vulnerable = FALSE
/// Can the person be transformed into an object?
var/object_tf
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
///What fatness level disables movement?
@@ -57,6 +59,8 @@
///Does the person wish to be involved with non-con weight gain events?
var/noncon_weight_gain = FALSE
///Does the person want to get into confrontation?
var/trouble_seeker = FALSE
//Does the person wish to be fed from bots?
var/bot_feeding = FALSE
@@ -69,7 +69,9 @@
name = "grey modular jumpsuit" //change name from base clothes to distinguish them
desc = "A tasteful grey jumpsuit that reminds you of the good old days. Now adjusts to the match the wearer's size!" //description same as above
var/icon_location = 'GainStation13/icons/mob/modclothes/graymodular.dmi' //specify the file path where the modular overlays for those clothes are located
var/icon_location = 'GainStation13/icons/mob/modclothes/graymodular.dmi' //Default belly
var/icon_round_location = 'GainStation13/icons/mob/modclothes/graymodular_round.dmi'
var/icon_stuffed_location = 'GainStation13/icons/mob/modclothes/graymodular_stuffed.dmi'
var/mob/living/carbon/U //instance a variable for keeping track of the user
/obj/item/clothing/under/color/grey/modular/equipped(mob/user, slot) //whenever the clothes are in someone's inventory the clothes keep track of who that user is
@@ -93,16 +95,43 @@
for(O in U.internal_organs) //check the user for the organs they have
if(istype(O, /obj/item/organ/genital/belly)) //if that organ is a belly
G = O //treat that organ as a genital
if(!adjusted) //check the style, if it needs to be the adjusted variants
if(G.size <= 9) //check that the size is within accepted values, NOTE: these need to be removed later, better to cap organ sizes to begin with
. += mutable_appearance(icon_location, "belly_[G.size]", GENITALS_UNDER_LAYER) //add, from the clothes' icon file the overlay corresponding to that genital at that size and draw it onto the layer
else //if not an expected size value, bigger than the max, default to max size
. += mutable_appearance(icon_location, "belly_9", GENITALS_UNDER_LAYER)
else //use the alternative adjusted sprites
if(G.size <= 9)
. += mutable_appearance(icon_location, "belly_[G.size]_d", GENITALS_UNDER_LAYER)
else
. += mutable_appearance(icon_location, "belly_9_d", GENITALS_UNDER_LAYER)
// Change to visually update sprite depending on fullness.
if(ishuman(O.owner))
// Get mob
var/mob/living/carbon/human/H = O.owner
// Check what belly shape the mob has
var/used_icon_location
switch(G.shape)
if("Soft Belly")
used_icon_location = icon_location
if("Round Belly")
used_icon_location = icon_round_location
var/size = 0
switch(H.fullness)
if(-100 to FULLNESS_LEVEL_BLOATED) // Normal
size = G.size
if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG) // Take the stuffed sprite of the same size
size = G.size
used_icon_location = icon_stuffed_location
if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ) // Take the stuffed sprite of size + 1
size = G.size + 1
used_icon_location = icon_stuffed_location
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)// Take the stuffed sprite of size + 2
size = G.size + 2
used_icon_location = icon_stuffed_location
if(!adjusted) //check the style, if it needs to be the adjusted variants
if(G.size <= 9+FULLNESS_STUFFED_EXTRA_SPRITE_SIZES) //check that the size is within accepted values, NOTE: these need to be removed later, better to cap organ sizes to begin with. Cap is 9 (max fat stage) + 2 (stuffed stages)
. += mutable_appearance(used_icon_location, "belly_[size]", GENITALS_FRONT_LAYER) //add, from the clothes' icon file the overlay corresponding to that genital at that size and draw it onto the layer
else //if not an expected size value, bigger than the max, default to max size
. += mutable_appearance(used_icon_location, "belly_11", GENITALS_FRONT_LAYER)
else //use the alternative adjusted sprites
if(G.size <= 9+FULLNESS_STUFFED_EXTRA_SPRITE_SIZES)
. += mutable_appearance(used_icon_location, "belly_[size]_d", GENITALS_FRONT_LAYER)
else
. += mutable_appearance(used_icon_location, "belly_11_d", GENITALS_FRONT_LAYER)
if(istype(O, /obj/item/organ/genital/butt)) //if that organ is the butt
G = O
if(mutantrace_variation == STYLE_DIGITIGRADE) //check if the suit needs to use sprites for digitigrade characters
@@ -0,0 +1,27 @@
/datum/round_event_control/vent_clog/fattening
name = "Clogged Vents: Fattening"
typepath = /datum/round_event/vent_clog/fattening
max_occurrences = 0
min_players = 5
description = "Spits out lipoifier foam through the scrubber system."
/datum/round_event/vent_clog/fattening
reagentsAmount = 50
/datum/round_event/vent_clog/fattening/announce()
priority_announce("The scrubbers network is experiencing an unexpected surge of lipo-related chemicals. Some ejection of contents may occur.", "Atmospherics alert")
/datum/round_event/vent_clog/fattening/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
if(vent && vent.loc && !vent.welded)
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
R.add_reagent(/datum/reagent/consumable/lipoifier, reagentsAmount)
var/datum/effect_system/foam_spread/foam = new
foam.set_up(200, get_turf(vent), R)
foam.start()
CHECK_TICK
@@ -0,0 +1,13 @@
/datum/reagent/consumable
var/use_gs_icon = FALSE
/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
icon = 'icons/obj/drinks.dmi'
if(reagents.reagent_list.len)
var/datum/reagent/R = reagents.get_master_reagent()
if(istype(R, /datum/reagent/consumable))
var/datum/reagent/consumable/C = R
if(C.use_gs_icon == TRUE)
icon = 'GainStation13/icons/obj/drinks.dmi'
..()
@@ -1,7 +1,6 @@
/obj/item/seeds/berry/blueberry
name = "pack of blueberry seeds"
desc = "These seeds grow into blueberry bushes."
icon_state = "seed-blueberry"
species = "blueberry"
plantname = "Blueberry Bush"
product = /obj/item/reagent_containers/food/snacks/grown/berries/blueberry
@@ -11,11 +10,18 @@
yield = 1
production = 10
rarity = 30
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-blueberry"
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
icon_dead = "berry-dead" // Same for the dead icon
icon_harvest = "blueberry-harvest"
/obj/item/reagent_containers/food/snacks/grown/berries/blueberry
seed = /obj/item/seeds/berry/blueberry
name = "bunch of blueberries"
desc = "Taste so good, you might turn blue!"
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "blueberrypile"
filling_color = "#5d00c7"
foodtype = FRUIT
@@ -1,8 +1,6 @@
/obj/item/seeds/lipoplant
name = "pack of adipolipus"
desc = "These seeds grow into a foreign plant."
icon = 'GainStation13/icons/obj/hydroponics/lipo_seeds.dmi'
icon_state = "lipo_seed"
species = "adipolipus"
plantname = "Adipolipus"
product = /obj/item/reagent_containers/food/snacks/grown/lipofruit
@@ -11,17 +9,19 @@
maturation = 8
production = 5
yield = 1
growing_icon = 'GainStation13/icons/obj/hydroponics/lipo_growing.dmi'
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-lipo"
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
icon_grow = "lipo-grow" // Uses one growth icons set for all the subtypes
icon_dead = "lipo-dead" // Same for the dead icon
icon_harvest = "lipo-harvest"
reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
/obj/item/reagent_containers/food/snacks/grown/lipofruit
seed = /obj/item/seeds/lipoplant
name = "lipofruit"
desc = "A foreign fruit with an hard shell. Perhaps something sharp could open it?"
icon = 'GainStation13/icons/obj/hydroponics/lipo_harvest.dmi'
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "lipo_nut"
item_state = "lipo_nut"
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
@@ -8,22 +8,26 @@
/obj/item/seeds/cannabis/munchies
name = "pack of munchies weed seeds"
desc = "These seeds grow into munchies weed."
icon_state = "seed-munchies"
species = "munchycannabis"
plantname = "Munchies Weed"
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
icon_dead = "munchycannabis-dead" // Same for the dead icon
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/orange)
mutatelist = list()
reagents_add = list(/datum/reagent/drug/space_drugs = 0.05,
/datum/reagent/drug/munchies = 0.10)
rarity = 69
icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-munchies"
growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
icon_dead = "munchycannabis-dead" // Same for the dead icon
icon_harvest = "munchycannabis-harvest"
/obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
seed = /obj/item/seeds/cannabis/munchies
name = "munchies cannabis leaf"
desc = "You feel hungry just looking at it."
icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "munchycannabis"
wine_power = 90
@@ -1,4 +1,4 @@
/datum/gear/bluespace_belt
/datum/gear/backpack/bluespace_belt
name = "Bluespace Belt"
category = LOADOUT_SUBCATEGORY_BACKPACK_GENERAL
path = /obj/item/bluespace_belt
+2 -4
View File
@@ -1,11 +1,9 @@
/datum/gear/syntech/ring
/datum/gear/gloves/syntech/ring
name = "Normalizer Ring"
category = LOADOUT_CATEGORY_GLOVES
path = /obj/item/clothing/gloves/ring/syntech
cost = 6
/datum/gear/syntech/band
/datum/gear/gloves/syntech/band
name = "Normalizer Band"
category = LOADOUT_CATEGORY_GLOVES
path = /obj/item/clothing/gloves/ring/syntech/band
cost = 6
+3 -6
View File
@@ -1,17 +1,14 @@
/datum/gear/syntech/pendant
/datum/gear/neck/syntech/pendant
name = "Normalizer Pendant"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech
cost = 6
/datum/gear/syntech/choker
/datum/gear/neck/syntech/choker
name = "Normalizer Choker"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech/choker
cost = 6
/datum/gear/syntech/collar
/datum/gear/neck/syntech/collar
name = "Normalizer Collar"
category = LOADOUT_CATEGORY_NECK
path = /obj/item/clothing/neck/syntech/collar
cost = 6
@@ -12,6 +12,7 @@
flavour_text = "After you've sold your soul to corporate overlords, your contract obliged you to enter cryostasis. \
Finally, after God knows how long, the cryopod system have awakened you with only a single sentence of information - welcome and lure in new guests into the freshly opened GATO restaurant!"
assignedrole = "Restaurant worker"
mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/fastfoodmanager
name = "Corporate cryostasis pod"
@@ -27,6 +28,7 @@
flavour_text = "After you've sold your soul to corporate overlords, your contract obliged you to enter cryostasis. \
Finally, after God knows how long, the cryopod system have awakened you with only a single sentence of information - make sure to keep the best care of GATO's restaurant, currently under your management! You have a higher say over your workers, but do not abuse this power."
assignedrole = "Restaurant manager"
mirrorcanloadappearance = TRUE
/obj/effect/mob_spawn/human/fastfood/Initialize(mapload)
. = ..()
@@ -108,6 +110,7 @@
death = FALSE
roundstart = FALSE
mob_species = /datum/species/human
mirrorcanloadappearance = TRUE
/datum/outfit/feeders_den/fanatic
name = "Feeder Fanatic"
@@ -152,6 +155,7 @@
death = FALSE
roundstart = FALSE
mob_species = /datum/species/human
mirrorcanloadappearance = TRUE
/datum/outfit/feeders_den/victim
name = "Den Victim"
@@ -0,0 +1,41 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
//I don't know why these need both mam_ears and human variants, because some other ear datums just work fine without that??
//It didn't want to show up otherwise so I'll keep it as that
/datum/sprite_accessory/ears/mam_ears/dragon //ported from Virgo
name = "Dragon"
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
icon_state = "dragon"
/datum/sprite_accessory/ears/human/dragon //ported from Virgo
name = "Dragon"
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
icon_state = "dragon"
/datum/sprite_accessory/ears/mam_ears/avali
name = "Avali"
icon_state = "avali"
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/human/avali
name = "Avali"
icon_state = "avali"
icon = 'GainStation13/icons/mob/markings/mam_ears.dmi'
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/human/fennec_tall
name = "Fennec (Tall)"
icon = 'GainStation13/icons/mob/32x64_mam_ears.dmi'
icon_state = "fennectall"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/ears/mam_ears/fennec_tall
name = "Fennec (Tall)"
icon = 'GainStation13/icons/mob/32x64_mam_ears.dmi'
icon_state = "fennectall"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
@@ -0,0 +1,22 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
/datum/sprite_accessory/frills/cobra
name = "Cobra Hood"
icon_state = "cobrahood"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
icon = 'hyperstation/icons/mob/snek.dmi'
/datum/sprite_accessory/frills/cobraslim
name = "Narrow Cobra Hood"
icon_state = "cobraslim"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
icon = 'hyperstation/icons/mob/snek.dmi'
/datum/sprite_accessory/frills/cobrahood_alt
name = "Cobra Hood - Alt"
icon_state = "cobrahood_alt"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
icon = 'hyperstation/icons/mob/snek.dmi'
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,11 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
/datum/sprite_accessory/hair/elize
name = "Elize"
icon = 'GainStation13/icons/mob/human_face.dmi'
icon_state = "hair_elize"
/datum/sprite_accessory/hair/lem
name = "Lem"
icon = 'GainStation13/icons/mob/human_face.dmi'
icon_state = "hair_lem"
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,63 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
/datum/sprite_accessory/taur/gator //ported from Vorestation
name = "Gator"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "gator"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
hide_legs = FALSE
/datum/sprite_accessory/taur/fatdrake //ported from Vorestation
name = "Fat Drake"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "fatdrake"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/taur/fatwolf //ported from Vorestation
name = "Fat Wolf"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "fatwolf"
color_src = MUTCOLORS
/datum/sprite_accessory/taur/fatliz //ported from Vorestation
name = "Fat Lizard"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "fatliz"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/taur/longtailfluff //ported from Vorestation
name = "Long Fluffy Tail"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "longtailfluff"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/taur/fatsynthwolf //ported from Vorestation
name = "Fat Synth Wolf"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "fatsynthwolf"
color_src = MUTCOLORS
/datum/sprite_accessory/taur/bigleggies //ported from Vorestation
name = "Big Leggies"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "bigleggy"
color_src = MUTCOLORS
/datum/sprite_accessory/taur/fatnaga //ported from Vorestation
name = "Fat Naga"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "fatnaga"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/taur/altnaga //ported from Vorestation
name = "Alt Naga"
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "altnaga"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
@@ -0,0 +1,55 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
/datum/sprite_accessory/snouts/mam_snouts/hjackal
name = "Jackal"
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
icon_state = "hjackal"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto1
name = "Synthetic Lizard - Prototype Visor 1"
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
icon_state = "synthlizproto1"
color_src = MATRIXED
/datum/sprite_accessory/snouts/mam_snouts/synthlizproto2
name = "Synthetic Lizard - Prototype Visor 2"
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
icon_state = "synthlizproto2"
color_src = MATRIXED
/datum/sprite_accessory/snouts/mam_snouts/gator
name = "Gator"
icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
icon_state = "gator"
color_src = MATRIXED
//eastern dragon
/datum/sprite_accessory/snouts/mam_snouts/easterndragon
name = "Eastern Dragon"
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
icon_state = "easterndw"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/snouts/mam_snouts/easterndragon/no_whiskers
name = "Eastern Dragon - No Whiskers"
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
icon_state = "easterndnw"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon
name = "Eastern Dragon (Top)"
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
icon_state = "feasterndw"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/snouts/mam_snouts/feasterndragon/no_whiskers
name = "Eastern Dragon - No Whiskers (Top)"
icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
icon_state = "feasterndnw"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
@@ -0,0 +1,92 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
//snaketail
/datum/sprite_accessory/tails/lizard/snaketail //GS13 - ...6 seperate paths for one tail. Wew.
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/tails_animated/lizard/snaketail
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/tails/human/snaketail
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/tails_animated/human/snaketail
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/tails/mam_tails/snaketail
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
/datum/sprite_accessory/tails_animated/mam_tails_animated/snaketail
name = "Snaketail"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "snaketail"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
//spaded tail
/datum/sprite_accessory/tails/mam_tails/spade
name = "Demon Spade"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "spade"
/datum/sprite_accessory/tails_animated/mam_tails_animated/spade
name = "Demon Spade"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "spade"
/datum/sprite_accessory/tails/human/spade
name = "Demon Spade"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "spade"
/datum/sprite_accessory/tails_animated/human/spade
name = "Demon Spade"
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
icon_state = "spade"
//deer tail
/datum/sprite_accessory/tails/human/deer
name = "Deer"
icon_state = "deer"
color_src = MATRIXED
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
/datum/sprite_accessory/tails_animated/human/deer
name = "Deer"
icon_state = "deer"
color_src = MATRIXED
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
/datum/sprite_accessory/tails/mam_tails/deer
name = "Deer"
icon_state = "deer"
color_src = MATRIXED
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
/datum/sprite_accessory/tails_animated/mam_tails_animated/deer
name = "Deer"
icon_state = "deer"
color_src = MATRIXED
icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
@@ -0,0 +1 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
+29 -5
View File
@@ -7,16 +7,18 @@
slot = ORGAN_SLOT_BELLY
w_class = 3
size = 0
shape = DEF_BELLY_SHAPE
var/statuscheck = FALSE
shape = "belly"
genital_flags = UPDATE_OWNER_APPEARANCE
masturbation_verb = "massage"
var/sent_full_message = TRUE //defaults to 1 since they're full to start
var/inflatable = FALSE //For inflation connoisseurs
var/size_cached = 0
var/prev_size = 0
layer_index = BELLY_LAYER_INDEX
/obj/item/organ/genital/belly/modify_size(modifier, min = BELLY_SIZE_DEF, max = BELLY_SIZE_MAX)
var/new_value = clamp(size_cached + modifier, min, max)
var/new_value = clamp(size_cached + modifier, starting_size, max)
if(new_value == size_cached)
return
prev_size = size_cached
@@ -26,7 +28,26 @@
..()
/obj/item/organ/genital/belly/update_appearance()
icon_state = "belly_[shape]_[size]"
//GS13 - Port Stuffed states
// Default settings
var/datum/sprite_accessory/S = GLOB.belly_shapes_list[shape] //GS13 - get belly shape
var/icon_shape_state = S ? S.icon_state : "belly" //fallback to default belly in case we cant find a shape
icon_state = "belly_[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
// Change belly sprite and size based on current fullness
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...
@@ -42,8 +63,11 @@
if(D.species.use_skintones && D.features["genitals_use_skintone"])
color = SKINTONE2HEX(H.skin_tone)
else
color = "[D.features["belly_color"]]"
size = "[D.features["belly_size"]]"
color = "#[D.features["belly_color"]]"
size = D.features["belly_size"]
starting_size = D.features["belly_size"]
shape = D.features["belly_shape"]
inflatable = D.features["inflatable_belly"]
toggle_visibility(D.features["belly_visibility"], FALSE)
@@ -2,7 +2,7 @@
if(!ishuman(src))
return
if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reducion_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
if(fullness >= FULLNESS_LEVEL_BLOATED && fullness_reduction_timer + FULLNESS_REDUCTION_COOLDOWN < world.time)
fullness -= amount // Remove Fullness
@@ -239,7 +239,10 @@
fatness_delay += (H.fatness / FATNESS_LEVEL_IMMOBILE) * FATNESS_WEAKLEGS_MODIFIER
fatness_delay = min(fatness_delay, 60)
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay)
if(fatness_delay)
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/fatness, TRUE, fatness_delay)
else
H.remove_movespeed_modifier(/datum/movespeed_modifier/fatness)
if(HAS_TRAIT(H, TRAIT_BLOB))
handle_fatness_trait(
@@ -13,6 +13,7 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/glyphid_slammer
name = "Glyphid slammer"
@@ -26,3 +27,4 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
use_gs_icon = TRUE
@@ -11,6 +11,7 @@
glass_name = "belly bloats"
glass_desc = "The perfect mix to be big and merry with."
shot_glass_icon_state = "shotglassbrown"
use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/belly_bloats/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -30,6 +31,7 @@
glass_name = "blobby mary"
glass_desc = "For the morbidly obese ladies and gentlemen."
shot_glass_icon_state = "shotglassred"
use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/blobby_mary/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -49,6 +51,7 @@
glass_name = "beltbuster mead"
glass_desc = "The ambrosia of the blubbery gods."
shot_glass_icon_state = "shotglassgold"
use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/beltbuster_mead/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -67,6 +70,7 @@
glass_name = "heavy cafe"
glass_desc = "To enjoy slow mornings with."
shot_glass_icon_state = "shotglassbrown"
use_gs_icon = TRUE
/datum/reagent/consumable/heavy_cafe/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -92,6 +96,7 @@
glass_name = "fruits tea"
glass_desc = "Goes down really easy and stays there for a long time."
shot_glass_icon_state = "shotglassgold"
use_gs_icon = TRUE
/datum/reagent/consumable/fruits_tea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
@@ -118,6 +123,7 @@
glass_name = "snakebite"
glass_desc = "Won't hurt like a real bite, but you'll still regert drinking this."
shot_glass_icon_state = "shotglassgreen"
use_gs_icon = TRUE
/datum/reagent/consumable/snakebite/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -0,0 +1,17 @@
// GS13 subtle glitters
/datum/reagent/glitter/pink_subtle
name = "lesser pink glitter"
description = "pink sparkles that get everywhere. these ones seem lower density than normal."
color = "#ff8080" //A light pink color
glitter_type = /obj/effect/decal/cleanable/glitter/pink_subtle
/datum/reagent/glitter/white_subtle
name = "lesser white glitter"
description = "white sparkles that get everywhere. these ones seem lower density than normal."
glitter_type = /obj/effect/decal/cleanable/glitter/white_subtle
/datum/reagent/glitter/blue_subtle
name = "lesser blue glitter"
description = "blue sparkles that get everywhere. these ones seem lower density than normal."
color = "#4040FF" //A blueish color
glitter_type = /obj/effect/decal/cleanable/glitter/blue_subtle
@@ -5,7 +5,7 @@
name = "lipoifier"
id = /datum/reagent/consumable/lipoifier
results = list(/datum/reagent/consumable/lipoifier = 3)
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/cornoil = 1, /datum/reagent/medicine/synthflesh = 1)
required_reagents = list(/datum/reagent/consumable/caramel = 1, /datum/reagent/consumable/cornoil = 1, /datum/reagent/medicine/synthflesh = 1)
/datum/chemical_reaction/lipolicide
@@ -0,0 +1,20 @@
///////////////////////////////// SUBTLE GLITTERS ////////////////////////////
/datum/chemical_reaction/lesser_pink
name = "pink glitter dilution"
id = "lesser_pink_glitter"
results = list(/datum/reagent/glitter/pink_subtle = 2)
required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/space_cleaner = 1) //You clean some of it away, I guess?
/datum/chemical_reaction/lesser_white
name = "white glitter dilution"
id = "lesser_white_glitter"
results = list(/datum/reagent/glitter/white_subtle = 2)
required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/space_cleaner = 1)
/datum/chemical_reaction/lesser_blue
name = "pink glitter dilution"
id = "lesser_blue_glitter"
results = list(/datum/reagent/glitter/blue_subtle = 2)
required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/space_cleaner = 1)
//Im not going to do the recolor recipes for the subtle glitters. Unless that's really wanted (except you cant even make glitter to start with so the recipes are already super niche to begin with.)
@@ -5,3 +5,43 @@
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500)
build_path = /obj/item/assembly/infra/fat
category = list("initial", "Misc")
/datum/design/small_cup
name = "Small Gulp Cup"
id = "Small_Gulp"
build_type = AUTOLATHE
materials = list(/datum/material/plastic=200)
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/small
category = list("initial","Dinnerware")
/datum/design/medium_cup
name = "Medium Gulp Cup"
id = "Medium_Gulp"
build_type = AUTOLATHE
materials = list(/datum/material/plastic=300)
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/medium
category = list("initial","Dinnerware")
/datum/design/small_cup
name = "Big Gulp Cup"
id = "Big_Gulp"
build_type = AUTOLATHE
materials = list(/datum/material/plastic=500)
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/big
category = list("initial","Dinnerware")
/datum/design/extra_big_cup
name = "Extra Big Gulp Cup"
id = "Extra_Big_Gulp"
build_type = AUTOLATHE
materials = list(/datum/material/plastic=600)
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/extra_big
category = list("initial","Dinnerware")
/datum/design/super_extra_big_cup
name = "Super Extra Big Gulp Cup"
id = "Super_Extra_Big_Gulp"
build_type = AUTOLATHE
materials = list(/datum/material/plastic=1000)
build_path = /obj/item/reagent_containers/food/drinks/flask/paper_cup/super_extra_big
category = list("initial","Dinnerware")
@@ -0,0 +1,15 @@
/datum/design/mutagen
name = "10u Unstable Mutagen"
id = "mutagen_biogen"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 25)
make_reagents = list(/datum/reagent/toxin/mutagen = 10)
category = list("initial","Botany Chemicals")
/datum/design/flour
name = "10u Flour"
id = "flour_biogen"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 25)
make_reagents = list(/datum/reagent/consumable/flour = 10)
category = list("initial","Organic Materials")
@@ -0,0 +1,26 @@
/obj/item/borg/upgrade/feeding_arm
name = "food gripper module"
desc = "An extra module that allows cyborgs to grab food and drinks, and feed them to people."
icon_state = "cyborg_upgrade3"
/obj/item/borg/upgrade/feeding_arm/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
var/obj/item/gripper/food/S = new(R.module)
R.module.basic_modules += S
R.module.add_module(S, FALSE, TRUE)
/obj/item/borg/upgrade/feeding_arm/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
var/obj/item/gripper/food/S = locate() in R.module
R.module.remove_module(S, TRUE)
/obj/item/gripper/food
name = "food gripper"
desc = "A simple grasping tool for interacting with various food and drink related items."
item_flags = NOBLUDGEON
can_hold = list(
/obj/item/reagent_containers,
)
@@ -85,7 +85,7 @@
id = "bluespace_belt"
build_type = PROTOLATHE
construction_time = 100
materials = list(/datum/material/silver = 4000, /datum/material/gold = 4000, MAT_BLUESPACE = 2000, )
materials = list(/datum/material/silver = 4000, /datum/material/gold = 4000, /datum/material/bluespace = 2000, )
build_path = /obj/item/bluespace_belt
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
@@ -96,7 +96,7 @@
id = "cookie_synthesizer"
build_type = PROTOLATHE
construction_time = 100
materials = list(/datum/material/silver = 4000, /datum/material/uranium = 1000, MAT_BLUESPACE = 1000, /datum/material/calorite = 2000)
materials = list(/datum/material/silver = 4000, /datum/material/uranium = 1000, /datum/material/bluespace = 1000, /datum/material/calorite = 2000)
build_path = /obj/item/cookiesynth
category = list("Misc", "Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
@@ -107,7 +107,7 @@
id = "borg_upgrade_cookiesynthesizer"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/cookiesynth
materials = list(/datum/material/iron=10000, /datum/material/gold=1500, /datum/material/uranium=250, MAT_PLASMA=1500)
materials = list(/datum/material/iron=10000, /datum/material/gold=1500, /datum/material/uranium=250, /datum/material/plasma=1500)
construction_time = 100
category = list("Cyborg Upgrade Modules")
@@ -129,6 +129,15 @@
construction_time = 100
category = list("Cyborg Upgrade Modules")
/datum/design/borg_foodgrip
name = "Cyborg Upgrade (Food Gripper)"
id = "borg_upgrade_foodgrip"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/feeding_arm
materials = list(/datum/material/iron = 8000, /datum/material/glass = 6000)
construction_time = 100
category = list("Cyborg Upgrade Modules")
//todo: make a seperate file for extra borg modules
/obj/item/borg/upgrade/cookiesynth