Skip to content

Commit aa7e480

Browse files
committed
fix: update corpse and shield disposal for x64
1 parent 32f7e07 commit aa7e480

3 files changed

Lines changed: 26 additions & 11 deletions

File tree

mod.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name" : "LowViolenceMode",
33
"description" : "Reduces combat visual clutter",
44
"author" : "Perry",
5-
"version" : "1.0.1",
5+
"version" : "1.0.2",
66
"blt_version" : 2,
77
"updates" : [
88
{

modules/features/enemies/enemymanager/corpses.lua

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ local function low_violence_collect_deferred_corpses(enemy_manager)
101101

102102
for key, corpse_data in pairs(corpses) do
103103
if corpse_data.low_violence_deferred_disposal then
104-
if corpse_data.no_dispose and alive(corpse_data.unit) then
104+
if corpse_data.no_disposal and alive(corpse_data.unit) then
105105
deferred_corpses[#deferred_corpses + 1] = {
106106
key = key,
107107
data = corpse_data,
@@ -131,7 +131,7 @@ local function low_violence_release_deferred_corpse(enemy_manager, corpse_data)
131131
return false
132132
end
133133

134-
if not corpse_data.no_dispose or not alive(corpse_unit) or not enemy_manager.enable_disposal_on_corpse then
134+
if not corpse_data.no_disposal or not alive(corpse_unit) or not enemy_manager.enable_disposal_on_corpse then
135135
corpse_data.low_violence_deferred_disposal = nil
136136
corpse_data.low_violence_deferred_mode = nil
137137
return false
@@ -140,6 +140,7 @@ local function low_violence_release_deferred_corpse(enemy_manager, corpse_data)
140140
corpse_data.low_violence_deferred_disposal = nil
141141
corpse_data.low_violence_deferred_mode = nil
142142
enemy_manager:enable_disposal_on_corpse(corpse_unit)
143+
enemy_manager._corpse_disposal_t = low_violence_now() or enemy_manager._corpse_disposal_t
143144

144145
return true
145146
end
@@ -183,17 +184,15 @@ EnemyManagerFeature.ApplyDeferredCorpsePolicy = function(enemy_manager)
183184
end
184185
end
185186

186-
local function low_violence_unqueue_corpse_disposal_if_unneeded(enemy_manager)
187-
local corpse_disposal_id = enemy_manager and enemy_manager._corpse_disposal_id
187+
local function low_violence_cancel_corpse_disposal_if_unneeded(enemy_manager)
188188
local enemy_data = enemy_manager and enemy_manager._enemy_data
189189

190-
if not corpse_disposal_id or not enemy_data then
190+
if not enemy_data then
191191
return
192192
end
193193

194194
if numeric_or(enemy_data.nr_corpses, 0) <= enemy_manager:corpse_limit() then
195-
enemy_manager._corpse_disposal_id = nil
196-
pcall(enemy_manager.unqueue_task, enemy_manager, corpse_disposal_id)
195+
enemy_manager._corpse_disposal_t = nil
197196
end
198197
end
199198

@@ -204,23 +203,28 @@ local function low_violence_defer_corpse_disposal(enemy_manager, dead_unit)
204203
local corpse_key = low_violence_unit_key(dead_unit)
205204
local mode = LowViolenceMode:GetMode("corpsesMode")
206205

206+
if LowViolenceMode:IsEnabled("blockCorpses") and mode == "timer" and LowViolenceMode:GetNumber("corpseTimerSeconds") == 0 then
207+
enemy_manager._corpse_disposal_t = low_violence_now() or enemy_manager._corpse_disposal_t
208+
return
209+
end
210+
207211
if not low_violence_should_defer_corpse() or not corpse_key then
208212
return
209213
end
210214

211215
local enemy_data = enemy_manager and enemy_manager._enemy_data
212216
local corpse_data = low_violence_corpse_data_by_key(enemy_manager, corpse_key)
213217

214-
if not enemy_data or not corpse_data or corpse_data.no_dispose then
218+
if not enemy_data or not corpse_data or corpse_data.no_disposal then
215219
return
216220
end
217221

218-
corpse_data.no_dispose = true
222+
corpse_data.no_disposal = true
219223
corpse_data.low_violence_deferred_disposal = true
220224
corpse_data.low_violence_deferred_mode = mode
221225
enemy_data.nr_corpses = math.max(numeric_or(enemy_data.nr_corpses, 0) - 1, 0)
222226

223-
low_violence_unqueue_corpse_disposal_if_unneeded(enemy_manager)
227+
low_violence_cancel_corpse_disposal_if_unneeded(enemy_manager)
224228
if mode == "after_ragdoll" and low_violence_schedule_deferred_corpse_fallback then
225229
low_violence_schedule_deferred_corpse_fallback(enemy_manager, corpse_key)
226230
elseif mode == "timer" and low_violence_schedule_timer_corpse_release then

modules/features/enemies/enemymanager/limits.lua

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ local fallback_corpse_limit = EnemyManagerFeature.FallbackCorpseLimit
55
local remember_enemy_manager_values = EnemyManagerFeature.RememberValues
66

77
local low_violence_original_enemy_manager_init = EnemyManager.init
8+
local low_violence_original_register_shield = EnemyManager.register_shield
89
local low_violence_original_shield_limit = EnemyManager.shield_limit
910
local low_violence_original_corpse_limit = EnemyManager.corpse_limit
1011
local low_violence_original_corpse_limit_changed_clbk = EnemyManager.corpse_limit_changed_clbk
@@ -33,6 +34,16 @@ function EnemyManager:init(...)
3334
LowViolenceMode.ApplyEnemyManagerSettings(self)
3435
end
3536

37+
function EnemyManager:register_shield(...)
38+
local result = low_violence_original_register_shield(self, ...)
39+
40+
if LowViolenceMode:IsEnabled("blockShields") and self._shield_disposal_t then
41+
self._shield_disposal_t = self._timer:time()
42+
end
43+
44+
return result
45+
end
46+
3647
function EnemyManager:shield_limit(...)
3748
if LowViolenceMode:IsEnabled("blockShields") then
3849
return 0

0 commit comments

Comments
 (0)