Merge branch 'sheepishgoat:master' into feature/small-bits-and-bob
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
/client/proc/breadify(atom/movable/target)
|
||||
var/obj/item/reagent_containers/food/snacks/store/bread/plain/funnyBread = new(get_turf(target))
|
||||
target.forceMove(funnyBread)
|
||||
|
||||
GLOBAL_LIST_EMPTY(transformation_animation_objects)
|
||||
/*
|
||||
* Creates animation that turns current icon into result appearance from top down.
|
||||
*
|
||||
* result_appearance - End result appearance/atom/image
|
||||
* time - Animation duration
|
||||
* transform_overlay - Appearance/atom/image of effect that moves along the animation - should be horizonatally centered
|
||||
* reset_after - If FALSE, filters won't be reset and helper vis_objects will not be removed after animation duration expires. Cleanup must be handled by the caller!
|
||||
*/
|
||||
/atom/movable/proc/transformation_animation(result_appearance,time = 3 SECONDS,transform_overlay,reset_after=TRUE)
|
||||
var/list/transformation_objects = GLOB.transformation_animation_objects[src] || list()
|
||||
//Disappearing part
|
||||
var/top_part_filter = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0)
|
||||
filters += top_part_filter
|
||||
var/filter_index = length(filters)
|
||||
animate(filters[filter_index],y=-32,time=time)
|
||||
//Appearing part
|
||||
var/obj/effect/overlay/appearing_part = new
|
||||
appearing_part.appearance = result_appearance
|
||||
appearing_part.appearance_flags |= KEEP_TOGETHER | KEEP_APART
|
||||
appearing_part.vis_flags = VIS_INHERIT_ID
|
||||
appearing_part.filters = filter(type="alpha",icon=icon('icons/effects/alphacolors.dmi',"white"),y=0,flags=MASK_INVERSE)
|
||||
animate(appearing_part.filters[1],y=-32,time=time)
|
||||
transformation_objects += appearing_part
|
||||
//Transform effect thing - todo make appearance passed in
|
||||
if(transform_overlay)
|
||||
var/obj/transform_effect = new
|
||||
transform_effect.appearance = transform_overlay
|
||||
transform_effect.vis_flags = VIS_INHERIT_ID
|
||||
transform_effect.pixel_y = 16
|
||||
transform_effect.alpha = 255
|
||||
transformation_objects += transform_effect
|
||||
animate(transform_effect,pixel_y=-16,time=time)
|
||||
animate(alpha=0)
|
||||
GLOB.transformation_animation_objects[src] = transformation_objects
|
||||
for(var/A in transformation_objects)
|
||||
vis_contents += A
|
||||
if(reset_after)
|
||||
addtimer(CALLBACK(src,.proc/_reset_transformation_animation,filter_index),time)
|
||||
/*
|
||||
* Resets filters and removes transformation animations helper objects from vis contents.
|
||||
*/
|
||||
/atom/movable/proc/_reset_transformation_animation(filter_index)
|
||||
var/list/transformation_objects = GLOB.transformation_animation_objects[src]
|
||||
for(var/A in transformation_objects)
|
||||
vis_contents -= A
|
||||
qdel(A)
|
||||
transformation_objects.Cut()
|
||||
GLOB.transformation_animation_objects -= src
|
||||
if(filters && length(filters) >= filter_index)
|
||||
filters -= filters[filter_index]
|
||||
//else
|
||||
// filters = null
|
||||
@@ -0,0 +1,7 @@
|
||||
/datum/mood_event/fat_bad
|
||||
description = "<span class='warning'><B>I'm so fat...</B></span>\n"
|
||||
mood_change = -4
|
||||
|
||||
/datum/mood_event/fat_good
|
||||
description = "<span class='nicegreen'><B>I'm so fat!</B></span>\n"
|
||||
mood_change = 4
|
||||
@@ -93,6 +93,9 @@ GLOBAL_LIST_INIT(uncapped_resize_areas, list(/area/command/bridge, /area/mainten
|
||||
return FALSE
|
||||
|
||||
switch(type_of_fattening)
|
||||
if(FATTENING_TYPE_ALMIGHTY)
|
||||
return TRUE
|
||||
|
||||
if(FATTENING_TYPE_ITEM)
|
||||
if(!client?.prefs?.weight_gain_items)
|
||||
return FALSE
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -87,6 +87,11 @@
|
||||
#define ADMIN_PUNISHMENT_FRY "Fry"
|
||||
#define ADMIN_PUNISHMENT_PERFORATE ":B:erforate"
|
||||
#define ADMIN_PUNISHMENT_CLUWNE "Cluwne"
|
||||
// GS13 PUNISHMENTS
|
||||
#define ADMIN_PUNISHMENT_BONK "Bonk"
|
||||
#define ADMIN_PUNISHMENT_BREADIFY "Breadify"
|
||||
#define ADMIN_PUNISHMENT_FATTEN "Fatten"
|
||||
#define ADMIN_PUNISHMENT_FATTEN_EVIL "Fatten (Permafat)"
|
||||
|
||||
#define AHELP_ACTIVE 1
|
||||
#define AHELP_CLOSED 2
|
||||
|
||||
@@ -588,5 +588,6 @@ GLOBAL_LIST_INIT(pda_reskins, list(
|
||||
#define FATTENING_TYPE_NANITES "nanites"
|
||||
#define FATTENING_TYPE_RADIATIONS "radiations"
|
||||
#define FATTENING_TYPE_WEIGHT_LOSS "weight_loss"
|
||||
#define FATTENING_TYPE_ALMIGHTY "almighty" //This ignores prefs, please only use this for smites and other admin controlled instances.
|
||||
|
||||
#define FATNESS_TO_WEIGHT_RATIO 0.25
|
||||
|
||||
@@ -92,7 +92,11 @@
|
||||
. = 1
|
||||
|
||||
//Please don't roast me too hard
|
||||
//Oh don't worry, We Will.
|
||||
/client/MouseMove(object, location, control, params)
|
||||
if(!COOLDOWN_FINISHED(src, next_mousemove))
|
||||
return
|
||||
COOLDOWN_START(src, next_mousemove, 0) //COOLDOWN_FINISHED() sees the world tick and cooldown timer being equal as a state wherein the cooldown has not finished. So the cooldown timer here is 0 to throttle only for the rest of the tick.
|
||||
mouseParams = params
|
||||
mouse_location_ref = WEAKREF(location)
|
||||
mouse_object_ref = WEAKREF(object)
|
||||
@@ -106,6 +110,9 @@
|
||||
..()
|
||||
|
||||
/client/MouseDrag(src_object,atom/over_object,src_location,over_location,src_control,over_control,params)
|
||||
if(!COOLDOWN_FINISHED(src, next_mousedrag))
|
||||
return
|
||||
COOLDOWN_START(src, next_mousedrag, 0) //See comment in MouseMove() for why this is 0.
|
||||
mouseParams = params
|
||||
mouse_location_ref = WEAKREF(over_location)
|
||||
mouse_object_ref = WEAKREF(over_object)
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
setSanity(sanity+0.4, maximum=SANITY_AMAZING)
|
||||
|
||||
HandleNutrition(owner)
|
||||
HandleFatness(owner) //GS13 EDIT
|
||||
|
||||
/datum/component/mood/proc/setSanity(amount, minimum=SANITY_INSANE, maximum=SANITY_NEUTRAL)//I'm sure bunging this in here will have no negative repercussions.
|
||||
var/mob/living/master = parent
|
||||
@@ -315,6 +316,19 @@
|
||||
/datum/component/mood/proc/hud_click(datum/source, location, control, params, mob/user)
|
||||
print_mood(user)
|
||||
|
||||
//GS13 EDIT START
|
||||
/datum/component/mood/proc/HandleFatness(mob/living/carbon/L) // GS13
|
||||
if(!L)
|
||||
return FALSE
|
||||
|
||||
switch(L.fatness)
|
||||
if(FATNESS_LEVEL_FAT to INFINITY)
|
||||
if(HAS_TRAIT(L, TRAIT_FAT_GOOD))
|
||||
add_event(null, "fatness", /datum/mood_event/fat_good)
|
||||
else if(HAS_TRAIT(L, TRAIT_FAT_BAD))
|
||||
add_event(null, "fatness", /datum/mood_event/fat_bad)
|
||||
|
||||
//GS13 EDIT END
|
||||
|
||||
/datum/component/mood/proc/HandleNutrition(mob/living/L)
|
||||
if(isethereal(L))
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE))
|
||||
use_power(5000)
|
||||
|
||||
//GS13 EDIT
|
||||
/*
|
||||
if(!calibrated && iscarbon(M) && prob(30 - ((accuracy) * 10))) //oh dear a problem
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE))
|
||||
@@ -81,6 +83,7 @@
|
||||
C.set_species(/datum/species/fly)
|
||||
log_game("[C] ([key_name(C)]) was turned into a fly person")
|
||||
C.apply_effect((rand(120 - accuracy * 40, 180 - accuracy * 60)), EFFECT_IRRADIATE, 0)
|
||||
*/
|
||||
|
||||
calibrated = FALSE
|
||||
return
|
||||
|
||||
@@ -1335,6 +1335,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
ADMIN_PUNISHMENT_FRY,
|
||||
ADMIN_PUNISHMENT_CRACK,
|
||||
ADMIN_PUNISHMENT_BLEED,
|
||||
//GS13 EDIT START
|
||||
ADMIN_PUNISHMENT_BONK,
|
||||
ADMIN_PUNISHMENT_BREADIFY,
|
||||
ADMIN_PUNISHMENT_FATTEN,
|
||||
ADMIN_PUNISHMENT_FATTEN_EVIL,
|
||||
//GS13 EDIT END
|
||||
ADMIN_PUNISHMENT_SCARIFY,
|
||||
ADMIN_PUNISHMENT_CLUWNE)
|
||||
|
||||
@@ -1507,6 +1513,35 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
to_chat(usr,"<span class='warning'>This must be used on a carbon mob.</span>")
|
||||
return
|
||||
target.cluwneify()
|
||||
// GS13 EDIT START
|
||||
if(ADMIN_PUNISHMENT_BONK)
|
||||
playsound(target, 'hyperstation/sound/misc/bonk.ogg', 100, 1)
|
||||
target.AddElement(/datum/element/squish, 60 SECONDS)
|
||||
to_chat(target, "<span class='warning big'>Bonk.</span>")
|
||||
if(ADMIN_PUNISHMENT_BREADIFY)
|
||||
#define BREADIFY_TIME (5 SECONDS)
|
||||
var/mutable_appearance/bread_appearance = mutable_appearance('icons/obj/food/burgerbread.dmi', "bread")
|
||||
var/mutable_appearance/transform_scanline = mutable_appearance('icons/effects/effects.dmi', "transform_effect")
|
||||
target.transformation_animation(bread_appearance, time = BREADIFY_TIME, transform_overlay=transform_scanline, reset_after=TRUE)
|
||||
addtimer(CALLBACK(src, PROC_REF(breadify), target), BREADIFY_TIME)
|
||||
#undef BREADIFY_TIME
|
||||
if(ADMIN_PUNISHMENT_FATTEN)
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
if(!istype(human_target))
|
||||
to_chat(usr,"<span class='warning'>This must be used on a carbon mob.</span>")
|
||||
return
|
||||
human_target.adjust_fatness(10000, FATTENING_TYPE_ALMIGHTY, TRUE) // MR ELECTRIC, SEND HIM TO THE ADMIN JAIL AND HAVE HIM FATTENED!
|
||||
to_chat(target, span_boldwarning("You suddenly feel incredibly fat."))
|
||||
if(ADMIN_PUNISHMENT_FATTEN_EVIL)
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
if(!istype(human_target))
|
||||
to_chat(usr,"<span class='warning'>This must be used on a carbon mob.</span>")
|
||||
return
|
||||
if(!human_target?.client?.prefs?.weight_gain_permanent)
|
||||
return FALSE
|
||||
human_target.fatness_perma += 10000 // Good luck getting this off, fatass.
|
||||
to_chat(target, span_boldwarning("You suddenly feel incredibly fat."))
|
||||
// GS13 EDIT END
|
||||
|
||||
punish_log(target, punishment)
|
||||
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
can_unwrench = TRUE
|
||||
construction_type = /obj/item/pipe/binary
|
||||
interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE
|
||||
pipe_state = "relief_valve-t"
|
||||
shift_underlay_only = FALSE
|
||||
|
||||
var/opened = FALSE
|
||||
var/open_pressure = ONE_ATMOSPHERE * 3
|
||||
var/close_pressure = ONE_ATMOSPHERE
|
||||
pipe_state = "relief_valve-t"
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/relief_valve/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
|
||||
@@ -24,11 +24,13 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/update_icon_nopipes()
|
||||
icon_state = "connector"
|
||||
cut_overlays()
|
||||
if(showpipe)
|
||||
var/image/cap = getpipeimage(icon, "connector_cap", initialize_directions, piping_layer = piping_layer)
|
||||
add_overlay(cap)
|
||||
|
||||
icon_state = "connector"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/process_atmos()
|
||||
if(!connected_device)
|
||||
return
|
||||
@@ -37,7 +39,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/can_unwrench(mob/user)
|
||||
. = ..()
|
||||
if(. && connected_device)
|
||||
to_chat(user, "<span class='warning'>You cannot unwrench [src], detach [connected_device] first!</span>")
|
||||
to_chat(user, span_warning("You cannot unwrench [src], detach [connected_device] first!"))
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/portables_connector/portableConnectorReturnAir()
|
||||
|
||||
@@ -189,3 +189,7 @@
|
||||
|
||||
/// AFK tracking
|
||||
var/last_activity = 0
|
||||
|
||||
/// The next point in time at which the client is allowed to send a mousemove() or mousedrag()
|
||||
COOLDOWN_DECLARE(next_mousemove)
|
||||
COOLDOWN_DECLARE(next_mousedrag)
|
||||
|
||||
@@ -230,7 +230,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
///loadout stuff
|
||||
var/gear_points = 10
|
||||
var/list/gear_categories
|
||||
var/list/loadout_data = list()
|
||||
var/list/loadout_data
|
||||
var/list/unlockable_loadout_data = list()
|
||||
var/loadout_slot = 1 //goes from 1 to MAXIMUM_LOADOUT_SAVES
|
||||
var/gear_category
|
||||
@@ -406,7 +406,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
//calculate your gear points from the chosen item
|
||||
gear_points = CONFIG_GET(number/initial_gear_points)
|
||||
var/list/chosen_gear = loadout_data["SAVE_[loadout_slot]"]
|
||||
if(chosen_gear)
|
||||
if(islist(chosen_gear))
|
||||
loadout_errors = 0
|
||||
for(var/loadout_item in chosen_gear)
|
||||
var/loadout_item_path = loadout_item[LOADOUT_ITEM]
|
||||
@@ -994,6 +994,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</tr></table>"
|
||||
if(LOADOUT_CHAR_TAB)
|
||||
dat += "<table align='center' width='100%'>"
|
||||
dat += "<tr><td colspan=4><center><b>Loadout slot</b></center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center>"
|
||||
for(var/iteration in 1 to MAXIMUM_LOADOUT_SAVES)
|
||||
dat += "<a [loadout_slot == iteration ? "class='linkOn'" : "href='?_src_=prefs;preference=gear;select_slot=[iteration]'"]>[iteration]</a>"
|
||||
dat += "</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center><i style=\"color: grey;\">You can only choose one item per category, unless it's an item that spawns in your backpack or hands.</center></td></tr>"
|
||||
dat += "<tr><td colspan=4><center><b>"
|
||||
|
||||
@@ -3502,6 +3507,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
preferences_tab = text2num(href_list["tab"])
|
||||
|
||||
if(href_list["preference"] == "gear")
|
||||
if(href_list["select_slot"])
|
||||
var/chosen = text2num(href_list["select_slot"])
|
||||
if(!chosen)
|
||||
return
|
||||
chosen = floor(chosen)
|
||||
if(chosen > MAXIMUM_LOADOUT_SAVES || chosen < 1)
|
||||
return
|
||||
loadout_slot = chosen
|
||||
if(href_list["clear_loadout"])
|
||||
loadout_data["SAVE_[loadout_slot]"] = list()
|
||||
save_preferences()
|
||||
|
||||
@@ -953,10 +953,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_breasts_fluid"] >> features["breasts_fluid"]
|
||||
|
||||
//gear loadout
|
||||
if(S["loadout"])
|
||||
if(istext(S["loadout"]))
|
||||
loadout_data = safe_json_decode(S["loadout"])
|
||||
else
|
||||
loadout_data = list()
|
||||
//let's remember their last used slot, i'm sure "oops i brought the wrong stuff" will be an issue now
|
||||
S["loadout_slot"] >> loadout_slot
|
||||
|
||||
//try to fix any outdated data if necessary
|
||||
//preference updating will handle saving the updated data for us.
|
||||
@@ -1137,6 +1139,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
vore_smell = copytext(vore_smell, 1, MAX_TASTE_LEN)
|
||||
belly_prefs = SANITIZE_LIST(belly_prefs)
|
||||
|
||||
loadout_slot = sanitize_num_clamp(loadout_slot, 1, MAXIMUM_LOADOUT_SAVES, 1, TRUE)
|
||||
|
||||
cit_character_pref_load(S)
|
||||
|
||||
return TRUE
|
||||
@@ -1360,10 +1364,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
|
||||
//gear loadout
|
||||
if(length(loadout_data))
|
||||
if(islist(loadout_data))
|
||||
S["loadout"] << safe_json_encode(loadout_data)
|
||||
else
|
||||
S["loadout"] << safe_json_encode(list())
|
||||
WRITE_FILE(S["loadout_slot"], loadout_slot)
|
||||
|
||||
if(length(tcg_cards))
|
||||
S["tcg_cards"] << safe_json_encode(tcg_cards)
|
||||
|
||||
@@ -13,28 +13,40 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/plumbing/simple_supply, bolt)
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user,rotation_type)
|
||||
/obj/machinery/plumbing/grinder_chemical/examine(mob/user)
|
||||
. = ..()
|
||||
. += span_notice("The input direction for this item can be rotated by using CTRL+SHIFT+CLICK")
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/CtrlShiftClick(mob/user)
|
||||
if(anchored)
|
||||
to_chat(user, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
|
||||
switch(eat_dir)
|
||||
if(WEST)
|
||||
balloon_alert(user, "set to north")
|
||||
eat_dir = NORTH
|
||||
return TRUE
|
||||
if(EAST)
|
||||
balloon_alert(user, "set to south")
|
||||
eat_dir = SOUTH
|
||||
return TRUE
|
||||
if(NORTH)
|
||||
balloon_alert(user, "set to east")
|
||||
eat_dir = EAST
|
||||
return TRUE
|
||||
if(SOUTH)
|
||||
balloon_alert(user, "set to west")
|
||||
eat_dir = WEST
|
||||
return TRUE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/AM)
|
||||
. = ..()
|
||||
if(!anchored)
|
||||
return
|
||||
|
||||
var/move_dir = get_dir(loc, AM.loc)
|
||||
if(move_dir == eat_dir)
|
||||
return TRUE
|
||||
@@ -61,4 +73,8 @@
|
||||
return
|
||||
I.on_grind()
|
||||
reagents.add_reagent_list(I.grind_results)
|
||||
|
||||
if(I.reagents) //If the thing has any reagents inside of it, grind them up.
|
||||
I.reagents.trans_to(reagents, I.reagents.total_volume)
|
||||
|
||||
qdel(I)
|
||||
|
||||
@@ -3904,6 +3904,7 @@
|
||||
#include "code\modules\zombie\items.dm"
|
||||
#include "code\modules\zombie\organs.dm"
|
||||
#include "GainStation13\code\__HELPERS\global_lists.dm"
|
||||
#include "GainStation13\code\__HELPERS\transformation.dm"
|
||||
#include "GainStation13\code\clothing\accessory.dm"
|
||||
#include "GainStation13\code\clothing\backpacks.dm"
|
||||
#include "GainStation13\code\clothing\calorite_collar.dm"
|
||||
@@ -3923,6 +3924,7 @@
|
||||
#include "GainStation13\code\datums\diseases\advance\presets.dm"
|
||||
#include "GainStation13\code\datums\diseases\advance\symptoms\berry.dm"
|
||||
#include "GainStation13\code\datums\diseases\advance\symptoms\weight_gain.dm"
|
||||
#include "GainStation13\code\datums\mood_events\needs_events.dm"
|
||||
#include "GainStation13\code\datums\mutations\fatfang.dm"
|
||||
#include "GainStation13\code\datums\mutations\radfat.dm"
|
||||
#include "GainStation13\code\datums\status_effects\fatstun.dm"
|
||||
|
||||
Reference in New Issue
Block a user