From 79991f028ec527810f7cd2c0140f5d5607b1817a Mon Sep 17 00:00:00 2001
From: Coxswain <35991533+Coxswain-Navigator@users.noreply.github.com>
Date: Sat, 7 Sep 2024 13:13:53 -0400
Subject: [PATCH] Density, bullet, and other miscellaneous fixes (#2404)
Some quick fixes
fix
adds status flags to nosferatu bats
nobody changes
some improvment
---
.../abnormality/aleph/nobody_is.dm | 21 ++++++++++++----
.../abnormality/he/drifting_fox.dm | 1 +
.../simple_animal/abnormality/he/red_queen.dm | 4 +--
.../abnormality/waw/nosferatu.dm | 1 +
.../abnormality/waw/red_riding_mercenary.dm | 3 ++-
.../simple_animal/hostile/ordeal/gold/dusk.dm | 25 ++++++++++++-------
code/modules/paperwork/records/info/aleph.dm | 3 ++-
7 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/code/modules/mob/living/simple_animal/abnormality/aleph/nobody_is.dm b/code/modules/mob/living/simple_animal/abnormality/aleph/nobody_is.dm
index 3c2dbbbd12ff..44703d2803a0 100644
--- a/code/modules/mob/living/simple_animal/abnormality/aleph/nobody_is.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/aleph/nobody_is.dm
@@ -70,6 +70,7 @@
"Silky",
)
var/list/longbeard = list("Beard (Very Long)")
+ var/solo_punish = FALSE
//Breach Variables
var/whip_attack_cooldown
@@ -162,9 +163,12 @@
continue
potentialmarked += L
if(LAZYLEN(potentialmarked)) //It's fine if no one got picked. Probably.
+ solo_punish = FALSE
+ if(LAZYLEN(potentialmarked) < 2)
+ solo_punish = TRUE
ReflectChosen(pick(potentialmarked))
if(!IsContained())
- to_chat(chosen, span_warning("You feel uneasy..."))
+ to_chat(chosen, span_warning("You feel the mirror's gaze upon you..."))
else
ReflectChosen(null)
@@ -206,12 +210,19 @@
adjusted_chance -= (100 - brainpower) * 0.5
return adjusted_chance
+/mob/living/simple_animal/hostile/abnormality/nobody_is/AttemptWork(mob/living/carbon/human/user, work_type)
+ if(solo_punish)
+ work_damage_amount = 22
+ return ..()
+ work_damage_amount = initial(work_damage_amount)
+ return ..()
+
/mob/living/simple_animal/hostile/abnormality/nobody_is/PostWorkEffect(mob/living/carbon/human/user, work_type, pe, work_time)
- if(Finisher(user)) //Checks if they are the chosen, and disguises as them if they are.
- return
+ if(!solo_punish)
+ if(Finisher(user)) //Checks if they are the chosen, and disguises as them if they are.
+ return
else if(get_attribute_level(user, JUSTICE_ATTRIBUTE) < 80)
datum_reference.qliphoth_change(-1)
- return
/mob/living/simple_animal/hostile/abnormality/nobody_is/FailureEffect(mob/living/carbon/human/user, work_type, pe)
. = ..()
@@ -562,7 +573,7 @@
grab_victim.deal_damage(strangle_damage, BLACK_DAMAGE)
else //Apply ramping damage
playsound(get_turf(src), 'sound/effects/wounds/crackandbleed.ogg', 200, 0, 7)
- grab_victim.deal_damage((strangle_damage * count), BLACK_DAMAGE)
+ grab_victim.deal_damage((strangle_damage * (3 - count)), BLACK_DAMAGE)
count += 1
if(grab_victim.sanity_lost) //This should prevent weird things like panics running away halfway through
grab_victim.Stun(10) //Immobilize does not stop AI controllers from moving, for some reason.
diff --git a/code/modules/mob/living/simple_animal/abnormality/he/drifting_fox.dm b/code/modules/mob/living/simple_animal/abnormality/he/drifting_fox.dm
index 1e4e9abf8d58..8edc2fd37fd5 100644
--- a/code/modules/mob/living/simple_animal/abnormality/he/drifting_fox.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/he/drifting_fox.dm
@@ -163,6 +163,7 @@
maxHealth = 125
health = 125
density = FALSE
+ status_flags = MUST_HIT_PROJECTILE // Allows projectiles to hit non-dense mob
damage_coeff = list(RED_DAMAGE = 1, WHITE_DAMAGE = 0.7, BLACK_DAMAGE = 0.5, PALE_DAMAGE = 2)
del_on_death = FALSE
ranged = TRUE
diff --git a/code/modules/mob/living/simple_animal/abnormality/he/red_queen.dm b/code/modules/mob/living/simple_animal/abnormality/he/red_queen.dm
index 38fe67c53f8c..3f1108e854fa 100644
--- a/code/modules/mob/living/simple_animal/abnormality/he/red_queen.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/he/red_queen.dm
@@ -28,10 +28,9 @@
observation_prompt = "This abnormality has a notorious reputation for being particularly dry to work with.
It's hard to tell what it's thinking or what work it prefers.
\
What type of work will you attempt?"
observation_choices = list(ABNORMALITY_WORK_INSTINCT, ABNORMALITY_WORK_INSIGHT, ABNORMALITY_WORK_ATTACHMENT, ABNORMALITY_WORK_REPRESSION)
- correct_choices = list() //Matches Red Queen's real preferred work
+ correct_choices = list(ABNORMALITY_WORK_INSTINCT) // Matches Red Queen's real preferred work. This default is set to stop warnings
observation_success_message = "You are granted an audience with the red queen.
Today, you were able to to satisfy her unpredictable whims"
observation_fail_message = "You narrowly dodge the card-guillotine coming for your neck, that was close, let's try something else."
-
var/liked
/mob/living/simple_animal/hostile/abnormality/red_queen/Initialize(mapload)
@@ -42,6 +41,7 @@
/mob/living/simple_animal/hostile/abnormality/red_queen/PostSpawn()
. = ..()
+ correct_choices = list()
correct_choices += liked
/mob/living/simple_animal/hostile/abnormality/red_queen/PostWorkEffect(mob/living/carbon/human/user, work_type, pe)
diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm b/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm
index bb301c96df24..d675db6101b0 100644
--- a/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/waw/nosferatu.dm
@@ -249,6 +249,7 @@
faction = list("hostile")
is_flying_animal = TRUE
density = FALSE
+ status_flags = MUST_HIT_PROJECTILE // Lets them be shot
speak_emote = list("screeches")
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
diff --git a/code/modules/mob/living/simple_animal/abnormality/waw/red_riding_mercenary.dm b/code/modules/mob/living/simple_animal/abnormality/waw/red_riding_mercenary.dm
index f9e5b9ad8466..bc4923fdefa0 100644
--- a/code/modules/mob/living/simple_animal/abnormality/waw/red_riding_mercenary.dm
+++ b/code/modules/mob/living/simple_animal/abnormality/waw/red_riding_mercenary.dm
@@ -43,7 +43,8 @@ It has now been over four months. Now we get her for real. -Coxswain
faction = list("redhood") // I'LL FUCKIN FIGHT YOU TOO, MATE
can_breach = TRUE
start_qliphoth = 3
- density = FALSE //Prevents red from getting stuck unable to reach her target
+ density = FALSE // Prevents red from getting stuck unable to reach her target
+ status_flags = MUST_HIT_PROJECTILE // Allows projectiles to hit even though she's not dense.
ego_list = list(
/datum/ego_datum/weapon/crimson,
/datum/ego_datum/weapon/crimson/gun,
diff --git a/code/modules/mob/living/simple_animal/hostile/ordeal/gold/dusk.dm b/code/modules/mob/living/simple_animal/hostile/ordeal/gold/dusk.dm
index 81978aa12804..0342f6961270 100644
--- a/code/modules/mob/living/simple_animal/hostile/ordeal/gold/dusk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/ordeal/gold/dusk.dm
@@ -60,10 +60,10 @@
/mob/living/simple_animal/hostile/ordeal/centipede_corrosion/proc/Pulse()//Periodic weak AOE attack, gain charge constantly
pulse_cooldown = world.time + pulse_cooldown_time
- playsound(get_turf(src), 'sound/weapons/fixer/generic/energy2.ogg', 10, FALSE, 3)
AdjustCharge(1)
if(charge_level < 5 || broken)
return
+ playsound(get_turf(src), 'sound/weapons/fixer/generic/energy2.ogg', 10, FALSE, 3)
var/turf/orgin = get_turf(src)
var/list/all_turfs = RANGE_TURFS(5, orgin)
for(var/i = 0 to 2)
@@ -82,12 +82,11 @@
new /obj/effect/temp_visual/smash_effect(T)
HurtInTurf(T, list(), 5, BLACK_DAMAGE, check_faction = TRUE, hurt_mechs = TRUE)
for(var/mob/living/simple_animal/hostile/ordeal/thunderbird_corrosion/TB in T)
- if(TB.charged)
+ if(TB.charge_level >= TB.charge_level_cap)
continue
- TB.charged = TRUE
+ TB.AdjustCharge(4)
playsound(get_turf(TB), 'sound/weapons/fixer/generic/energy3.ogg', 75, FALSE, 3)
TB.visible_message(span_warning("[TB] absorbs the arcing electricity!"))
- new /obj/effect/temp_visual/healing/no_dam(get_turf(TB))
/mob/living/simple_animal/hostile/ordeal/centipede_corrosion/proc/AdjustCharge(addition)
if(addition > 0 && charge_level < charge_level_cap)
@@ -171,16 +170,24 @@
ranged = TRUE
projectiletype = /obj/projectile/thunder_tomahawk
projectilesound = 'sound/abnormalities/thunderbird/tbird_peck.ogg'
- var/charged = FALSE
var/list/spawned_mobs = list()
var/datum/beam/current_beam = null
var/recharge_cooldown
var/recharge_cooldown_time = 10 SECONDS
+ var/charge_level = 0
+ var/charge_level_cap = 20
+/mob/living/simple_animal/hostile/ordeal/thunderbird_corrosion/proc/AdjustCharge(addition)
+ if(addition > 0 && charge_level < charge_level_cap)
+ new /obj/effect/temp_visual/healing/charge(get_turf(src))
+ charge_level = clamp(charge_level + addition, 0, charge_level_cap)
-/mob/living/simple_animal/hostile/ordeal/thunderbird_corrosion/proc/Recharge(atom/A)
+/mob/living/simple_animal/hostile/ordeal/thunderbird_corrosion/proc/Recharge(atom/A) // Recharging the centipede
if(recharge_cooldown >= world.time)
return FALSE
+ if(charge_level < 10)
+ return FALSE
+ AdjustCharge(-10)
recharge_cooldown = world.time + recharge_cooldown_time
current_beam = Beam(A, icon_state="lightning[rand(1,12)]", time = 3 SECONDS)
@@ -189,11 +196,11 @@
if(!isliving(target))
return
var/mob/living/L = target
- if(charged)
- L.deal_damage(15, BLACK_DAMAGE)
+ if(charge_level) // We deal up to 20 more damage, 1 for every point of charge.
+ L.deal_damage(charge_level, BLACK_DAMAGE)
playsound(get_turf(src), 'sound/weapons/fixer/generic/energyfinisher1.ogg', 75, 1)
to_chat(L,span_danger("The [src] unleashes its charge!"))
- charged = FALSE
+ AdjustCharge(-charge_level)
if(!ishuman(target))
return
var/mob/living/carbon/human/H = target
diff --git a/code/modules/paperwork/records/info/aleph.dm b/code/modules/paperwork/records/info/aleph.dm
index 98f63c2bc57b..bbfa421e4a12 100644
--- a/code/modules/paperwork/records/info/aleph.dm
+++ b/code/modules/paperwork/records/info/aleph.dm
@@ -228,7 +228,8 @@
"When an employee whose Justice was lower than Level 4 completed the work, the Qliphoth Counter decreased.",
"When the work result was Bad, the Qliphoth Counter lowered.",
"An employee in the facility will be reflected upon the mirror on the face of Nobody Is.",
- "When the selected employee completed work, they were assimilated into the abnormality.")
+ "When only one employee with the clearance to work on abnormalities was present in the facility, work damage increased.",
+ "Otherwise, when the selected employee completed work, they were assimilated into the abnormality.",)
abno_breach_damage_count = "Extreme" // Once it transforms its over
abno_resistances = list(
RED_DAMAGE = "Endured/Endured/Resistant",