Files
GhomandGitHub 0b0c5ea91e Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.

## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.

Currently a WIP as I slowly deal with the unit test reports.

## Changelog

🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
2025-12-02 18:29:01 -05:00

48 lines
1.7 KiB
Plaintext

/obj/machinery/power/manufacturing/storagebox
name = "manufacturing storage unit"
desc = "Its basically a box. Receives resources (if anchored). Needs a machine to take stuff out of without dumping everything out."
icon_state = "box"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 10)
/// how much can we hold
var/max_stuff = 16
/obj/machinery/power/manufacturing/request_resource() //returns last inserted item
var/list/real_contents = contents - circuit
if(!length(real_contents))
return
return (real_contents)[length(real_contents)]
/obj/machinery/power/manufacturing/storagebox/receive_resource(atom/movable/receiving, atom/from, receive_dir)
if(iscloset(receiving) && length(receiving.contents))
return MANUFACTURING_FAIL
if(length(contents - circuit) >= max_stuff && !may_merge_in_contents_and_do_so(receiving))
return MANUFACTURING_FAIL
receiving.Move(src,receive_dir)
return MANUFACTURING_SUCCESS
/obj/machinery/power/manufacturing/storagebox/container_resist_act(mob/living/user)
. = ..()
user.Move(drop_location())
/obj/machinery/power/manufacturing/storagebox/screwdriver_act(mob/living/user, obj/item/tool)
. = NONE
balloon_alert(user, "disassembling...")
if(!do_after(user, 5 SECONDS, src))
return ITEM_INTERACT_FAILURE
atom_destruction()
return ITEM_INTERACT_SUCCESS
/obj/machinery/power/manufacturing/storagebox/atom_destruction(damage_flag)
new /obj/item/stack/sheet/iron(drop_location(), 10)
dump_inventory_contents()
return ..()
/obj/machinery/power/manufacturing/storagebox/attack_hand(mob/living/user, list/modifiers)
. = ..()
if(user.combat_mode)
return
balloon_alert(user, "dumping..")
if(!do_after(user, 1.25 SECONDS, src))
return
dump_inventory_contents()