mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-27 23:27:34 +01:00
Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12
This commit is contained in:
@@ -72,7 +72,7 @@
|
||||
|
||||
use_delay = (world.time + abductor_pad_cooldown)
|
||||
|
||||
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
||||
if(SScameras.is_visible_by_cameras(remote_eye.loc))
|
||||
P.PadToLoc(remote_eye.loc)
|
||||
|
||||
/datum/action/innate/teleport_out
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
use_delay = (world.time + teleport_self_cooldown)
|
||||
|
||||
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
|
||||
if(SScameras.is_visible_by_cameras(remote_eye.loc))
|
||||
P.MobToLoc(remote_eye.loc,C)
|
||||
|
||||
/datum/action/innate/vest_mode_swap
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
/// Makes the user harder to see in the dark (and makes the user see in the dark easier)
|
||||
/datum/status_effect/darkness_adapted
|
||||
id = "darkness_adapted"
|
||||
tick_interval = 0.5 SECONDS
|
||||
tick_interval = 0.6 SECONDS
|
||||
alert_type = null
|
||||
/// Threshold before the dark color is applied
|
||||
var/dark_color_threshold = 70
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
user.balloon_alert(user, "throat is sore!")
|
||||
return FALSE
|
||||
//BUBBER EDIT: NO PULSE IF YOU'RE ON COOLDOWN
|
||||
empulse(get_turf(user), 2, 5, 1)
|
||||
empulse(get_turf(user), 2, 5, 1, emp_source = src)
|
||||
for(var/obj/machinery/light/L in range(5, usr))
|
||||
L.on = TRUE
|
||||
L.break_light_tube()
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
owner.whisper(invocation, language = /datum/language/common, forced = "cult invocation")
|
||||
owner.visible_message(span_warning("[owner]'s hand flashes a bright blue!"), \
|
||||
span_cult_italic("You speak the cursed words, emitting an EMP blast from your hand."))
|
||||
empulse(owner, 2, 5)
|
||||
empulse(owner, 2, 5, emp_source = src)
|
||||
charges--
|
||||
SSblackbox.record_feedback("tally", "cult_spell_invoke", 1, "[name]")
|
||||
if(charges <= 0)
|
||||
|
||||
@@ -1170,7 +1170,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
|
||||
|
||||
for(var/mob/living/target in range(src, 3))
|
||||
target.Paralyze(30)
|
||||
empulse(T, 0.42*(intensity), 1)
|
||||
empulse(T, 0.42*(intensity), 1, emp_source = src)
|
||||
|
||||
var/list/images = list()
|
||||
for(var/mob/living/M in GLOB.alive_mob_list)
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc)
|
||||
var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user)
|
||||
var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user)
|
||||
if(our_heretic && our_heretic.unlimited_blades)
|
||||
if(length(result_atoms & typesof(/obj/item/melee/sickly_blade)))
|
||||
return TRUE
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
return .
|
||||
|
||||
/obj/item/melee/sickly_blade/attack_self(mob/user)
|
||||
var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
|
||||
var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user)
|
||||
if(heretic_datum?.unlimited_blades)
|
||||
return
|
||||
if(HAS_TRAIT(user, TRAIT_ELDRITCH_ARENA_PARTICIPANT))
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
/// Attempts to teleport the passed mob to somewhere safe on the station, if they can use the blade.
|
||||
/obj/item/melee/sickly_blade/proc/seek_safety(mob/user)
|
||||
var/turf/safe_turf = find_safe_turf(zlevels = z, extended_safety_checks = TRUE)
|
||||
var/turf/safe_turf = find_safe_turf(z, extended_safety_checks = TRUE)
|
||||
if(check_usability(user))
|
||||
if(do_teleport(user, safe_turf, channel = TELEPORT_CHANNEL_MAGIC))
|
||||
to_chat(user, span_warning("As you shatter [src], you feel a gust of energy flow through your body. [after_use_message]"))
|
||||
@@ -168,7 +168,7 @@
|
||||
. = ..()
|
||||
if(!infused || target == user || !isliving(target))
|
||||
return
|
||||
var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user)
|
||||
var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user)
|
||||
var/mob/living/living_target = target
|
||||
if(!heretic_datum)
|
||||
return
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
|
||||
|
||||
for(var/mob/living/carbon/human/human_in_range in view(local_user))
|
||||
if(IS_HERETIC_OR_MONSTER(human_in_range) || human_in_range.is_blind())
|
||||
if(IS_HERETIC_OR_MONSTER(human_in_range) || human_in_range.stat > SOFT_CRIT || human_in_range.is_blind())
|
||||
continue
|
||||
|
||||
if(human_in_range.can_block_magic(MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND))
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"Use your labyrinth book to shake off pursuers. It creates impassible walls to anyone but you.",
|
||||
)
|
||||
|
||||
start = /datum/heretic_knowledge/limited_amount/starting/base_knock
|
||||
start = /datum/heretic_knowledge/limited_amount/starting/base_lock
|
||||
knowledge_tier1 = /datum/heretic_knowledge/key_ring
|
||||
guaranteed_side_tier1 = /datum/heretic_knowledge/painting
|
||||
knowledge_tier2 = /datum/heretic_knowledge/limited_amount/concierge_rite
|
||||
@@ -44,7 +44,7 @@
|
||||
knowledge_tier4 = /datum/heretic_knowledge/spell/caretaker_refuge
|
||||
ascension = /datum/heretic_knowledge/ultimate/lock_final
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_knock
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_lock
|
||||
name = "A Steward's Secret"
|
||||
desc = "Opens up the Path of Lock to you. \
|
||||
Allows you to transmute a knife and a crowbar into a Key Blade. \
|
||||
@@ -62,26 +62,28 @@
|
||||
mark_type = /datum/status_effect/eldritch/lock
|
||||
eldritch_passive = /datum/status_effect/heretic_passive/lock
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_knock/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_lock/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
. = ..()
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp))
|
||||
var/datum/action/cooldown/spell/touch/mansus_grasp/grasp_spell = locate() in user.actions
|
||||
grasp_spell?.invocation_type = INVOCATION_NONE
|
||||
grasp_spell?.sound = null
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_knock/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_lock/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
. = ..()
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY)
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_knock/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_lock/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
. = ..()
|
||||
|
||||
var/obj/item/clothing/under/suit = target.get_item_by_slot(ITEM_SLOT_ICLOTHING)
|
||||
if(!suit.can_adjust)
|
||||
return
|
||||
if(istype(suit) && suit.adjusted == NORMAL_STYLE)
|
||||
suit.toggle_jumpsuit_adjust()
|
||||
suit.update_appearance()
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_knock/proc/on_secondary_mansus_grasp(mob/living/source, atom/target)
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_lock/proc/on_secondary_mansus_grasp(mob/living/source, atom/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(ismecha(target))
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_moon/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
. = ..()
|
||||
ADD_TRAIT(user, TRAIT_EMPATH, REF(src))
|
||||
user.AddComponentFrom(REF(src), /datum/component/empathy, seen_it = TRUE, visible_info = ALL, self_empath = FALSE, sense_dead = FALSE, sense_whisper = TRUE, smite_target = FALSE)
|
||||
|
||||
/datum/heretic_knowledge/limited_amount/starting/base_moon/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
. = ..()
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
id = "fire_blasted"
|
||||
alert_type = null
|
||||
duration = 5 SECONDS
|
||||
tick_interval = 0.5 SECONDS
|
||||
tick_interval = 0.6 SECONDS
|
||||
/// How much fire / stam to do per tick (stamina damage is doubled this)
|
||||
var/tick_damage = 1
|
||||
/// How long does the animation of the appearance last? If 0 or negative, we make no overlay
|
||||
|
||||
@@ -704,8 +704,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf))
|
||||
var/turf/T = turfs[n]
|
||||
if(!isfloorturf(T))
|
||||
success = FALSE
|
||||
var/datum/camerachunk/C = GLOB.cameranet.getCameraChunk(T.x, T.y, T.z)
|
||||
if(!C.visibleTurfs[T])
|
||||
if(!SScameras.is_visible_by_cameras(T))
|
||||
alert_msg = "You don't have camera vision of this location!"
|
||||
success = FALSE
|
||||
for(var/atom/movable/AM in T.contents)
|
||||
@@ -830,7 +829,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf))
|
||||
|
||||
/datum/action/innate/ai/reactivate_cameras/Activate()
|
||||
var/fixed_cameras = 0
|
||||
for(var/obj/machinery/camera/C as anything in GLOB.cameranet.cameras)
|
||||
for(var/obj/machinery/camera/C as anything in SScameras.cameras)
|
||||
if(!uses)
|
||||
break
|
||||
if(!C.camera_enabled || C.view_range != initial(C.view_range))
|
||||
@@ -862,13 +861,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf))
|
||||
AI.update_sight()
|
||||
|
||||
var/upgraded_cameras = 0
|
||||
for(var/obj/machinery/camera/camera as anything in GLOB.cameranet.cameras)
|
||||
for(var/obj/machinery/camera/camera as anything in SScameras.cameras)
|
||||
var/upgraded = FALSE
|
||||
|
||||
if(!camera.isXRay())
|
||||
camera.upgradeXRay(TRUE) //if this is removed you can get rid of camera_assembly/var/malf_xray_firmware_active and clean up isxray()
|
||||
//Update what it can see.
|
||||
GLOB.cameranet.updateVisibility(camera, 0)
|
||||
upgraded = TRUE
|
||||
|
||||
if(!camera.isEmpProof())
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
|
||||
var/should_attack = try_kidnap(hewmon)
|
||||
|
||||
// Marks the victim with nodeath
|
||||
hewmon.apply_status_effect(/datum/status_effect/void_chomped)
|
||||
|
||||
if(!should_attack)
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -16,16 +16,17 @@
|
||||
use_user_hud_icon = TRUE
|
||||
overlay_state = "paralysis"
|
||||
|
||||
/datum/status_effect/void_eatered
|
||||
id = "void_eatered"
|
||||
duration = 10 SECONDS
|
||||
/datum/status_effect/void_chomped
|
||||
id = "void_chomped"
|
||||
duration = 15 SECONDS
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
remove_on_fullheal = TRUE
|
||||
alert_type = null
|
||||
|
||||
/datum/status_effect/void_eatered/on_apply()
|
||||
/datum/status_effect/void_chomped/on_apply()
|
||||
. = ..()
|
||||
ADD_TRAIT(owner, TRAIT_NODEATH, TRAIT_STATUS_EFFECT(id))
|
||||
|
||||
/datum/status_effect/void_eatered/on_remove()
|
||||
/datum/status_effect/void_chomped/on_remove()
|
||||
. = ..()
|
||||
REMOVE_TRAIT(owner, TRAIT_NODEATH, TRAIT_STATUS_EFFECT(id))
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
uniform = /obj/item/clothing/under/costume/roman
|
||||
shoes = /obj/item/clothing/shoes/roman
|
||||
back = /obj/item/spear
|
||||
r_hand = /obj/item/claymore
|
||||
belt = /obj/item/storage/belt/sheath/gladius
|
||||
l_hand = /obj/item/shield/roman
|
||||
|
||||
/datum/outfit/roman/pre_equip(mob/living/carbon/human/H, visuals_only)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/action/cooldown/spell/conjure_item/clown_pockets/post_created(atom/cast_on, atom/created)
|
||||
cast_on.visible_message(span_notice("[cast_on] pulls out [created]!"))
|
||||
cast_on.visible_message(span_notice("[cast_on] pulls out [created]!"), span_notice("You pull out [created]!"))
|
||||
|
||||
/datum/action/cooldown/spell/conjure_item/clown_pockets/can_cast_spell(feedback = TRUE)
|
||||
. = ..()
|
||||
@@ -76,7 +76,8 @@
|
||||
/// Prints a funny message, exists so I can override it to print a different message
|
||||
/datum/action/cooldown/spell/conjure_item/clown_pockets/proc/cast_message(mob/cast_on)
|
||||
cast_on.visible_message(span_notice("[cast_on] reaches far deeper into [cast_on.p_their()] pockets than you think \
|
||||
should be possible and starts rummaging around for something."))
|
||||
should be possible and starts rummaging around for something."), span_notice("You reach further down into your \
|
||||
pockets than you ever have before and feel around for something."))
|
||||
|
||||
/// Longer cooldown variant which is attached to the enchanted clown suit
|
||||
/datum/action/cooldown/spell/conjure_item/clown_pockets/enchantment
|
||||
@@ -84,7 +85,8 @@
|
||||
cooldown_time = 60 SECONDS
|
||||
|
||||
/datum/action/cooldown/spell/conjure_item/clown_pockets/enchantment/cast_message(mob/cast_on)
|
||||
cast_on.visible_message(span_notice("[cast_on] starts rummaging around in [cast_on.p_their()] comically large pants."))
|
||||
cast_on.visible_message(span_notice("[cast_on] starts rummaging around in [cast_on.p_their()] comically large pants."), span_notice("You \
|
||||
start rummaging around in your comically large pants."))
|
||||
|
||||
/// Enchanted clown suit
|
||||
/obj/item/clothing/under/rank/civilian/clown/magic
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
/datum/grand_side_effect/emp/trigger(potency, turf/ritual_location, mob/invoker)
|
||||
var/heavy = LERP(0, 3, potency/GRAND_RITUAL_FINALE_COUNT)
|
||||
var/light = LERP(3, 6, potency/GRAND_RITUAL_FINALE_COUNT)
|
||||
empulse(ritual_location, heavy, light)
|
||||
empulse(ritual_location, heavy, light, emp_source = src)
|
||||
|
||||
/// Swap locations of nearby mobs arbitrarily and confuse them
|
||||
/datum/grand_side_effect/translocate
|
||||
|
||||
Reference in New Issue
Block a user