Files
Ghom 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.3 KiB
Plaintext

/obj/structure/cat_house
name = "cat house"
desc = "Cozy home for cats."
icon = 'icons/mob/simple/pets.dmi'
icon_state = "cat_house"
density = TRUE
anchored = TRUE
custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 5)
///cat residing in this house
var/mob/living/resident_cat
/obj/structure/cat_house/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ATOM_ATTACK_BASIC_MOB, PROC_REF(enter_home))
/obj/structure/cat_house/proc/enter_home(datum/source, mob/living/attacker)
SIGNAL_HANDLER
if(isnull(resident_cat) && istype(attacker, /mob/living/basic/pet/cat))
attacker.forceMove(src)
return
if(resident_cat == attacker)
attacker.forceMove(drop_location())
/obj/structure/cat_house/Entered(atom/movable/mover)
. = ..()
if(!istype(mover, /mob/living/basic/pet/cat))
return
resident_cat = mover
update_appearance(UPDATE_OVERLAYS)
/obj/structure/cat_house/Exited(atom/movable/mover)
. = ..()
if(mover != resident_cat)
return
resident_cat = null
update_appearance(UPDATE_OVERLAYS)
/obj/structure/cat_house/update_overlays()
. = ..()
if(isnull(resident_cat))
return
var/image/cat_icon = image(icon = resident_cat.icon, icon_state = resident_cat.icon_state, layer = LOW_ITEM_LAYER)
cat_icon.transform = cat_icon.transform.Scale(0.7, 0.7)
cat_icon.pixel_w = 0
cat_icon.pixel_z = -9
. += cat_icon