Refactors sheet crafting to better support directional construction (#74572)

## About The Pull Request


https://github.com/tgstation/tgstation/blob/0426f7ddbaa91439c7278189101f5db9c7f2ed95/code/game/objects/items/stacks/stack.dm#L449

Ok, but can we not?

This PR refactors sheet crafting to generalize all the cases that were
previously locked behind grille/window type checks and such. In their
stead there are bitflags that can be set to achieve certain behaviors.

All the behavior from before should be preserved, but now it can be
extended to other items. E.g. if you want a railing that can be crafted
underneath directional windows, or an item that behaves like a grille
does--it's just a matter of setting the right obj_flags for it now.

This makes it very simple and painless to add new recipes that use
directional crafting! It's all modular now.

<details><summary>Details</summary>

---

### What I've done:

-Eliminated all the type checks, instead it will now be handled by
object flags and recipe vars, making for a much more configurable
system.

-Added two new obj_flags: `BLOCKS_CONSTRUCTION_DIR` and
`IGNORE_DENSITY`.
-Additionally, I renamed the existing flag `NO_BUILD` to
`BLOCKS_CONSTRUCTION`.

-Changes the proc `valid_window_location` to `valid_build_direction`,
and makes it work for things other than windows.

-Removed a deprecated `window_checks` var from the stack_recipe datum.
-Added three more vars to the stack_recipe datum: `check_direction` and
`check_density`, `is_fulltile`

-Decoupled `on_solid_ground` from the object density check. Now you can
set those separately, allowing you to make recipes that forbid/allow
building things over other things while in space.

---

### What the new flags do:

`BLOCKS_CONSTRUCTION` works as before---prevents objects from being
built on the object. I felt that the previous name was not descriptive
enough, you should know exactly what it does just from looking at the
name.
_example: dna scanner_

`BLOCKS_CONSTRUCTION_DIR` -- setting this on an object will prevent
objects from being built on it when their directions are the same.
_example: directional windows, windoors, railings_

`IGNORE_DENSITY` -- setting this on an object will cause its density to
be ignored when performing the construction density check. This could
have other potential uses as well in the future.
_example: grilles, directional windows, tables_

These three flags cover all the bases for the types of items that are
currently craftable, so there is no more need for any type checking or
weird snowflake window checks. Simply set the appropriate flag and it'll
work as you would expect.

---


### What the recipe vars do:
`check_direction` tells the recipe to check if there's something in that
direction with the `BLOCKS_CONSTRUCTION_DIR` flag set.

`check_density` tells the recipe to run the density check when set. This
is true by default. There are very few items in the game that currently
have this set to false--namely grilles. Setting this to false will make
it so that the object can be constructed regardless of what is in that
tile (unless `one_per_turf` is also set, which will make it so that you
can't craft the same thing twice in the same turf).

`is_fulltile` is used for fulltile windows, but it doesn't necessarily
have to be--you can give this to any recipe and it will adopt the same
properties as that of the fulltile window. Basically they have a special
case where they shouldn't be able to be built over directional
constructions, where normally things would be able to be. Setting this
makes check_direction true as well.

---

### In summary: 

Sheet crafting still works just as it did before. But the backend of it
has gotten a glow up and will be able to more easily support new
behaviors.

</details>

## Why It's Good For The Game

This makes the crafting system much more flexible to add recipes to, and
will prevent bad code practices of stacking more conditionals down the
line whenever someone wants to add an item that behaves like grilles or
directional windows in how they are constructed.

It had to be done. Those window checks were a mess.

## Changelog

🆑
qol: added fifty stack versions of remaining glass sheet stacks for ease
of debugging
refactor: refactored sheet crafting to better support directional
constructions that aren't windows
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
This commit is contained in:
Bloop
2023-04-15 21:48:34 -06:00
committed by GitHub
co-authored by san7890
parent 70064d50db
commit ac5236a251
29 changed files with 280 additions and 257 deletions
+3 -1
View File
@@ -11,7 +11,9 @@
#define BLOCK_Z_OUT_UP (1<<7) // Should this object block z uprise from loc?
#define BLOCK_Z_IN_DOWN (1<<8) // Should this object block z falling from above?
#define BLOCK_Z_IN_UP (1<<9) // Should this object block z uprise from below?
#define NO_BUILD (1<<10) // Can we build on this object?
#define BLOCKS_CONSTRUCTION (1<<10) //! Does this object prevent things from being built on it?
#define BLOCKS_CONSTRUCTION_DIR (1<<11) //! Does this object prevent same-direction things from being built on it?
#define IGNORE_DENSITY (1<<12) //! Can we ignore density when building on this object? (for example, directional windows and grilles)
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
+8 -18
View File
@@ -361,35 +361,25 @@ Turf and target are separate in case you want to teleport some distance from a t
return target
/**
* Checks whether the target turf is in a valid state to accept a directional window
* or other directional pseudo-dense object such as railings.
* Checks whether the target turf is in a valid state to accept a directional construction
* such as windows or railings.
*
* Returns FALSE if the target turf cannot accept a directional window or railing.
* Returns FALSE if the target turf cannot accept a directional construction.
* Returns TRUE otherwise.
*
* Arguments:
* * dest_turf - The destination turf to check for existing windows and railings
* * dest_turf - The destination turf to check for existing directional constructions
* * test_dir - The prospective dir of some atom you'd like to put on this turf.
* * is_fulltile - Whether the thing you're attempting to move to this turf takes up the entire tile or whether it supports multiple movable atoms on its tile.
*/
/proc/valid_window_location(turf/dest_turf, test_dir, is_fulltile = FALSE)
/proc/valid_build_direction(turf/dest_turf, test_dir, is_fulltile = FALSE)
if(!dest_turf)
return FALSE
for(var/obj/turf_content in dest_turf)
if(istype(turf_content, /obj/machinery/door/window))
if((turf_content.dir == test_dir) || is_fulltile)
if(turf_content.obj_flags & BLOCKS_CONSTRUCTION_DIR)
if(is_fulltile) // for making it so fulltile things can't be built over directional things--a special case
return FALSE
if(istype(turf_content, /obj/structure/windoor_assembly))
var/obj/structure/windoor_assembly/windoor_assembly = turf_content
if(windoor_assembly.dir == test_dir || is_fulltile)
return FALSE
if(istype(turf_content, /obj/structure/window))
var/obj/structure/window/window_structure = turf_content
if(window_structure.dir == test_dir || window_structure.fulltile || is_fulltile)
return FALSE
if(istype(turf_content, /obj/structure/railing))
var/obj/structure/railing/rail = turf_content
if(rail.dir == test_dir || is_fulltile)
if(turf_content.dir == test_dir)
return FALSE
return TRUE
+3 -1
View File
@@ -288,7 +288,9 @@ DEFINE_BITFIELD(obj_flags, list(
"DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION,
"EMAGGED" = EMAGGED,
"IN_USE" = IN_USE,
"NO_BUILD" = NO_BUILD,
"BLOCKS_CONSTRUCTION" = BLOCKS_CONSTRUCTION,
"BLOCKS_CONSTRUCTION_DIR" = BLOCKS_CONSTRUCTION_DIR,
"IGNORE_DENSITY" = IGNORE_DENSITY,
"UNIQUE_RENAME" = UNIQUE_RENAME,
"USES_TGUI" = USES_TGUI,
))
+1 -1
View File
@@ -25,7 +25,7 @@ SUBSYSTEM_DEF(materials)
new /datum/stack_recipe("Chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, category = CAT_TILES),
new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, check_density = FALSE, category = CAT_TILES),
new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS),
)
///List of stackcrafting recipes for materials using rigid recipes
+1 -1
View File
@@ -114,7 +114,7 @@
var/target_dir = turn(rotated_obj.dir, degrees)
var/obj/structure/window/rotated_window = rotated_obj
var/fulltile = istype(rotated_window) ? rotated_window.fulltile : FALSE
if(!valid_window_location(rotated_obj.loc, target_dir, is_fulltile = fulltile))
if(!valid_build_direction(rotated_obj.loc, target_dir, is_fulltile = fulltile))
if(!silent)
rotated_obj.balloon_alert(user, "can't rotate in that direction!")
return FALSE
@@ -10,7 +10,7 @@
icon_state = "infuser"
base_icon_state = "infuser"
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the door is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
circuit = /obj/item/circuitboard/machine/dna_infuser
/// maximum tier this will infuse
var/max_tier_allowed = DNA_MUTANT_TIER_ONE
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "scanner"
base_icon_state = "scanner"
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the door is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/internal/brain)
circuit = /obj/item/circuitboard/machine/dnascanner
var/locked = FALSE
+3 -2
View File
@@ -6,6 +6,7 @@
layer = ABOVE_WINDOW_LAYER
closingLayer = ABOVE_WINDOW_LAYER
resistance_flags = ACID_PROOF
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR
var/base_state = "left"
max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file
integrity_failure = 0
@@ -171,10 +172,10 @@
if(istype(mover, /obj/structure/window))
var/obj/structure/window/moved_window = mover
return valid_window_location(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
return valid_build_direction(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
return valid_build_direction(loc, mover.dir, is_fulltile = FALSE)
return TRUE
+1 -1
View File
@@ -14,7 +14,7 @@ The console is located at computer/gulag_teleporter.dm
base_icon_state = "implantchair"
state_open = FALSE
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the door is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 5
circuit = /obj/item/circuitboard/machine/gulag_teleporter
var/locked = FALSE
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "sleeper"
base_icon_state = "sleeper"
density = FALSE
obj_flags = NO_BUILD
obj_flags = BLOCKS_CONSTRUCTION
state_open = TRUE
circuit = /obj/item/circuitboard/machine/sleeper
+1 -1
View File
@@ -6,7 +6,7 @@
icon_state = "stasis"
base_icon_state = "stasis"
density = FALSE
obj_flags = NO_BUILD
obj_flags = BLOCKS_CONSTRUCTION
can_buckle = TRUE
buckle_lying = 90
circuit = /obj/item/circuitboard/machine/stasis
+1 -1
View File
@@ -7,7 +7,7 @@
base_icon_state = "classic"
power_channel = AREA_USAGE_EQUIP
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the unit is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the unit is open
max_integrity = 250
circuit = /obj/item/circuitboard/machine/suit_storage_unit
+4 -4
View File
@@ -1,11 +1,11 @@
GLOBAL_LIST_INIT(rod_recipes, list ( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("linen bin", /obj/structure/bedsheetbin/empty, 2, time = 5, one_per_turf = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("railing", /obj/structure/railing, 6, time = 3.6 SECONDS, window_checks = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 5, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 150, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("railing", /obj/structure/railing, 6, time = 3.6 SECONDS, check_direction = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("tank holder", /obj/structure/tank_holder, 2, time = 5, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("ladder", /obj/structure/ladder/crafted, 15, time = 150, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 10, one_per_turf = FALSE, category = CAT_TOOLS), \
+20 -11
View File
@@ -9,8 +9,8 @@
* Glass sheets
*/
GLOBAL_LIST_INIT(glass_recipes, list ( \
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 1 SECONDS, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 1 SECONDS, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("glass shard", /obj/item/shard, time = 0, on_solid_ground = TRUE, category = CAT_MISC), \
new/datum/stack_recipe("glass tile", /obj/item/stack/tile/glass, 1, 4, 20, category = CAT_TILES) \
))
@@ -79,8 +79,8 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
return ..()
GLOBAL_LIST_INIT(pglass_recipes, list ( \
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 20, on_solid_ground = TRUE, category = CAT_MISC), \
new/datum/stack_recipe("plasma glass tile", /obj/item/stack/tile/glass/plasma, 1, 4, 20, category = CAT_TILES) \
))
@@ -135,10 +135,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
* Reinforced glass sheets
*/
GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
null, \
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("glass shard", /obj/item/shard, time = 10, on_solid_ground = TRUE, category = CAT_MISC), \
new/datum/stack_recipe("reinforced glass tile", /obj/item/stack/tile/rglass, 1, 4, 20, category = CAT_TILES) \
))
@@ -159,6 +159,9 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
matter_amount = 6
tableVariant = /obj/structure/table/reinforced/rglass
/obj/item/stack/sheet/rglass/fifty
amount = 50
/datum/armor/sheet_rglass
fire = 70
acid = 100
@@ -172,8 +175,8 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
. += GLOB.reinforced_glass_recipes
GLOBAL_LIST_INIT(prglass_recipes, list ( \
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/plasma/unanchored, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/plasma/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/plasma/unanchored, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/plasma/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("plasma glass shard", /obj/item/shard/plasma, time = 40, on_solid_ground = TRUE, category = CAT_MISC), \
new/datum/stack_recipe("reinforced plasma glass tile", /obj/item/stack/tile/rglass/plasma, 1, 4, 20, category = CAT_TILES) \
))
@@ -199,12 +202,15 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
fire = 80
acid = 100
/obj/item/stack/sheet/plasmarglass/fifty
amount = 50
/obj/item/stack/sheet/plasmarglass/get_main_recipes()
. = ..()
. += GLOB.prglass_recipes
GLOBAL_LIST_INIT(titaniumglass_recipes, list(
new/datum/stack_recipe("shuttle window", /obj/structure/window/reinforced/shuttle/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("shuttle window", /obj/structure/window/reinforced/shuttle/unanchored, 2, time = 0, on_solid_ground = TRUE, check_direction = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("titanium glass shard", /obj/item/shard/titanium, time = 40, on_solid_ground = TRUE, category = CAT_MISC) \
))
@@ -233,7 +239,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
. += GLOB.titaniumglass_recipes
GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
new/datum/stack_recipe("plastitanium window", /obj/structure/window/reinforced/plasma/plastitanium/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS) \
new/datum/stack_recipe("plastitanium window", /obj/structure/window/reinforced/plasma/plastitanium/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS) \
))
/obj/item/stack/sheet/plastitaniumglass
@@ -250,6 +256,9 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
merge_type = /obj/item/stack/sheet/plastitaniumglass
tableVariant = /obj/structure/table/reinforced/plastitaniumglass
/obj/item/stack/sheet/plastitaniumglass
amount = 50
/datum/armor/sheet_plastitaniumglass
fire = 80
acid = 100
@@ -14,8 +14,8 @@
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, category = CAT_CLOTHING), \
new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/fedora/human_leather, 1, category = CAT_CLOTHING), \
new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("human skin hat", /obj/item/clothing/head/fedora/human_leather, 1, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/human/get_main_recipes()
@@ -38,8 +38,8 @@ GLOBAL_LIST_INIT(human_recipes, list( \
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, category = CAT_CLOTHING), \
new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/mothroach
@@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \
. += GLOB.gondola_recipes
GLOBAL_LIST_INIT(corgi_recipes, list ( \
new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/corgi/get_main_recipes()
@@ -87,8 +87,8 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \
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, category = CAT_CLOTHING), \
new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/costume/monkeysuit, 2, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/monkey/get_main_recipes()
@@ -112,8 +112,8 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \
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, category = CAT_CLOTHING), \
new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/costume/xenos, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/costume/xenos, 2, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/xeno/get_main_recipes()
@@ -186,32 +186,32 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \
merge_type = /obj/item/stack/sheet/leather
GLOBAL_LIST_INIT(leather_recipes, list ( \
new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1, category = CAT_CONTAINERS), \
new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("basketball", /obj/item/toy/basketball, 20, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("saddle", /obj/item/saddle, 5, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("cowboy boots", /obj/item/clothing/shoes/cowboy, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5, category = CAT_CLOTHING), \
new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4, category = CAT_CLOTHING), \
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7, category = CAT_CLOTHING), \
new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7, category = CAT_CLOTHING), \
new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("basketball", /obj/item/toy/basketball, 20, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("saddle", /obj/item/saddle, 5, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("cowboy boots", /obj/item/clothing/shoes/cowboy, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("sheriff vest", /obj/item/clothing/accessory/vest_sheriff, 4, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("biker jacket", /obj/item/clothing/suit/jacket/leather/biker, 7, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe_list("belts", list( \
new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2, category = CAT_CONTAINERS), \
new/datum/stack_recipe("janitorial belt", /obj/item/storage/belt/janitor, 2, category = CAT_CONTAINERS), \
new/datum/stack_recipe("medical belt", /obj/item/storage/belt/medical, 2, category = CAT_CONTAINERS), \
new/datum/stack_recipe("security belt", /obj/item/storage/belt/security, 2, category = CAT_CONTAINERS), \
new/datum/stack_recipe("shoulder holster", /obj/item/storage/belt/holster, 3, category = CAT_CONTAINERS), \
new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5, category = CAT_CONTAINERS), \
new/datum/stack_recipe("tool belt", /obj/item/storage/belt/utility, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("botanical belt", /obj/item/storage/belt/plant, 2, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("janitorial belt", /obj/item/storage/belt/janitor, 2, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("medical belt", /obj/item/storage/belt/medical, 2, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("security belt", /obj/item/storage/belt/security, 2, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("shoulder holster", /obj/item/storage/belt/holster, 3, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5, check_density = FALSE, category = CAT_CONTAINERS), \
)),
new/datum/stack_recipe_list("cowboy hats", list( \
new/datum/stack_recipe("sheriff hat", /obj/item/clothing/head/cowboy/brown, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("desperado hat", /obj/item/clothing/head/cowboy/black, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("ten-gallon hat", /obj/item/clothing/head/cowboy/white, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("deputy hat", /obj/item/clothing/head/cowboy/red, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("drifter hat", /obj/item/clothing/head/cowboy/grey, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("sheriff hat", /obj/item/clothing/head/cowboy/brown, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("desperado hat", /obj/item/clothing/head/cowboy/black, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("ten-gallon hat", /obj/item/clothing/head/cowboy/white, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("deputy hat", /obj/item/clothing/head/cowboy/red, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("drifter hat", /obj/item/clothing/head/cowboy/grey, 2, check_density = FALSE, category = CAT_CLOTHING), \
)),
))
@@ -237,7 +237,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \
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, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/cable/sinew, 1, check_density = FALSE, category = CAT_EQUIPMENT), \
))
/obj/item/stack/sheet/sinew/get_main_recipes()
@@ -322,11 +322,11 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
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, category = CAT_CLOTHING), \
new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1, category = CAT_CLOTHING), \
new/datum/stack_recipe("carpskin chair", /obj/structure/chair/comfy/carp, 2, category = CAT_FURNITURE), \
new/datum/stack_recipe("carpskin suit", /obj/item/clothing/under/suit/carpskin, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("carpskin fedora", /obj/item/clothing/head/fedora/carpskin, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("carp costume", /obj/item/clothing/suit/hooded/carp_costume, 4, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("carp mask", /obj/item/clothing/mask/gas/carp, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("carpskin chair", /obj/structure/chair/comfy/carp, 2, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("carpskin suit", /obj/item/clothing/under/suit/carpskin, 3, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("carpskin fedora", /obj/item/clothing/head/fedora/carpskin, 2, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/animalhide/carp/get_main_recipes()
@@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
GLOBAL_LIST_INIT(diamond_recipes, list ( \
new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/diamond/get_main_recipes()
@@ -132,7 +132,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
GLOBAL_LIST_INIT(uranium_recipes, list ( \
new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/uranium/get_main_recipes()
@@ -166,7 +166,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
GLOBAL_LIST_INIT(plasma_recipes, list ( \
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/plasma/get_main_recipes()
@@ -197,9 +197,9 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
GLOBAL_LIST_INIT(gold_recipes, list ( \
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, category = CAT_FURNITURE), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, category = CAT_CLOTHING), \
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/mineral/gold/get_main_recipes()
@@ -225,7 +225,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
GLOBAL_LIST_INIT(silver_recipes, list ( \
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/silver/get_main_recipes()
@@ -249,7 +249,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
walltype = /turf/closed/wall/mineral/bananium
GLOBAL_LIST_INIT(bananium_recipes, list ( \
new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/bananium/get_main_recipes()
@@ -280,7 +280,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \
walltype = /turf/closed/wall/mineral/titanium
GLOBAL_LIST_INIT(titanium_recipes, list ( \
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
new/datum/stack_recipe("shuttle seat", /obj/structure/chair/comfy/shuttle, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
))
@@ -313,7 +313,7 @@ GLOBAL_LIST_INIT(titanium_recipes, list ( \
walltype = /turf/closed/wall/mineral/plastitanium
GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("plastitanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/plastitanium/get_main_recipes()
@@ -341,8 +341,8 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
GLOBAL_LIST_INIT(snow_recipes, list ( \
new/datum/stack_recipe("snow wall", /turf/closed/wall/mineral/snow, 5, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
new/datum/stack_recipe("snowman", /obj/structure/statue/snow/snowman, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("snowball", /obj/item/toy/snowball, 1, category = CAT_WEAPON_RANGED), \
new/datum/stack_recipe("snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("snowball", /obj/item/toy/snowball, 1, check_density = FALSE, category = CAT_WEAPON_RANGED), \
new/datum/stack_recipe("snow tile", /obj/item/stack/tile/mineral/snow, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/snow/get_main_recipes()
@@ -420,7 +420,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
null, \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
))
/obj/item/stack/sheet/mineral/abductor/get_main_recipes()
@@ -463,10 +463,10 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
//Metal Hydrogen
GLOBAL_LIST_INIT(metalhydrogen_recipes, list(
new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1, category = CAT_ROBOT),
new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, category = CAT_CLOTHING),
new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, category = CAT_CLOTHING),
new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, category = CAT_WEAPON_MELEE),
new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1, check_density = FALSE, category = CAT_ROBOT),
new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING),
new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_MELEE),
))
/obj/item/stack/sheet/mineral/metal_hydrogen
@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
null, \
new/datum/stack_recipe("wall girders (anchored)", /obj/structure/girder, 2, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \
null, \
new/datum/stack_recipe("tram wall girders (anchored)", /obj/structure/girder/tram, 2, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, on_tram = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \
new/datum/stack_recipe("tram wall girders (anchored)", /obj/structure/girder/tram, 2, time = 4 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, check_density = FALSE, on_tram = TRUE, trait_booster = TRAIT_QUICK_BUILD, trait_modifier = 0.75, category = CAT_STRUCTURE), \
null, \
new/datum/stack_recipe("computer frame", /obj/structure/frame/computer, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("modular console", /obj/machinery/modular_computer/console, 10, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
@@ -112,25 +112,25 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
null, \
new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1, check_density = FALSE, category = CAT_EQUIPMENT), \
null, \
new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, check_density = FALSE, category = CAT_EQUIPMENT), \
null, \
new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 3 SECONDS, category = CAT_FURNITURE), \
new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 3 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 5 SECONDS, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 5 SECONDS, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 5 SECONDS, category = CAT_ROBOT), \
new/datum/stack_recipe("shower frame", /obj/structure/showerframe, 2, time = 2 SECONDS, category = CAT_FURNITURE), \
new/datum/stack_recipe("urinal", /obj/item/wallframe/urinal, 2, time = 1 SECONDS, category = CAT_FURNITURE)
new/datum/stack_recipe("voting box", /obj/structure/votebox, 15, time = 5 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 5 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 5 SECONDS, check_density = FALSE, category = CAT_ROBOT), \
new/datum/stack_recipe("shower frame", /obj/structure/showerframe, 2, time = 2 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("urinal", /obj/item/wallframe/urinal, 2, time = 1 SECONDS, check_density = FALSE, category = CAT_FURNITURE)
))
/obj/item/stack/sheet/iron
@@ -247,9 +247,9 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
* Plasteel
*/
GLOBAL_LIST_INIT(plasteel_recipes, list ( \
new/datum/stack_recipe("AI core", /obj/structure/ai_core, 4, time = 5 SECONDS, one_per_turf = TRUE, category = CAT_ROBOT),
new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 5 SECONDS, category = CAT_CHEMISTRY),
new/datum/stack_recipe("Large Gas Tank", /obj/structure/tank_frame, 4, time=1 SECONDS, one_per_turf=TRUE, category = CAT_ATMOSPHERIC),
new/datum/stack_recipe("AI core", /obj/structure/ai_core, 4, time = 5 SECONDS, one_per_turf = TRUE, check_density = FALSE, category = CAT_ROBOT),
new/datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 5 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY),
new/datum/stack_recipe("Large Gas Tank", /obj/structure/tank_frame, 4, time=1 SECONDS, one_per_turf=TRUE, check_density = FALSE, category = CAT_ATMOSPHERIC),
null,
new /datum/stack_recipe_list("airlock assemblies", list( \
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS),
@@ -294,10 +294,10 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
* Wood
*/
GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, category = CAT_CLOTHING), \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, category = CAT_FURNITURE), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, category = CAT_TOOLS), \
new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 1 SECONDS, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 3 SECONDS, check_density = FALSE, category = CAT_TOOLS), \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
@@ -309,26 +309,26 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wooden barrel", /obj/structure/fermenting_barrel, 8, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 1 SECONDS, category = CAT_ENTERTAINMENT),\
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 1 SECONDS, category = CAT_ENTERTAINMENT),\
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT),\
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_ENTERTAINMENT),\
new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("wooden buckler", /obj/item/shield/buckler, 20, time = 4 SECONDS, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 5 SECONDS, category = CAT_TOOLS),\
new/datum/stack_recipe("wooden buckler", /obj/item/shield/buckler, 20, time = 4 SECONDS, check_density = FALSE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 5 SECONDS, check_density = FALSE, category = CAT_TOOLS),\
new/datum/stack_recipe("mannequin", /obj/structure/mannequin/wood, 25, time = 5 SECONDS, one_per_turf = TRUE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("smoking pipe", /obj/item/clothing/mask/cigarette/pipe, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS, category = CAT_TOOLS),\
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/cup/bucket/wooden, 3, time = 1 SECONDS, category = CAT_CONTAINERS),\
new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS, category = CAT_TOOLS),\
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("smoking pipe", /obj/item/clothing/mask/cigarette/pipe, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_TOOLS),\
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/cup/bucket/wooden, 3, time = 1 SECONDS, check_density = FALSE, category = CAT_CONTAINERS),\
new/datum/stack_recipe("rake", /obj/item/cultivator/rake, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_TOOLS),\
new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS),\
new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE),\
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 1.5 SECONDS, category = CAT_WEAPON_MELEE),\
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 1.5 SECONDS, check_density = FALSE, category = CAT_WEAPON_MELEE),\
new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \
new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, category = CAT_TOOLS), \
new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, check_density = FALSE, category = CAT_TOOLS), \
new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \
new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \
null, \
new/datum/stack_recipe_list("pews", list(
new /datum/stack_recipe("pew (middle)", /obj/structure/chair/pew, 3, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE),
@@ -371,13 +371,13 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
GLOBAL_LIST_INIT(bamboo_recipes, list ( \
new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 5, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("bamboo spear", /obj/item/spear/bamboospear, 25, time = 9 SECONDS, category = CAT_WEAPON_MELEE), \
new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 7 SECONDS, category = CAT_WEAPON_RANGED), \
new/datum/stack_recipe("crude syringe", /obj/item/reagent_containers/syringe/crude, 5, time = 1 SECONDS, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("rice hat", /obj/item/clothing/head/costume/rice_hat, 10, time = 7 SECONDS, category = CAT_CLOTHING), \
new/datum/stack_recipe("bamboo spear", /obj/item/spear/bamboospear, 25, time = 9 SECONDS, check_density = FALSE, category = CAT_WEAPON_MELEE), \
new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 7 SECONDS, check_density = FALSE, category = CAT_WEAPON_RANGED), \
new/datum/stack_recipe("crude syringe", /obj/item/reagent_containers/syringe/crude, 5, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("rice hat", /obj/item/clothing/head/costume/rice_hat, 10, time = 7 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \
null, \
new/datum/stack_recipe("bamboo stool", /obj/structure/chair/stool/bamboo, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("bamboo mat piece", /obj/item/stack/tile/bamboo, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
null, \
new/datum/stack_recipe_list("bamboo benches", list(
new /datum/stack_recipe("bamboo bench (middle)", /obj/structure/chair/sofa/bamboo, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE),
@@ -417,39 +417,39 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \
* Cloth
*/
GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3, category = CAT_CLOTHING), /*Ladies first*/ \
new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1, category = CAT_CLOTHING), \
new/datum/stack_recipe("white bandana", /obj/item/clothing/mask/bandana/white, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3, check_density = FALSE, category = CAT_CLOTHING), /*Ladies first*/ \
new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white bandana", /obj/item/clothing/mask/bandana/white, 2, check_density = FALSE, category = CAT_CLOTHING), \
null, \
new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6, category = CAT_CONTAINERS), \
new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("science bag", /obj/item/storage/bag/xeno, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("science bag", /obj/item/storage/bag/xeno, 4, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6, category = CAT_TOOLS), \
new/datum/stack_recipe("rag", /obj/item/reagent_containers/cup/rag, 1, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3, category = CAT_FURNITURE), \
new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 6, category = CAT_FURNITURE), \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4, category = CAT_CONTAINERS), \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6, check_density = FALSE, category = CAT_TOOLS), \
new/datum/stack_recipe("rag", /obj/item/reagent_containers/cup/rag, 1, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 6, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1, category = CAT_CLOTHING), \
new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2, category = CAT_CLOTHING), \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2, check_density = FALSE, category = CAT_CLOTHING), \
null, \
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/blindfold, 2, check_density = FALSE, category = CAT_ENTERTAINMENT), \
null, \
new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteen_nineteen, 3, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythree_nineteen, 4, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythree_twentythree, 5, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteen_nineteen, 3, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythree_nineteen, 4, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythree_twentythree, 5, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("pillow", /obj/item/pillow, 3, category = CAT_FURNITURE), \
))
@@ -478,10 +478,10 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
amount = 5
GLOBAL_LIST_INIT(durathread_recipes, list ( \
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/misc/durathread, 4, time = 4 SECONDS, category = CAT_CLOTHING),
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 4 SECONDS, category = CAT_CLOTHING), \
new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 4 SECONDS, category = CAT_CLOTHING), \
new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 2.5 SECONDS, category = CAT_CLOTHING), \
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/misc/durathread, 4, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING),
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 4 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 2.5 SECONDS, check_density = FALSE, category = CAT_CLOTHING), \
))
/obj/item/stack/sheet/durathread
@@ -540,60 +540,60 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
* Cardboard
*/
GLOBAL_LIST_INIT(cardboard_recipes, list ( \
new/datum/stack_recipe("box", /obj/item/storage/box, category = CAT_CONTAINERS), \
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/costume/cardborg, 3, category = CAT_CLOTHING), \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/costume/cardborg, category = CAT_CLOTHING), \
new/datum/stack_recipe("box", /obj/item/storage/box, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/costume/cardborg, 3, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/costume/cardborg, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5, check_density = FALSE, category = CAT_ENTERTAINMENT), \
null, \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox, category = CAT_CONTAINERS), \
new/datum/stack_recipe("folder", /obj/item/folder, category = CAT_CONTAINERS), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox, check_density = FALSE, category = CAT_CONTAINERS), \
new/datum/stack_recipe("folder", /obj/item/folder, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
//TO-DO: Find a proper way to just change the illustration on the box. Code isn't the issue, input is.
new/datum/stack_recipe_list("fancy boxes", list(
new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box, category = CAT_CONTAINERS), \
new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk, category = CAT_CONTAINERS), \
new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes, category = CAT_CONTAINERS),
new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donut box", /obj/item/storage/fancy/donut_box, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("egg box", /obj/item/storage/fancy/egg_box, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets box", /obj/item/storage/box/donkpockets, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets spicy box", /obj/item/storage/box/donkpockets/donkpocketspicy, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets teriyaki box", /obj/item/storage/box/donkpockets/donkpocketteriyaki, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets pizza box", /obj/item/storage/box/donkpockets/donkpocketpizza, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets berry box", /obj/item/storage/box/donkpockets/donkpocketberry, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("donk-pockets honk box", /obj/item/storage/box/donkpockets/donkpockethonk, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("monkey cube box", /obj/item/storage/box/monkeycubes, check_density = FALSE, category = CAT_CONTAINERS),
new /datum/stack_recipe("nugget box", /obj/item/storage/fancy/nugget_box, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot, category = CAT_CONTAINERS), \
new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot, category = CAT_CONTAINERS), \
new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag, category = CAT_CONTAINERS), \
new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs, category = CAT_CONTAINERS), \
new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes, category = CAT_CONTAINERS), \
new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs, category = CAT_CONTAINERS), \
new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids, category = CAT_CONTAINERS), \
new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas, category = CAT_CONTAINERS), \
new /datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("flashbang box", /obj/item/storage/box/flashbangs, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("flashes box", /obj/item/storage/box/flashes, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("handcuffs box", /obj/item/storage/box/handcuffs, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("ID card box", /obj/item/storage/box/ids, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("PDA box", /obj/item/storage/box/pdas, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles, category = CAT_CONTAINERS), \
new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers, category = CAT_CONTAINERS), \
new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes, category = CAT_CONTAINERS), \
new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves, category = CAT_CONTAINERS), \
new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks, category = CAT_CONTAINERS), \
new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags, category = CAT_CONTAINERS), \
new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses, category = CAT_CONTAINERS), \
new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens, category = CAT_CONTAINERS), \
new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank, category = CAT_CONTAINERS), \
new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank, category = CAT_CONTAINERS), \
new /datum/stack_recipe("pillbottle box", /obj/item/storage/box/pillbottles, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("beaker box", /obj/item/storage/box/beakers, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("syringe box", /obj/item/storage/box/syringes, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("latex gloves box", /obj/item/storage/box/gloves, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("perscription glasses box", /obj/item/storage/box/rxglasses, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("medipen box", /obj/item/storage/box/medipens, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank, check_density = FALSE, category = CAT_CONTAINERS), \
null, \
new /datum/stack_recipe("survival box", /obj/item/storage/box/survival/crafted, category = CAT_CONTAINERS), \
new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer/crafted, category = CAT_CONTAINERS), \
new /datum/stack_recipe("disk box", /obj/item/storage/box/disks, category = CAT_CONTAINERS), \
new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes, category = CAT_CONTAINERS), \
new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps, category = CAT_CONTAINERS), \
new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box, category = CAT_CONTAINERS)
new /datum/stack_recipe("survival box", /obj/item/storage/box/survival/crafted, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("extended tank survival box", /obj/item/storage/box/survival/engineer/crafted, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("disk box", /obj/item/storage/box/disks, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("light bulbs box", /obj/item/storage/box/lights/bulbs, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mixed lights box", /obj/item/storage/box/lights/mixed, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mouse traps box", /obj/item/storage/box/mousetraps, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("candle box", /obj/item/storage/fancy/candle_box, check_density = FALSE, category = CAT_CONTAINERS)
)),
null, \
@@ -645,14 +645,14 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
GLOBAL_LIST_INIT(bronze_recipes, list ( \
new/datum/stack_recipe("wall gear", /obj/structure/girder/bronze, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
null,
new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, window_checks = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("directional bronze window", /obj/structure/window/bronze/unanchored, time = 0, on_solid_ground = TRUE, check_direction = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("fulltile bronze window", /obj/structure/window/bronze/fulltile/unanchored, 2, time = 0, on_solid_ground = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
new/datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("bronze pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze/seethru, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("bronze floor tile", /obj/item/stack/tile/bronze, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/costume/bronze, category = CAT_CLOTHING), \
new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/costume/bronze, category = CAT_CLOTHING), \
new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze, category = CAT_CLOTHING), \
new/datum/stack_recipe("bronze floor tile", /obj/item/stack/tile/bronze, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/costume/bronze, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/costume/bronze, check_density = FALSE, category = CAT_CLOTHING), \
new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze, check_density = FALSE, category = CAT_CLOTHING), \
null,
new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
))
@@ -737,16 +737,16 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
material_type = /datum/material/bone
GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20, category = CAT_TILES), \
new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2, category = CAT_FURNITURE), \
new /datum/stack_recipe("plastic floor tile", /obj/item/stack/tile/plastic, 1, 4, 20, check_density = FALSE, category = CAT_TILES), \
new /datum/stack_recipe("folding plastic chair", /obj/structure/chair/plastic, 2, check_density = FALSE, category = CAT_FURNITURE), \
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_solid_ground = TRUE, time = 4 SECONDS, category = CAT_FURNITURE), \
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/empty, category = CAT_CONTAINERS), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/large/empty, 3, category = CAT_CONTAINERS), \
new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/cup/glass/colocup, 1, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mannequin", /obj/structure/mannequin/plastic, 25, time = 5 SECONDS, one_per_turf = TRUE, category = CAT_ENTERTAINMENT), \
new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2, category = CAT_EQUIPMENT), \
new /datum/stack_recipe("warning cone", /obj/item/clothing/head/cone, 2, category = CAT_EQUIPMENT), \
new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, category = CAT_FURNITURE)))
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/empty, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/cup/glass/waterbottle/large/empty, 3, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("colo cups", /obj/item/reagent_containers/cup/glass/colocup, 1, check_density = FALSE, category = CAT_CONTAINERS), \
new /datum/stack_recipe("mannequin", /obj/structure/mannequin/plastic, 25, time = 5 SECONDS, one_per_turf = TRUE, check_density = FALSE, category = CAT_ENTERTAINMENT), \
new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new /datum/stack_recipe("warning cone", /obj/item/clothing/head/cone, 2, check_density = FALSE, category = CAT_EQUIPMENT), \
new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, check_density = FALSE, category = CAT_FURNITURE)))
/obj/item/stack/sheet/plastic
name = "plastic"
@@ -770,7 +770,7 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
. += GLOB.plastic_recipes
GLOBAL_LIST_INIT(paperframe_recipes, list(
new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, one_per_turf = TRUE, on_solid_ground = TRUE, time = 1 SECONDS), \
new /datum/stack_recipe("paper frame separator", /obj/structure/window/paperframe, 2, one_per_turf = TRUE, on_solid_ground = TRUE, is_fulltile = TRUE, time = 1 SECONDS), \
new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperframe, 3, one_per_turf = TRUE, on_solid_ground = TRUE, time = 1 SECONDS )))
/obj/item/stack/sheet/paperframes
+7 -16
View File
@@ -448,17 +448,15 @@
return FALSE
var/turf/dest_turf = get_turf(builder)
// If we're making a window, we have some special snowflake window checks to do.
if(ispath(recipe.result_type, /obj/structure/window))
var/obj/structure/window/result_path = recipe.result_type
if(!valid_window_location(dest_turf, builder.dir, is_fulltile = initial(result_path.fulltile)))
builder.balloon_alert(builder, "won't fit here!")
return FALSE
if(recipe.one_per_turf && (locate(recipe.result_type) in dest_turf))
builder.balloon_alert(builder, "already one here!")
return FALSE
if(recipe.check_direction)
if(!valid_build_direction(dest_turf, builder.dir, is_fulltile = recipe.is_fulltile))
builder.balloon_alert(builder, "won't fit here!")
return FALSE
if(recipe.on_tram)
if(!locate(/obj/structure/industrial_lift/tram) in dest_turf)
builder.balloon_alert(builder, "must be made on a tram!")
@@ -473,16 +471,9 @@
builder.balloon_alert(builder, "must be made on solid ground!")
return FALSE
if(recipe.check_density)
for(var/obj/object in dest_turf)
if(istype(object, /obj/structure/grille))
continue
if(istype(object, /obj/structure/table))
continue
if(istype(object, /obj/structure/window))
var/obj/structure/window/window_structure = object
if(!window_structure.fulltile)
continue
if(object.density || NO_BUILD & object.obj_flags)
if(object.density && !(object.obj_flags & IGNORE_DENSITY) || object.obj_flags & BLOCKS_CONSTRUCTION)
builder.balloon_alert(builder, "something is in the way!")
return FALSE
+13 -1
View File
@@ -17,10 +17,17 @@
var/time = 0
/// If only one of the resulting atom is allowed per turf
var/one_per_turf = FALSE
/// If the atom is fulltile, as in a fulltile window. This is used for the direction check to prevent fulltile windows from being able to be built over directional stuff.
/// Setting this to true will effectively set check_direction to true.
var/is_fulltile = FALSE
/// If this atom should run the direction check, for use when building things like directional windows where you can have more than one per turf
var/check_direction = FALSE
/// If the atom requires a floor below
var/on_solid_ground = FALSE
/// If the atom requires a tram floor below
var/on_tram = FALSE
/// If the atom checks that there are objects with density in the same turf when being built. TRUE by default
var/check_density = TRUE
/// Bitflag of additional placement checks required to place. (STACK_CHECK_CARDINALS|STACK_CHECK_ADJACENT)
var/placement_checks = NONE
/// If TRUE, the created atom will gain custom mat datums
@@ -42,7 +49,9 @@
one_per_turf = FALSE,
on_solid_ground = FALSE,
on_tram = FALSE,
window_checks = FALSE,
is_fulltile = FALSE,
check_direction = FALSE,
check_density = TRUE,
placement_checks = NONE,
applies_mats = FALSE,
trait_booster,
@@ -59,6 +68,9 @@
src.one_per_turf = one_per_turf
src.on_solid_ground = on_solid_ground
src.on_tram = on_tram
src.is_fulltile = is_fulltile
src.check_direction = check_direction || is_fulltile
src.check_density = check_density
src.placement_checks = placement_checks
src.applies_mats = applies_mats
src.trait_booster = trait_booster
+2 -1
View File
@@ -11,6 +11,7 @@
anchored = TRUE
pass_flags_self = PASSGRILLE
flags_1 = CONDUCT_1
obj_flags = CAN_BE_HIT | IGNORE_DENSITY
pressure_resistance = 5*ONE_ATMOSPHERE
armor_type = /datum/armor/structure_grille
max_integrity = 50
@@ -104,7 +105,7 @@
var/obj/structure/window/window_path = the_rcd.window_type
if(!ispath(window_path))
CRASH("Invalid window path type in RCD: [window_path]")
if(!valid_window_location(T, user.dir, is_fulltile = initial(window_path.fulltile)))
if(!valid_build_direction(T, user.dir, is_fulltile = initial(window_path.fulltile)))
balloon_alert(user, "window already here!")
return FALSE
var/obj/structure/window/WD = new the_rcd.window_type(T, user.dir)
+1
View File
@@ -4,6 +4,7 @@
icon = 'icons/obj/railings.dmi'
icon_state = "railing"
flags_1 = ON_BORDER_1
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR
density = TRUE
anchored = TRUE
pass_flags_self = LETPASSTHROW|PASSSTRUCTURE
@@ -22,6 +22,7 @@
anchored = TRUE
pass_flags_self = PASSTABLE | LETPASSTHROW
layer = TABLE_LAYER
obj_flags = CAN_BE_HIT | IGNORE_DENSITY
var/frame = /obj/structure/table_frame
var/framestack = /obj/item/stack/rods
var/glass_shard_type = /obj/item/shard
@@ -18,6 +18,7 @@
anchored = FALSE
density = FALSE
dir = NORTH
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR
set_dir_on_move = FALSE
var/obj/item/electronics/airlock/electronics = null
@@ -64,10 +65,10 @@
if(istype(mover, /obj/structure/window))
var/obj/structure/window/moved_window = mover
return valid_window_location(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
return valid_build_direction(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
return valid_build_direction(loc, mover.dir, is_fulltile = FALSE)
/obj/structure/windoor_assembly/can_atmos_pass(turf/T, vertical = FALSE)
if(get_dir(loc, T) == dir)
+14 -2
View File
@@ -7,6 +7,7 @@
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = TRUE //initially is 0 for tile smoothing
flags_1 = ON_BORDER_1
obj_flags = CAN_BE_HIT | BLOCKS_CONSTRUCTION_DIR | IGNORE_DENSITY
max_integrity = 50
can_be_unanchored = TRUE
resistance_flags = ACID_PROOF
@@ -56,6 +57,8 @@
if(fulltile)
setDir()
obj_flags &= ~BLOCKS_CONSTRUCTION_DIR
obj_flags &= ~IGNORE_DENSITY
AddElement(/datum/element/can_barricade)
//windows only block while reinforced and fulltile
@@ -123,10 +126,10 @@
if(istype(mover, /obj/structure/window))
var/obj/structure/window/moved_window = mover
return valid_window_location(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
return valid_build_direction(loc, moved_window.dir, is_fulltile = moved_window.fulltile)
if(istype(mover, /obj/structure/windoor_assembly) || istype(mover, /obj/machinery/door/window))
return valid_window_location(loc, mover.dir, is_fulltile = FALSE)
return valid_build_direction(loc, mover.dir, is_fulltile = FALSE)
return TRUE
@@ -647,6 +650,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
max_integrity = 100
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE
@@ -668,6 +672,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
max_integrity = 400
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE
@@ -684,6 +689,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
max_integrity = 1000
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE
@@ -700,6 +706,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
max_integrity = 150
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
state = RWINDOW_SECURE
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE
@@ -722,6 +729,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
base_icon_state = "tinted_window"
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_WINDOW_FULLTILE
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE
@@ -748,6 +756,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
reinf = TRUE
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
reinf = TRUE
heat_resistance = 1600
armor_type = /datum/armor/reinforced_shuttle
@@ -795,6 +804,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
wtype = "shuttle"
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
heat_resistance = 1600
armor_type = /datum/armor/plasma_plastitanium
smoothing_flags = SMOOTH_BITMASK
@@ -827,6 +837,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
max_integrity = 15
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
smoothing_flags = SMOOTH_BITMASK
smoothing_groups = SMOOTH_GROUP_PAPERFRAME
canSmoothWith = SMOOTH_GROUP_PAPERFRAME
@@ -916,6 +927,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/plasma/spawner, 0)
canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE_BRONZE
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
obj_flags = CAN_BE_HIT
max_integrity = 50
glass_amount = 2
+1 -1
View File
@@ -321,7 +321,7 @@
return TRUE
if(RCD_AIRLOCK)
if(ispath(the_rcd.airlock_type, /obj/machinery/door/window))
if(!valid_window_location(src, user.dir, is_fulltile = FALSE))
if(!valid_build_direction(src, user.dir, is_fulltile = FALSE))
balloon_alert(user, "there's already a windoor!")
return FALSE
for(var/obj/machinery/door/door in src)
+1 -1
View File
@@ -143,7 +143,7 @@
return TRUE
if(RCD_AIRLOCK)
if(ispath(the_rcd.airlock_type, /obj/machinery/door/window))
if(!valid_window_location(src, user.dir, is_fulltile = FALSE))
if(!valid_build_direction(src, user.dir, is_fulltile = FALSE))
balloon_alert(user, "there's already a windoor!")
return FALSE
for(var/obj/machinery/door/door in src)
@@ -101,7 +101,7 @@
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the door is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.5
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.3
+2 -2
View File
@@ -107,8 +107,8 @@
merge_type = /obj/item/stack/ore/glass
GLOBAL_LIST_INIT(sand_recipes, list(\
new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50, category = CAT_MISC),\
new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50, category = CAT_TILES)\
new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50, check_density = FALSE, category = CAT_MISC),\
new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50, check_density = FALSE, category = CAT_TILES)\
))
/obj/item/stack/ore/glass/get_main_recipes()
@@ -292,7 +292,7 @@
layer = ABOVE_WINDOW_LAYER
anchored = TRUE
density = TRUE
obj_flags = NO_BUILD // Becomes undense when the door is open
obj_flags = BLOCKS_CONSTRUCTION // Becomes undense when the door is open
var/busy = FALSE
var/busy_icon_state