Merge branch 'master' into testbranch

This commit is contained in:
eyespy
2023-03-26 21:21:03 +11:00
committed by GitHub
77 changed files with 10590 additions and 5517 deletions
+1
View File
@@ -25,6 +25,7 @@
#define EFFECT_IRRADIATE "irradiate"
#define EFFECT_STUTTER "stutter"
#define EFFECT_SLUR "slur"
#define EFFECT_BURPSLUR "burpslur" //GS13 - uncontrolled burp effect
#define EFFECT_EYE_BLUR "eye_blur"
#define EFFECT_DROWSY "drowsy"
#define EFFECT_JITTER "jitter"
+10
View File
@@ -88,6 +88,16 @@
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
// Hair Gradients - Initialise all /datum/sprite_accessory/hair_gradient into an list indexed by gradient-style name
for(var/path in subtypesof(/datum/sprite_accessory/hair_gradient))
var/datum/sprite_accessory/hair_gradient/H = new path()
GLOB.hair_gradients_list[H.name] = H
init_subtypes(/datum/crafting_recipe, GLOB.crafting_recipes)
//creates every subtype of prototype (excluding prototype) and adds it to list L.
//if no list/L is provided, one is created.
/proc/init_subtypes(prototype, list/L)
+1
View File
@@ -6,6 +6,7 @@ GLOBAL_LIST_EMPTY(hair_styles_female_list) //stores only hair names
GLOBAL_LIST_EMPTY(facial_hair_styles_list) //stores /datum/sprite_accessory/facial_hair indexed by name
GLOBAL_LIST_EMPTY(facial_hair_styles_male_list) //stores only hair names
GLOBAL_LIST_EMPTY(facial_hair_styles_female_list) //stores only hair names
GLOBAL_LIST_EMPTY(hair_gradients_list) //stores /datum/sprite_accessory/hair_gradient indexed by name
//Underwear
GLOBAL_LIST_EMPTY(underwear_list) //stores /datum/sprite_accessory/underwear/bottom indexed by name
GLOBAL_LIST_EMPTY(underwear_m) //stores only underwear name
@@ -111,6 +111,8 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint
/obj/item/storage/pill_bottle/penis_enlargement = 2,
/obj/item/storage/pill_bottle/breast_enlargement = 2,
/obj/item/trash/fatoray_scrap1 = 2, //GS13 - added for researching fat guns
/obj/item/trash/fatoray_scrap2 = 2,
/obj/item/clothing/shoes/wheelys = 1,
/obj/item/clothing/shoes/kindleKicks = 1,
/obj/item/autosurgeon/penis = 1,
+1
View File
@@ -324,6 +324,7 @@
suffix = "feeders_den.dmm"
name = "Feeder Den"
description = "What used to be a small Syndicate prison and interrogration facility has been taken over by a degenerate madman and turned into a den fit for one purpose - to fatten up its captives."
placement_weight = 5
/datum/map_template/ruin/space/fastfood //GS13
id = "fastfood"
+36 -1
View File
@@ -467,4 +467,39 @@
// Abductor Replication Lab
/area/ruin/space/has_grav/powered/advancedlab
name = "Abductor Replication Lab"
icon_state = "yellow"
icon_state = "yellow"
//GS13 RUINS AND OTHER EXCLUSIVE AREAS
//We should probably move this to our own file later - Sono
/area/crew_quarters/fitness/sauna
name = "Saunas"
icon_state = "dk_yellow"
/area/xenoarch/caloriteresearch_powered
name = "Research Facility Ruins"
icon_state = "dk_yellow"
power_light = TRUE
/area/xenoarch/caloriteresearch_unpowered
name = "Research Facility Ruins"
icon_state = "dk_yellow"
power_light = TRUE
/area/ruin/space/has_grav/fastfood_main
name = "Restaurant Main Area"
has_gravity = TRUE
/area/ruin/space/has_grav/fastfood_employee
name = "Restaurant Employee Area"
has_gravity = TRUE
/area/lavaland/surface/snackstore
name = "Snack Store"
icon_state = "mining"
power_light = TRUE
/area/ruin/space/has_grav/feedersden
name = "Unknown Outpost"
has_gravity = TRUE
@@ -74,6 +74,8 @@
/obj/item/cigbutt = 1,
/obj/item/trash/cheesie = 1,
/obj/item/trash/candy = 1,
/obj/item/trash/fatoray_scrap1 = 1,
/obj/item/trash/fatoray_scrap2 = 1,
/obj/item/trash/chips = 1,
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
/obj/item/trash/pistachios = 1,
+60
View File
@@ -0,0 +1,60 @@
/obj/item/dyespray
name = "hair dye spray"
desc = "A spray to dye your hair any gradients you'd like."
icon = 'icons/obj/dyespray.dmi'
icon_state = "dyespray"
var/uses = 10 //SKYRAT EDIT ADDITION
/obj/item/dyespray/attack_self(mob/user)
dye(user)
/obj/item/dyespray/pre_attack(atom/target, mob/living/user, params)
dye(target)
return ..()
/**
* Applies a gradient and a gradient color to a mob.
*
* Arguments:
* * target - The mob who we will apply the gradient and gradient color to.
*/
/obj/item/dyespray/proc/dye(mob/target)
if(!ishuman(target))
return
if(!uses) //SKYRAT EDIT ADDITION
return //SKYRAT EDIT ADDITION
var/mob/living/carbon/human/human_target = target
var/new_hair_color = input(usr, "Choose a base hair color:", "Character Preference","#"+human_target.hair_color) as color|null
if(!new_hair_color)
return
var/new_grad_style = input(usr, "Choose a color pattern:", "Character Preference") as null|anything in GLOB.hair_gradients_list
if(!new_grad_style)
return
var/new_grad_color = input(usr, "Choose a secondary hair color:", "Character Preference","#"+human_target.grad_color) as color|null
if(!new_grad_color)
return
human_target.hair_color = sanitize_hexcolor(new_hair_color)
human_target.grad_style = new_grad_style
human_target.grad_color = sanitize_hexcolor(new_grad_color)
to_chat(human_target, "<span class='notice'>You start applying the hair dye...</span>")
if(!do_after(usr, 30, target = human_target))
return
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair()
//SKYRAT EDIT ADDITION
uses--
/obj/item/dyespray/examine(mob/user)
. = ..()
. += "It has [uses] uses left."
//SKYRAT EDIT END
@@ -597,6 +597,45 @@
beakers += B1
beakers += B2
//GS13 - fattening grenade presets
/obj/item/grenade/chem_grenade/lipoifier_strong
name = "lipoifier grenade"
desc = "For when you want everyone in the room to gain a couple hundred pounds."
stage = READY
/obj/item/grenade/chem_grenade/lipoifier_strong/Initialize()
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent(/datum/reagent/consumable/lipoifier, 250)
B1.reagents.add_reagent(/datum/reagent/potassium, 40)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 40)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 40)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/lipoifier_weak
name = "lipoifier grenade"
desc = "For when you want everyone in the room to gain a couple dozen pounds."
stage = READY
/obj/item/grenade/chem_grenade/lipoifier_weak/Initialize()
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent(/datum/reagent/consumable/lipoifier, 40)
B1.reagents.add_reagent(/datum/reagent/potassium, 20)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 20)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 20)
beakers += B1
beakers += B2
#undef READY
#undef WIRED
#undef EMPTY
@@ -290,7 +290,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
sheettype = "calorite"
materials = list(MAT_CALORITE=MINERAL_MATERIAL_AMOUNT)
novariants = TRUE
grind_results = list(/datum/reagent/consumable/lipoifier = 10)
grind_results = list(/datum/reagent/consumable/lipoifier = 5)
point_value = 40
merge_type = /obj/item/stack/sheet/mineral/calorite
+25 -52
View File
@@ -333,7 +333,7 @@
var/active = null
var/last_event = 0
/obj/structure/statue/calorite/fatty/proc/beacon()
/obj/structure/statue/calorite/fatty/proc/beckon()
if(!active)
if(world.time > last_event+15)
active = 1
@@ -344,70 +344,43 @@
return
return
/obj/structure/statue/calorite/fatty/proc/statue_fatten(mob/living/carbon/M)
if(!M.adjust_fatness(20, FATTENING_TYPE_ITEM))
to_chat(M, "<span class='warning'>Nothing happens.</span>")
return
if(M.fatness < FATNESS_LEVEL_FATTER)
to_chat(M, "<span class='warning'>The moment your hand meets the statue, you feel a little warmer...</span>")
else if(M.fatness < FATNESS_LEVEL_OBESE)
to_chat(M, "<span class='warning'>Upon each poke of the statue, you feel yourself get a little heavier.</span>")
else if(M.fatness < FATNESS_LEVEL_EXTREMELY_OBESE)
to_chat(M, "<span class='warning'>With each touch you keep getting fatter... But the fatter you grow, the more enticed you feel to poke the statue.</span>")
else if(M.fatness < FATNESS_LEVEL_BARELYMOBILE)
to_chat(M, "<span class='warning'>The world around you blurs as you focus on prodding the statue, your waistline widening further...</span>")
else if(M.fatness < FATNESS_LEVEL_IMMOBILE)
to_chat(M, "<span class='warning'>A whispering voice gently compliments your massive body, your own mind begging to touch the statue more.</span>")
else
to_chat(M, "<span class='warning'>You can barely reach the statue past your floor-covering stomach! And yet, it still calls to you...</span>")
/obj/structure/statue/calorite/fatty/Bumped(atom/movable/AM)
beacon()
beckon()
..()
/obj/structure/statue/calorite/fatty/Crossed(var/mob/AM)
.=..()
if(!.)
if(istype(AM))
beacon()
beckon()
/obj/structure/statue/calorite/fatty/Moved(atom/movable/AM)
beacon()
beckon()
..()
/obj/structure/statue/calorite/fatty/attackby(obj/item/W, mob/living/carbon/M, params)
if(!M.adjust_fatness(20, FATTENING_TYPE_ITEM))
to_chat(M, "<span class='warning'>Nothing happens.</span>")
return
if(M.fatness < 200)
to_chat(M, "<span class='warning'>The moment your hand meets the statue, you feel a little warmer...</span>")
if(HAS_TRAIT(M, TRAIT_FAT))
to_chat(M, "<span class='warning'>Upon each poke of the statue, you feel yourself get a little heavier.</span>")
if(HAS_TRAIT(M, TRAIT_OBESE))
to_chat(M, "<span class='warning'>With each touch you keep getting fatter... But the fatter you grow, the more enticed you feel to poke the statue.</span>")
if(HAS_TRAIT(M, TRAIT_MORBIDLYOBESE))
to_chat(M, "<span class='warning'>The world around you blurs as you focus on prodding the statue, your waistline widening further...</span>")
if(HAS_TRAIT(M, TRAIT_IMMOBILE))
to_chat(M, "<span class='warning'>A whispering voice gently compliments your massive body, your own mind begging to touch the statue more.</span>")
if(HAS_TRAIT(M, TRAIT_BLOB))
to_chat(M, "<span class='warning'>You can barely reach the statue past your floor-covering stomach! And yet, it still calls to you...</span>")
statue_fatten(M)
/obj/structure/statue/calorite/fatty/attack_hand(mob/living/carbon/M)
if(!M.adjust_fatness(20, FATTENING_TYPE_ITEM))
to_chat(M, "<span class='warning'>Nothing happens.</span>")
return
if(M.fatness < 200)
to_chat(M, "<span class='warning'>The moment your hand meets the statue, you feel a little warmer...</span>")
if(HAS_TRAIT(M, TRAIT_FAT))
to_chat(M, "<span class='warning'>Upon each poke of the statue, you feel yourself get a little heavier.</span>")
if(HAS_TRAIT(M, TRAIT_OBESE))
to_chat(M, "<span class='warning'>With each touch you keep getting fatter... But the fatter you grow, the more enticed you feel to poke the statue.</span>")
if(HAS_TRAIT(M, TRAIT_MORBIDLYOBESE))
to_chat(M, "<span class='warning'>The world around you blurs as you focus on prodding the statue, your waistline widening further...</span>")
if(HAS_TRAIT(M, TRAIT_IMMOBILE))
to_chat(M, "<span class='warning'>A whispering voice gently compliments your massive body, your own mind begging to touch the statue more.</span>")
if(HAS_TRAIT(M, TRAIT_BLOB))
to_chat(M, "<span class='warning'>You can barely reach the statue past your floor-covering stomach! And yet, it still calls to you...</span>")
statue_fatten(M)
/obj/structure/statue/calorite/fatty/attack_paw(mob/living/carbon/M)
if(!M.adjust_fatness(20, FATTENING_TYPE_ITEM))
to_chat(M, "<span class='warning'>Nothing happens.</span>")
return
if(M.fatness < 200)
to_chat(M, "<span class='warning'>The moment your hand meets the statue, you feel a little warmer...</span>")
if(HAS_TRAIT(M, TRAIT_FAT))
to_chat(M, "<span class='warning'>Upon each poke of the statue, you feel yourself get a little heavier.</span>")
if(HAS_TRAIT(M, TRAIT_OBESE))
to_chat(M, "<span class='warning'>With each touch you keep getting fatter... But the fatter you grow, the more enticed you feel to poke the statue.</span>")
if(HAS_TRAIT(M, TRAIT_MORBIDLYOBESE))
to_chat(M, "<span class='warning'>The world around you blurs as you focus on prodding the statue, your waistline widening further...</span>")
if(HAS_TRAIT(M, TRAIT_IMMOBILE))
to_chat(M, "<span class='warning'>A whispering voice gently compliments your massive body, your own mind begging to touch the statue more.</span>")
if(HAS_TRAIT(M, TRAIT_BLOB))
to_chat(M, "<span class='warning'>You can barely reach the statue past your floor-covering stomach! And yet, it still calls to you...</span>")
statue_fatten(M)
@@ -215,7 +215,7 @@
var/last_event = 0
var/active = null
///How much fatness is added to the user upon crossing?
var/fat_to_add = 50
var/fat_to_add = 30
/turf/open/floor/mineral/calorite/Entered(mob/living/carbon/M)
if(!istype(M, /mob/living/carbon))
@@ -238,6 +238,7 @@
icon_state = "calorite_strong"
floor_tile = /obj/item/stack/tile/mineral/calorite/strong
icons = list("calorite_strong","calorite_dam")
fat_to_add = 100
// calorite dance floor, groovy! - GS13
+17
View File
@@ -12,3 +12,20 @@
barefootstep = FOOTSTEP_WATER
clawfootstep = FOOTSTEP_WATER
heavyfootstep = FOOTSTEP_WATER
/turf/open/chocolateriver
gender = PLURAL
name = "liquid chocolate"
desc = "This is probably used for some kind of huge fountain."
icon = 'Gainstation13/icons/turf/floor_candy.dmi'
icon_state = "chocwater"
slowdown = 1
bullet_sizzle = TRUE
bullet_bounce_sound = null //needs a splashing sound one day.
footstep = FOOTSTEP_WATER
barefootstep = FOOTSTEP_WATER
clawfootstep = FOOTSTEP_WATER
heavyfootstep = FOOTSTEP_WATER
+34 -1
View File
@@ -96,6 +96,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/eye_color = "000" //Eye color
var/wing_color = "fff" //Wing color
var/grad_style //Hair gradient style
var/grad_color = "FFFFFF" //Hair gradient color
//HS13
var/body_size = 100 //Body Size in percent
var/can_get_preg = 0 //if they can get preggers
@@ -511,6 +514,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<a href='?_src_=prefs;preference=previous_facehair_style;task=input'>&lt;</a> <a href='?_src_=prefs;preference=next_facehair_style;task=input'>&gt;</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[facial_hair_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=facial;task=input'>Change</a><BR>"
dat += "<h3>Hair Gradient</h3>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=grad_style;task=input'>[grad_style]</a>"
dat += "<a href='?_src_=prefs;preference=previous_grad_style;task=input'>&lt;</a> <a href='?_src_=prefs;preference=next_grad_style;task=input'>&gt;</a><BR>"
dat += "<span style='border: 1px solid #161616; background-color: #[grad_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=grad_color;task=input'>Change</a><BR>"
dat += "</td>"
//Mutant stuff
var/mutant_category = 0
@@ -1008,7 +1019,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<h2>Citadel Preferences</h2>" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe.
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
dat += "<b>Exhibitionist:</b><a href='?_src_=prefs;preference=exhibitionist'>[features["exhibitionist"] == TRUE ? "Yes" : "No"]</a><BR>"
dat += "<b>Voracious MediHound sleepers:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
dat += "<b>Hear Vore Sounds:</b> <a href='?_src_=prefs;preference=toggleeatingnoise'>[(cit_toggles & EATING_NOISES) ? "Yes" : "No"]</a><br>"
dat += "<b>Hear Vore Digestion Sounds:</b> <a href='?_src_=prefs;preference=toggledigestionnoise'>[(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]</a><br>"
dat += "<b>Allow trash forcefeeding (requires Trashcan quirk)</b> <a href='?_src_=prefs;preference=toggleforcefeedtrash'>[(cit_toggles & TRASH_FORCEFEED) ? "Yes" : "No"]</a><br>"
@@ -1868,6 +1878,26 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("previous_facehair_style")
facial_hair_style = previous_list_item(facial_hair_style, GLOB.facial_hair_styles_list)
if("grad_color")
var/new_grad_color = input(user, "Choose your character's gradient colour:", "Character Preference","#"+grad_color) as color|null
if(new_grad_color)
grad_color = sanitize_hexcolor(new_grad_color, 6)
if("grad_style")
var/new_grad_style
new_grad_style = input(user, "Choose your character's hair gradient style:", "Character Preference") as null|anything in GLOB.hair_gradients_list
if(new_grad_style)
grad_style = new_grad_style
if("next_grad_style")
grad_style = next_list_item(grad_style, GLOB.hair_gradients_list)
if("previous_grad_style")
grad_style = previous_list_item(grad_style, GLOB.hair_gradients_list)
if("cycle_bg")
bgstate = next_list_item(bgstate, bgstate_options)
@@ -2891,6 +2921,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.skin_tone = skin_tone
character.hair_style = hair_style
character.facial_hair_style = facial_hair_style
character.grad_style = grad_style
character.grad_color = grad_color
character.underwear = underwear
character.saved_underwear = underwear
@@ -349,6 +349,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["skin_tone"] >> skin_tone
S["hair_style_name"] >> hair_style
S["facial_style_name"] >> facial_hair_style
S["grad_style"] >> grad_style
S["grad_color"] >> grad_color
S["underwear"] >> underwear
S["undie_color"] >> undie_color
S["undershirt"] >> undershirt
@@ -531,6 +533,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
hair_color = sanitize_hexcolor(hair_color, 3, 0)
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
grad_style = sanitize_inlist(grad_style, GLOB.hair_gradients_list)
grad_color = sanitize_hexcolor(grad_color, 6, FALSE)
eye_color = sanitize_hexcolor(eye_color, 3, 0)
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF")
@@ -607,6 +611,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["skin_tone"] , skin_tone)
WRITE_FILE(S["hair_style_name"] , hair_style)
WRITE_FILE(S["facial_style_name"] , facial_hair_style)
WRITE_FILE(S["grad_style"] , grad_style)
WRITE_FILE(S["grad_color"] , grad_color)
WRITE_FILE(S["underwear"] , underwear)
WRITE_FILE(S["body_size"] , body_size)
WRITE_FILE(S["starting_weight"] , starting_weight)
@@ -11,7 +11,7 @@
desc = "It's watching you suspiciously."
/obj/structure/closet/crate/necropolis/tendril/PopulateContents()
var/loot = rand(1,28)
var/loot = rand(1,33)
switch(loot)
if(1)
new /obj/item/shared_storage/red(src)
@@ -65,6 +65,8 @@
new /obj/item/circuitboard/machine/plantgenes/vault
if(23)
new /obj/item/grenade/clusterbuster/soap(src)
new /obj/item/grenade/chem_grenade/glitter/pink(src)
new /obj/item/grenade/chem_grenade/glitter/blue(src)
if(24)
new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/miner(src)
@@ -77,6 +79,18 @@
new /obj/item/bedsheet/cult(src)
if(28)
new /obj/item/clothing/neck/necklace/memento_mori(src)
if(29)
new /obj/item/book/granter/spell/fattening(src)
new /obj/item/grenade/chem_grenade/lipoifier_weak(src)
if(30)
new /obj/item/book/granter/spell/fattening/transfer(src)
new /obj/item/book/granter/spell/fattening/steal (src)
if(31)
new /obj/item/gun/energy/fatoray(src)
if(32)
new /obj/item/gun/energy/fatoray/cannon(src)
if(33)
new /obj/item/gun/magic/wand/food(src)
// if(29)
// new /obj/item/clothing/gloves/gauntlets(src)
@@ -1464,4 +1478,4 @@
if(!istype(A, /turf/closed/mineral))
return
A.attackby(src, H)
return COMPONENT_CANCEL_ATTACK_CHAIN
return COMPONENT_CANCEL_ATTACK_CHAIN
+1 -1
View File
@@ -35,7 +35,7 @@
var/icon_state_inuse
//GS13 EDIT
///How much fatness is lost when using the machine?
var/loss_per_use = 15
var/loss_per_use = 30
/obj/structure/weightmachine/proc/AnimateMachine(mob/living/user)
return
@@ -833,6 +833,64 @@
icon_state = "hair_tailhair2"
ckeys_allowed = list("quotefox")
//Hair gradients
/datum/sprite_accessory/hair_gradient
icon = 'icons/mob/hair_gradients.dmi'
/datum/sprite_accessory/hair_gradient/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/hair_gradient/fadeup
name = "Fade Up"
icon_state = "fadeup"
/datum/sprite_accessory/hair_gradient/fadedown
name = "Fade Down"
icon_state = "fadedown"
/datum/sprite_accessory/hair_gradient/vertical_split
name = "Vertical Split"
icon_state = "vsplit"
/datum/sprite_accessory/hair_gradient/_split
name = "Horizontal Split"
icon_state = "bottomflat"
/datum/sprite_accessory/hair_gradient/reflected
name = "Reflected"
icon_state = "reflected_high"
/datum/sprite_accessory/hair_gradient/reflected_inverse
name = "Reflected Inverse"
icon_state = "reflected_inverse_high"
/datum/sprite_accessory/hair_gradient/wavy
name = "Wavy"
icon_state = "wavy"
/datum/sprite_accessory/hair_gradient/long_fade_up
name = "Long Fade Up"
icon_state = "long_fade_up"
/datum/sprite_accessory/hair_gradient/long_fade_down
name = "Long Fade Down"
icon_state = "long_fade_down"
/datum/sprite_accessory/hair_gradient/short_fade_up
name = "Short Fade Up"
icon_state = "short_fade_up"
/datum/sprite_accessory/hair_gradient/short_fade_down
name = "Short Fade Down"
icon_state = "short_fade_down"
/datum/sprite_accessory/hair_gradient/wavy_spike
name = "Spiked Wavy"
icon_state = "wavy_spiked"
//Pod-people hairs
@@ -64,3 +64,4 @@
var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects
var/burpyness = 0 // GS13 - dumb name, I know. Trying to keep it closely related to "drunkenness"
@@ -812,6 +812,7 @@
remove_all_embedded_objects()
set_heartattack(FALSE)
drunkenness = 0
burpyness = 0 //GS13 - lil GS13 addition
for(var/datum/mutation/human/HM in dna.mutations)
if(HM.quality != POSITIVE)
dna.remove_mutation(HM.name)
@@ -10,6 +10,14 @@
var/hair_color = "000"
var/hair_style = "Bald"
///Colour used for the hair gradient.
var/grad_color = "000"
///Style used for the hair gradient.
var/grad_style
//Facial hair colour and style
var/facial_hair_color = "000"
var/facial_hair_style = "Shaved"
@@ -74,4 +82,4 @@
var/last_fire_update
var/account_id
can_be_held = "micro"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
@@ -16,6 +16,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
var/wing_color
///The gradient style used for the mob's hair.
var/grad_style
///The gradient color used to color the gradient.
var/grad_color
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
@@ -426,6 +431,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(!hair_hidden || dynamic_hair_suffix)
var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER)
var/mutable_appearance/gradient_overlay = mutable_appearance(layer = -HAIR_LAYER)
if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain
if(!(NOBLOOD in species_traits))
hair_overlay.icon = 'icons/mob/human_face.dmi'
@@ -461,6 +467,20 @@ GLOBAL_LIST_EMPTY(roundstart_races)
hair_overlay.color = "#" + hair_color
else
hair_overlay.color = "#" + H.hair_color
//Gradients
grad_style = H.grad_style
grad_color = H.grad_color
if(grad_style)
var/datum/sprite_accessory/gradient = GLOB.hair_gradients_list[grad_style]
var/icon/temp = icon(gradient.icon, gradient.icon_state)
var/icon/temp_hair = icon(hair_file, hair_state)
temp.Blend(temp_hair, ICON_ADD)
gradient_overlay.icon = temp
gradient_overlay.color = "#" + grad_color
else
hair_overlay.color = forced_colour
hair_overlay.alpha = hair_alpha
@@ -469,6 +489,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
hair_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2]
if(hair_overlay.icon)
standing += hair_overlay
standing += gradient_overlay
if(standing.len)
H.overlays_standing[HAIR_LAYER] = standing
+3
View File
@@ -624,6 +624,9 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
if(slurring || drunkenness)
slurring = max(slurring-1,0,drunkenness)
if(burpslurring)
burpslurring = max(burpslurring-1,0)
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
+5 -1
View File
@@ -94,6 +94,8 @@
radiation += max(effect * hit_percent, 0)
if(EFFECT_SLUR)
slurring = max(slurring,(effect * hit_percent))
if(EFFECT_BURPSLUR)
burpslurring = max(burpslurring,(effect * hit_percent)) //GS13
if(EFFECT_STUTTER)
if((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // stun is usually associated with stutter
stuttering = max(stuttering,(effect * hit_percent))
@@ -107,7 +109,7 @@
return 1
/mob/living/proc/apply_effects(stun = 0, knockdown = 0, unconscious = 0, irradiate = 0, slur = 0, stutter = 0, eyeblur = 0, drowsy = 0, blocked = FALSE, stamina = 0, jitter = 0, kd_stamoverride, kd_stammax)
/mob/living/proc/apply_effects(stun = 0, knockdown = 0, unconscious = 0, irradiate = 0, slur = 0, burpslur = 0, stutter = 0, eyeblur = 0, drowsy = 0, blocked = FALSE, stamina = 0, jitter = 0, kd_stamoverride, kd_stammax)
if(blocked >= 100)
return 0
if(stun)
@@ -120,6 +122,8 @@
apply_effect(irradiate, EFFECT_IRRADIATE, blocked)
if(slur)
apply_effect(slur, EFFECT_SLUR, blocked)
if(burpslur)
apply_effect(burpslur, EFFECT_BURPSLUR, blocked) //GS13
if(stutter)
apply_effect(stutter, EFFECT_STUTTER, blocked)
if(eyeblur)
@@ -100,6 +100,7 @@
//Speech
var/stuttering = 0
var/slurring = 0
var/burpslurring = 0 //GS13
var/cultslurring = 0
var/derpspeech = 0
+3
View File
@@ -369,6 +369,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(slurring)
message = slur(message,slurring)
if(burpslurring)
message = burpslur(message,burpslurring) //GS13
if(cultslurring)
message = cultslur(message)
+41
View File
@@ -104,6 +104,47 @@
. += "[newletter]"
return sanitize(.)
//GS13 - BURP SLURRING, USED IN SOME CHEMS OR EFFECTS
/proc/burpslur(phrase, strength = 50)
strength = min(50, strength)
phrase = html_decode(phrase)
var/leng = length(phrase)
. = ""
var/newletter = ""
var/rawchar = ""
for(var/i = 1, i <= leng, i += length(rawchar))
rawchar = newletter = phrase[i]
if(rand(1,100)<=strength * 0.5)
var/lowerletter = lowertext(newletter)
if(lowerletter == "o")
newletter = " -*BURRP*- "
else if(lowerletter == "s")
newletter = " -*URP*- "
else if(lowerletter == "a")
newletter = " -*GWUURRP*- "
else if(lowerletter == "u")
newletter = " -*BUUUURRP*- "
else if(lowerletter == "c")
newletter = " -*BURP*- "
if(rand(1,100) <= strength * 0.25)
if(newletter == " ")
newletter = "...*GWWUUARRP*..."
else if(newletter == ".")
newletter = " -*BWUUARRP*-."
switch(rand(1,100) <= strength * 0.5)
if(1)
newletter += " -*BURRP*- "
if(10)
newletter += "[newletter]"
if(20)
newletter += "[newletter][newletter]"
. += "[newletter]"
return sanitize(.)
/////////////////////////
/// Makes you talk like you got cult stunned, which is slurring but with some dark messages
/proc/cultslur(phrase) // Inflicted on victims of a stun talisman
phrase = html_decode(phrase)
@@ -1,6 +1,6 @@
/obj/item/gun/fatbeam
name = "Fatbeam Gun"
desc = "New invention of this sector's most degenerate engineers."
desc = "Apparently used to treat malnourished patients from a safe distance... But we all know what it will truly be used for."
icon = 'icons/obj/fatbeam.dmi'
icon_state = "fatbeam"
item_state = "fatbeam"
@@ -113,7 +113,7 @@
/obj/item/gun/fatbeam/proc/on_beam_tick(var/mob/living/target)
if(target.health != target.maxHealth)
new /obj/effect/temp_visual/heal(get_turf(target), "#FFC2F8")
new /obj/effect/temp_visual/heal(get_turf(target), "#fabb62")
if(target?.client?.prefs?.weight_gain_weapons)
target.nutrition += 50
return
@@ -247,6 +247,11 @@
desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
spawned_disease = /datum/disease/advance/cold
/obj/item/reagent_containers/glass/bottle/weightgain //GS13
name = "Weight gain culture bottle"
desc = "A small bottle. Contains a disease that multiplies victim's adipose."
spawned_disease = /datum/symptom/weight_gain
/obj/item/reagent_containers/glass/bottle/flu_virion
name = "Flu virion culture bottle"
desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
@@ -254,6 +254,12 @@
/obj/item/reagent_containers/glass/beaker/synthflesh
list_reagents = list(/datum/reagent/medicine/synthflesh = 50)
/obj/item/reagent_containers/glass/beaker/lipoifier
list_reagents = list(/datum/reagent/consumable/lipoifier = 50) //GS13
/obj/item/reagent_containers/glass/beaker/cornoil
list_reagents = list(/datum/reagent/consumable/cornoil = 50) //GS13
/obj/item/reagent_containers/glass/bucket
name = "bucket"
desc = "It's a bucket."
@@ -1146,3 +1146,29 @@
var/datum/techweb_node/TN = i
TW.add_point_list(TN.research_costs)
return TW.printout_points()
/////////////// GS13 - NUTRITIONAL TECHNOLOGY
/datum/techweb_node/nutri_tech
id = "nutritech"
display_name = "Nutritional Technology"
description = "Ending world hunger was never made easier!"
prereq_ids = list("biotech") // add "engineering" if the designs get complicated later on
design_ids = list("calorite_collar")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2)
export_price = 5000
hidden = TRUE
/datum/techweb_node/nutri_tools
id = "nutritech_tools"
display_name = "Nutri-Tech Tools"
description = "Ever wanted to reach your daily caloric intake in just 5 seconds?"
prereq_ids = list("biotech", "adv_engi")
design_ids = list("fatoray_weak", "fatoray_cannon_weak")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
boost_item_paths = list(/obj/item/gun/energy/fatoray, /obj/item/gun/energy/fatoray/cannon, /obj/item/trash/fatoray_scrap1, /obj/item/trash/fatoray_scrap2)
export_price = 10000
hidden = TRUE
@@ -122,5 +122,5 @@
mineralSpawnChanceList = list(
/turf/closed/mineral/uranium/volcanic = 2, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 4, /turf/closed/mineral/titanium/volcanic = 4,
/turf/closed/mineral/silver/volcanic = 10, /turf/closed/mineral/plasma/volcanic = 15, /turf/closed/mineral/bscrystal/volcanic = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
/turf/closed/mineral/iron/volcanic = 40, /turf/closed/mineral/strange = 15)
/turf/closed/mineral/iron/volcanic = 40, /obj/item/stack/ore/calorite = 1, /turf/closed/mineral/strange = 15)
@@ -83,7 +83,7 @@
/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
if(ishuman(mover))
var/mob/living/carbon/human/H = mover
if(H.nutrition >= FATNESS_LEVEL_FAT)
if(H.fatness >= 1000)
H.visible_message("<span class='warning'>[H] pushes through [src]!</span>", "<span class='notice'>You've seen and eaten worse than this.</span>")
return TRUE
else