mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-13 08:57:01 +01:00
Merge branch 'master' into testbranch
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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'><</a> <a href='?_src_=prefs;preference=next_facehair_style;task=input'>></a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[facial_hair_color];'> </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'><</a> <a href='?_src_=prefs;preference=next_grad_style;task=input'>></a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[grad_color];'> </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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user