moves abstract_type up to datum, spawners wont spawn them (#92909)

## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa

small warning: I dont have EVERY abstract type defined right now but,
ive done a good enough job for now. Im tired of data entry rn
## Why It's Good For The Game
standardizing behavior. Might be a micro hit to performance however

having this lets us not rely on icon state to determine whether
something is a parent type and makes it much easier to tell something is
a parent type (could be applied further to things like admin spawning
menus and things like that).

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
This commit is contained in:
FalloutFalcon
2025-09-13 00:36:15 +02:00
committed by GitHub
parent 71c49cb4d1
commit d2f34e33be
165 changed files with 289 additions and 101 deletions
+2 -1
View File
@@ -11,10 +11,11 @@
// Base type. Subtypes are found in /grown dir. Lavaland-based subtypes can be found in mining/ash_flora.dm
/obj/item/food/grown
name = "fresh produce" // so recipe text doesn't say 'snack'
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "berrypile"
worn_icon = 'icons/mob/clothing/head/hydroponics.dmi'
name = "fresh produce" // so recipe text doesn't say 'snack'
abstract_type = /obj/item/food/grown
max_volume = PLANT_REAGENT_VOLUME
w_class = WEIGHT_CLASS_SMALL
resistance_flags = FLAMMABLE
+2 -1
View File
@@ -1,11 +1,12 @@
// Citrus - base type
/obj/item/food/grown/citrus
seed = /obj/item/seeds/lime
name = "citrus"
desc = "It's so sour, your face will twist."
icon_state = "lime"
abstract_type = /obj/item/food/grown/citrus
foodtypes = FRUIT
wine_power = 30
seed = /obj/item/seeds/lime
// Lime
/obj/item/seeds/lime
@@ -1,5 +1,6 @@
/obj/item/food/grown/mushroom
name = "mushroom"
abstract_type = /obj/item/food/grown/mushroom
// This is a prototype that should never be spawned
// but we'll default it to SOME seed if it does end up spawning just so we don't runtime horribly
seed = /obj/item/seeds/chanter
+2 -1
View File
@@ -6,6 +6,7 @@
name = "grown_weapon"
icon = 'icons/obj/service/hydroponics/harvest.dmi'
worn_icon = 'icons/mob/clothing/head/hydroponics.dmi'
abstract_type = /obj/item/grown
resistance_flags = FLAMMABLE
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
/// Should we pixel offset ourselves at init? for mapping
@@ -13,7 +14,7 @@
/// The reagent this plant distill to. If NULL, it uses a generic fruit_wine reagent and adjusts its variables.
var/distill_reagent
// This may look like it's doing nothing but it's necessary, we do this to have kwargs work in New (for passing into Initialize)
// This may look like it's doing nothing but it's necessary, we do this to have kwargs work in New (for passing into Initialize)
/obj/item/grown/New(loc, obj/item/seeds/new_seed)
return ..()
+1
View File
@@ -6,6 +6,7 @@
icon = 'icons/obj/service/hydroponics/seeds.dmi'
icon_state = "seed" // Unknown plant seed - these shouldn't exist in-game.
worn_icon_state = "seed"
abstract_type = /obj/item/seeds
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
/// Name of plant when planted.