From e3f3426d6cbf57fce38211e7c7a48dff1e69a27c Mon Sep 17 00:00:00 2001 From: OrionTheFox <76465278+OrionTheFox@users.noreply.github.com> Date: Thu, 17 Jul 2025 23:00:12 -0600 Subject: [PATCH] Changes 'beach bar' bitdomain ghost-spawners to be virtual_domain subtypes (#92177) ## About The Pull Request Simple enough. This domain used just plain ghost spawners from the lavaland ruin previously. Now, it has `temp_body = TRUE`, allowing ghosts to return to their original body after leaving the domain _Alongside this it has unique little descriptions to cement it as NPC actors_ This also adds a new `antag` variable to virtual_domain spawners, which decides if they get the hunt-bitrunners antag datum _(default True, in this case False)_
I did notice a few bugs while testing this, namely that temp_body doesn't always work? I'm not coder enough to hunt down why and fix it though... the two cases I noticed will be made into a bug report.
## Why It's Good For The Game It feels weird that there's this temp_body ghost spawner stuff for bitdomains, but it's not used in **all** the bitdomains. They don't last that long, making them permanently kill old bodies feels odd. This also sets up an easy var for other bit ghostroles to use if they aren't explicitly antags hunting bitrunners, and don't need an antag datum. image ## Changelog :cl: qol: made the Beach Bar bitdomain ghostrole spawners keep your old body revivable (as other bitdomain spawners do) /:cl: --- _maps/virtual_domains/beach_bar.dmm | 6 ++--- code/modules/bitrunning/spawners.dm | 39 ++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index b7d2e72ff6e..b81ec5224f4 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -648,7 +648,7 @@ /area/virtual_domain/fullbright) "CA" = ( /obj/structure/window/reinforced/spawner/directional/east, -/obj/effect/mob_spawn/ghost_role/human/beach/lifeguard, +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach/lifeguard, /turf/open/floor/wood, /area/virtual_domain/fullbright) "CO" = ( @@ -875,7 +875,7 @@ /turf/open/floor/light/colour_cycle/dancefloor_a, /area/virtual_domain/fullbright) "OE" = ( -/obj/effect/mob_spawn/ghost_role/human/beach{ +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach{ dir = 4 }, /turf/open/floor/wood, @@ -906,7 +906,7 @@ /area/virtual_domain/fullbright) "Pg" = ( /obj/structure/sign/poster/official/high_class_martini/directional/west, -/obj/effect/mob_spawn/ghost_role/human/bartender{ +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach/bartender{ dir = 4 }, /turf/open/floor/wood, diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm index 3ae116a4d71..06eccfdcd60 100644 --- a/code/modules/bitrunning/spawners.dm +++ b/code/modules/bitrunning/spawners.dm @@ -5,6 +5,8 @@ you_are_text = "You are NOT supposed to be here. How did you let this happen?" important_text = "Bitrunning is a crime, and your primary threat." temp_body = TRUE + ///Does this bit-entity get an antag datum with the goal of hunting bitrunners? TRUE by default + var/antag = TRUE /obj/effect/mob_spawn/ghost_role/human/virtual_domain/special(mob/living/spawned_mob, mob/mob_possessor) @@ -14,14 +16,42 @@ ..() - spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor) - + if(antag) + spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor) /// Simulates a ghost role spawn without calling special(), ie a bitrunner spawn instead of a ghost. /obj/effect/mob_spawn/ghost_role/human/virtual_domain/proc/artificial_spawn(mob/living/runner) SEND_SIGNAL(src, COMSIG_BITRUNNER_SPAWNED, runner) +//Beach Bums (Friendly) +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach + prompt_name = "a virtual beach bum" + name = "virtual beach bum sleeper" + you_are_text = "You're, like, totally a virtual simulation of a dudebro, bruh." + flavour_text = "Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot e-chicks, y'knaw?" + important_text = "You have no qualms with Bitrunning: in fact, you aren't even aware you're in a simulation." + outfit = /datum/outfit/beachbum + spawner_job_path = /datum/job/beach_bum + antag = FALSE +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach/lifeguard + name = "virtual lifeguard sleeper" + you_are_text = "You are a spunky virtual lifeguard!" + flavour_text = "It's up to you to make sure nobody lags or gets eaten by malware and stuff." + outfit = /datum/outfit/beachbum/lifeguard + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach/lifeguard/special(mob/living/carbon/human/lifeguard, mob/mob_possessor) + . = ..() + lifeguard.gender = FEMALE + lifeguard.update_body() + +/obj/effect/mob_spawn/ghost_role/human/virtual_domain/beach/bartender + name = "virtual bartender sleeper" + you_are_text = "You are a virtual beach bartender!" + flavour_text = "Your job is to keep the virtually rendered drinks coming, and help the dudebros engage drunkness simulations." + outfit = /datum/outfit/spacebartender + +//Skeleton Pirates /obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate name = "Virtual Pirate Remains" desc = "Some inanimate bones. They feel like they could spring to life at any moment!" @@ -42,12 +72,11 @@ head = /obj/item/clothing/head/costume/pirate/bandana/armored shoes = /obj/item/clothing/shoes/pirate/armored - /obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate/special(mob/living/spawned_mob, mob/mob_possessor) . = ..() spawned_mob.fully_replace_character_name(spawned_mob.real_name, "[pick(strings(PIRATE_NAMES_FILE, "generic_beginnings"))][pick(strings(PIRATE_NAMES_FILE, "generic_endings"))]") - +//Syndicate /obj/effect/mob_spawn/ghost_role/human/virtual_domain/syndie name = "Virtual Syndicate Sleeper" icon = 'icons/obj/machines/sleeper.dmi' @@ -58,7 +87,6 @@ outfit = /datum/outfit/virtual_syndicate spawner_job_path = /datum/job/space_syndicate - /datum/outfit/virtual_syndicate name = "Virtual Syndie" id = /obj/item/card/id/advanced/chameleon @@ -69,6 +97,5 @@ shoes = /obj/item/clothing/shoes/combat implants = list(/obj/item/implant/weapons_auth) - /datum/outfit/virtual_syndicate/post_equip(mob/living/carbon/human/user, visuals_only) user.faction |= ROLE_SYNDICATE