mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 00:22:39 +00:00
## About The Pull Request ### Revamped the biogenerator UI: https://user-images.githubusercontent.com/3625094/200973283-b703f21b-c747-493e-98d9-043eef86d410.mp4 ### Changed biogenerator icon to use layers and see the biomass level: https://user-images.githubusercontent.com/3625094/201396065-caeaa412-6676-46f6-875e-efa2dca34985.mp4 ### Biogenerator rebalance: - Now you don't need the beaker to print solid products. - Biogenerator now accepts all food, not just plants. - Biogenerator now treats all nutriment subtypes as nutriments, so vitamins and proteins also turn into biomass. - Biomass now has the same units as other reagents (you get 5 biomass from 5 nutrient with tier 1 parts). - Doubled the cost of all items and reagents. (biomass generation reduced by 10 and prices - by 5) - Chemicals output amounts are now in units and you can select how much you want to output exactly. It will not let you specify more than the size of container or above 50 units with one button click. - Reduced the amount of stored items and introduced a limit to the biomass, both tied to the matter bin tier. ### Recipes changes: Made biogenerator more dumb by moving the clothing out from the biogenerator designs, and extending leather recipes instead. The biogenerator is a grinder/recycler style machine so it doesn't make sense that it outputs clothing. Also you need to make leather to craft the toolbelt, while you can't do the same to craft job-specific belts. Now you can print leather in biogenerator and craft the leather clothing by using the leather in-hand. And the rice hat is now crafted from bamboo, instead of biogenerator. Also added paper to the biogenerator recipes as it makes stuff from cellulose and barely anyone knows that you can craft paper from 1 log and 50 water. And paper is needed in large quantities to craft some items, like paper frames. And it doesn't output a pack of rolling paper. It's dumb now. It prints the rolling paper sheets instead. ## Why It's Good For The Game Biogenerator had terrible UX and backend logic. I didn't improve much on BE though, but now it should be less frustrating to use. Also I hate how biogenerator is superior to all other means of obtaining its products. It doesn't make sense to grow and grind wheat, for instance, when you can just throw shit into biogenerator and get the flour fast. And the costs are ridiculous - you can get a couple of bottles of fertilizers just from one medium potato. It honestly begs for more nerfing, at least to make the nutriment - chemicals exchange rate 1:1. The reason for the biomass cap is because people use it as a sink for veggies and generate infinite biomass. Maybe the limit will make them care more about the part upgrade and offload some of the veggies to the fridge for the Cook. Also it was weird that biogenerator could tailor some things, while others have to be crafted in-hand. Now you can print leather and craft all types of belts and leather clothing. ## Changelog 🆑 refactor: biogenerator UI revamped qol: biogenerator no longer requires beaker for materials, monkey cubes and nori balance: biogenerator accepts all food, not just plants balance: biogenerator treats all nutriment subtypes as nutriments (vitamins, protein, etc.) balance: biogenerator product prices doubled balance: biogenerator biomass storage is limited depending on the level of matter bins balance: cowboy boots recipe moved from crafting to leather recipes balance: leather clothing & belt recipes moved from biogenerator to leather recipes balance: rice hat recipe moved from biogenerator to bamboo recipes balance: biogenerator now outputs rolling paper sheets instead of a pack add: biogenerator can now print paper imageadd: biogenerator icons now use overlays, have emissive layer and indicate the biomass volume /🆑
333 lines
12 KiB
Plaintext
333 lines
12 KiB
Plaintext
/obj/item/stack/sheet/animalhide
|
|
name = "hide"
|
|
desc = "Something went wrong."
|
|
icon_state = "sheet-hide"
|
|
inhand_icon_state = null
|
|
novariants = TRUE
|
|
merge_type = /obj/item/stack/sheet/animalhide
|
|
|
|
/obj/item/stack/sheet/animalhide/human
|
|
name = "human skin"
|
|
desc = "The by-product of human farming."
|
|
singular_name = "human skin piece"
|
|
novariants = FALSE
|
|
merge_type = /obj/item/stack/sheet/animalhide/human
|
|
|
|
GLOBAL_LIST_INIT(human_recipes, list( \
|
|
new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5), \
|
|
new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/fedora/human_leather, 1), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/human/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.human_recipes
|
|
|
|
/obj/item/stack/sheet/animalhide/generic
|
|
name = "skin"
|
|
desc = "A piece of skin."
|
|
singular_name = "skin piece"
|
|
novariants = FALSE
|
|
merge_type = /obj/item/stack/sheet/animalhide/generic
|
|
|
|
/obj/item/stack/sheet/animalhide/corgi
|
|
name = "corgi hide"
|
|
desc = "The by-product of corgi farming."
|
|
singular_name = "corgi hide piece"
|
|
icon_state = "sheet-corgi"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/corgi
|
|
|
|
GLOBAL_LIST_INIT(gondola_recipes, list ( \
|
|
new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1), \
|
|
new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/mothroach
|
|
name = "mothroach hide"
|
|
desc = "A thin layer of mothroach hide."
|
|
singular_name = "mothroach hide piece"
|
|
icon_state = "sheet-mothroach"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/mothroach
|
|
|
|
/obj/item/stack/sheet/animalhide/gondola
|
|
name = "gondola hide"
|
|
desc = "The extremely valuable product of gondola hunting."
|
|
singular_name = "gondola hide piece"
|
|
icon_state = "sheet-gondola"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/gondola
|
|
|
|
/obj/item/stack/sheet/animalhide/gondola/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.gondola_recipes
|
|
|
|
GLOBAL_LIST_INIT(corgi_recipes, list ( \
|
|
new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/corgi/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.corgi_recipes
|
|
|
|
/obj/item/stack/sheet/animalhide/cat
|
|
name = "cat hide"
|
|
desc = "The by-product of cat farming."
|
|
singular_name = "cat hide piece"
|
|
icon_state = "sheet-cat"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/cat
|
|
|
|
/obj/item/stack/sheet/animalhide/monkey
|
|
name = "monkey hide"
|
|
desc = "The by-product of monkey farming."
|
|
singular_name = "monkey hide piece"
|
|
icon_state = "sheet-monkey"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/monkey
|
|
|
|
GLOBAL_LIST_INIT(monkey_recipes, list ( \
|
|
new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1), \
|
|
new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/monkey/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.monkey_recipes
|
|
|
|
/obj/item/stack/sheet/animalhide/lizard
|
|
name = "lizard skin"
|
|
desc = "Sssssss..."
|
|
singular_name = "lizard skin piece"
|
|
icon_state = "sheet-lizard"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/lizard
|
|
|
|
/obj/item/stack/sheet/animalhide/xeno
|
|
name = "alien hide"
|
|
desc = "The skin of a terrible creature."
|
|
singular_name = "alien hide piece"
|
|
icon_state = "sheet-xeno"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/xeno
|
|
|
|
GLOBAL_LIST_INIT(xeno_recipes, list ( \
|
|
new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/costume/xenos, 1), \
|
|
new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/xeno/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.xeno_recipes
|
|
|
|
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
|
|
/obj/item/stack/sheet/xenochitin
|
|
name = "alien chitin"
|
|
desc = "A piece of the hide of a terrible creature."
|
|
singular_name = "alien hide piece"
|
|
icon = 'icons/mob/nonhuman-player/alien.dmi'
|
|
icon_state = "chitin"
|
|
novariants = TRUE
|
|
merge_type = /obj/item/stack/sheet/xenochitin
|
|
|
|
/obj/item/xenos_claw
|
|
name = "alien claw"
|
|
desc = "The claw of a terrible creature."
|
|
icon = 'icons/mob/nonhuman-player/alien.dmi'
|
|
icon_state = "claw"
|
|
|
|
/obj/item/weed_extract
|
|
name = "weed extract"
|
|
desc = "A piece of slimy, purplish weed."
|
|
icon = 'icons/mob/nonhuman-player/alien.dmi'
|
|
icon_state = "weed_extract"
|
|
|
|
/obj/item/stack/sheet/hairlesshide
|
|
name = "hairless hide"
|
|
desc = "This hide was stripped of its hair, but still needs washing and tanning."
|
|
singular_name = "hairless hide piece"
|
|
icon_state = "sheet-hairlesshide"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/hairlesshide
|
|
|
|
/obj/item/stack/sheet/wethide
|
|
name = "wet hide"
|
|
desc = "This hide has been cleaned but still needs to be dried."
|
|
singular_name = "wet hide piece"
|
|
icon_state = "sheet-wetleather"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/wethide
|
|
/// Reduced when exposed to high temperatures
|
|
var/wetness = 30
|
|
/// Kelvin to start drying
|
|
var/drying_threshold_temperature = 500
|
|
|
|
/obj/item/stack/sheet/wethide/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
|
|
. = ..()
|
|
AddElement(/datum/element/dryable, /obj/item/stack/sheet/leather)
|
|
AddElement(/datum/element/atmos_sensitive, mapload)
|
|
AddComponent(/datum/component/grillable, /obj/item/stack/sheet/leather, rand(1 SECONDS, 3 SECONDS), TRUE)
|
|
|
|
/obj/item/stack/sheet/wethide/burn()
|
|
visible_message(span_notice("[src] burns up, leaving a sheet of leather behind!"))
|
|
new /obj/item/stack/sheet/leather(loc) // only one sheet remains to incentivise not burning your wethide to dry it
|
|
qdel(src)
|
|
|
|
|
|
/*
|
|
* Leather SHeet
|
|
*/
|
|
/obj/item/stack/sheet/leather
|
|
name = "leather"
|
|
desc = "The by-product of mob grinding."
|
|
singular_name = "leather piece"
|
|
icon_state = "sheet-leather"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/leather
|
|
|
|
GLOBAL_LIST_INIT(leather_recipes, list ( \
|
|
new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1), \
|
|
new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \
|
|
new/datum/stack_recipe("saddle", /obj/item/saddle, 5), \
|
|
new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \
|
|
new/datum/stack_recipe("cowboy boots", /obj/item/clothing/shoes/cowboy, 2), \
|
|
new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \
|
|
new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5), \
|
|
new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4), \
|
|
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \
|
|
new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7), \
|
|
new/datum/stack_recipe_list("belts", list( \
|
|
new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4), \
|
|
new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2), \
|
|
new/datum/stack_recipe("janitorial belt", /obj/item/storage/belt/janitor, 2), \
|
|
new/datum/stack_recipe("medical belt", /obj/item/storage/belt/medical, 2), \
|
|
new/datum/stack_recipe("security belt", /obj/item/storage/belt/security, 2), \
|
|
new/datum/stack_recipe("shoulder holster", /obj/item/storage/belt/holster, 3), \
|
|
new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \
|
|
)),
|
|
new/datum/stack_recipe_list("cowboy hats", list( \
|
|
new/datum/stack_recipe("sheriff hat", /obj/item/clothing/head/cowboy/brown, 2), \
|
|
new/datum/stack_recipe("desperado hat", /obj/item/clothing/head/cowboy/black, 2), \
|
|
new/datum/stack_recipe("ten-gallon hat", /obj/item/clothing/head/cowboy/white, 2), \
|
|
new/datum/stack_recipe("deputy hat", /obj/item/clothing/head/cowboy/red, 2), \
|
|
new/datum/stack_recipe("drifter hat", /obj/item/clothing/head/cowboy/grey, 2), \
|
|
)),
|
|
))
|
|
|
|
/obj/item/stack/sheet/leather/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.leather_recipes
|
|
/*
|
|
* Sinew
|
|
*/
|
|
/obj/item/stack/sheet/sinew
|
|
name = "watcher sinew"
|
|
icon = 'icons/obj/mining.dmi'
|
|
desc = "Long stringy filaments which presumably came from a watcher's wings."
|
|
singular_name = "watcher sinew"
|
|
icon_state = "sinew"
|
|
novariants = TRUE
|
|
merge_type = /obj/item/stack/sheet/sinew
|
|
|
|
/obj/item/stack/sheet/sinew/wolf
|
|
name = "wolf sinew"
|
|
desc = "Long stringy filaments which came from the insides of a wolf."
|
|
singular_name = "wolf sinew"
|
|
merge_type = /obj/item/stack/sheet/sinew/wolf
|
|
|
|
GLOBAL_LIST_INIT(sinew_recipes, list ( \
|
|
new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/cable/sinew, 1), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/sinew/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.sinew_recipes
|
|
|
|
|
|
/*Plates*/
|
|
/obj/item/stack/sheet/animalhide/goliath_hide
|
|
name = "goliath hide plates"
|
|
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
|
|
icon = 'icons/obj/stack_objects.dmi'
|
|
icon_state = "goliath_hide"
|
|
singular_name = "hide plate"
|
|
max_amount = 6
|
|
novariants = FALSE
|
|
item_flags = NOBLUDGEON
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
layer = MOB_LAYER
|
|
merge_type = /obj/item/stack/sheet/animalhide/goliath_hide
|
|
|
|
/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide
|
|
name = "polar bear hides"
|
|
desc = "Pieces of a polar bear's fur, these might be able to make your suit a bit more durable to attack from the local fauna."
|
|
icon_state = "polar_bear_hide"
|
|
singular_name = "polar bear hide"
|
|
merge_type = /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide
|
|
|
|
/obj/item/stack/sheet/animalhide/ashdrake
|
|
name = "ash drake hide"
|
|
desc = "The strong, scaled hide of an ash drake."
|
|
icon = 'icons/obj/stack_objects.dmi'
|
|
icon_state = "dragon_hide"
|
|
singular_name = "drake plate"
|
|
max_amount = 10
|
|
novariants = FALSE
|
|
item_flags = NOBLUDGEON
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
layer = MOB_LAYER
|
|
merge_type = /obj/item/stack/sheet/animalhide/ashdrake
|
|
|
|
//Step one - dehairing.
|
|
|
|
/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params)
|
|
if(W.get_sharpness())
|
|
playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1)
|
|
user.visible_message(span_notice("[user] starts cutting hair off \the [src]."), span_notice("You start cutting the hair off \the [src]..."), span_hear("You hear the sound of a knife rubbing against flesh."))
|
|
if(do_after(user, 50, target = src))
|
|
to_chat(user, span_notice("You cut the hair from this [src.singular_name]."))
|
|
new /obj/item/stack/sheet/hairlesshide(user.drop_location(), 1)
|
|
use(1)
|
|
else
|
|
return ..()
|
|
|
|
|
|
//Step two - washing..... it's actually in washing machine code.
|
|
|
|
//Step three - drying
|
|
/obj/item/stack/sheet/wethide
|
|
|
|
/obj/item/stack/sheet/wethide/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/microwavable, /obj/item/stack/sheet/leather)
|
|
|
|
/obj/item/stack/sheet/wethide/should_atmos_process(datum/gas_mixture/air, exposed_temperature)
|
|
return (exposed_temperature > drying_threshold_temperature)
|
|
|
|
/obj/item/stack/sheet/wethide/atmos_expose(datum/gas_mixture/air, exposed_temperature)
|
|
wetness--
|
|
if(wetness == 0)
|
|
new /obj/item/stack/sheet/leather(drop_location(), 1)
|
|
wetness = initial(wetness)
|
|
use(1)
|
|
|
|
/obj/item/stack/sheet/animalhide/carp
|
|
name = "carp scales"
|
|
desc = "The scaly skin of a space carp. It looks quite beatiful when detached from the foul creature who once wore it."
|
|
singular_name = "carp scale"
|
|
icon_state = "sheet-carp"
|
|
inhand_icon_state = null
|
|
merge_type = /obj/item/stack/sheet/animalhide/carp
|
|
|
|
GLOBAL_LIST_INIT(carp_recipes, list ( \
|
|
new/datum/stack_recipe("carp costume", /obj/item/clothing/suit/hooded/carp_costume, 4), \
|
|
new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1), \
|
|
new/datum/stack_recipe("carpskin chair", /obj/structure/chair/comfy/carp, 2), \
|
|
new/datum/stack_recipe("carpskin suit", /obj/item/clothing/under/suit/carpskin, 3), \
|
|
new/datum/stack_recipe("carpskin fedora", /obj/item/clothing/head/fedora/carpskin, 2), \
|
|
))
|
|
|
|
/obj/item/stack/sheet/animalhide/carp/get_main_recipes()
|
|
. = ..()
|
|
. += GLOB.carp_recipes
|