Bitrunning: Tweaks, QoL and removals (#84125)

## About The Pull Request

See changelog for shortlist

1. **Threat changes.** I was a bit unsatisfied with the rate of antag
spawns. These have been increased considerably. The clamped probability
has been increased from 1-10 to 5-15. The probability increases from 5
to 15 as domains are completed. Generally, in a standard round, the
chance of spawning at least one antag should be around ~50% at 7 domains
completed. Emagging a server doubles this rate.
2. **Map changes.** Starfront saloon was a cool idea on paper: A totally
modular map. However, it looked very uninspired and was so much of a
chore on the map loading system that it prompted players to admin help
how long it took, thinking it was broken. I've removed the map. I have
others I want to implement that don't look so bad.
3. **QoL changes**. Ghost observer experience is improved. Previously,
you could click netpods to view their avatar, and now you can click the
hololadder to return. I've included examine text to show this. The
server's examine text will now also give you clues that it's emagged
(ghost only). The examine text on hololadders has also been improved.
4. **Bitrunning antags.** These were designed as temporary, but they
were everything but. Spawning as one would prevent your revival, which
just isn't a good tradeoff for something that's going to get deleted in
a minute. Now, this system uses temp bodies just like CTF, so you can
return once you're dead. (exception: coming station side)
5. **Maps**: Syndicate assault is still one of my favorites, but there's
cheesy exploits like instantly breaking the display case to lock down
the ship, turning on turrets which are EXTRA lethal, etc. I've added
some pistols to the closets and removed some of these exploits.
6. **Cooldown**: Yes, no one seems to upgrade these ever, and it proved
a poor technique to encourage bitrunners to leave their rooms. I had
other plans to encourage this, not included here, so I think lowering
the cooldown time is beneficial. 3min -> 2min

> [!NOTE]
> File diff: removed a map

## Why It's Good For The Game
Closes #83787
General updates and QoL for bitrunning to keep it fresh. I was quite
disappointed with the scaling of threat, and most players haven't even
seen bitrunning antags except when I admin spawn them. These numbers
aren't hard set in my mind, and could be adjusted.

I generally want bitrunning easier to access and more "temporary" which
is in keeping with its design doc.
## Changelog
🆑
fix: Bitrunning made more illegal: Increased the rate at which antags
spawn.
fix: "Temporary" bitrunning antagonists and spawners are made actually
temporary. You will return to your original body after death, just like
CTF.
add: Added more examine text for ghosts to bitrunning equipment.
balance: Server cooldown reduced by 1 minute at base level.
add: As an observer, you can now switch views between station and
virtual domain by clicking the hololadder and netpod respectively.
del: Removed the starfront saloon BR map.
fix: Syndicate assault map: Added pistols, reduced exploits.
/🆑
This commit is contained in:
Jeremiah
2024-06-21 22:39:44 -04:00
committed by GitHub
parent 2f2b74338c
commit 1116f150eb
16 changed files with 156 additions and 1896 deletions
+20 -11
View File
@@ -19,7 +19,7 @@
/// Prevents multiple user actions. Handled by loading domains and cooldowns
var/is_ready = TRUE
/// Chance multipled by threat to spawn a glitch
var/glitch_chance = 0.05
var/glitch_chance = 0.2
/// Current plugged in users
var/list/datum/weakref/avatar_connection_refs = list()
/// Cached list of mutable mobs in zone for cybercops
@@ -37,11 +37,13 @@
/// Changes how much info is available on the domain
var/scanner_tier = 1
/// Length of time it takes for the server to cool down after resetting. Here to give runners downtime so their faces don't get stuck like that
var/server_cooldown_time = 3 MINUTES
var/server_cooldown_time = 2 MINUTES
/// Applies bonuses to rewards etc
var/servo_bonus = 0
/// Determines the glitches available to spawn, builds with completion
var/threat = 0
/// Maximum rate at which a glitch can spawn
var/threat_prob_max = 15
/// The turfs we can place a hololadder on.
var/turf/exit_turfs = list()
/// Determines if we broadcast to entertainment monitors or not
@@ -76,15 +78,18 @@
. += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.")
if(capacitor_coefficient < 1)
. += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
. += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
if(servo_bonus > 0.2)
. += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.")
. += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.")
. += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.")
. += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.")
if(!is_ready)
. += span_notice("It is currently cooling down. Give it a few moments.")
if(isobserver(user) && (obj_flags & EMAGGED))
. += span_notice("Ominous warning lights are blinking red. This server has been tampered with.")
/obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card)
. = ..()
@@ -92,7 +97,8 @@
return
obj_flags |= EMAGGED
glitch_chance = 0.09
glitch_chance *= 2
threat_prob_max *= 2
add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay"))
balloon_alert(user, "system jailbroken...")
@@ -116,11 +122,14 @@
/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params)
. = ..()
if(istype(weapon, /obj/item/bitrunning_debug))
obj_flags |= EMAGGED
glitch_chance = 0.5
capacitor_coefficient = 0.01
points = 100
if(!istype(weapon, /obj/item/bitrunning_debug))
return
obj_flags |= EMAGGED
glitch_chance = 0.5
capacitor_coefficient = 0.1
points = 100
/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar)
. = ..()
@@ -55,7 +55,8 @@
is_ready = TRUE
if(prob(clamp((threat * glitch_chance), 1, 10)))
var/spawn_chance = clamp((threat * glitch_chance), 5, threat_prob_max)
if(prob(spawn_chance))
setup_glitch()
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE)
@@ -110,7 +110,7 @@
if(isnull(destination))
return
var/obj/structure/hololadder/wayout = new(destination)
var/obj/structure/hololadder/wayout = new(destination, src)
if(isnull(wayout))
return
+24 -12
View File
@@ -71,6 +71,8 @@
var/datum/antagonist/bitrunning_glitch/chosen_role = forced_role || get_antagonist_role()
var/role_name = initial(chosen_role.name)
var/mob/chosen_one = SSpolling.poll_ghosts_for_target(
question = "<span class='ooc'>A temporary antagonist role is spawning in the virtual domain.</span>\
\n<span class='boldnotice'>You will return to your previous body on conclusion.</span>",
check_jobban = ROLE_GLITCH,
poll_time = 20 SECONDS,
checked_target = mutation_target,
@@ -92,26 +94,32 @@
return
var/role_name = initial(chosen_role.name)
var/mob/living/antag_mob
var/mob/living/new_mob
switch(role_name)
if(ROLE_NETGUARDIAN)
antag_mob = new /mob/living/basic/netguardian(mutation_target.loc)
new_mob = new /mob/living/basic/netguardian(mutation_target.loc)
else // any other humanoid mob
antag_mob = new /mob/living/carbon/human(mutation_target.loc)
new_mob = new /mob/living/carbon/human(mutation_target.loc)
mutation_target.gib(DROP_ALL_REMAINS)
antag_mob.key = ghost.key
var/datum/mind/ghost_mind = antag_mob.mind
ghost_mind.add_antag_datum(chosen_role)
ghost_mind.special_role = ROLE_GLITCH
ghost_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
var/datum/mind/ghost_mind = ghost.mind
new_mob.key = ghost.key
playsound(antag_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
message_admins("[ADMIN_LOOKUPFLW(antag_mob)] has been made into virtual antagonist by an event.")
antag_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
if(ghost_mind?.current)
new_mob.AddComponent(/datum/component/temporary_body, ghost_mind, ghost_mind.current, TRUE)
add_threats(antag_mob)
var/datum/mind/antag_mind = new_mob.mind
antag_mind.add_antag_datum(chosen_role)
antag_mind.special_role = ROLE_GLITCH
antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch))
playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE)
message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.")
new_mob.log_message("was spawned as a virtual antagonist by an event.", LOG_GAME)
add_threats(new_mob)
/// Oh boy - transports the antag station side
/obj/machinery/quantum_server/proc/station_spawn(mob/living/antag, obj/machinery/byteforge/chosen_forge)
@@ -151,6 +159,10 @@
if(istype(antag_datum))
antag_datum.show_in_roundend = TRUE
var/datum/component/temp_body = antag.GetComponent(/datum/component/temporary_body)
if(temp_body)
qdel(temp_body)
do_teleport(antag, get_turf(chosen_forge), forced = TRUE, asoundin = 'sound/magic/ethereal_enter.ogg', asoundout = 'sound/magic/ethereal_exit.ogg', channel = TELEPORT_CHANNEL_QUANTUM)
/// Removes any invalid candidates from the list