Civlian Casualty Mission-Fail

by Clifford Erskine

Contributors

Clifford Erskine

1.0.9

Game Version
1.6.0.119
Created
Wed, 18 Feb 2026 05:05:57 GMT
Last Modified
Wed, 18 Feb 2026 05:06:01 GMT

1.0.8

Game Version
1.6.0.119
Created
Wed, 18 Feb 2026 03:25:43 GMT
Last Modified
Wed, 18 Feb 2026 03:25:47 GMT

1.0.7

Game Version
1.6.0.119
Created
Wed, 18 Feb 2026 03:19:16 GMT
Last Modified
Wed, 18 Feb 2026 03:19:20 GMT

1.0.6

Game Version
1.6.0.119
Created
Wed, 18 Feb 2026 00:18:22 GMT
Last Modified
Wed, 18 Feb 2026 00:18:30 GMT

1.0.5

Game Version
1.6.0.119
Created
Tue, 17 Feb 2026 06:44:41 GMT
Last Modified
Tue, 17 Feb 2026 06:44:45 GMT

1.0.4

Game Version
1.6.0.119
Created
Tue, 17 Feb 2026 06:38:20 GMT
Last Modified
Tue, 17 Feb 2026 06:38:31 GMT

1.0.3

Civilian detection (scenario-agnostic)
Civilian factions are now detected via SCR_Faction.IsMilitary() == false instead of a fixed "CIV" key. Works with vanilla CIV, COE2, and any non-military faction. Optional config key list still filters when set.
Death hook (invoker-based)
Switched from overriding OnControllableDestroyed to subscribing to m_OnControllableDestroyed. Avoids conflicts with COE2 and other mods; victim/killer/instigator come from SCR_InstigatorContextData.
Server-only early-out
Invoker callback returns immediately when !IsMaster() so only the server runs the penalty logic.
Attribution
CP_CivilianKillAttribution: added IsCivilianFaction(Faction) (IsMilitary check) and overload with optional key filter; kept GetVictimFaction / GetKillerFaction / IsKillerPlayerAttributed unchanged.
Defaults
Empty civilian key list = all non-military factions count as civilian; no default "CIV" insert. One-time EnsureDefaults() guard kept.
Game Version
1.6.0.119
Created
Tue, 17 Feb 2026 03:28:43 GMT
Last Modified
Tue, 17 Feb 2026 03:28:47 GMT

1.0.2

Death processing no longer depends on the game mode having SCR_PossessingManagerComponent. Civilian kills are counted and the mission-fail logic runs on any scenario whose game mode extends SCR_BaseGameMode (e.g. COE2, custom scenarios).
Fail timer now runs from the game mode’s frame update instead of only from PossessingManager, so the delayed mission end works even when that component is not present.
Messaging:
If the scenario has PossessingManager: debug and “limit reached” messages still go to in-game chat.
If it does not: the same info is printed to the server script.log with a [CP] prefix so behaviour and debugging still work.
Game Version
1.6.0.119
Created
Tue, 17 Feb 2026 02:30:51 GMT
Last Modified
Tue, 17 Feb 2026 02:30:56 GMT

1.0.1

Death detection: Switched from overriding SCR_PossessingManagerComponent.OnControllableDestroyed to overriding SCR_BaseGameMode.OnControllableDestroyed(IEntity, IEntity, Instigator) so civilian deaths are detected reliably when the base component API isn’t available.
Debug mode: Added optional debug that prints to chat: when it’s enabled, every controllable death is logged (victim/killer IDs, Player vs NPC), and each step of the civilian-kill logic is logged (skips and counted kills). Default is on when no config is used; can be turned off in the tracker component or config.
Config: New m_bDebugMode on the civilian kill tracker component (and in the .conf) to toggle debug chat. Removed script default initializers for the tracker so values from config/entity are no longer overwritten (fixes the “script default overwrites value from source” warnings).
Script fixes: Resolved “Broken expression” compile errors: avoided ternary and pipe-in-string in debug string building, and used if/else and string concatenation where needed so Enfusion parses the code correctly.
RPC/chat: Debug messages are sent to all clients via a new RPC and shown in chat with a [CP] prefix so you can test in a hosted LAN session without console logs
Game Version
1.6.0.119
Created
Tue, 17 Feb 2026 01:59:37 GMT
Last Modified
Tue, 17 Feb 2026 01:59:43 GMT

1.0.0

Game Version
1.6.0.119
Created
Mon, 16 Feb 2026 07:20:37 GMT
Last Modified
Mon, 16 Feb 2026 07:20:48 GMT

Showing 1 to 10 of 10 results

Rows per page