mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-18 03:21:30 +01:00
Merge pull request #191 from sheepishgoat/enhanced-fatness
More options to interface with fatness
This commit is contained in:
@@ -124,3 +124,25 @@
|
||||
xwg_size = min(xwg_size, RESIZE_HUGE)
|
||||
xwg_size = max(xwg_size, custom_body_size*0.01)
|
||||
resize(xwg_size)
|
||||
|
||||
/proc/get_fatness_level_name(fatness_amount)
|
||||
if(fatness_amount < FATNESS_LEVEL_FAT)
|
||||
return "Normal"
|
||||
if(fatness_amount < FATNESS_LEVEL_FATTER)
|
||||
return "Fat"
|
||||
if(fatness_amount < FATNESS_LEVEL_VERYFAT)
|
||||
return "Fatter"
|
||||
if(fatness_amount < FATNESS_LEVEL_OBESE)
|
||||
return "Very Fat"
|
||||
if(fatness_amount < FATNESS_LEVEL_MORBIDLY_OBESE)
|
||||
return "Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_EXTREMELY_OBESE)
|
||||
return "Morbidly Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_BARELYMOBILE)
|
||||
return "Extremely Obese"
|
||||
if(fatness_amount < FATNESS_LEVEL_IMMOBILE)
|
||||
return "Barely Mobile"
|
||||
if(fatness_amount < FATNESS_LEVEL_BLOB)
|
||||
return "Immobile"
|
||||
|
||||
return "Blob"
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
/datum/design/infrared_emitter
|
||||
name = "Fatness Infrared Emitter"
|
||||
id = "fatness_infrared_emitter"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/assembly/infra/fat
|
||||
category = list("initial", "Misc")
|
||||
@@ -0,0 +1,30 @@
|
||||
/obj/item/integrated_circuit/input/fat_scanner
|
||||
name = "integrated body fat analyzer"
|
||||
desc = "A very small version of the common medical analyser adjusted to scan a target's weight."
|
||||
icon_state = "medscan"
|
||||
complexity = 4
|
||||
inputs = list("target" = IC_PINTYPE_REF)
|
||||
outputs = list(
|
||||
"weight (pounds)" = IC_PINTYPE_NUMBER,
|
||||
"weight (BFI)" = IC_PINTYPE_NUMBER
|
||||
)
|
||||
activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT)
|
||||
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
|
||||
power_draw_per_use = 40
|
||||
|
||||
/obj/item/integrated_circuit/input/fat_scanner/do_work()
|
||||
var/mob/living/carbon/fatty = get_pin_data_as_type(IC_INPUT, 1, /mob/living)
|
||||
if(!istype(fatty)) //Invalid input
|
||||
return
|
||||
if(!fatty.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range.
|
||||
return
|
||||
|
||||
var/weight_in_pounds = fatty.calculate_weight_in_pounds()
|
||||
var/weight_in_fatness = fatty.fatness
|
||||
|
||||
set_pin_data(IC_OUTPUT, 1, weight_in_pounds)
|
||||
set_pin_data(IC_OUTPUT, 2, weight_in_fatness)
|
||||
|
||||
push_data()
|
||||
activate_pin(2)
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
/obj/item/assembly/infra/fat
|
||||
name = "fatness infrared emitter"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted. This one checks if the person tripping it is above or below a certain level of fatness."
|
||||
|
||||
var/fatness_to_trigger = 0
|
||||
var/trigger_below = FALSE
|
||||
|
||||
/obj/item/assembly/infra/fat/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The infrared trigger is set to trigger when the target is [trigger_below?"above":"below"] being [get_fatness_level_name(fatness_to_trigger)].</span>"
|
||||
|
||||
/obj/item/assembly/infra/fat/ui_interact(mob/user)//TODO: change this this to the wire control panel
|
||||
if(!is_secured(user))
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = "<TT><B>Fatness Infrared Laser</B></TT>"
|
||||
dat += "<BR><B>Status</B>: [on ? "<A href='?src=[REF(src)];state=0'>On</A>" : "<A href='?src=[REF(src)];state=1'>Off</A>"]"
|
||||
dat += "<BR><B>Visibility</B>: [visible ? "<A href='?src=[REF(src)];visible=0'>Visible</A>" : "<A href='?src=[REF(src)];visible=1'>Invisible</A>"]"
|
||||
dat += "<BR><B>Fatness level to trigger:</B><A href='?src=[REF(src)];fatness_to_trigger=1'>[get_fatness_level_name(fatness_to_trigger)]</A>"
|
||||
dat += "<BR><B>Trigger above or below the target fatness level:</B><A href='?src=[REF(src)];trigger_below=1'>[trigger_below ? "Below" : "Above"]</A>"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=[REF(src)];close=1'>Close</A>"
|
||||
user << browse(dat, "window=infra")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
/obj/item/assembly/infra/fat/Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["trigger_below"])
|
||||
trigger_below = !(trigger_below)
|
||||
update_icon()
|
||||
refreshBeam()
|
||||
if(href_list["fatness_to_trigger"])
|
||||
var/fatness_type = input(usr,
|
||||
"What level of fatness do you wish to alert above/under at?",
|
||||
src, "None") as null|anything in list(
|
||||
"None", "Fat", "Fatter", "Very Fat", "Obese", "Morbidly Obese", "Extremely Obese", "Barely Mobile", "Immobile", "Blob")
|
||||
if(!fatness_type)
|
||||
return
|
||||
|
||||
var/fatness_amount = 0
|
||||
switch(fatness_type)
|
||||
if("Fat")
|
||||
fatness_amount = FATNESS_LEVEL_FAT
|
||||
if("Fatter")
|
||||
fatness_amount = FATNESS_LEVEL_FATTER
|
||||
if("Very Fat")
|
||||
fatness_amount = FATNESS_LEVEL_VERYFAT
|
||||
if("Obese")
|
||||
fatness_amount = FATNESS_LEVEL_OBESE
|
||||
if("Morbidly Obese")
|
||||
fatness_amount = FATNESS_LEVEL_MORBIDLY_OBESE
|
||||
if("Extremely Obese")
|
||||
fatness_amount = FATNESS_LEVEL_EXTREMELY_OBESE
|
||||
if("Barely Mobile")
|
||||
fatness_amount = FATNESS_LEVEL_BARELYMOBILE
|
||||
if("Immobile")
|
||||
fatness_amount = FATNESS_LEVEL_IMMOBILE
|
||||
if("Blob")
|
||||
fatness_amount = FATNESS_LEVEL_BLOB
|
||||
|
||||
fatness_to_trigger = fatness_amount
|
||||
update_icon()
|
||||
refreshBeam()
|
||||
|
||||
/obj/item/assembly/infra/fat/trigger_beam(atom/movable/AM, turf/location)
|
||||
var/mob/living/carbon/crossed_fatty = AM
|
||||
if(!istype(crossed_fatty))
|
||||
return FALSE
|
||||
|
||||
if(trigger_below && (crossed_fatty.fatness >= fatness_to_trigger))
|
||||
return FALSE
|
||||
|
||||
if(!trigger_below && (crossed_fatty.fatness < fatness_to_trigger))
|
||||
return FALSE
|
||||
|
||||
return ..() // I love using inheritence so much.
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/obj/machinery/door
|
||||
var/fatness_to_check = 0
|
||||
|
||||
var/check_fatness = FALSE
|
||||
var/check_fatness_below = FALSE
|
||||
|
||||
/obj/machinery/door/proc/change_fatness_to_check(mob/user)
|
||||
var/fatness_type = input(usr,
|
||||
"What level of fatness do you wish to alert above/under at?",
|
||||
src, "None") as null|anything in list(
|
||||
"None", "Fat", "Fatter", "Very Fat", "Obese", "Morbidly Obese", "Extremely Obese", "Barely Mobile", "Immobile", "Blob")
|
||||
if(!fatness_type)
|
||||
return FALSE
|
||||
|
||||
var/fatness_amount = 0
|
||||
switch(fatness_type)
|
||||
if("Fat")
|
||||
fatness_amount = FATNESS_LEVEL_FAT
|
||||
if("Fatter")
|
||||
fatness_amount = FATNESS_LEVEL_FATTER
|
||||
if("Very Fat")
|
||||
fatness_amount = FATNESS_LEVEL_VERYFAT
|
||||
if("Obese")
|
||||
fatness_amount = FATNESS_LEVEL_OBESE
|
||||
if("Morbidly Obese")
|
||||
fatness_amount = FATNESS_LEVEL_MORBIDLY_OBESE
|
||||
if("Extremely Obese")
|
||||
fatness_amount = FATNESS_LEVEL_EXTREMELY_OBESE
|
||||
if("Barely Mobile")
|
||||
fatness_amount = FATNESS_LEVEL_BARELYMOBILE
|
||||
if("Immobile")
|
||||
fatness_amount = FATNESS_LEVEL_IMMOBILE
|
||||
if("Blob")
|
||||
fatness_amount = FATNESS_LEVEL_BLOB
|
||||
|
||||
fatness_to_check = fatness_amount
|
||||
return TRUE
|
||||
@@ -60,6 +60,7 @@
|
||||
else
|
||||
to_chat(fatty, "<span class='notice'>[src.lastreading]Lbs.</span>")
|
||||
|
||||
visible_message("<span class='notice'>The numbers on the screen read out: [fatty] has a BFI of [fatty.fatness].</span>")
|
||||
|
||||
/obj/structure/scale/Crossed(AM as mob|obj)
|
||||
if(isturf(loc))
|
||||
@@ -70,7 +71,11 @@
|
||||
weighperson(HM)
|
||||
|
||||
/obj/structure/scale/proc/weighperson(mob/living/carbon/human/fatty)
|
||||
src.lastreading = round((140 + (fatty.fatness*src.fatnessToWeight))*(fatty.size_multiplier**2)*((fatty.dna.features["taur"] != "None") ? 2.5: 1))
|
||||
src.lastreading = fatty.calculate_weight_in_pounds()
|
||||
weighEffect(fatty)
|
||||
visible_message("<span class='notice'>[fatty] weighs themselves.</span>")
|
||||
visible_message("<span class='notice'>The numbers on the screen settle on: [src.lastreading]Lbs.</span>")
|
||||
visible_message("<span class='notice'>The numbers on the screen read out: [fatty] has a BFI of [fatty.fatness].</span>")
|
||||
|
||||
/mob/living/carbon/proc/calculate_weight_in_pounds()
|
||||
return round((140 + (fatness*FATNESS_TO_WEIGHT_RATIO))*(size_multiplier**2)*((dna.features["taur"] != "None") ? 2.5: 1))
|
||||
|
||||
@@ -528,3 +528,5 @@ GLOBAL_LIST_INIT(lighter_reskins, list(ZIPPO_SKIN_PLAIN = "plain", ZIPPO_SKIN_DA
|
||||
#define FATTENING_TYPE_MAGIC "magic"
|
||||
#define FATTENING_TYPE_VIRUS "virus"
|
||||
#define FATTENING_TYPE_WEIGHT_LOSS "weight_loss"
|
||||
|
||||
#define FATNESS_TO_WEIGHT_RATIO 0.25
|
||||
|
||||
@@ -175,6 +175,14 @@
|
||||
return TRUE
|
||||
if(unrestricted_side(M))
|
||||
return TRUE
|
||||
//GS13 EDIT
|
||||
var/mob/living/carbon/human/bump_mob = M
|
||||
if(check_fatness && istype(bump_mob))
|
||||
if(check_fatness_below && (bump_mob.fatness >= fatness_to_check))
|
||||
return FALSE
|
||||
if(!check_fatness_below && (bump_mob.fatness < fatness_to_check))
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter)
|
||||
|
||||
@@ -3119,14 +3119,18 @@
|
||||
#include "GainStation13\code\modules\reagents\chemistry\recipes\fatdrinks.dm"
|
||||
#include "GainStation13\code\modules\reagents\chemistry\recipes\ROCKANDSTONEdrinks.dm"
|
||||
#include "GainStation13\code\modules\reagents\reagent_containers\barrel_tank.dm"
|
||||
#include "GainStation13\code\modules\research\designs\autolathe.dm"
|
||||
#include "GainStation13\code\modules\research\designs\nutri_designs.dm"
|
||||
#include "GainStation13\code\modules\research\techweb\nutritech_nodes.dm"
|
||||
#include "GainStation13\code\modules\surgery\organs\augments.dm"
|
||||
#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\circuits.dm"
|
||||
#include "GainStation13\code\obj\items\holy.dm"
|
||||
#include "GainStation13\code\obj\items\minor_items.dm"
|
||||
#include "GainStation13\code\obj\items\sensors\weight_infared.dm"
|
||||
#include "GainStation13\code\obj\structure\airlock.dm"
|
||||
#include "GainStation13\code\obj\structure\calorite_doors.dm"
|
||||
#include "GainStation13\code\obj\structure\candylight.dm"
|
||||
#include "GainStation13\code\obj\structure\fountain.dm"
|
||||
|
||||
Reference in New Issue
Block a user