mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-24 21:57:53 +01:00
Merge branch 'master' into upstream-merge-11809
This commit is contained in:
@@ -234,6 +234,12 @@
|
||||
ckeywhitelist = list("chaleur")
|
||||
character_name = list("Hisako Arato")
|
||||
|
||||
/datum/gear/fluff/jade_stamp
|
||||
path = /obj/item/weapon/stamp/fluff/jade_horror
|
||||
display_name = "Official Council of Mid Horror rubber stamp"
|
||||
ckeywhitelist = list("coolcrow420")
|
||||
character_name = list("Jade Davis")
|
||||
|
||||
// D CKEYS
|
||||
/datum/gear/fluff/dhaeleena_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/security/fluff/dhael
|
||||
@@ -320,6 +326,7 @@
|
||||
// G CKEYS
|
||||
|
||||
// H CKEYS
|
||||
|
||||
/datum/gear/fluff/lauren_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Lauren's Medal"
|
||||
@@ -753,11 +760,17 @@
|
||||
ckeywhitelist = list("pastelprincedan")
|
||||
character_name = list("Kiyoshi Maki", "Masumi Maki")
|
||||
|
||||
/datum/gear/fluff/masumi_overalls
|
||||
path = /obj/item/clothing/under/fluff/masumi_overalls
|
||||
display_name = "white and blue overalls"
|
||||
ckeywhitelist = list("pastelprincedan")
|
||||
character_name = list("Masumi Maki")
|
||||
/datum/gear/fluff/mechanic_overalls
|
||||
path = /obj/item/clothing/under/fluff/mechanic_overalls
|
||||
display_name = "mechanic overalls"
|
||||
ckeywhitelist = list("pastelprincedan", "hatterhat")
|
||||
character_name = list("Masumi Maki", "Harold Robinson")
|
||||
|
||||
/datum/gear/fluff/mechanic_coat
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic
|
||||
display_name = "mechanic winter coat"
|
||||
ckeywhitelist = list("pastelprincedan", "hatterhat")
|
||||
character_name = list("Masumi Maki", "Harold Robinson")
|
||||
|
||||
// Q CKEYS
|
||||
|
||||
|
||||
@@ -46,13 +46,13 @@
|
||||
|
||||
/datum/gear/mask/gaiter
|
||||
display_name = "neck gaiter selection"
|
||||
path = /obj/item/clothing/mask/gaiter
|
||||
path = /obj/item/clothing/accessory/gaiter
|
||||
cost = 1
|
||||
|
||||
/datum/gear/mask/gaiter/New()
|
||||
..()
|
||||
var/list/gaiters = list()
|
||||
for(var/gaiter in typesof(/obj/item/clothing/mask/gaiter))
|
||||
var/obj/item/clothing/mask/gaiter_type = gaiter
|
||||
for(var/gaiter in typesof(/obj/item/clothing/accessory/gaiter))
|
||||
var/obj/item/clothing/accessory/gaiter_type = gaiter
|
||||
gaiters[initial(gaiter_type.name)] = gaiter_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
|
||||
@@ -164,6 +164,16 @@
|
||||
desc = "A starry winter hood."
|
||||
icon_state = "winterhood_cosmic"
|
||||
|
||||
/obj/item/clothing/head/hood/winter/christmasred
|
||||
name = "red christmas winter hood"
|
||||
desc = "A red festive winter hood."
|
||||
icon_state = "winterhood_christmasr"
|
||||
|
||||
/obj/item/clothing/head/hood/winter/christmasgreen
|
||||
name = "green christmas winter hood"
|
||||
desc = "A green festive winter hood."
|
||||
icon_state = "winterhood_christmasg"
|
||||
|
||||
// Explorer gear
|
||||
/obj/item/clothing/head/hood/explorer
|
||||
name = "explorer hood"
|
||||
|
||||
@@ -362,33 +362,6 @@
|
||||
src.icon_state = "flushed"
|
||||
return
|
||||
|
||||
//Gaiter scarves
|
||||
/obj/item/clothing/mask/gaiter
|
||||
name = "red neck gaiter"
|
||||
desc = "A slightly worn neck gaiter, it's loose enough to be worn comfortably like a scarf. Commonly used by outdoorsmen and mercenaries, both to keep warm and keep debris away from the face."
|
||||
icon_state = "gaiter_red"
|
||||
|
||||
/obj/item/clothing/mask/gaiter/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]_up"
|
||||
to_chat(user, "You pull the gaiter up over your nose.")
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
to_chat(user, "You tug the gaiter down around your neck.")
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
|
||||
/obj/item/clothing/mask/gaiter/tan
|
||||
name = "tan neck gaiter"
|
||||
icon_state = "gaiter_tan"
|
||||
|
||||
/obj/item/clothing/mask/gaiter/gray
|
||||
name = "gray neck gaiter"
|
||||
icon_state = "gaiter_gray"
|
||||
|
||||
/obj/item/clothing/mask/gaiter/green
|
||||
name = "green neck gaiter"
|
||||
icon_state = "gaiter_green"
|
||||
|
||||
/obj/item/clothing/mask/mouthwheat
|
||||
name = "mouth wheat"
|
||||
desc = "100% synthetic \"Country Girls LLC.\" brand mouth wheat. Warning: not for actual consumption."
|
||||
|
||||
@@ -63,6 +63,9 @@
|
||||
|
||||
/////////////////////////////////////////
|
||||
//Seals and Signet Rings
|
||||
|
||||
/obj/item/clothing/gloves/ring/seal
|
||||
var/stamptext = null
|
||||
/obj/item/clothing/gloves/ring/seal/secgen
|
||||
name = "Secretary-General's official seal"
|
||||
desc = "The official seal of the Secretary-General of the Sol Central Government, featured prominently on a silver ring."
|
||||
|
||||
@@ -174,6 +174,16 @@
|
||||
icon_state = "explorer"
|
||||
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/shoes/boots/winter/christmasred
|
||||
name = "red christmas boots"
|
||||
desc = "A pair of fluffy red christmas boots!"
|
||||
icon_state = "winterboots_christmasr"
|
||||
|
||||
/obj/item/clothing/shoes/boots/winter/christmasgreen
|
||||
name = "green christmas boots"
|
||||
desc = "A pair of fluffy green christmas boots!"
|
||||
icon_state = "winterboots_christmasg"
|
||||
|
||||
// Allows the wearer to climb cliffs, which could allow for shortcuts or sequence-breaking.
|
||||
/obj/item/clothing/shoes/boots/winter/climbing
|
||||
name = "climbing winter boots"
|
||||
|
||||
@@ -344,6 +344,18 @@
|
||||
light_power = 1.8
|
||||
light_range = 1.2
|
||||
light_on = TRUE
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/christmasred
|
||||
name = "red christmas winter coat"
|
||||
desc = "A festive red Christmas coat! Smells like Candy Cane!"
|
||||
icon_state = "coatchristmasr"
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/christmasred
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/christmasgreen
|
||||
name = "green christmas winter coat"
|
||||
desc = "A festive green Christmas coat! Smells like Candy Cane!"
|
||||
icon_state = "coatchristmasg"
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/christmasgreen
|
||||
|
||||
// winter coats end here
|
||||
|
||||
|
||||
@@ -455,4 +455,73 @@
|
||||
name = "sash"
|
||||
desc = "A plain, unadorned sash."
|
||||
icon_state = "sash"
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
//Gaiter scarves
|
||||
/obj/item/clothing/accessory/gaiter
|
||||
name = "red neck gaiter"
|
||||
desc = "A slightly worn neck gaiter, it's loose enough to be worn comfortably like a scarf. Commonly used by outdoorsmen and mercenaries, both to keep warm and keep debris away from the face."
|
||||
icon_state = "gaiter_red"
|
||||
slot_flags = SLOT_MASK | SLOT_TIE
|
||||
body_parts_covered = FACE
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot = ACCESSORY_SLOT_INSIGNIA // snowflakey, i know, shut up
|
||||
item_flags = FLEXIBLEMATERIAL
|
||||
var/breath_masked = FALSE
|
||||
var/obj/item/clothing/mask/breath/breathmask
|
||||
action_button_name = "Pull On Gaiter"
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/update_clothing_icon()
|
||||
. = ..()
|
||||
if(ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_wear_mask()
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/attackby(obj/item/I, mob/user)
|
||||
if(istype(I, /obj/item/clothing/mask/breath))
|
||||
to_chat(user, SPAN_NOTICE("You tuck [I] behind [src]."))
|
||||
breathmask = I
|
||||
breath_masked = TRUE
|
||||
user.drop_from_inventory(I, drop_location())
|
||||
I.forceMove(src)
|
||||
item_flags &= ~FLEXIBLEMATERIAL
|
||||
. = ..()
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(breath_masked && breathmask)
|
||||
to_chat(user, SPAN_NOTICE("You pull [breathmask] out from behind [src], and it drops to your feet."))
|
||||
breathmask.forceMove(drop_location())
|
||||
breathmask = null
|
||||
breath_masked = FALSE
|
||||
item_flags &= ~AIRTIGHT
|
||||
item_flags |= FLEXIBLEMATERIAL
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/attack_self(mob/user)
|
||||
var/gaiterstring = "You pull [src] "
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]_up"
|
||||
gaiterstring += "up over your nose[breath_masked ? " and secure the mask tucked underneath." : "."]"
|
||||
if(breath_masked)
|
||||
item_flags |= AIRTIGHT
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
gaiterstring += "down around your neck[breath_masked ? " and dislodge the mask tucked underneath." : "."]"
|
||||
body_parts_covered &= ~FACE
|
||||
if(breath_masked)
|
||||
item_flags &= ~AIRTIGHT
|
||||
to_chat(user, SPAN_NOTICE(gaiterstring))
|
||||
qdel(mob_overlay) // we're gonna need to refresh these
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/tan
|
||||
name = "tan neck gaiter"
|
||||
icon_state = "gaiter_tan"
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/gray
|
||||
name = "gray neck gaiter"
|
||||
icon_state = "gaiter_gray"
|
||||
|
||||
/obj/item/clothing/accessory/gaiter/green
|
||||
name = "green neck gaiter"
|
||||
icon_state = "gaiter_green"
|
||||
|
||||
@@ -1420,4 +1420,25 @@
|
||||
icon_state = "hedberg_tech"
|
||||
worn_state = "hedberg_tech"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) // Equivalent to engineer's jumpsuit.
|
||||
rolled_sleeves = 0
|
||||
rolled_sleeves = 0
|
||||
|
||||
//christmas stuff
|
||||
/obj/item/clothing/under/christmas/red
|
||||
name = "red christmas suit"
|
||||
desc = "A simple red christmas suit that looks close to Santa's!"
|
||||
icon_state = "christmasred"
|
||||
|
||||
/obj/item/clothing/under/christmas/green
|
||||
name = "green christmas suit"
|
||||
desc = "A simple green christmas suit. Smells minty!"
|
||||
icon_state = "christmasgreen"
|
||||
|
||||
/obj/item/clothing/under/christmas/croptop/red
|
||||
name = "red crop-top christmas suit"
|
||||
desc = "A simple red christmas suit that doesn't quite looks like Mrs Claus'."
|
||||
icon_state = "christmascroppedred"
|
||||
|
||||
/obj/item/clothing/under/christmas/croptop/green
|
||||
name = "green crop-top christmas suit"
|
||||
desc = "A simple green christmas suit that doesn't quite looks like Mrs Claus'. Smells minty!"
|
||||
icon_state = "christmascroppedgreen"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps = 5,
|
||||
@@ -587,7 +587,7 @@
|
||||
icon_state = "dinnerware"
|
||||
products = list(
|
||||
/obj/item/weapon/reagent_containers/food/condiment/yeast = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil = 5,
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cookingoil = 5,
|
||||
/obj/item/weapon/tray = 8,
|
||||
/obj/item/weapon/material/kitchen/utensil/fork = 6,
|
||||
/obj/item/weapon/material/knife/plastic = 6,
|
||||
|
||||
@@ -89,15 +89,23 @@ var/global/list/emotes_by_key
|
||||
|
||||
var/atom/target
|
||||
if(can_target() && extra_params)
|
||||
extra_params = lowertext(extra_params)
|
||||
for(var/atom/thing in view(user))
|
||||
if(extra_params == lowertext(thing.name))
|
||||
target = thing
|
||||
break
|
||||
var/target_dist
|
||||
extra_params = trim(lowertext(extra_params))
|
||||
for(var/atom/thing in view((isnull(check_range) ? world.view : check_range), user))
|
||||
|
||||
if(target && target != user && check_range)
|
||||
if (get_dist(user, target) > check_range)
|
||||
to_chat(user, SPAN_WARNING("\The [target] is too far away."))
|
||||
if(!isturf(thing.loc))
|
||||
continue
|
||||
|
||||
var/new_target_dist = get_dist(thing, user)
|
||||
if(!isnull(target_dist) && target_dist > new_target_dist)
|
||||
continue
|
||||
|
||||
if(findtext(lowertext(thing.name), extra_params))
|
||||
target_dist = new_target_dist
|
||||
target = thing
|
||||
|
||||
if(!target)
|
||||
to_chat(user, SPAN_WARNING("You cannot see a '[extra_params]' within range."))
|
||||
return
|
||||
|
||||
var/use_1p = get_emote_message_1p(user, target, extra_params)
|
||||
|
||||
@@ -101,9 +101,9 @@
|
||||
desc = "Often used to flavor food or make people sneeze."
|
||||
icon_state = "peppermillsmall"
|
||||
center_of_mass = list("x"=17, "y"=11)
|
||||
if("cornoil")
|
||||
name = "Corn Oil"
|
||||
desc = "A delicious oil used in cooking. Made from corn."
|
||||
if("cookingoil")
|
||||
name = "Cooking Oil"
|
||||
desc = "A delicious oil used in cooking. General purpose."
|
||||
icon_state = "oliveoil"
|
||||
center_of_mass = list("x"=16, "y"=6)
|
||||
if("sugar")
|
||||
@@ -175,6 +175,13 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("capsaicin", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cookingoil
|
||||
name = "Cooking Oil"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cookingoil/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("cookingoil", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/condiment/cornoil
|
||||
name = "Corn Oil"
|
||||
|
||||
|
||||
@@ -3263,7 +3263,7 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("blackpepper", 1)
|
||||
reagents.add_reagent("sodiumchloride", 1)
|
||||
reagents.add_reagent("cornoil", 1)
|
||||
reagents.add_reagent("cookingoil", 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/turkeyslice
|
||||
name = "turkey drumstick"
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
appliancetype = FRYER
|
||||
active_power_usage = 12 KILOWATTS
|
||||
heating_power = 12 KILOWATTS
|
||||
|
||||
|
||||
light_y = 15
|
||||
|
||||
|
||||
min_temp = 140 + T0C // Same as above, increasing this to just under 2x to make the % increase on efficiency not quite so painful as it would be at 80.
|
||||
optimal_temp = 400 + T0C // Increasing this to be 2x Oven to allow for a much higher/realistic frying temperatures. Doesn't really do anything but make heating the fryer take a bit longer.
|
||||
optimal_power = 0.95 // .35 higher than the default to give fryers faster cooking speed.
|
||||
|
||||
|
||||
idle_power_usage = 3.6 KILOWATTS
|
||||
// Power used to maintain temperature once it's heated.
|
||||
// Going with 25% of the active power. This is a somewhat arbitrary value.
|
||||
@@ -33,11 +33,11 @@
|
||||
|
||||
var/datum/reagents/oil
|
||||
var/optimal_oil = 9000 //90 litres of cooking oil
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/Initialize()
|
||||
. = ..()
|
||||
fry_loop = new(list(src), FALSE)
|
||||
|
||||
|
||||
oil = new/datum/reagents(optimal_oil * 1.25, src)
|
||||
var/variance = rand()*0.15
|
||||
// Fryer is always a little below full, but its usually negligible
|
||||
@@ -45,18 +45,18 @@
|
||||
if(prob(20))
|
||||
// Sometimes the fryer will start with much less than full oil, significantly impacting efficiency until filled
|
||||
variance = rand()*0.5
|
||||
oil.add_reagent("cornoil", optimal_oil*(1 - variance))
|
||||
oil.add_reagent("cookingoil", optimal_oil*(1 - variance))
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/Destroy()
|
||||
QDEL_NULL(fry_loop)
|
||||
QDEL_NULL(oil)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/examine(var/mob/user)
|
||||
. = ..()
|
||||
if(Adjacent(user))
|
||||
to_chat(user, "Oil Level: [oil.total_volume]/[optimal_oil]")
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/update_icon() // We add our own version of the proc to use the special fryer double-lights.
|
||||
cut_overlays()
|
||||
var/image/light
|
||||
@@ -69,7 +69,7 @@
|
||||
light.pixel_x = light_x
|
||||
light.pixel_y = light_y
|
||||
add_overlay(light)
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/heat_up()
|
||||
if (..())
|
||||
//Set temperature of oil reagent
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
|
||||
cooking_power *= oil_efficiency
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/update_icon()
|
||||
if(!stat)
|
||||
..()
|
||||
@@ -119,7 +119,7 @@
|
||||
if(fry_loop)
|
||||
fry_loop.stop(src)
|
||||
..()
|
||||
|
||||
|
||||
//Fryer gradually infuses any cooked food with oil. Moar calories
|
||||
//This causes a slow drop in oil levels, encouraging refill after extended use
|
||||
/obj/machinery/appliance/cooker/fryer/do_cooking_tick(var/datum/cooking_item/CI)
|
||||
@@ -177,13 +177,13 @@
|
||||
return
|
||||
|
||||
// user.visible_message("<span class='danger'>\The [user] starts pushing \the [victim] into \the [src]!</span>")
|
||||
|
||||
|
||||
//Removed delay on this action in favour of a cooldown after it
|
||||
//If you can lure someone close to the fryer and grab them then you deserve success.
|
||||
//And a delay on this kind of niche action just ensures it never happens
|
||||
//Cooldown ensures it can't be spammed to instakill someone
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*3)
|
||||
|
||||
|
||||
fry_loop.start(src)
|
||||
|
||||
if(!do_mob(user, victim, 20))
|
||||
@@ -239,9 +239,9 @@
|
||||
|
||||
//Coat the victim in some oil
|
||||
oil.trans_to(victim, 40)
|
||||
|
||||
|
||||
fry_loop.stop()
|
||||
|
||||
|
||||
/obj/machinery/appliance/cooker/fryer/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/glass) && I.reagents)
|
||||
if (I.reagents.total_volume <= 0 && oil)
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
user.remove_from_mob(O)
|
||||
stock(O)
|
||||
user.visible_message("<span class='notice'>[user] has added \the [O] to \the [src].</span>", "<span class='notice'>You add \the [O] to \the [src].</span>")
|
||||
sortTim(item_records, /proc/cmp_stored_item_name)
|
||||
|
||||
else if(istype(O, /obj/item/weapon/storage/bag))
|
||||
var/obj/item/weapon/storage/bag/P = O
|
||||
|
||||
@@ -522,13 +522,20 @@ I said no!
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/cutlet
|
||||
|
||||
/datum/recipe/roastedsunflowerseeds
|
||||
/datum/recipe/roastedcornsunflowerseeds
|
||||
reagents = list("sodiumchloride" = 1, "cornoil" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsunflower
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower
|
||||
|
||||
/datum/recipe/roastedsunflowerseeds
|
||||
reagents = list("sodiumchloride" = 1, "cookingoil" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsunflower
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower
|
||||
|
||||
/datum/recipe/roastedpeanutsunflowerseeds
|
||||
reagents = list("sodiumchloride" = 1, "peanutoil" = 1)
|
||||
items = list(
|
||||
@@ -537,10 +544,20 @@ I said no!
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower
|
||||
|
||||
/datum/recipe/roastedpeanuts
|
||||
fruit = list("peanut" = 2)
|
||||
reagents = list("sodiumchloride" = 2, "cookingoil" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts
|
||||
|
||||
/datum/recipe/roastedpeanutscorn
|
||||
fruit = list("peanut" = 2)
|
||||
reagents = list("sodiumchloride" = 2, "cornoil" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts
|
||||
|
||||
/datum/recipe/roastedpeanutspeanut
|
||||
fruit = list("peanut" = 2)
|
||||
reagents = list("sodiumchloride" = 2, "peanutoil" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts
|
||||
|
||||
/datum/recipe/mint
|
||||
reagents = list("sugar" = 5, "frostoil" = 5)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/mint
|
||||
|
||||
@@ -211,6 +211,7 @@
|
||||
var/greater_form // Greater form, if any, ie. human for monkeys.
|
||||
var/holder_type
|
||||
var/gluttonous // Can eat some mobs. 1 for mice, 2 for monkeys, 3 for people.
|
||||
var/soft_landing = FALSE // Can fall down and land safely on small falls.
|
||||
|
||||
var/rarity_value = 1 // Relative rarity/collector value for this species.
|
||||
var/economic_modifier = 2 // How much money this species makes
|
||||
@@ -546,6 +547,20 @@
|
||||
H.adjustToxLoss(amount)
|
||||
|
||||
/datum/species/proc/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary)
|
||||
if(soft_landing)
|
||||
if(planetary || !istype(H))
|
||||
return FALSE
|
||||
|
||||
var/turf/landing = get_turf(hit_atom)
|
||||
if(!istype(landing))
|
||||
return FALSE
|
||||
|
||||
if(!silent)
|
||||
to_chat(H, SPAN_NOTICE("You manage to lower impact of the fall and land safely."))
|
||||
landing.visible_message("<b>\The [H]</b> lowers down from above, landing safely.")
|
||||
playsound(H, "rustle", 25, 1)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/post_spawn_special(mob/living/carbon/human/H)
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
//brute_mod = 1.15
|
||||
//burn_mod = 1.15
|
||||
//gluttonous = 1
|
||||
soft_landing = TRUE
|
||||
num_alternate_languages = 3
|
||||
secondary_langs = list(LANGUAGE_BIRDSONG)
|
||||
name_language = LANGUAGE_BIRDSONG
|
||||
@@ -402,6 +403,8 @@
|
||||
min_age = 18
|
||||
max_age = 80
|
||||
|
||||
soft_landing = TRUE
|
||||
|
||||
base_color = "#EECEB3"
|
||||
|
||||
male_scream_sound = null //CHOMPedit
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
/datum/mob_descriptor/build = -3
|
||||
)
|
||||
|
||||
var/static/list/flight_bodyparts = list(
|
||||
/* var/static/list/flight_bodyparts = list(
|
||||
BP_L_ARM,
|
||||
BP_R_ARM,
|
||||
BP_L_HAND,
|
||||
@@ -155,7 +155,7 @@
|
||||
var/static/list/flight_suit_blacklisted_types = list(
|
||||
/obj/item/clothing/suit/space,
|
||||
/obj/item/clothing/suit/straight_jacket
|
||||
)
|
||||
)*/
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/teshsqueak,
|
||||
@@ -217,4 +217,4 @@
|
||||
H.Stun(1)
|
||||
playsound(H, "rustle", 25, 1)
|
||||
return TRUE
|
||||
*/ //CHOMPedit end
|
||||
*/ //CHOMPedit end. CHOMPEdit IIC: looks like upstream disabled it too because they made it a trait instead.
|
||||
|
||||
@@ -161,6 +161,12 @@
|
||||
H.verbs |= /mob/living/proc/flying_toggle
|
||||
H.verbs |= /mob/living/proc/start_wings_hovering
|
||||
|
||||
/datum/trait/positive/soft_landing
|
||||
name = "Soft Landing"
|
||||
desc = "You can fall from certain heights without suffering any injuries, be it via wings, lightness of frame or general dexterity."
|
||||
cost = 1
|
||||
var_changes = list("soft_landing" = TRUE)
|
||||
|
||||
/datum/trait/positive/hardfeet
|
||||
name = "Hard Feet"
|
||||
desc = "Makes your nice clawed, scaled, hooved, armored, or otherwise just awfully calloused feet immune to glass shards."
|
||||
|
||||
@@ -1249,9 +1249,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
riding_datum = new /datum/riding/taur(src)
|
||||
verbs |= /mob/living/carbon/human/proc/taur_mount
|
||||
verbs |= /mob/living/proc/toggle_rider_reins
|
||||
return working
|
||||
else
|
||||
return working
|
||||
else if(islongtail(tail_style))
|
||||
working.pixel_x = -16
|
||||
return working
|
||||
return null
|
||||
|
||||
// TODO - Move this to where it should go ~Leshana
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
handle_special()
|
||||
|
||||
handle_guts()
|
||||
do_healing() //VOREStation Add
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -54,7 +55,7 @@
|
||||
healths.icon_state = "health7"
|
||||
|
||||
//Updates the nutrition while we're here
|
||||
var/food_per = (nutrition / 500) * 100 //VOREStation Edit: Bandaid hardcode number to avoid misleading percentage based hunger alerts with our 6k cap.
|
||||
var/food_per = (nutrition / max_nutrition) * 100
|
||||
switch(food_per)
|
||||
if(90 to INFINITY)
|
||||
clear_alert("nutrition")
|
||||
@@ -63,6 +64,34 @@
|
||||
if(-INFINITY to 50)
|
||||
throw_alert("nutrition", /obj/screen/alert/starving)
|
||||
|
||||
//VOREStation ADD START - I made this for catslugs but tbh it's probably cool to give to everything.
|
||||
//Gives all simplemobs passive healing as long as they can find food.
|
||||
//Slow enough that it should affect combat basically not at all
|
||||
|
||||
/mob/living/simple_mob/proc/do_healing()
|
||||
if(nutrition < 150)
|
||||
return
|
||||
if(health == maxHealth)
|
||||
return
|
||||
if(heal_countdown > 0)
|
||||
heal_countdown --
|
||||
return
|
||||
if(resting)
|
||||
if(bruteloss > 0)
|
||||
adjustBruteLoss(-10)
|
||||
else if(fireloss > 0)
|
||||
adjustFireLoss(-10)
|
||||
nutrition -= 50
|
||||
heal_countdown = 5
|
||||
return
|
||||
if(bruteloss > 0)
|
||||
adjustBruteLoss(-1)
|
||||
else if(fireloss > 0)
|
||||
adjustFireLoss(-1)
|
||||
nutrition -= 5
|
||||
heal_countdown = 5
|
||||
//VOREStation ADD END
|
||||
|
||||
// Override for special bullshit.
|
||||
/mob/living/simple_mob/proc/handle_special()
|
||||
return
|
||||
|
||||
@@ -165,6 +165,7 @@
|
||||
// Used for if the mob can drop limbs. Overrides the icon cache key, so it doesn't keep remaking the icon needlessly.
|
||||
var/limb_icon_key
|
||||
var/understands_common = TRUE //VOREStation Edit - Makes it so that simplemobs can understand galcomm without being able to speak it.
|
||||
var/heal_countdown = 5 //VOREStation Edit - A cooldown ticker for passive healing
|
||||
|
||||
/mob/living/simple_mob/Initialize()
|
||||
verbs -= /mob/verb/observe
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
var/heal_countdown = 0
|
||||
var/picked_color = FALSE
|
||||
|
||||
can_enter_vent_with = list(
|
||||
@@ -163,39 +162,55 @@
|
||||
playsound(src, 'sound/items/eatfood.ogg', 75, 1)
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||
if(stat != DEAD && M.a_intent == I_HELP && resting)
|
||||
|
||||
if(stat == DEAD)
|
||||
return ..()
|
||||
if(M.a_intent != I_HELP)
|
||||
return ..()
|
||||
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
if(resting)
|
||||
M.visible_message("<span class='notice'>\The [M.name] shakes \the [src] awake from their nap.</span>","<span class='notice'>You shake \the [src] awake!</span>")
|
||||
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
lay_down()
|
||||
ai_holder.go_wake()
|
||||
return
|
||||
if(M.zone_sel.selecting == BP_HEAD)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] pats \the [src] on the head.</span>", \
|
||||
"<span class='notice'>You pat \the [src] on the head.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src] purrs and leans into [M]'s hand.</span>")
|
||||
else if(M.zone_sel.selecting == BP_R_HAND || M.zone_sel.selecting == BP_L_HAND)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes \the [src]'s hand.</span>", \
|
||||
"<span class='notice'>You shake \the [src]'s hand.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s looks a little confused nibbles at [M]'s hand experimentally.</span>")
|
||||
else if(M.zone_sel.selecting == "mouth")
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] boops \the [src]'s nose.</span>", \
|
||||
"<span class='notice'>You boop \the [src] on the nose.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s eyes widen as they stare at [M]. After a moment they rub their prodded snoot.</span>")
|
||||
else if(M.zone_sel.selecting == BP_GROIN)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] rubs \the [src]'s tummy...</span>", \
|
||||
"<span class='notice'>You rub \the [src]'s tummy... You feel the danger.</span>", )
|
||||
if(client)
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/Life()
|
||||
. = ..()
|
||||
if(nutrition < 150)
|
||||
return
|
||||
if(health == maxHealth)
|
||||
return
|
||||
if(heal_countdown > 0)
|
||||
heal_countdown --
|
||||
return
|
||||
if(resting)
|
||||
if(bruteloss > 0)
|
||||
adjustBruteLoss(-10)
|
||||
else if(fireloss > 0)
|
||||
adjustFireLoss(-10)
|
||||
nutrition -= 50
|
||||
heal_countdown = 5
|
||||
return
|
||||
if(bruteloss > 0)
|
||||
adjustBruteLoss(-1)
|
||||
else if(fireloss > 0)
|
||||
adjustFireLoss(-1)
|
||||
nutrition -= 5
|
||||
heal_countdown = 5
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
||||
. = ..()
|
||||
ai_holder.hostile = FALSE
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/mob/living/simple_mob/vore/overmap/spacewhale
|
||||
name = "space whale"
|
||||
desc = "It's a space whale. I don't know what more you expected."
|
||||
scanner_desc = "It's a space whale! Woah!"
|
||||
scanner_desc = "An absolutely massive space-born creature. A layer of radical energy around its body prevents detailed scanning, though, the energy along with its movements seem to be what propels it through space. A series of bio-luminescent lights ripple rhythmically across its surface. It is difficult to spot at range except for the wake of energy that swirls around it."
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/spacewhale)
|
||||
|
||||
icon = 'icons/mob/alienanimals_x32.dmi'
|
||||
@@ -77,6 +77,7 @@
|
||||
var/hazard_drop_chance = 35
|
||||
var/held_hazard
|
||||
var/restless = FALSE
|
||||
var/post_restless_tired = 0
|
||||
|
||||
vore_active = 1
|
||||
vore_capacity = 99
|
||||
@@ -133,6 +134,9 @@
|
||||
|
||||
/mob/living/simple_mob/vore/overmap/spacewhale/Life()
|
||||
. = ..()
|
||||
if(post_restless_tired)
|
||||
post_restless_tired--
|
||||
return
|
||||
if(!restless && prob(0.5))
|
||||
handle_restless()
|
||||
|
||||
@@ -143,6 +147,8 @@
|
||||
hazard_drop_chance = initial(hazard_drop_chance)
|
||||
movement_cooldown = initial(movement_cooldown)
|
||||
ai_holder.base_wander_delay = initial(ai_holder.base_wander_delay)
|
||||
ai_holder.wander = FALSE
|
||||
post_restless_tired = 250
|
||||
if(child_om_marker.known == TRUE)
|
||||
child_om_marker.icon_state = "space_whale"
|
||||
visible_message("<span class='notice'>\The [child_om_marker.name] settles down.</span>")
|
||||
@@ -198,4 +204,5 @@
|
||||
skybox_pixel_x = 0
|
||||
skybox_pixel_y = 0
|
||||
glide_size = 0.384
|
||||
parent_mob_type = /mob/living/simple_mob/vore/overmap/spacewhale
|
||||
parent_mob_type = /mob/living/simple_mob/vore/overmap/spacewhale
|
||||
scanner_desc = "An absolutely massive space-born creature. A layer of radical energy around its body prevents detailed scanning, though, the energy along with its movements seem to be what propels it through space. A series of bio-luminescent lights ripple rhythmically across its surface. It is difficult to spot at range except for the wake of energy that swirls around it."
|
||||
|
||||
@@ -118,7 +118,6 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
var/wantpet = 0
|
||||
var/affection_factor = 1 //Some Teppi are more happy to be loved on than others.
|
||||
var/teppi_warned = FALSE
|
||||
var/heal_countdown = 5
|
||||
var/teppi_mutate = FALSE //Allows Teppi to get their children's colors scrambled, and possibly other things later on!
|
||||
|
||||
attacktext = list("nipped", "chomped", "bonked", "stamped on")
|
||||
@@ -689,22 +688,9 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
|
||||
amount_grown -= rand(100,250)
|
||||
if(not_hungy)
|
||||
do_breeding()
|
||||
do_healing()
|
||||
if(prob(0.5))
|
||||
teppi_sound()
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/proc/do_healing()
|
||||
if(health < maxHealth)
|
||||
if(heal_countdown > 0)
|
||||
heal_countdown -= 1
|
||||
return
|
||||
if(bruteloss > 0)
|
||||
adjustBruteLoss(-2)
|
||||
else if(fireloss > 0)
|
||||
adjustFireLoss(-0.5)
|
||||
nutrition -= 5
|
||||
heal_countdown = 5
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/proc/do_breeding()
|
||||
if(!breedable || prevent_breeding)
|
||||
return
|
||||
|
||||
@@ -1147,3 +1147,22 @@
|
||||
ani_state = "tentacle_w"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
//LONG TAILS ARE NOT TAUR BUTTS >:O
|
||||
/datum/sprite_accessory/tail/longtail
|
||||
name = "You should not see this..."
|
||||
icon = 'icons/mob/vore/taurs_vr.dmi'
|
||||
do_colouration = 1 // Yes color, using tail color
|
||||
color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/shadekin_tail
|
||||
name = "Shadekin Tail"
|
||||
icon_state = "shadekin_s"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/shadekin_tail/shadekin_tail_2c
|
||||
name = "Shadekin Tail (dual color)"
|
||||
extra_overlay = "shadekin_markings"
|
||||
|
||||
/datum/sprite_accessory/tail/longtail/shadekin_tail/shadekin_tail_long
|
||||
name = "Shadekin Long Tail"
|
||||
icon_state = "shadekin_long_s"
|
||||
|
||||
@@ -326,20 +326,3 @@
|
||||
icon_state = "mermaid_s"
|
||||
can_ride = 0
|
||||
icon_sprite_tag = "mermaid"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail
|
||||
name = "Shadekin Tail"
|
||||
icon_state = "shadekin_s"
|
||||
can_ride = 0
|
||||
hide_body_parts = null
|
||||
clip_mask_icon = null
|
||||
clip_mask_state = null
|
||||
//species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c
|
||||
name = "Shadekin Tail (dual color)"
|
||||
extra_overlay = "shadekin_markings"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long
|
||||
name = "Shadekin Long Tail"
|
||||
icon_state = "shadekin_long_s"
|
||||
|
||||
@@ -480,24 +480,6 @@
|
||||
msg_prey_stepunder = "You jump over %prey's thick tail."
|
||||
msg_owner_stepunder = "%owner bounds over your tail."
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail
|
||||
name = "Shadekin Tail"
|
||||
icon_state = "shadekin_s"
|
||||
can_ride = 0
|
||||
hide_body_parts = null
|
||||
clip_mask_icon = null
|
||||
clip_mask_state = null
|
||||
//apply_restrictions = TRUE
|
||||
//species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c
|
||||
name = "Shadekin Tail (dual color)"
|
||||
extra_overlay = "shadekin_markings"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long
|
||||
name = "Shadekin Long Tail"
|
||||
icon_state = "shadekin_long_s"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/pawcow // this grabs suit sprites from the normal cow, the outline is the same
|
||||
name = "Cow w/ paws (Taur)"
|
||||
icon_state = "pawcow_s"
|
||||
|
||||
@@ -36,6 +36,11 @@
|
||||
if(pred.softfall || (istype(pred, /mob/living/simple_mob) && pred.mob_size <= MOB_SMALL)) // TODO: add ability for mob below to be 'soft' and cushion fall
|
||||
safe_fall = TRUE
|
||||
|
||||
if(istype(pred, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = pred
|
||||
if(H.species.soft_landing)
|
||||
safe_fall = TRUE
|
||||
|
||||
var/mob/living/prey = src
|
||||
var/fallloc = prey.loc
|
||||
if(pred.can_be_drop_pred && prey.can_be_drop_prey)
|
||||
|
||||
@@ -206,9 +206,6 @@
|
||||
if(L.grabbed_by.len) // Same as pulledby, whoever's holding you will keep you from going down stairs.
|
||||
return
|
||||
|
||||
if(L.has_buckled_mobs())
|
||||
return
|
||||
|
||||
if(L.buckled)
|
||||
L.buckled.forceMove(get_turf(top))
|
||||
|
||||
@@ -460,9 +457,6 @@
|
||||
if(L.grabbed_by.len) // Same as pulledby, whoever's holding you will keep you from going down stairs.
|
||||
return
|
||||
|
||||
if(L.has_buckled_mobs())
|
||||
return
|
||||
|
||||
if(L.buckled)
|
||||
L.buckled.forceMove(get_turf(bottom))
|
||||
|
||||
|
||||
@@ -597,11 +597,20 @@
|
||||
return
|
||||
|
||||
else if(istype(P, /obj/item/weapon/stamp) || istype(P, /obj/item/clothing/gloves/ring/seal))
|
||||
if(istype(P, /obj/item/weapon/stamp))
|
||||
var/obj/item/weapon/stamp/the_stamp = P
|
||||
if(the_stamp.stamptext)
|
||||
stamps += (stamps=="" ? "<HR>" : "<BR>") + "<i>[the_stamp.stamptext]</i>"
|
||||
else
|
||||
stamps += (stamps=="" ? "<HR>" : "<BR>") + "<i>This paper has been stamped with the [the_stamp.name].</i>"
|
||||
else
|
||||
var/obj/item/clothing/gloves/ring/seal/the_stamp = P
|
||||
if(the_stamp.stamptext)
|
||||
stamps += (stamps=="" ? "<HR>" : "<BR>") + "<i>[the_stamp.stamptext]</i>"
|
||||
else
|
||||
stamps += (stamps=="" ? "<HR>" : "<BR>") + "<i>This paper has been stamped with the [the_stamp.name].</i>"
|
||||
if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/weapon/clipboard) ) && loc.loc != user && user.get_active_hand() != P))
|
||||
return
|
||||
|
||||
stamps += (stamps=="" ? "<HR>" : "<BR>") + "<i>This paper has been stamped with the [P.name].</i>"
|
||||
|
||||
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
|
||||
var/x, y
|
||||
if(istype(P, /obj/item/weapon/stamp/captain) || istype(P, /obj/item/weapon/stamp/centcomm))
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
attack_verb = list("stamped")
|
||||
drop_sound = 'sound/items/drop/device.ogg'
|
||||
pickup_sound = 'sound/items/pickup/device.ogg'
|
||||
var/stamptext = null
|
||||
|
||||
/obj/item/weapon/stamp/captain
|
||||
name = "site manager's rubber stamp"
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
/obj/structure/reagent_dispensers/acid/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("sacid", 1000)
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
name = "Water-Cooler"
|
||||
desc = "A machine that dispenses water to drink."
|
||||
@@ -461,7 +461,7 @@
|
||||
|
||||
/obj/structure/reagent_dispensers/cookingoil/New()
|
||||
..()
|
||||
reagents.add_reagent("cornoil",5000)
|
||||
reagents.add_reagent("cookingoil",5000)
|
||||
|
||||
/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.get_structure_damage())
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
name = "Space Beer"
|
||||
id = "spacebeer"
|
||||
result = "beer"
|
||||
required_reagents = list("cornoil" = 10)
|
||||
required_reagents = list("cornoil" = 5, "flour" = 5)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
name = "Classic Martini"
|
||||
id = "martini"
|
||||
result = "martini"
|
||||
inhibitors = list("bitters" = 1)
|
||||
required_reagents = list("gin" = 2, "vermouth" = 1)
|
||||
result_amount = 3
|
||||
|
||||
@@ -907,7 +908,7 @@
|
||||
name = "Debugger"
|
||||
id = "debugger"
|
||||
result = "debugger"
|
||||
required_reagents = list("fuel" = 1, "sugar" = 2, "cornoil" = 2)
|
||||
required_reagents = list("fuel" = 1, "sugar" = 2, "cookingoil" = 2)
|
||||
result_amount = 5
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/spacersbrew
|
||||
@@ -1205,14 +1206,14 @@
|
||||
name = "Oil Slick"
|
||||
id = "oilslick"
|
||||
result = "oilslick"
|
||||
required_reagents = list("cornoil" = 2, "honey" = 1)
|
||||
required_reagents = list("cookingoil" = 2, "honey" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/slimeslam
|
||||
name = "Slick Slime Slammer"
|
||||
id = "slimeslammer"
|
||||
result = "slimeslammer"
|
||||
required_reagents = list("cornoil" = 2, "peanutbutter" = 1)
|
||||
required_reagents = list("cookingoil" = 2, "peanutbutter" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/virginsexonthebeach
|
||||
@@ -1254,7 +1255,7 @@
|
||||
name = "Soda Oil"
|
||||
id = "sodaoil"
|
||||
result = "sodaoil"
|
||||
required_reagents = list("cornoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1)
|
||||
required_reagents = list("cookingoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1)
|
||||
result_amount = 6
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/fusionnaire
|
||||
|
||||
@@ -54,6 +54,22 @@
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
|
||||
return
|
||||
|
||||
/decl/chemical_reaction/instant/food/cookingoilcorn
|
||||
name = "Cooking Oil"
|
||||
id = "cookingoilcorn"
|
||||
result = "cookingoil"
|
||||
required_reagents = list("cornoil" = 10)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
|
||||
/decl/chemical_reaction/instant/food/cookingoilpeanut
|
||||
name = "Cooking Oil"
|
||||
id = "cookingoilpeanut"
|
||||
result = "cookingoil"
|
||||
required_reagents = list("peanutoil" = 10)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
|
||||
/decl/chemical_reaction/instant/food/soysauce
|
||||
name = "Soy Sauce"
|
||||
id = "soysauce"
|
||||
@@ -87,7 +103,7 @@
|
||||
name = "mayonnaise"
|
||||
id = "mayo"
|
||||
result = "mayo"
|
||||
required_reagents = list("egg" = 9, "cornoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1)
|
||||
required_reagents = list("egg" = 9, "cookingoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1)
|
||||
result_amount = 15
|
||||
|
||||
/decl/chemical_reaction/instant/food/cheesewheel
|
||||
|
||||
@@ -234,6 +234,12 @@
|
||||
to_chat(M, "<span class='danger'>Searing hot oil burns you, wash it off quick!</span>")
|
||||
lastburnmessage = world.time
|
||||
|
||||
/datum/reagent/nutriment/triglyceride/oil/cooking
|
||||
name = "Cooking Oil"
|
||||
id = "cookingoil"
|
||||
description = "A general-purpose cooking oil."
|
||||
reagent_state = LIQUID
|
||||
|
||||
/datum/reagent/nutriment/triglyceride/oil/corn
|
||||
name = "Corn Oil"
|
||||
id = "cornoil"
|
||||
|
||||
@@ -28,12 +28,14 @@
|
||||
var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
|
||||
var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
|
||||
var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
|
||||
var/transferchance = 0 // % Chance of prey being
|
||||
var/transferchance = 0 // % Chance of prey being trasnsfered, goes from 0-100%
|
||||
var/transferchance_secondary = 0 // % Chance of prey being transfered to transferchance_secondary, also goes 0-100%
|
||||
var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
|
||||
var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine.
|
||||
var/display_absorbed_examine = FALSE // Do we display absorption examine messages for this belly at all?
|
||||
var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to.
|
||||
var/transferlocation // Location that the prey is released if they struggle and get dropped off.
|
||||
var/transferlocation_secondary // Secondary location that prey is released to.
|
||||
var/release_sound = "Splatter" // Sound for letting someone out. Replaced from True/false
|
||||
var/mode_flags = 0 // Stripping, numbing, etc.
|
||||
var/fancy_vore = FALSE // Using the new sounds?
|
||||
@@ -156,7 +158,9 @@
|
||||
"absorbchance",
|
||||
"escapechance",
|
||||
"transferchance",
|
||||
"transferchance_secondary",
|
||||
"transferlocation",
|
||||
"transferlocation_secondary",
|
||||
"bulge_size",
|
||||
"display_absorbed_examine",
|
||||
"shrink_grow_size",
|
||||
@@ -825,6 +829,27 @@
|
||||
transfer_contents(R, dest_belly)
|
||||
return
|
||||
|
||||
else if(prob(transferchance_secondary) && transferlocation_secondary) //After the first potential mess getting into, run the secondary one which might be even bigger of a mess.
|
||||
var/obj/belly/dest_belly
|
||||
for(var/obj/belly/B as anything in owner.vore_organs)
|
||||
if(B.name == transferlocation_secondary)
|
||||
dest_belly = B
|
||||
break
|
||||
|
||||
if(!dest_belly)
|
||||
to_chat(owner, "<span class='warning'>Something went wrong with your belly transfer settings. Your <b>[lowertext(name)]</b> has had it's transfer chance and transfer location cleared as a precaution.</span>")
|
||||
transferchance_secondary = 0
|
||||
transferlocation_secondary = null
|
||||
return
|
||||
|
||||
to_chat(R, "<span class='warning'>Your attempt to escape [lowertext(name)] has failed and your struggles only results in you sliding into [owner]'s [transferlocation_secondary]!</span>")
|
||||
to_chat(owner, "<span class='warning'>Someone slid into your [transferlocation_secondary] due to their struggling inside your [lowertext(name)]!</span>")
|
||||
if(C)
|
||||
transfer_contents(C, dest_belly)
|
||||
return
|
||||
transfer_contents(R, dest_belly)
|
||||
return
|
||||
|
||||
else if(prob(absorbchance) && digest_mode != DM_ABSORB) //After that, let's have it run the absorb chance.
|
||||
to_chat(R, "<span class='warning'>In response to your struggling, \the [lowertext(name)] begins to cling more tightly...</span>")
|
||||
to_chat(owner, "<span class='warning'>You feel your [lowertext(name)] start to cling onto its contents...</span>")
|
||||
@@ -917,7 +942,9 @@
|
||||
dupe.absorbchance = absorbchance
|
||||
dupe.escapechance = escapechance
|
||||
dupe.transferchance = transferchance
|
||||
dupe.transferchance_secondary = transferchance_secondary
|
||||
dupe.transferlocation = transferlocation
|
||||
dupe.transferlocation_secondary = transferlocation_secondary
|
||||
dupe.bulge_size = bulge_size
|
||||
dupe.shrink_grow_size = shrink_grow_size
|
||||
dupe.mode_flags = mode_flags
|
||||
|
||||
@@ -211,6 +211,8 @@
|
||||
selected_list["interacts"]["escapetime"] = selected.escapetime
|
||||
selected_list["interacts"]["transferchance"] = selected.transferchance
|
||||
selected_list["interacts"]["transferlocation"] = selected.transferlocation
|
||||
selected_list["interacts"]["transferchance_secondary"] = selected.transferchance_secondary
|
||||
selected_list["interacts"]["transferlocation_secondary"] = selected.transferlocation_secondary
|
||||
selected_list["interacts"]["absorbchance"] = selected.absorbchance
|
||||
selected_list["interacts"]["digestchance"] = selected.digestchance
|
||||
|
||||
@@ -1066,6 +1068,21 @@
|
||||
else
|
||||
host.vore_selected.transferlocation = choice.name
|
||||
. = TRUE
|
||||
if("b_transferchance_secondary")
|
||||
var/transfer_secondary_chance_input = input(user, "Set secondary belly transfer chance on resist (as %). You must also set the location for this to have any effect.", "Prey Escape Time") as num|null
|
||||
if(!isnull(transfer_secondary_chance_input))
|
||||
host.vore_selected.transferchance_secondary = sanitize_integer(transfer_secondary_chance_input, 0, 100, initial(host.vore_selected.transferchance_secondary))
|
||||
. = TRUE
|
||||
if("b_transferlocation_secondary")
|
||||
var/obj/belly/choice_secondary = tgui_input_list(usr, "Where do you want your [lowertext(host.vore_selected.name)] to alternately lead if prey resists?","Select Belly", (host.vore_organs + "None - Remove" - host.vore_selected))
|
||||
|
||||
if(!choice_secondary) //They cancelled, no changes
|
||||
return FALSE
|
||||
else if(choice_secondary == "None - Remove")
|
||||
host.vore_selected.transferlocation_secondary = null
|
||||
else
|
||||
host.vore_selected.transferlocation_secondary = choice_secondary.name
|
||||
. = TRUE
|
||||
if("b_absorbchance")
|
||||
var/absorb_chance_input = input(user, "Set belly absorb mode chance on resist (as %)", "Prey Absorb Chance") as num|null
|
||||
if(!isnull(absorb_chance_input))
|
||||
@@ -1134,6 +1151,10 @@
|
||||
dest_for = B.name
|
||||
failure_msg += "This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it. "
|
||||
break
|
||||
if(B.transferlocation_secondary == host.vore_selected)
|
||||
dest_for = B.name
|
||||
failure_msg += "This is the destiantion for at least '[dest_for]' secondary belly transfers. Remove it as the destination from any bellies before deleting it. "
|
||||
break
|
||||
|
||||
if(host.vore_selected.contents.len)
|
||||
failure_msg += "You cannot delete bellies with contents! " //These end with spaces, to be nice looking. Make sure you do the same.
|
||||
|
||||
@@ -2297,15 +2297,72 @@ Departamental Swimsuits, for general use
|
||||
|
||||
colorswap(usr)
|
||||
|
||||
//PastelPrinceDan: Masumi Maki
|
||||
/obj/item/clothing/under/fluff/masumi_overalls
|
||||
name = "white and blue overalls"
|
||||
//PastelPrinceDan: Masumi Maki & Hatterhat: Harold Robinson
|
||||
/obj/item/clothing/under/fluff/mechanic_overalls
|
||||
name = "mechanic overalls"
|
||||
desc = "A set of white and blue overalls, paired with a yellow shirt."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "masumioveralls"
|
||||
item_state = "masumioveralls"
|
||||
icon_state = "mechaoveralls"
|
||||
item_state = "mechaoveralls"
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
|
||||
//PastelPrinceDan: Masumi Maki & Hatterhat: Harold Robinson
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic
|
||||
name = "mechanic winter coat"
|
||||
desc = "A blue and yellow winter coat, worn only by overachievers."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "mechacoat"
|
||||
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
item_state = "mechacoat_mob"
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/fluff/mechanic
|
||||
|
||||
/obj/item/clothing/head/hood/winter/fluff/mechanic
|
||||
name = "mechanic winter hood"
|
||||
desc = "A blue and yellow winter coat's hood."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "mechahood"
|
||||
|
||||
icon_override = 'icons/vore/custom_onmob_vr.dmi'
|
||||
item_state = "mechahood_mob"
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/ui_action_click()
|
||||
ToggleHood_mechacoat()
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/equipped(mob/user, slot)
|
||||
if(slot != slot_wear_suit)
|
||||
RemoveHood_mechacoat()
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/proc/RemoveHood_mechacoat()
|
||||
icon_state = "mechacoat"
|
||||
item_state = "mechacoat_mob"
|
||||
hood_up = 0
|
||||
if(ishuman(hood.loc))
|
||||
var/mob/living/carbon/H = hood.loc
|
||||
H.unEquip(hood, 1)
|
||||
H.update_inv_wear_suit()
|
||||
hood.loc = src
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/fluff/mechanic/proc/ToggleHood_mechacoat()
|
||||
if(!hood_up)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.wear_suit != src)
|
||||
to_chat(H, "<span class='warning'>You must be wearing [src] to put up the hood!</span>")
|
||||
return
|
||||
if(H.head)
|
||||
to_chat(H, "<span class='warning'>You're already wearing something on your head!</span>")
|
||||
return
|
||||
else
|
||||
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
|
||||
hood_up = 1
|
||||
icon_state = "mechacoat_t"
|
||||
item_state = "mechacoat_mob_t"
|
||||
H.update_inv_wear_suit()
|
||||
else
|
||||
RemoveHood_mechacoat()
|
||||
|
||||
//Pandora029 : Evelyn Tareen
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn
|
||||
name = "warden's navy winter coat"
|
||||
|
||||
@@ -1409,3 +1409,11 @@ End CHOMP Removal*/
|
||||
pickup_sound = null
|
||||
origin_tech = null
|
||||
matter = null
|
||||
|
||||
//Coolcrow420 - Jade Davis
|
||||
/obj/item/weapon/stamp/fluff/jade_horror
|
||||
name = "Council of Mid Horror rubber stamp"
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_state = "stamp-midhorror"
|
||||
stamptext = "This paper has been certified by The Council of Mid Horror"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user