Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-04a

This commit is contained in:
Waterpig
2025-04-08 18:58:45 +02:00
1089 changed files with 42417 additions and 34460 deletions
@@ -11,7 +11,7 @@
convert_agent()
var/datum/martial_art/the_sleeping_carp/carp = new()
var/datum/martial_art/the_sleeping_carp/carp = new(src)
carp.teach(owner.current)
/datum/outfit/cyber_police
@@ -37,4 +37,3 @@
officer_uniform.has_sensor = NO_SENSORS
officer_uniform.sensor_mode = SENSOR_OFF
user.update_suit_sensors()
@@ -222,7 +222,7 @@
//if your bitrunning avatar somehow manages to acquire and consume a red pill, they will be ejected from the Matrix
/datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/pill/pill, mob/feeder)
/datum/component/avatar_connection/proc/disconnect_if_red_pill(datum/source, obj/item/reagent_containers/applicator/pill/pill, mob/feeder)
SIGNAL_HANDLER
if(pill.icon_state == "pill4")
full_avatar_disconnect()
@@ -7,7 +7,6 @@
/datum/component/bitrunning_points/Initialize(datum/lazy_template/virtual_domain/domain)
. = ..()
if(!isturf(parent))
return COMPONENT_INCOMPATIBLE
@@ -1,19 +1,35 @@
/// Handles all special considerations for "virtual entities" such as bitrunning ghost roles or digital anomaly antagonists.
/datum/component/virtual_entity
///The cooldown for balloon alerts, so the player isn't spammed while trying to enter a restricted area.
/// The cooldown for balloon alerts, so the player isn't spammed while trying to enter a restricted area.
COOLDOWN_DECLARE(OOB_cooldown)
/datum/component/virtual_entity/Initialize(obj/machinery/quantum_server)
. = ..()
/datum/component/virtual_entity/Initialize(obj/machinery/quantum_server)
if(quantum_server.obj_flags & EMAGGED)
jailbreak_mobs() //This just sends a message and self-deletes, a bit messy but it works.
return
jailbreak_mobs()
return COMPONENT_REDUNDANT
RegisterSignal(parent, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_parent_pre_move))
RegisterSignal(quantum_server, COMSIG_ATOM_EMAG_ACT, PROC_REF(jailbreak_mobs))
RegisterSignal(quantum_server, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emagged))
///Prevents entry to a certain area if it has flags preventing virtual entities from entering.
/// Self-destructs the component, allowing free-roam by all entities with this restriction.
/datum/component/virtual_entity/proc/jailbreak_mobs()
to_chat(parent, span_bolddanger("You shiver for a moment with a sense of clarity you haven't felt before."))
to_chat(parent, span_notice("You could go <i>anywhere</i>, do <i>anything</i>! You could leave this simulation right now if you wanted!"))
to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives."))
to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back."))
/// Remove any restrictions AFTER the mob has spawned
/datum/component/virtual_entity/proc/on_emagged(datum/source)
SIGNAL_HANDLER
jailbreak_mobs()
qdel(src)
/// Prevents entry to a certain area if it has flags preventing virtual entities from entering.
/datum/component/virtual_entity/proc/on_parent_pre_move(atom/movable/source, atom/new_location)
SIGNAL_HANDLER
@@ -27,12 +43,3 @@
COOLDOWN_START(src, OOB_cooldown, 2 SECONDS)
return COMPONENT_MOVABLE_BLOCK_PRE_MOVE
///Self-destructs the component, allowing free-roam by all entities with this restriction.
/datum/component/virtual_entity/proc/jailbreak_mobs()
SIGNAL_HANDLER
to_chat(parent, span_bolddanger("You shiver for a moment with a sense of clarity you haven't felt before."))
to_chat(parent, span_notice("You could go <i>anywhere</i>, do <i>anything</i>! You could leave this simulation right now if you wanted!"))
to_chat(parent, span_danger("But be warned, quantum entanglement will interfere with any previous lives."))
to_chat(parent, span_notice("You'll have just one chance to go nova, and there's no turning back."))
qdel(src)
@@ -77,6 +77,7 @@
hidden = TRUE
crate_name = "bitrunning delivery crate"
access = list(ACCESS_BIT_DEN)
test_ignored = TRUE
/datum/supply_pack/bitrunning/New(purchaser, cost, list/contains)
. = ..()
+11 -3
View File
@@ -49,20 +49,21 @@
/// Cooldown between being able to toggle broadcasting
COOLDOWN_DECLARE(broadcast_toggle_cd)
/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)
. = ..()
/obj/machinery/quantum_server/Destroy(force)
mutation_candidate_refs.Cut()
avatar_connection_refs.Cut()
spawned_threat_refs.Cut()
QDEL_NULL(exit_turfs)
exit_turfs.Cut()
QDEL_NULL(generated_domain)
return ..()
/obj/machinery/quantum_server/examine(mob/user)
. = ..()
@@ -88,6 +89,7 @@
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)
. = ..()
@@ -102,6 +104,7 @@
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)
@@ -110,6 +113,7 @@
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
@@ -118,6 +122,7 @@
icon_state = "[base_icon_state]_[is_ready ? "on" : "off"]"
return ..()
/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, params)
. = ..()
@@ -129,6 +134,7 @@
capacitor_coefficient = 0.1
points = 100
/obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar)
. = ..()
@@ -142,6 +148,7 @@
return TRUE
return FALSE
/obj/machinery/quantum_server/screwdriver_act(mob/living/user, obj/item/screwdriver)
. = ..()
@@ -152,6 +159,7 @@
return TRUE
return FALSE
/obj/machinery/quantum_server/RefreshParts()
var/capacitor_rating = 1.15
var/datum/stock_part/capacitor/cap = locate() in component_parts
@@ -21,7 +21,7 @@
if(!length(possible_turfs)) // Out of turfs to place a curiosity
return FALSE
if(generated_domain.secondary_loot_generated >= assoc_value_sum(generated_domain.secondary_loot)) // Out of curiosities to place
if(generated_domain.secondary_loot_generated >= counterlist_sum(generated_domain.secondary_loot)) // Out of curiosities to place
return FALSE
shuffle_inplace(possible_turfs)