mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-17 18:19:16 +01:00
+37






![tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>](/assets/img/avatar_default.png)


Alexis
GitHub
tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
ArcaneMusic
MrMelbert
Rhials
rageguy505
LemonInTheDark
John Willard
Aliceee2ch
Time-Green
Tsar-Salat
SmArtKar
Maxipat
SyncIt21
deltanedas
SimplyLogan
loganuk
Leland Kemble
FalloutFalcon
Roxy
Lucy
siliconOpossum
Isratosh
TheRyeGuyWhoWillNowDie
Neocloudy
Alexander V.
ElGitificador
Twaticus
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bloop
Cameron Lennox
Tim
Iamgoofball
Layzu666
Arturlang
_0Steven
mrmanlikesbt
Ben10Omintrix
John F. Kennedy
Cursor
Josh
Josh Powell
Yobrocharlie
Hardly3D
shayoki
LT3
21b4095dfd
Upstream 04/17/2026 fixes https://github.com/Bubberstation/Bubberstation/issues/5549 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: loganuk <fakeemail123@aol.com> Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com> Co-authored-by: Isratosh <Isratosh@hotmail.com> Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com> Co-authored-by: Alexander V. <volas@ya.ru> Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Tim <timothymtorres@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com> Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com> Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com> Co-authored-by: Josh <josh.adam.powell@gmail.com> Co-authored-by: Josh Powell <josh.powell@softwire.com> Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com> Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com> Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
202 lines
6.9 KiB
Plaintext
202 lines
6.9 KiB
Plaintext
/**
|
|
* The base object for the quantum server
|
|
*/
|
|
/obj/machinery/quantum_server
|
|
name = "quantum server"
|
|
|
|
circuit = /obj/item/circuitboard/machine/quantum_server
|
|
density = TRUE
|
|
desc = "A hulking computational machine designed to fabricate virtual domains."
|
|
icon = 'icons/obj/machines/bitrunning.dmi'
|
|
base_icon_state = "qserver"
|
|
icon_state = "qserver"
|
|
/// Affects server cooldown efficiency
|
|
var/capacitor_coefficient = 1
|
|
/// The loaded map template, map_template/virtual_domain
|
|
var/datum/lazy_template/virtual_domain/generated_domain
|
|
/// If the current domain was a random selection
|
|
var/domain_randomized = FALSE
|
|
/// 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.2
|
|
/// Current plugged in users
|
|
var/list/datum/weakref/avatar_connection_refs = list()
|
|
/// Cached list of mutable mobs in zone for cybercops
|
|
var/list/datum/weakref/mutation_candidate_refs = list()
|
|
/// Any ghosts that have spawned in
|
|
var/list/datum/weakref/spawned_threat_refs = list()
|
|
/// Scales loot with extra players
|
|
var/multiplayer_bonus = 1.1
|
|
/// Extra bonus for every player that nohits the run
|
|
var/nohit_bonus = 0.8
|
|
/// The amount of points in the system, used to purchase maps
|
|
var/points = 0
|
|
/// Keeps track of the number of times someone has built a hololadder
|
|
var/retries_spent = 0
|
|
/// 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 = 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/list/turf/exit_turfs = list()
|
|
/// Determines if we broadcast to entertainment monitors or not
|
|
var/broadcasting = FALSE
|
|
/// Cooldown between being able to toggle broadcasting
|
|
COOLDOWN_DECLARE(broadcast_toggle_cd)
|
|
/// Cooldown for how often you're allowed to harass deadchat for PVP domains
|
|
COOLDOWN_DECLARE(polling_cooldown)
|
|
|
|
/obj/machinery/quantum_server/Initialize(mapload)
|
|
. = ..()
|
|
register_context()
|
|
|
|
/obj/machinery/quantum_server/post_machine_initialize()
|
|
. = ..()
|
|
|
|
RegisterSignals(src, list(COMSIG_MACHINERY_BROKEN, COMSIG_MACHINERY_POWER_LOST), PROC_REF(on_broken))
|
|
RegisterSignal(src, COMSIG_QDELETING, PROC_REF(on_delete))
|
|
|
|
/obj/machinery/quantum_server/Destroy(force)
|
|
mutation_candidate_refs.Cut()
|
|
avatar_connection_refs.Cut()
|
|
spawned_threat_refs.Cut()
|
|
exit_turfs.Cut()
|
|
QDEL_NULL(generated_domain)
|
|
return ..()
|
|
|
|
/obj/machinery/quantum_server/add_context(atom/source, list/context, obj/item/held_item, mob/user)
|
|
. = NONE
|
|
if(isnull(held_item))
|
|
return
|
|
|
|
if(held_item.tool_behaviour == TOOL_SCREWDRIVER)
|
|
context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] Panel"
|
|
return CONTEXTUAL_SCREENTIP_SET
|
|
else if(held_item.tool_behaviour == TOOL_CROWBAR && panel_open)
|
|
context[SCREENTIP_CONTEXT_LMB] = "Deconstruct"
|
|
return CONTEXTUAL_SCREENTIP_SET
|
|
|
|
/obj/machinery/quantum_server/examine(mob/user)
|
|
. = ..()
|
|
|
|
. += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.")
|
|
|
|
. += span_notice("Its maintenance panel can be [EXAMINE_HINT("screwed")] [panel_open ? "close" : "open"].")
|
|
if(panel_open)
|
|
. += span_notice("It can be [EXAMINE_HINT("pried")] apart.")
|
|
|
|
var/upgraded = FALSE
|
|
if(capacitor_coefficient < 1)
|
|
. += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
|
|
upgraded = TRUE
|
|
|
|
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]%.")
|
|
upgraded = TRUE
|
|
|
|
if(!upgraded)
|
|
. += span_notice("Its output is suboptimal. Improved components will grant domain information, reduce cooldowns and increase rewards.")
|
|
|
|
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)
|
|
. = ..()
|
|
|
|
if(obj_flags & EMAGGED)
|
|
return
|
|
|
|
obj_flags |= EMAGGED
|
|
glitch_chance *= 2
|
|
threat_prob_max *= 2
|
|
|
|
add_overlay(mutable_appearance('icons/obj/machines/bitrunning.dmi', "emag_overlay"))
|
|
balloon_alert(user, "system jailbroken...")
|
|
playsound(src, 'sound/effects/sparks/sparks1.ogg', 35, vary = TRUE)
|
|
|
|
|
|
/obj/machinery/quantum_server/update_appearance(updates)
|
|
if(isnull(generated_domain) || !is_operational)
|
|
set_light(l_on = FALSE)
|
|
return ..()
|
|
|
|
set_light(l_range = 2, l_power = 1.5, l_color = is_ready ? LIGHT_COLOR_BABY_BLUE : LIGHT_COLOR_FIRE, l_on = TRUE)
|
|
return ..()
|
|
|
|
|
|
/obj/machinery/quantum_server/update_icon_state()
|
|
if(isnull(generated_domain) || !is_operational)
|
|
icon_state = base_icon_state
|
|
return ..()
|
|
if(panel_open)
|
|
icon_state = "[base_icon_state]_panel"
|
|
return ..()
|
|
|
|
icon_state = "[base_icon_state]_[is_ready ? "on" : "off"]"
|
|
return ..()
|
|
|
|
|
|
/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
|
if(!istype(tool, /obj/item/bitrunning_debug))
|
|
return NONE
|
|
|
|
balloon_alert(user, "*hacker voice* i'm in")
|
|
obj_flags |= EMAGGED
|
|
glitch_chance = 0.5
|
|
capacitor_coefficient = 0.1
|
|
points = 100
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar)
|
|
if(!is_ready)
|
|
balloon_alert(user, "it's scalding hot!")
|
|
return ITEM_INTERACT_FAILURE
|
|
if(length(avatar_connection_refs))
|
|
balloon_alert(user, "all clients must disconnect!")
|
|
return ITEM_INTERACT_FAILURE
|
|
return default_deconstruction_crowbar(user, crowbar)
|
|
|
|
/obj/machinery/quantum_server/screwdriver_act(mob/living/user, obj/item/screwdriver)
|
|
if(!is_ready)
|
|
balloon_alert(user, "it's scalding hot!")
|
|
return ITEM_INTERACT_FAILURE
|
|
return default_deconstruction_screwdriver(user, screwdriver)
|
|
|
|
/obj/machinery/quantum_server/RefreshParts()
|
|
var/capacitor_rating = 1.15
|
|
var/datum/stock_part/capacitor/cap = locate() in component_parts
|
|
capacitor_rating -= cap.tier * 0.15
|
|
|
|
capacitor_coefficient = capacitor_rating
|
|
|
|
var/datum/stock_part/scanning_module/scanner = locate() in component_parts
|
|
if(scanner)
|
|
scanner_tier = scanner.tier
|
|
|
|
var/servo_rating = 0
|
|
for(var/datum/stock_part/servo/servo in component_parts)
|
|
servo_rating += servo.tier * 0.1
|
|
|
|
servo_bonus = servo_rating
|
|
|
|
return ..()
|
|
|
|
/datum/aas_config_entry/bitrunning_QS_ready_announcement
|
|
name = "Cargo Alert: Bitrunning QS Ready"
|
|
general_tooltip = "Announces when the quantum server is ready to be used. No variables provided"
|
|
announcement_lines_map = list(
|
|
"Message" = "Quantum Server report: Thermal systems within operational parameters. Proceeding to domain configuration."
|
|
)
|