mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-16 20:16:09 +00:00
## About The Pull Request This takes all the gib related procs: - `gib()` - `spawn_gibs()` - `spill_organs()` - `spread_bodyparts()` And adds heavy documentation that communicates what the procs are used for and how the different bitflags affect them. The difference is noticeable: `gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)` The code is now much more legible which is important considering it's used in a lot of places! Another robust change, is that we had several places in the code where there were double negatives like so: ``` /mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts) if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!? // do stuff here ``` This is a mindfuck to untangle. I inverted a lot of these parts so we don't lose our sanity. Last thing that was changed was a big `if()` loop in the `spill_organ()` proc. This was refactored to just be a simple `for` loop with `continue` statements where we needed to skip enabled bitflags. It's now shorter and cleaner than before. The only slight gameplay change this affects is that gibbing a mob now guarantees to drop all items unless the `DROP_ITEMS` bitflag is deliberately omitted. Some places like admin gib self, we don't want this to happen. ## Why It's Good For The Game Gib code is very old. (~15 years) People kept adding more arguments to the procs when it should have been a bitflag initially. By doing it this way, there is more flexibility and readability when it comes to adding new code in the future. ## Changelog 🆑 refactor: Refactor gib code to be more robust. qol: Gibbing a mob will result in all items being dropped instead of getting deleted. There are a few exceptions (like admin gib self) where this will not take place. /🆑
54 lines
1.8 KiB
Plaintext
54 lines
1.8 KiB
Plaintext
/obj/structure/sacrificealtar
|
|
name = "sacrificial altar"
|
|
desc = "An altar designed to perform blood sacrifice for a deity. Alt-click it to sacrifice a buckled creature."
|
|
icon = 'icons/obj/service/hand_of_god_structures.dmi'
|
|
icon_state = "sacrificealtar"
|
|
anchored = TRUE
|
|
density = FALSE
|
|
can_buckle = 1
|
|
|
|
/obj/structure/sacrificealtar/AltClick(mob/living/user)
|
|
..()
|
|
if(!istype(user) || !user.can_perform_action(src))
|
|
return
|
|
if(!has_buckled_mobs())
|
|
return
|
|
var/mob/living/L = locate() in buckled_mobs
|
|
if(!L)
|
|
return
|
|
to_chat(user, span_notice("Invoking the sacred ritual, you sacrifice [L]."))
|
|
L.investigate_log("has been sacrificially gibbed on an altar.", INVESTIGATE_DEATHS)
|
|
L.gib(DROP_ALL_REMAINS)
|
|
message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].")
|
|
|
|
/obj/structure/healingfountain
|
|
name = "healing fountain"
|
|
desc = "A fountain containing the waters of life."
|
|
icon = 'icons/obj/service/hand_of_god_structures.dmi'
|
|
icon_state = "fountain"
|
|
anchored = TRUE
|
|
density = TRUE
|
|
var/time_between_uses = 1800
|
|
var/last_process = 0
|
|
|
|
/obj/structure/healingfountain/attack_hand(mob/living/user, list/modifiers)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(last_process + time_between_uses > world.time)
|
|
to_chat(user, span_notice("The fountain appears to be empty."))
|
|
return
|
|
last_process = world.time
|
|
to_chat(user, span_notice("The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards."))
|
|
user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood,20)
|
|
update_appearance()
|
|
addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, update_appearance)), time_between_uses)
|
|
|
|
|
|
/obj/structure/healingfountain/update_icon_state()
|
|
if(last_process + time_between_uses > world.time)
|
|
icon_state = "fountain"
|
|
else
|
|
icon_state = "fountain-red"
|
|
return ..()
|