diff --git a/GainStation13/code/machinery/adipoelectric_generator.dm b/GainStation13/code/machinery/adipoelectric_generator.dm index a42add21..35093d20 100644 --- a/GainStation13/code/machinery/adipoelectric_generator.dm +++ b/GainStation13/code/machinery/adipoelectric_generator.dm @@ -34,6 +34,7 @@ /obj/machinery/power/adipoelectric_generator/process() if(!occupant) + src.visible_message("The [src] buzzes. It needs someon inside.") playsound(src, 'sound/machines/buzz-two.ogg', 50) return PROCESS_KILL if(occupant:fatness_real > 0 && powernet && anchored && (emp_timer < world.time)) @@ -57,6 +58,7 @@ if(!(stat & (BROKEN|NOPOWER))) emp_timer = world.time + 600 if(occupant) + src.visible_message("The [src] buzzes and expels anyone inside!.") open_machine() /obj/machinery/power/adipoelectric_generator/attackby(obj/item/P, mob/user, params) @@ -107,6 +109,7 @@ add_fingerprint(occupant) START_PROCESSING(SSobj, src) else + src.visible_message("[src] needs to be anchored to a working wire and have a person going inside!") open_machine() /obj/machinery/power/adipoelectric_generator/update_icon() @@ -136,6 +139,13 @@ QDEL_NULL(soundloop) . = ..() +/obj/machinery/power/adipoelectric_generator/examine(mob/user) + . = ..() + if(is_operational()) + . += "[src]'s show it can produce [conversion_rate * laser_modifier]W per adipose unit, taking in [max_fat] max each time." + else + . += "[src]'s display is currently offline." + /obj/item/circuitboard/machine/power/adipoelectric_generator name = "Adipoelectric Generator (Machine Board)" build_path = /obj/machinery/power/adipoelectric_generator diff --git a/GainStation13/code/machinery/adipoelectric_transformer.dm b/GainStation13/code/machinery/adipoelectric_transformer.dm index 027b3c04..81c72458 100644 --- a/GainStation13/code/machinery/adipoelectric_transformer.dm +++ b/GainStation13/code/machinery/adipoelectric_transformer.dm @@ -18,6 +18,7 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) var/conversion_rate = 0.000001 var/emp_timer = 0 var/emp_multiplier = 5 + var/datum/powernet/PN /obj/machinery/adipoelectric_transformer/Initialize() . = ..() @@ -32,9 +33,10 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) if(!is_operational()) return if(!attached) + src.visible_message("[src] buzzes. Seems like it's not attached to a working power net.") playsound(src, 'sound/machines/buzz-two.ogg', 50) return PROCESS_KILL - var/datum/powernet/PN = attached.powernet + PN = attached.powernet if(PN) power_avaliable = PN.netexcess update_icon() @@ -59,6 +61,7 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) . = ..() if(!(stat & (BROKEN|NOPOWER))) if(occupant) + src.visible_message("[src] emits ominous cracking noises!") emp_timer = world.time //stuck in for 600 ticks, about 60 seconds /obj/machinery/adipoelectric_transformer/attackby(obj/item/P, mob/user, params) @@ -101,6 +104,7 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) GLOB.adipoelectric_transformer += src START_PROCESSING(SSobj, src) else + src.visible_message("[src] buzzes. There must be another a person going in an no other transformer active in the area.") playsound(src, 'sound/machines/buzz-two.ogg', 50) open_machine() @@ -133,6 +137,19 @@ GLOBAL_LIST_EMPTY(adipoelectric_transformer) . = ..() GLOB.adipoelectric_transformer -= src +/obj/machinery/adipoelectric_transformer/examine(mob/user) + . = ..() + if(is_operational() && attached) + if(PN) + if(lastprocessed) + . += "[src]'s last reading on display was [lastprocessed * recharge_speed] adipose units." + else + . += "[src] has no last reading." + else + . += "[src]'s display states 'ERROR'. There must be something wrong with the power." + else + . += "[src]'s display is currently offline." + /obj/item/circuitboard/machine/adipoelectric_transformer name = "Adipoelectric Transformer (Machine Board)" build_path = /obj/machinery/adipoelectric_transformer diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index 1d60d6f2..e275defd 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -5,11 +5,11 @@ // -fatness_real is the value a mob is actually at, even if it's being hidden. For permanent changes, use this one //What level of fatness is the parent mob currently at? var/fatness = 0 - //Is something overriding the actual fatness value of a character? - var/fatness_hidden = FALSE - //The actual value a mob is at. Is equal to fatness if fatness_hidden is FALSE. + //Is something hiding the actual fatness value of a character? + var/fat_hider = FALSE + //The actual value a mob is at. Is equal to fatness if fat_hider is FALSE. var/fatness_real = 0 - //The value a mob's fatness is being overwritten with if fatness_hidden is TRUE. + //The value a mob's fatness is being overwritten with if fat_hider has something in it. var/fatness_over = 0 ///At what rate does the parent mob gain weight? 1 = 100% var/weight_gain_rate = 1 @@ -44,7 +44,7 @@ if(client?.prefs?.max_weight) // GS13 fatness_real = min(fatness_real, (client?.prefs?.max_weight - 1)) - if(fatness_hidden) //If a character's real fatness is being hidden + if(fat_hider) //If a character's real fatness is being hidden if(client?.prefs?.max_weight) //Check their prefs fatness_over = min(fatness_over, (client?.prefs?.max_weight - 1)) //And make sure it's not above their preferred max @@ -102,8 +102,8 @@ return TRUE -/mob/living/carbon/proc/fat_hide(hide_amount) //If something wants to hide fatness_real, it'll call this method and give it an amount to cover it with - fatness_hidden = TRUE +/mob/living/carbon/proc/fat_hide(hide_amount, hide_source) //If something wants to hide fatness_real, it'll call this method and give it an amount to cover it with + fat_hider = hide_source fatness_over = hide_amount fatness = fatness_over //To update a mob's fatness with the new amount to be shown immediately if(client?.prefs?.weight_gain_extreme) @@ -112,7 +112,7 @@ return TRUE /mob/living/carbon/proc/fat_show() //If something that hides fatness is removed or expires, it'll call this method - fatness_hidden = FALSE + fat_hider = FALSE fatness = fatness_real //To update a mob's fatness with their real one immediately if(client?.prefs?.weight_gain_extreme) xwg_resize() diff --git a/GainStation13/code/obj/items/bluespace_belt.dm b/GainStation13/code/obj/items/bluespace_belt.dm index 0b959276..db676eb1 100644 --- a/GainStation13/code/obj/items/bluespace_belt.dm +++ b/GainStation13/code/obj/items/bluespace_belt.dm @@ -8,13 +8,14 @@ equip_sound = 'sound/items/equip/toolbelt_equip.ogg' drop_sound = 'sound/items/handling/toolbelt_drop.ogg' pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg' + var/hide_value = 0 /obj/item/bluespace_belt/equipped(mob/user, slot) ..() var/mob/living/carbon/U = user if(slot == SLOT_BELT) to_chat(user, "You put the belt around your waist and your mass begins to shrink...") - U.fat_hide(0) + U.fat_hide(hide_value, src) else to_chat(user, "The belt is opened, letting your mass flow out!") U.fat_show() diff --git a/GainStation13/code/obj/items/holy.dm b/GainStation13/code/obj/items/holy.dm new file mode 100644 index 00000000..f1ae3358 --- /dev/null +++ b/GainStation13/code/obj/items/holy.dm @@ -0,0 +1,93 @@ +/obj/item/nullrod/attack(mob/target, mob/living/user) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/T = target + if(T.fat_hider) + if(isitem(T.fat_hider)) + var/obj/item/O = T.fat_hider + T.dropItemToGround(O) + if(T.cursed_fat == 1) + T.cursed_fat = 0 + T.fattening_steps_left = 0 + +/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) + . = ..() + if(iscarbon(M)) + var/mob/living/carbon/T = M + if(T.fat_hider) + if(isitem(T.fat_hider)) + var/obj/item/O = T.fat_hider + T.dropItemToGround(O) + if(T.cursed_fat == 1) + T.cursed_fat = 0 + T.fattening_steps_left = 0 + +/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) + . = ..() + if(M.fat_hider) + if(isitem(M.fat_hider)) + var/obj/item/O = M.fat_hider + M.dropItemToGround(O) + if(M.cursed_fat == 1) + M.cursed_fat = 0 + M.fattening_steps_left = 0 + +/obj/item/nullrod/dream_breaker + name = "dream breaker" + desc = "A cross-shaped weapon emitting a faint, dream-like light. Its blows will wake any dreamer." + icon = 'GainStation13/icons/obj/dreambreaker.dmi' + icon_state = "dreambreaker" + item_state = "dreambreaker" + lefthand_file = 'GainStation13/icons/obj/dreambreaker_left.dmi' + righthand_file = 'GainStation13/icons/obj/dreambreaker_right.dmi' + + actions_types = list(/datum/action/item_action/db_slide) + var/slidedistance = 2 + var/slidespeed = 3 + var/stamina_cost = 34 + + force = 20 + throwforce = 25 + throw_range = 10 + throw_speed = 2 + var/click_delay = 2 + + slot_flags = ITEM_SLOT_BACK + sharpness = IS_BLUNT + w_class = WEIGHT_CLASS_BULKY + attack_verb = list("smashed", "whacked", "smacked", "bonked") + hitsound = "swing_hit" + + var/l_range = 3 + var/l_power = 0.8 + light_color = "#FFCC66" + +/obj/item/nullrod/dream_breaker/Initialize() + . = ..() + set_light(l_range, l_power, light_color) + +/obj/item/nullrod/dream_breaker/attack(mob/living/target, mob/living/user) + . = ..() + user.changeNext_move(CLICK_CD_MELEE * click_delay) + +/obj/item/nullrod/dream_breaker/ui_action_click(mob/user, action) + if(!isliving(user)) + return + + var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction + user.resting = TRUE + if(user:getStaminaLoss() < 100) + if (user.throw_at(target, slidedistance, slidespeed, spin = FALSE, diagonals_first = TRUE)) + user:adjustStaminaLoss(stamina_cost) //reduce stamina loss by 0.3 per tick, 6 per 2 seconds + user.visible_message("[usr] slides forward!") + user.resting = FALSE + else + to_chat(user, "Something prevents you from sliding forward!") + else + to_chat(user, "You fall down when attempting to slide!") + +/datum/action/item_action/db_slide + name = "Dream Breaker Slide" + desc = "Use dream-like atheletics to slide forward, but don't wear yourself out!." + icon_icon = 'GainStation13/icons/obj/dreambreaker.dmi' + button_icon_state = "dreambreaker" diff --git a/GainStation13/icons/obj/dreambreaker.dmi b/GainStation13/icons/obj/dreambreaker.dmi new file mode 100644 index 00000000..de21cabc Binary files /dev/null and b/GainStation13/icons/obj/dreambreaker.dmi differ diff --git a/GainStation13/icons/obj/dreambreaker_left.dmi b/GainStation13/icons/obj/dreambreaker_left.dmi new file mode 100644 index 00000000..b0081b32 Binary files /dev/null and b/GainStation13/icons/obj/dreambreaker_left.dmi differ diff --git a/GainStation13/icons/obj/dreambreaker_right.dmi b/GainStation13/icons/obj/dreambreaker_right.dmi new file mode 100644 index 00000000..5be5a6a8 Binary files /dev/null and b/GainStation13/icons/obj/dreambreaker_right.dmi differ diff --git a/tgstation.dme b/tgstation.dme index dbfc4132..e9810c64 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3124,6 +3124,7 @@ #include "GainStation13\code\modules\vending\gatocola.dm" #include "GainStation13\code\modules\vending\mealdor.dm" #include "GainStation13\code\obj\items\bluespace_belt.dm" +#include "GainStation13\code\obj\items\holy.dm" #include "GainStation13\code\obj\items\minor_items.dm" #include "GainStation13\code\obj\structure\calorite_doors.dm" #include "GainStation13\code\obj\structure\candylight.dm"