Files
Bubberstation/code/modules/wiremod/shell/shell_items.dm
FalloutFalcon d2f34e33be 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.
/🆑
2025-09-13 00:36:15 +02:00

75 lines
2.1 KiB
Plaintext

/**
* # Shell Item
*
* Printed out by protolathes. Screwdriver to complete the shell.
*/
/obj/item/shell
name = "assembly"
desc = "A shell assembly that can be completed by screwdrivering it."
icon = 'icons/obj/science/circuits.dmi'
abstract_type = /obj/item/shell
var/shell_to_spawn
var/screw_delay = 3 SECONDS
/obj/item/shell/screwdriver_act(mob/living/user, obj/item/tool)
user.visible_message(span_notice("[user] begins finishing [src]."), span_notice("You begin finishing [src]."))
tool.play_tool_sound(src)
if(!do_after(user, screw_delay, src))
return
user.visible_message(span_notice("[user] finishes [src]."), span_notice("You finish [src]."))
var/turf/drop_loc = drop_location()
qdel(src)
if(drop_loc)
new shell_to_spawn(drop_loc)
return TRUE
/obj/item/shell/bot
name = "bot assembly"
icon_state = "setup_medium_box-open"
shell_to_spawn = /obj/structure/bot
/obj/item/shell/money_bot
name = "money bot assembly"
icon_state = "setup_large-open"
shell_to_spawn = /obj/structure/money_bot
/obj/item/shell/drone
name = "drone assembly"
icon_state = "setup_medium_med-open"
shell_to_spawn = /mob/living/circuit_drone
w_class = WEIGHT_CLASS_SMALL
/obj/item/shell/server
name = "server assembly"
icon_state = "setup_stationary-open"
shell_to_spawn = /obj/structure/server
screw_delay = 10 SECONDS
/obj/item/shell/airlock
name = "circuit airlock assembly"
icon = 'icons/obj/doors/airlocks/station/public.dmi'
icon_state = "construction"
shell_to_spawn = /obj/machinery/door/airlock/shell
screw_delay = 10 SECONDS
w_class = WEIGHT_CLASS_BULKY
/obj/item/shell/dispenser
name = "circuit dispenser assembly"
icon_state = "setup_drone_arms-open"
shell_to_spawn = /obj/structure/dispenser_bot
/obj/item/shell/bci
name = "brain-computer interface assembly"
icon_state = "bci-open"
shell_to_spawn = /obj/item/organ/cyberimp/bci
w_class = WEIGHT_CLASS_TINY
/obj/item/shell/scanner_gate
name = "scanner gate assembly"
icon = 'icons/obj/machines/scangate.dmi'
icon_state = "scangate_black_open"
shell_to_spawn = /obj/structure/scanner_gate_shell