whole lotta stuff
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
/obj/item/bluespace_belt
|
||||
name = "bluespace belt"
|
||||
desc = "A belt made using bluespace technology. The power of space and time, used to hide the fact you are fat."
|
||||
icon = 'GainStation13/icons/obj/clothing/bluespace_belt.dmi'
|
||||
icon_state = "bluespace_belt"
|
||||
item_state = "bluespace_belt"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
|
||||
drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
|
||||
pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
|
||||
|
||||
/obj/item/bluespace_belt/equipped(mob/user, slot)
|
||||
..()
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
var/mob/living/carbon/U = user
|
||||
if(slot == SLOT_BELT)
|
||||
to_chat(U, "<span class='notice'>You put the belt around your waist and your mass begins to shrink...</span>")
|
||||
U.hider_add(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The belt is opened, letting your mass flow out!</span>")
|
||||
U.hider_remove(src)
|
||||
|
||||
/obj/item/bluespace_belt/dropped(mob/user)
|
||||
..()
|
||||
if(!iscarbon(user))
|
||||
return
|
||||
var/mob/living/carbon/U = user
|
||||
to_chat(U, "<span class='warning'>The belt is opened, letting your mass flow out!</span>")
|
||||
U.hider_remove(src)
|
||||
|
||||
/obj/item/bluespace_belt/proc/fat_hide(var/mob/living/carbon/user)
|
||||
return -(user.fatness_real - 1)
|
||||
|
||||
@@ -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,93 @@
|
||||
/obj/item/nullrod/attack(mob/target, mob/living/user)
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/T = target
|
||||
for(var/hider in T.fat_hiders)
|
||||
if(isitem(hider))
|
||||
var/obj/item/O = 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
|
||||
for(var/hider in T.fat_hiders)
|
||||
if(isitem(hider))
|
||||
var/obj/item/O = 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)
|
||||
. = ..()
|
||||
for(var/hider in M.fat_hiders)
|
||||
if(isitem(hider))
|
||||
var/obj/item/O = 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(mapload)
|
||||
. = ..()
|
||||
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("<span class='warning'>[usr] slides forward!</span>")
|
||||
user.resting = FALSE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Something prevents you from sliding forward!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You fall down when attempting to slide!</span>")
|
||||
|
||||
/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"
|
||||
@@ -0,0 +1,171 @@
|
||||
/////GS13 - miscellanous items. If it's a small item, a container or something
|
||||
/////then it should land here, instead of making a seperate .dm file
|
||||
|
||||
//fatoray research scraps (maintloot)
|
||||
|
||||
/obj/item/trash/fatoray_scrap1
|
||||
name = "raygun scraps"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_scrap1"
|
||||
desc = "Small parts that seemingly once belonged to some sort of a raygun."
|
||||
|
||||
/obj/item/trash/fatoray_scrap2
|
||||
name = "raygun scraps"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_scrap2"
|
||||
desc = "Small parts that seemingly once belonged to some sort of a raygun."
|
||||
|
||||
// GS13 fatty liquid beakers defs, for admin stuff and mapping junk
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/lipoifier
|
||||
list_reagents = list(/datum/reagent/consumable/lipoifier = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/cornoil
|
||||
list_reagents = list(/datum/reagent/consumable/cornoil = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/blueberry_juice
|
||||
list_reagents = list(/datum/reagent/blueberry_juice = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/fizulphite
|
||||
list_reagents = list(/datum/reagent/consumable/fizulphite = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/extilphite
|
||||
list_reagents = list(/datum/reagent/consumable/extilphite = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/calorite_blessing
|
||||
list_reagents = list(/datum/reagent/consumable/caloriteblessing = 50)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/flatulose
|
||||
list_reagents = list(/datum/reagent/consumable/flatulose = 50)
|
||||
|
||||
//blueberry gum snack
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/blueberry_gum
|
||||
name = "blueberry gum"
|
||||
icon = 'GainStation13/icons/obj/gum.dmi'
|
||||
icon_state = "gum_wrapped"
|
||||
desc = "Doesn't cause anything more than some discoloration... probably."
|
||||
trash = /obj/item/trash/blueberry_gum
|
||||
list_reagents = list(/datum/reagent/blueberry_juice = 50)
|
||||
bitesize = 5
|
||||
filling_color = "#001aff"
|
||||
tastes = list("blueberry gum" = 1)
|
||||
foodtype = FRUIT
|
||||
price = 5
|
||||
|
||||
//blueberry gum trash
|
||||
|
||||
/obj/item/trash/blueberry_gum
|
||||
name = "chewed gum"
|
||||
icon = 'GainStation13/icons/obj/gum.dmi'
|
||||
icon_state = "gum_chewed"
|
||||
|
||||
// nutriment pump turbo
|
||||
|
||||
/obj/item/autosurgeon/nutripump_turbo
|
||||
desc = "A single use autosurgeon that contains a turbo version of the nutriment pump. A screwdriver can be used to remove it, but implants can't be placed back in."
|
||||
uses = 1
|
||||
starting_organ = /obj/item/organ/cyberimp/chest/nutriment/turbo
|
||||
|
||||
/obj/item/autosurgeon/fat_mobility
|
||||
desc = "A single use autosurgeon that contains a mobility nanite core. A screwdriver can be used to remove it, but implants can't be placed back in."
|
||||
uses = 1
|
||||
starting_organ = /obj/item/organ/cyberimp/chest/mobility
|
||||
|
||||
//fast food restaurant - closed / open signs
|
||||
/obj/item/holosign_creator/restaurant
|
||||
name = "Holosign Projector - Restaurant Adverts"
|
||||
desc = "A holo-sign maker, used for placing signs that advertises the local fast food restaurant."
|
||||
icon = 'GainStation13/icons/obj/holosign.dmi'
|
||||
icon_state = "holo_fastfood"
|
||||
holosign_type = /obj/structure/holosign/restaurant
|
||||
creation_time = 0
|
||||
max_signs = 6
|
||||
|
||||
/obj/item/holosign_creator/closed
|
||||
name = "Holosign Projector - Closing Sign"
|
||||
desc = "A holo-sign maker, used for placing signs that inform people of a location being closed off."
|
||||
icon = 'GainStation13/icons/obj/holosign.dmi'
|
||||
icon_state = "holo_closed"
|
||||
holosign_type = /obj/structure/holosign/barrier/closed
|
||||
creation_time = 0
|
||||
max_signs = 6
|
||||
|
||||
//holosigns used by the holosign creators
|
||||
/obj/structure/holosign/restaurant
|
||||
name = "The Restaurant is OPEN! Come visit!"
|
||||
desc = "A holographic projector that displays a sign advertising the nearby Fast Food Restaurant."
|
||||
icon = 'GainStation13/icons/obj/holosign.dmi'
|
||||
icon_state = "holosign_ad"
|
||||
|
||||
/obj/structure/holosign/barrier/closed
|
||||
name = "This Location is Closed!"
|
||||
desc = "A short holographic barrier used to close off areas. Can be passed by walking."
|
||||
icon = 'GainStation13/icons/obj/holosign.dmi'
|
||||
icon_state = "holosign_closed"
|
||||
|
||||
//ID for fastfood wagies so they can use the tele
|
||||
/obj/item/card/id/silver/restaurant
|
||||
name = "silver identification card"
|
||||
desc = "A silver ID, given to the GATO's fast food restaurant workers. Doesn't grant much besides teleporter access."
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_TELEPORTER)
|
||||
|
||||
//gato decal, should be moved elsewhere tbh
|
||||
/obj/effect/decal/big_gato //96x96 px sprite
|
||||
name = "GATO"
|
||||
desc = "Your employer! Probably."
|
||||
icon = 'GainStation13/icons/turf/96x96.dmi'
|
||||
icon_state = "gato"
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
|
||||
/obj/effect/decal/medium_gato //64x64 px sprite
|
||||
name = "GATO"
|
||||
desc = "Your employer! Probably."
|
||||
icon = 'GainStation13/icons/turf/64x64.dmi'
|
||||
icon_state = "gato"
|
||||
layer = ABOVE_OPEN_TURF_LAYER
|
||||
pixel_y = -16
|
||||
pixel_x = -16
|
||||
|
||||
|
||||
//collar voice modulators, based on cow/pig masks
|
||||
|
||||
/obj/item/clothing/mask/pig/gag //this one only lets you say "oink" and similar
|
||||
name = "Voice modulator - pig"
|
||||
desc = "A small gag, used to silence people in a rather 'original' way."
|
||||
icon_state = "ballgag"
|
||||
item_state = "ballgag"
|
||||
flags_inv = HIDEFACE
|
||||
clothing_flags = VOICEBOX_TOGGLABLE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/cowmask/gag //this one only lets you say "moo" and similar
|
||||
name = "Voice modulator - cow"
|
||||
desc = "A small gag, used to silence people in a rather 'original' way."
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_state = "ballgag"
|
||||
item_state = "ballgag"
|
||||
flags_inv = HIDEFACE
|
||||
|
||||
/obj/item/service_sign
|
||||
name = "service sign"
|
||||
desc = "A sign that reads 'closed'"
|
||||
icon = 'GainStation13/icons/obj/service_sign.dmi'
|
||||
icon_state = "sign_closed"
|
||||
|
||||
/obj/item/service_sign/attack_self()
|
||||
if(icon_state == "sign_closed")
|
||||
icon_state = "sign_open"
|
||||
desc = "A sign that reads 'open'"
|
||||
else
|
||||
icon_state = "sign_closed"
|
||||
desc = "A sign that reads 'closed'"
|
||||
|
||||
/obj/item/trash/odd_disk
|
||||
name = "odd disk"
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk0"
|
||||
desc = "A dusty disk, desconstruction will be needed to recover data."
|
||||
@@ -0,0 +1,47 @@
|
||||
/obj/item/clothing/accessory/pride_pin
|
||||
name = "pride pin"
|
||||
desc = "A pride pin."
|
||||
icon_state = "pride"
|
||||
item_color = "pride"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/bi
|
||||
name = "bisexual pride pin"
|
||||
desc = "A bisexual pride pin."
|
||||
icon_state = "pride_bi"
|
||||
item_color = "pride_bi"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/trans
|
||||
name = "transgender pride pin"
|
||||
desc = "A transgender pride pin."
|
||||
icon_state = "pride_trans"
|
||||
item_color = "pride_trans"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/ace
|
||||
name = "asexual pride pin"
|
||||
desc = "A asexual pride pin."
|
||||
icon_state = "pride_ace"
|
||||
item_color = "pride_ace"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/enby
|
||||
name = "non-binary pride pin"
|
||||
desc = "A non-binary pride pin."
|
||||
icon_state = "pride_enby"
|
||||
item_color = "pride_enby"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/pan
|
||||
name = "pansexual pride pin"
|
||||
desc = "A pansexual pride pin."
|
||||
icon_state = "pride_pan"
|
||||
item_color = "pride_pan"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/lesbian
|
||||
name = "lesbian pride pin"
|
||||
desc = "A lesbian pride pin."
|
||||
icon_state = "pride_lesbian"
|
||||
item_color = "pride_lesbian"
|
||||
|
||||
/obj/item/clothing/accessory/pride_pin/intersex
|
||||
name = "intersex pride pin"
|
||||
desc = "A intersex pride pin."
|
||||
icon_state = "pride_intersex"
|
||||
item_color = "pride_intersex"
|
||||
@@ -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
|
||||
@@ -0,0 +1,18 @@
|
||||
/obj/structure/mineral_door/calorite //GS13
|
||||
name = "calorite door"
|
||||
icon = 'GainStation13/icons/obj/structure/calorite_door.dmi'
|
||||
icon_state = "calorite"
|
||||
sheetType = /obj/item/stack/sheet/mineral/calorite
|
||||
max_integrity = 200
|
||||
light_range = 1
|
||||
// Sets it open by default
|
||||
state = TRUE
|
||||
density = FALSE
|
||||
|
||||
// If you ever want to make any door like this, just simply add the component like this :3
|
||||
/obj/structure/mineral_door/calorite/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/fattening_door)
|
||||
|
||||
update_icon() // Updates the sprite when spawned in cause it's closed by default.
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/obj/structure/tree/candylight //GS13
|
||||
name = "Peppermint Light"
|
||||
desc = "A light source that's made out of a peppermint tree."
|
||||
icon = 'GainStation13/icons/obj/gslight.dmi'
|
||||
icon_state = "candylight"
|
||||
max_integrity = 500
|
||||
light_color = "#a5cfc5" //testing out my copy cat skills. -Metussi
|
||||
light_range = 3
|
||||
anchored = 1
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
/obj/structure/cursedfatfountain
|
||||
name = "Strange fountain"
|
||||
desc = "An odd fountain, sparking with foreign magic."
|
||||
icon = 'GainStation13/icons/obj/cursed_fountain.dmi'
|
||||
icon_state = "full"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
var/curse_given = 0
|
||||
|
||||
/mob/living
|
||||
var/cursed_fat = 0 //decides whether the user is cursed at all (also makes for a fun admin switch)
|
||||
var/fattening_steps_left = 0 //decides on the lenght of the curse
|
||||
|
||||
/obj/structure/cursedfatfountain/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(curse_given == 1)
|
||||
to_chat(user, "<span class='notice'>The fountain has dried up.</span>")
|
||||
icon_state = "empty"
|
||||
return
|
||||
if (ishuman(user) && user.has_dna())
|
||||
user.cursed_fat = 1
|
||||
user.fattening_steps_left += 2000
|
||||
icon_state = "empty"
|
||||
to_chat(user, "<span class='notice'>The glittering orange liquid disappears instantly as you touch it. You feel a strange, warm sensation inside, growing stronger the more you move...</span>")
|
||||
curse_given = 1
|
||||
|
||||
// /obj/structure/cursedfatfountain/update_icon()
|
||||
// if(last_process + time_between_uses > world.time)
|
||||
// icon_state = "full"
|
||||
// else
|
||||
// icon_state = "empty"
|
||||
|
||||
/mob/living/carbon/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(cursed_fat == 1)
|
||||
fattening_steps_left -= 1
|
||||
adjust_fatness(20, FATTENING_TYPE_MAGIC)
|
||||
|
||||
if(fattening_steps_left <= 0)
|
||||
cursed_fat = 0
|
||||
@@ -0,0 +1,6 @@
|
||||
/obj/structure/statue/fatso
|
||||
name = "statue of a forgotten god"
|
||||
desc = "A statue of a long forgotten god, at least on earth."
|
||||
icon = 'GainStation13/icons/obj/structure/statues.dmi'
|
||||
icon_state = "fattha_statue"
|
||||
anchored = TRUE
|
||||
@@ -0,0 +1,81 @@
|
||||
/obj/structure/scale
|
||||
name = "weighing scale"
|
||||
desc = "You can weigh yourself with this."
|
||||
icon = 'GainStation13/icons/obj/scale.dmi'
|
||||
icon_state = "scale"
|
||||
anchored = TRUE
|
||||
resistance_flags = NONE
|
||||
max_integrity = 250
|
||||
integrity_failure = 25
|
||||
var/buildstacktype = /obj/item/stack/sheet/metal
|
||||
var/buildstackamount = 3
|
||||
layer = OBJ_LAYER
|
||||
//stores the weight of the last person to step on in Lbs
|
||||
var/lastreading = 0
|
||||
//the conversion ratio for how much a point of fatness weighs on a 6' person
|
||||
var/fatnessToWeight = 0.25
|
||||
|
||||
/obj/structure/scale/deconstruct()
|
||||
// If we have materials, and don't have the NOCONSTRUCT flag
|
||||
if(buildstacktype && (!(flags_1 & NODECONSTRUCT_1)))
|
||||
new buildstacktype(loc,buildstackamount)
|
||||
..()
|
||||
|
||||
/obj/structure/scale/attackby(obj/item/W, mob/user, params)
|
||||
if(W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1))
|
||||
W.play_tool_sound(src)
|
||||
deconstruct()
|
||||
else if(istype(W, /obj/item/assembly/shock_kit))
|
||||
if(!user.temporarilyRemoveItemFromInventory(W))
|
||||
return
|
||||
var/obj/item/assembly/shock_kit/SK = W
|
||||
var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc)
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
E.setDir(dir)
|
||||
E.part = SK
|
||||
SK.forceMove(E)
|
||||
SK.master = E
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/scale/examine(mob/user)
|
||||
. = ..()
|
||||
. += "Its last reading was: [src.lastreading]Lbs"
|
||||
. += "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>"
|
||||
|
||||
/obj/structure/scale/proc/weighEffect(mob/living/carbon/human/fatty)
|
||||
to_chat(fatty, "<span class='notice'>You weigh yourself.</span>")
|
||||
to_chat(fatty, "<span class='notice'>The numbers on the screen tick up and eventually settle on:</span>")
|
||||
//The appearance of the numbers changes with the fat level of the character
|
||||
if (HAS_TRAIT(fatty, TRAIT_BLOB))
|
||||
to_chat(fatty, "<span class='userdanger'><span class='big'>[round(src.lastreading/2000, 0.01)]TONS!!!</span></span>")
|
||||
|
||||
else if (HAS_TRAIT(fatty, TRAIT_IMMOBILE))
|
||||
to_chat(fatty, "<span class='boldannounce'>[src.lastreading]Lbs!</span>")
|
||||
|
||||
else if(HAS_TRAIT(fatty, TRAIT_OBESE) || HAS_TRAIT(fatty, TRAIT_MORBIDLYOBESE))
|
||||
to_chat(fatty, "<span class='alert'>[src.lastreading]Lbs!</span>")
|
||||
|
||||
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))
|
||||
//need to be sure the thing that just crossed the scale is human
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/HM = AM
|
||||
if(!(HM.movement_type & FLYING))
|
||||
weighperson(HM)
|
||||
|
||||
/obj/structure/scale/proc/weighperson(mob/living/carbon/human/fatty)
|
||||
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))
|
||||
@@ -0,0 +1,171 @@
|
||||
/////GS13 - rayguns for metabolism and breasts/ass manipulation
|
||||
|
||||
//this is pretty wonky code, but ig it works
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray
|
||||
name = "alter-ray"
|
||||
icon = 'icons/obj/guns/energy.dmi'
|
||||
icon_state = "lasernew"
|
||||
desc = "This weapon is capable of altering one's body capabilities."
|
||||
item_state = null
|
||||
selfcharge = EGUN_SELFCHARGE
|
||||
charge_delay = 5
|
||||
ammo_x_offset = 2
|
||||
clumsy_check = 1
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray/gainrate
|
||||
name = "AL-T-Ray: Metabolism"
|
||||
desc = "This weapon is capable of altering one's body capabilities. This model appears to be capable of altering one's weight gain and loss rate by 10%."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/gainrate_decrease, /obj/item/ammo_casing/energy/laser/gainrate_increase, /obj/item/ammo_casing/energy/laser/lossrate_decrease, /obj/item/ammo_casing/energy/laser/lossrate_increase)
|
||||
|
||||
|
||||
// /obj/item/gun/energy/laser/alter_ray/assbreasts //genius name, I know
|
||||
// name = "AL-T-Ray: Voluptousness"
|
||||
// desc = "This weapon is capable of altering one's body capabilities. This model appears to be capable of altering the size's of one's breasts or buttocks."
|
||||
// ammo_type = list(/obj/item/ammo_casing/energy/laser/shrinkray, /obj/item/ammo_casing/energy/laser/growthray)
|
||||
|
||||
|
||||
/obj/item/projectile/alter_ray
|
||||
name = "sizeray beam"
|
||||
icon_state = "omnilaser"
|
||||
hitsound = null
|
||||
damage = 0
|
||||
damage_type = STAMINA
|
||||
flag = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
ricochets_max = 50
|
||||
ricochet_chance = 80
|
||||
is_reflectable = TRUE
|
||||
var/ratechange_amount = 0.1
|
||||
|
||||
|
||||
//projectile biz
|
||||
|
||||
/obj/item/projectile/alter_ray/gainrate_decrease
|
||||
icon_state="bluelaser"
|
||||
|
||||
/obj/item/projectile/alter_ray/gainrate_increase
|
||||
icon_state="laser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_decrease
|
||||
icon_state="bluelaser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_increase
|
||||
icon_state="laser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/breast_decrease
|
||||
// icon_state="bluelaser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/breast_increase
|
||||
// icon_state="laser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/butt_decrease
|
||||
// icon_state="bluelaser"
|
||||
|
||||
// /obj/item/projectile/alter_ray/butt_increase
|
||||
// icon_state="laser"
|
||||
|
||||
//laser hitting / changing code
|
||||
|
||||
//wg rate increase
|
||||
/obj/item/projectile/alter_ray/gainrate_increase/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_gain_rate <= 3)
|
||||
gainer.weight_gain_rate += ratechange_amount
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
|
||||
//wg rate decrease
|
||||
/obj/item/projectile/alter_ray/gainrate_decrease/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_gain_rate >= 0.11)
|
||||
gainer.weight_gain_rate -= ratechange_amount
|
||||
return TRUE
|
||||
if(gainer.weight_gain_rate <= 0.1)
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//wl rate increase
|
||||
/obj/item/projectile/alter_ray/lossrate_increase/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_loss_rate <= 3)
|
||||
gainer.weight_loss_rate += ratechange_amount
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//wl rate decrease
|
||||
/obj/item/projectile/alter_ray/lossrate_decrease/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
if(gainer.weight_loss_rate >= 0.11)
|
||||
gainer.weight_loss_rate -= ratechange_amount
|
||||
return TRUE
|
||||
if(gainer.weight_loss_rate <= 0.1)
|
||||
return FALSE
|
||||
|
||||
return FALSE
|
||||
|
||||
//ammo casings - these are needed to allow guns to switch between firing modes
|
||||
/obj/item/ammo_casing/energy/laser/gainrate_increase
|
||||
projectile_type = /obj/item/projectile/alter_ray/gainrate_increase
|
||||
select_name = "Weight Gain Increase"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/gainrate_decrease
|
||||
projectile_type = /obj/item/projectile/alter_ray/gainrate_decrease
|
||||
select_name = "Weight Gain Decrease"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_increase
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_increase
|
||||
select_name = "Weight Loss Increase"
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_decrease
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_decrease
|
||||
select_name = "Weight Loss Decrease"
|
||||
|
||||
|
||||
|
||||
//ALTRay for making someone gain from weight loss
|
||||
|
||||
/obj/item/gun/energy/laser/alter_ray/noloss
|
||||
name = "AL-T-Ray: Reverser"
|
||||
desc = "This weapon is capable of altering one's body capabilities. This one reverse's ones body functions, to make it so weight loss results in weight gain."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/lossrate_reverse)
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/lossrate_reverse
|
||||
projectile_type = /obj/item/projectile/alter_ray/lossrate_reverse
|
||||
select_name = "Weight Loss Reverse"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_reverse
|
||||
ratechange_amount = -2
|
||||
icon_state="laser"
|
||||
|
||||
/obj/item/projectile/alter_ray/lossrate_reverse/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
|
||||
if(iscarbon(gainer))
|
||||
gainer.weight_loss_rate = ratechange_amount
|
||||
return TRUE
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/obj/item/gun/fatbeam // GS13
|
||||
name = "Fatbeam Gun"
|
||||
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"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
var/mob/living/current_target
|
||||
var/last_check = 0
|
||||
var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though
|
||||
var/max_range = 8
|
||||
var/active = 0
|
||||
var/datum/beam/current_beam = null
|
||||
var/mounted = 0 //Denotes if this is a handheld or mounted version
|
||||
|
||||
weapon_weight = WEAPON_MEDIUM
|
||||
|
||||
/obj/item/gun/fatbeam/Initialize(mapload)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/gun/fatbeam/Destroy(mob/user)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
LoseTarget()
|
||||
return ..()
|
||||
|
||||
/obj/item/gun/fatbeam/dropped(mob/user)
|
||||
..()
|
||||
LoseTarget()
|
||||
|
||||
/obj/item/gun/fatbeam/equipped(mob/user)
|
||||
..()
|
||||
LoseTarget()
|
||||
|
||||
/obj/item/gun/fatbeam/proc/LoseTarget()
|
||||
if(active)
|
||||
qdel(current_beam)
|
||||
current_beam = null
|
||||
active = 0
|
||||
on_beam_release(current_target)
|
||||
current_target = null
|
||||
|
||||
/obj/item/gun/fatbeam/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
if(isliving(user))
|
||||
add_fingerprint(user)
|
||||
|
||||
if(current_target)
|
||||
LoseTarget()
|
||||
if(!isliving(target))
|
||||
return
|
||||
|
||||
current_target = target
|
||||
active = TRUE
|
||||
current_beam = new(user,current_target,time=6000,beam_icon_state="fatbeam",btype=/obj/effect/ebeam/medical)
|
||||
INVOKE_ASYNC(current_beam, TYPE_PROC_REF(/datum/beam,Start))
|
||||
|
||||
SSblackbox.record_feedback("tally", "gun_fired", 1, type)
|
||||
|
||||
/obj/item/gun/fatbeam/process()
|
||||
|
||||
var/source = loc
|
||||
if(!mounted && !isliving(source))
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(!current_target)
|
||||
LoseTarget()
|
||||
return
|
||||
|
||||
if(world.time <= last_check+check_delay)
|
||||
return
|
||||
|
||||
last_check = world.time
|
||||
|
||||
if(get_dist(source, current_target)>max_range || !los_check(source, current_target))
|
||||
LoseTarget()
|
||||
if(isliving(source))
|
||||
to_chat(source, "<span class='warning'>You lose control of the beam!</span>")
|
||||
return
|
||||
|
||||
if(current_target)
|
||||
on_beam_tick(current_target)
|
||||
|
||||
/obj/item/gun/fatbeam/proc/los_check(atom/movable/user, mob/target)
|
||||
var/turf/user_turf = user.loc
|
||||
if(mounted)
|
||||
user_turf = get_turf(user)
|
||||
else if(!istype(user_turf))
|
||||
return FALSE
|
||||
var/obj/dummy = new(user_turf)
|
||||
dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows
|
||||
for(var/turf/turf in getline(user_turf,target))
|
||||
if(mounted && turf == user_turf)
|
||||
continue //Mechs are dense and thus fail the check
|
||||
if(turf.density)
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
for(var/atom/movable/AM in turf)
|
||||
if(!AM.CanPass(dummy,turf,1))
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams!
|
||||
if(B.owner.origin != current_beam.origin)
|
||||
explosion(B.loc,0,1,3,4)
|
||||
qdel(dummy)
|
||||
return FALSE
|
||||
qdel(dummy)
|
||||
return TRUE
|
||||
|
||||
/obj/item/gun/fatbeam/proc/on_beam_hit(var/mob/living/target)
|
||||
return
|
||||
|
||||
/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), "#fabb62")
|
||||
if(target?.client?.prefs?.weight_gain_weapons)
|
||||
target.nutrition += 50
|
||||
return
|
||||
|
||||
/obj/item/gun/fatbeam/proc/on_beam_release(var/mob/living/target)
|
||||
return
|
||||
|
||||
/obj/effect/ebeam/medical
|
||||
name = "fattening beam"
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
/////GS13 - fattening rayguns and ranged weapons
|
||||
|
||||
///The base fatoray
|
||||
/obj/item/gun/energy/fatoray
|
||||
name = "Fatoray"
|
||||
desc = "An energy gun that fattens up anyone it hits."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
lefthand_file = 'GainStation13/icons/obj/guns_lefthand.dmi'
|
||||
righthand_file = 'GainStation13/icons/obj/guns_righthand.dmi'
|
||||
icon_state = "fatoray"
|
||||
item_state = "fatoray"
|
||||
pin = /obj/item/firing_pin
|
||||
fire_sound = 'sound/weapons/plasma_cutter.ogg'
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening
|
||||
name = "fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
projectile_type = /obj/item/projectile/beam/fattening
|
||||
|
||||
///The base projectile used by the fatoray
|
||||
/obj/item/projectile/beam/fattening
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "ray"
|
||||
ricochets_max = 50
|
||||
ricochet_chance = 80
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
|
||||
damage = 0
|
||||
eyeblur = 0
|
||||
damage_type = BURN
|
||||
flag = "energy"
|
||||
light_range = 2
|
||||
light_color = LIGHT_COLOR_ORANGE
|
||||
///How much fat is added to the target mob?
|
||||
var/fat_added = 100
|
||||
|
||||
|
||||
|
||||
////// Fatoray - cannon variant, strong but can be charged
|
||||
|
||||
/obj/item/gun/energy/fatoray/cannon
|
||||
name = "Fatoray Cannon"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version functions as a glass cannon of some sorts. It cannot be recharged."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_cannon"
|
||||
recoil = 3
|
||||
can_charge = 0
|
||||
slowdown = 1
|
||||
pin = /obj/item/firing_pin
|
||||
// charge_sections = 3
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/cannon)
|
||||
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/cannon
|
||||
name = "one-shot fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
e_cost = 100
|
||||
projectile_type = /obj/item/projectile/beam/fattening/cannon
|
||||
|
||||
/obj/item/projectile/beam/fattening/cannon
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "cannon_ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 1000
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
////////FATORAYS THAT CAN BE MADE BY LATHES OR RESEARCHED///////////
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
///Weaker version of fatoray
|
||||
/obj/item/gun/energy/fatoray/weak
|
||||
name = "Basic Fatoray"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version is considerably weaker than its original counterpart, the technology behind it seemingly still not perfected."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_weak"
|
||||
pin = /obj/item/firing_pin
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/weak)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/weak
|
||||
name = "budget fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
projectile_type = /obj/item/projectile/beam/fattening/weak
|
||||
|
||||
///The base projectile used by the fatoray
|
||||
/obj/item/projectile/beam/fattening/weak
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 50
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
///Single shot glass cannon fatoray
|
||||
/obj/item/gun/energy/fatoray/cannon_weak
|
||||
name = "Basic Fatoray Cannon"
|
||||
desc = "An energy gun that fattens up anyone it hits. This version functions as a glass cannon of some sorts. It cannot be recharged."
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "fatoray_cannon_weak"
|
||||
can_charge = 0
|
||||
recoil = 3
|
||||
slowdown = 1
|
||||
pin = /obj/item/firing_pin
|
||||
// charge_sections = 3
|
||||
weapon_weight = WEAPON_HEAVY
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/fattening/cannon_weak)
|
||||
|
||||
/obj/item/ammo_casing/energy/fattening/cannon_weak
|
||||
name = "one-shot fattening weapon lens"
|
||||
select_name = "fatten"
|
||||
e_cost = 300
|
||||
projectile_type = /obj/item/projectile/beam/fattening/cannon_weak
|
||||
|
||||
/obj/item/projectile/beam/fattening/cannon_weak
|
||||
name = "fat energy"
|
||||
icon = 'GainStation13/icons/obj/fatoray.dmi'
|
||||
icon_state = "cannon_ray"
|
||||
///How much fat is added to the target mob?
|
||||
fat_added = 500
|
||||
|
||||
///////////////////////////////////////
|
||||
//////PROJECTILE MECHANICS/////////////
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/projectile/beam/fattening/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/gainer = target
|
||||
if(!iscarbon(gainer))
|
||||
return FALSE
|
||||
|
||||
if(!gainer.adjust_fatness(fat_added, FATTENING_TYPE_WEAPON))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
@@ -0,0 +1,25 @@
|
||||
/obj/item/gun/energy/kinetic_accelerator/crossbow/feeder
|
||||
name = "feeder's mini energy crossbow"
|
||||
desc = "a modified version of the standard mini energy crossbow, designed to fatten up a target while incapacitating them."
|
||||
icon_state = "crossbow_halloween"
|
||||
item_state = "crossbow"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/bolt/fattening)
|
||||
|
||||
/obj/item/ammo_casing/energy/bolt/fattening
|
||||
projectile_type = /obj/item/projectile/energy/bolt/fattening
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening
|
||||
damage = 0
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
/obj/item/projectile/energy/bolt/fattening/on_hit(atom/target, blocked)
|
||||
. = ..()
|
||||
var/mob/living/carbon/target_mob = target
|
||||
if(!istype(target_mob) || (blocked == 100))
|
||||
return
|
||||
|
||||
target_mob.reagents.add_reagent(/datum/reagent/consumable/lipoifier, 2)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user