mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23
This commit is contained in:
@@ -49,7 +49,7 @@
|
||||
if(!isopenturf(target.loc))
|
||||
return TRUE
|
||||
|
||||
var/can_breathe_vacuum = HAS_TRAIT(target, TRAIT_NO_BREATHLESS_DAMAGE)
|
||||
var/can_breathe_vacuum = HAS_TRAIT(target, TRAIT_NO_BREATHLESS_DAMAGE) || HAS_TRAIT(target, TRAIT_NOBREATH)
|
||||
|
||||
var/min_oxy = can_breathe_vacuum ? 0 : atmos_requirements["min_oxy"]
|
||||
var/min_plasma = can_breathe_vacuum ? 0 : atmos_requirements["min_plas"]
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
var/mob/living/living_mob = target
|
||||
var/gave_alert = FALSE
|
||||
|
||||
if(living_mob.bodytemperature < min_body_temp)
|
||||
if(living_mob.bodytemperature < min_body_temp && !HAS_TRAIT(living_mob, TRAIT_RESISTCOLD))
|
||||
living_mob.adjust_fire_loss(cold_damage * seconds_per_tick, forced = TRUE)
|
||||
if(!living_mob.has_status_effect(/datum/status_effect/inebriated))
|
||||
switch(cold_damage)
|
||||
@@ -61,7 +61,7 @@
|
||||
living_mob.throw_alert(ALERT_TEMPERATURE, /atom/movable/screen/alert/cold, 3)
|
||||
gave_alert = TRUE
|
||||
|
||||
else if(living_mob.bodytemperature > max_body_temp)
|
||||
else if(living_mob.bodytemperature > max_body_temp && !HAS_TRAIT(living_mob, TRAIT_RESISTHEAT))
|
||||
living_mob.adjust_fire_loss(heat_damage * seconds_per_tick, forced = TRUE)
|
||||
switch(heat_damage)
|
||||
if(1 to 5)
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
/**
|
||||
* # Cult halo element
|
||||
*
|
||||
* Applies and removes the cult halo
|
||||
*/
|
||||
/datum/element/cult_halo
|
||||
|
||||
/datum/element/cult_halo/Attach(datum/target, initial_delay = 20 SECONDS)
|
||||
. = ..()
|
||||
if (!isliving(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
// Register signals for mob transformation to prevent premature halo removal
|
||||
RegisterSignals(target, list(COMSIG_CHANGELING_TRANSFORM, COMSIG_MONKEY_HUMANIZE, COMSIG_HUMAN_MONKEYIZE), PROC_REF(set_halo))
|
||||
addtimer(CALLBACK(src, PROC_REF(set_halo), target), initial_delay)
|
||||
|
||||
/**
|
||||
* Halo setter proc
|
||||
*
|
||||
* Adds the cult halo overlays, and adds the halo trait to the mob.
|
||||
*/
|
||||
/datum/element/cult_halo/proc/set_halo(mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!IS_CULTIST(target))
|
||||
target.RemoveElement(/datum/element/cult_halo)
|
||||
return
|
||||
|
||||
ADD_TRAIT(target, TRAIT_CULT_HALO, CULT_TRAIT)
|
||||
var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/mob/effects/halo.dmi', "halo[rand(1, 6)]", -HALO_LAYER)
|
||||
if (ishuman(target))
|
||||
var/mob/living/carbon/human/human_parent = target
|
||||
new /obj/effect/temp_visual/cult/sparks(get_turf(human_parent), human_parent.dir)
|
||||
human_parent.overlays_standing[HALO_LAYER] = new_halo_overlay
|
||||
human_parent.apply_overlay(HALO_LAYER)
|
||||
else
|
||||
target.add_overlay(new_halo_overlay)
|
||||
|
||||
/**
|
||||
* Detach proc
|
||||
*
|
||||
* Removes the halo overlays, and trait from the mob
|
||||
*/
|
||||
/datum/element/cult_halo/Detach(mob/living/target, ...)
|
||||
REMOVE_TRAIT(target, TRAIT_CULT_HALO, CULT_TRAIT)
|
||||
if (ishuman(target))
|
||||
var/mob/living/carbon/human/human_parent = target
|
||||
human_parent.remove_overlay(HALO_LAYER)
|
||||
human_parent.update_body()
|
||||
else
|
||||
target.cut_overlay(HALO_LAYER)
|
||||
UnregisterSignal(target, list(COMSIG_CHANGELING_TRANSFORM, COMSIG_HUMAN_MONKEYIZE, COMSIG_MONKEY_HUMANIZE))
|
||||
return ..()
|
||||
@@ -63,4 +63,4 @@
|
||||
ADD_TRAIT(target, TRAIT_DRIED, ELEMENT_TRAIT(type))
|
||||
var/datum/mind/user_mind = drying_user?.resolve()
|
||||
if(drying_user && istype(target, /obj/item/food))
|
||||
ADD_TRAIT(target, TRAIT_FOOD_CHEF_MADE, REF(user_mind))
|
||||
ADD_TRAIT(target, TRAIT_HANDMADE, REF(user_mind))
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
LAZYADD(microwaved_food.intrinsic_food_materials, original_food.intrinsic_food_materials)
|
||||
|
||||
if(microwaver && microwaver.mind)
|
||||
ADD_TRAIT(result, TRAIT_FOOD_CHEF_MADE, REF(microwaver.mind))
|
||||
ADD_TRAIT(result, TRAIT_HANDMADE, REF(microwaver.mind))
|
||||
|
||||
//make space and tranfer reagents if it has any, also let any bad result handle removing or converting the transferred reagents on its own terms
|
||||
if(result.reagents && source.reagents)
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
if(!isnull(move_resist))
|
||||
source.move_resist = move_resist
|
||||
if(!isnull(pull_force))
|
||||
source.pull_force = pull_force
|
||||
source.set_pull_force(pull_force)
|
||||
|
||||
/datum/element/change_force_on_death/proc/on_revive(mob/living/source)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
source.move_force = initial(source.move_force)
|
||||
source.move_resist = initial(source.move_resist)
|
||||
source.pull_force = initial(source.pull_force)
|
||||
source.set_pull_force(initial(source.pull_force))
|
||||
|
||||
@@ -17,10 +17,11 @@
|
||||
if(source.slot_flags & slot)
|
||||
RegisterSignal(user, COMSIG_MOB_SAY, PROC_REF(muzzle_talk))
|
||||
RegisterSignal(user, COMSIG_MOB_PRE_EMOTED, PROC_REF(emote_override))
|
||||
RegisterSignal(user, COMSIG_MOB_BEFORE_SPELL_CAST, PROC_REF(try_spellcast))
|
||||
|
||||
/datum/element/muffles_speech/proc/dropped(obj/item/source, mob/user)
|
||||
SIGNAL_HANDLER
|
||||
UnregisterSignal(user, list(COMSIG_MOB_PRE_EMOTED, COMSIG_MOB_SAY))
|
||||
UnregisterSignal(user, list(COMSIG_MOB_PRE_EMOTED, COMSIG_MOB_SAY, COMSIG_MOB_BEFORE_SPELL_CAST))
|
||||
|
||||
/datum/element/muffles_speech/proc/emote_override(mob/living/source, key, params, type_override, intentional, datum/emote/emote)
|
||||
SIGNAL_HANDLER
|
||||
@@ -52,3 +53,19 @@
|
||||
words[ind] = yell_suffix ? uppertext(new_word) : new_word
|
||||
spoken_message = "[jointext(words, " ")][yell_suffix]"
|
||||
speech_args[SPEECH_MESSAGE] = spoken_message
|
||||
|
||||
/datum/element/muffles_speech/proc/try_spellcast(mob/living/source, datum/action/cooldown/spell/spell, ...)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(spell.invocation_type != INVOCATION_WHISPER && spell.invocation_type != INVOCATION_SHOUT)
|
||||
return NONE
|
||||
|
||||
INVOKE_ASYNC(src, PROC_REF(fail_spellcast), source, spell)
|
||||
return SPELL_CANCEL_CAST
|
||||
|
||||
/datum/element/muffles_speech/proc/fail_spellcast(mob/living/source, datum/action/cooldown/spell/spell)
|
||||
spell.invocation(source)
|
||||
to_chat(source, span_warning("Your mouth covering is making it difficult to say the correct words to cast [spell]..."))
|
||||
if(source.click_intercept == spell)
|
||||
spell.unset_click_ability(source, refund_cooldown = TRUE)
|
||||
spell.StartCooldown(2 SECONDS)
|
||||
|
||||
@@ -66,6 +66,6 @@
|
||||
RegisterSignal(target, COMSIG_FOOD_GET_EXTRA_COMPLEXITY, PROC_REF(add_complexity), TRUE)
|
||||
ADD_TRAIT(target, TRAIT_QUALITY_FOOD_INGREDIENT, REF(src))
|
||||
|
||||
/datum/element/quality_food_ingredient/proc/add_complexity(datum/source, list/extra_complexity)
|
||||
/datum/element/quality_food_ingredient/proc/add_complexity(datum/source, list/complexity)
|
||||
SIGNAL_HANDLER
|
||||
extra_complexity[1] += complexity_increase
|
||||
complexity[1] += complexity_increase
|
||||
|
||||
@@ -82,6 +82,8 @@
|
||||
structure.add_fingerprint(user)
|
||||
stack.add_fingerprint(user)
|
||||
|
||||
// Save refernce to the materials for the case when we place last tile in the stack
|
||||
var/list/saved_mats_per_unit = stack.mats_per_unit
|
||||
if (!stack.use_tool(structure, user, recipe.make_delay, recipe.stack_amount, extra_checks = CALLBACK(src, PROC_REF(check_recipe), structure, user, recipe)))
|
||||
return
|
||||
|
||||
@@ -103,7 +105,7 @@
|
||||
qdel(structure)
|
||||
|
||||
if (is_material_recipe)
|
||||
wall.set_custom_materials(stack.mats_per_unit, recipe.stack_amount)
|
||||
wall.set_custom_materials(saved_mats_per_unit, recipe.stack_amount)
|
||||
|
||||
/// Checks if the user can do the wall recipe.
|
||||
/datum/element/uses_girder_wall_recipes/proc/check_recipe(obj/structure/structure, mob/living/user, datum/girder_wall_recipe/recipe)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
return
|
||||
if(isliving(moved))
|
||||
var/mob/living/living_moved = moved
|
||||
if (living_moved.incapacitated || (living_moved.body_position == LYING_DOWN && !HAS_TRAIT(living_moved, TRAIT_FLOPPING)))
|
||||
if (living_moved.buckled || living_moved.incapacitated || (living_moved.body_position == LYING_DOWN && !HAS_TRAIT(living_moved, TRAIT_FLOPPING)))
|
||||
return
|
||||
waddling_animation(moved)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user