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-12 17:36:15 -05:00
committed by GitHub
parent 71c49cb4d1
commit d2f34e33be
165 changed files with 289 additions and 101 deletions
@@ -1,6 +1,7 @@
/obj/effect/decal/cleanable
gender = PLURAL
layer = CLEANABLE_FLOOR_OBJECT_LAYER
abstract_type = /obj/effect/decal/cleanable
flags_1 = UNPAINTABLE_1
var/list/random_icon_states = null
/// When two of these are on a same tile or do we need to merge them into just one?
@@ -2,6 +2,7 @@
name = "decal"
layer = ABOVE_OPEN_TURF_LAYER
plane = FLOOR_PLANE
abstract_type = /obj/effect/decal
anchored = TRUE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
+1
View File
@@ -3,6 +3,7 @@
//Effects are mostly temporary visual effects like sparks, smoke, as well as decals, etc...
/obj/effect
icon = 'icons/effects/effects.dmi'
abstract_type = /obj/effect
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
move_resist = INFINITY
obj_flags = NONE
+8
View File
@@ -45,6 +45,14 @@
/// Override to define loot blacklist behavior
/obj/effect/spawner/proc/can_spawn(atom/loot)
if(!ispath(loot))
// Means its something evil like /obj/item/stack/sheet/mineral/diamond{amount = 15}
// (modified instances?) which is not a path and cannot be checked as one
return TRUE
if(loot.abstract_type == loot)
return FALSE
if(loot.spawn_blacklisted)
return FALSE
return TRUE
/obj/effect/list_container
@@ -0,0 +1,10 @@
/obj/effect/spawner/random/weapon
icon_state = "laser_gun"
/obj/effect/spawner/random/weapon/full_gun
loot_subtype_path = /obj/item/gun
/obj/effect/spawner/random/weapon/full_gun/make_item(spawn_loc, type_path_to_make)
var/obj/item/gun/spawned_gun = new type_path_to_make(spawn_loc)
spawned_gun.unlock()
return spawned_gun