Sentinel Deathmatch
Sentinel Deathmatch This is an ALPHA playtest build. It is playable and stable in testing, but features are incomplete, balance is placeholder, and updates may change configs and gameplay without notice. Feedback and bug reports are welcome on the GitHub issue tracker below. A round-based, fully configurable deathmatch mod for DayZ - built for lots of players shooting in one small area without killing your server… (more)
Sentinel Deathmatch This is an ALPHA playtest build. It is playable and stable in testing, but features are incomplete, balance is placeholder, and updates may change configs and gameplay without notice. Feedback and bug reports are welcome on the GitHub issue tracker below. A round-based, fully configurable deathmatch mod for DayZ - built for lots of players shooting in one small area without killing your server FPS. What works today Round loop: vote, countdown, live round, scoreboard - repeating automatically In-game voting: players vote each round on the arena AND the weapon preset (press B during voting), each with a Random pick - or force either side to random in config and vote on the other only Operator-defined arenas: boundary + spawn points in a simple zones.json; soft-wall zone damage or hard teleport enforcement Weapon presets: plain-JSON loadouts (weapon, attachments, mags, clothing, gear), validated at server boot - a typo disables the preset with a log line instead of breaking a round Fast respawn: no respawn dialog, configurable spawn protection (full immunity for SpawnProtectSeconds, default 3), spawn selection away from enemies HUD: phase + round timer, killfeed, out-of-zone warning Scoreboard (press P): this-round and session leaderboard tabs Coming during alpha DayZ Editor (.dze) arena import - build arenas in the editor, drop the file in, done Custom branding (logos, icons, colors) for server owners Rebindable keys, preset icons, spectator, and more Server setup (alpha) Load this mod in -mod= (clients need it too). Strip your mission economy for arena performance (economy.xml master switches off, empty events.xml, zero infected/animals). First boot writes default configs to $profile:SentinelDeathmatch\: config.json (round timings, respawn, score limit), zones.json (arenas + spawn points), presets.json (loadouts). Full setup guide and examples in the GitHub repo. Sentinel platform (optional, zero extra installs) If your server also runs the Sentinel Enforcer (server-side), Sentinel Deathmatch automatically streams round and kill events to the Sentinel platform - powering server stats and, later in the alpha, the global cross-server deathmatch leaderboard on dayz.fyi. Control it via $profile:SentinelDeathmatch\sentinel.json (EventFeed on/off, GlobalLeaderboard opt-in/out). No enforcer, no problem: the integration compiles itself out and the mod runs standalone. Source, issues, license Source-available on GitHub: https://github.com/mierst/sentinel-deathmatch Report bugs there. License: free to run on any server, including monetized servers, with attribution retained; no repacking or re-uploading. Final license text is being prepared - see LICENSE.md in the repo. Credits Design informed by the DayZ modding community, with thanks to Terje Bruoygard (the abandoned DeathMatch mod remains the genre's best prior art) and InclementDab (DayZ Editor, whose .dze format this mod will read natively). No third-party code is included. Powered by Sentinel.
No file I/O on hot paths, no timers created per event, no per-player-per-frame hooks.
Every server-visible override preserves its chain.
0.00252% of each server frame at 100 players (0.025 ms/s). Counts hook dispatch and timers only, not what the hooks do inside. Methodology.
Structural load of the 328 scripted mods analyzed, lightest on the left. This mod's bar is lit; 17 others share it. Ranked list.
Every-frame hooks carry 98% of this mod's structural load. 0.025 ms/s in all.
1 hook · 0.025 ms/s
2 hooks · 0.0004 ms/s
5 hooks · 0.00001 ms/s
| Every-frame hooksrun every server frame | 1 hook | 0.025 ms/s | 98% | DayZPlayerCameraOptics.OnUpdate |
| Event hooksrun when something happens: an inventory move, a hit, an action | 2 hooks | 0.0004 ms/s | 1.6% | PlayerBase.EEHitBy, PlayerBase.OnRPC |
| Lifecycle hooksrun when an entity is created, loaded or deleted | 5 hooks | 0.00001 ms/s | <0.1% | MissionServer.InvokeOnConnect, MissionServer.OnClientNewEvent, MissionServer.OnInit and 2 more |
Counts how often each hook is dispatched and how many timers stay alive, not what the code inside does. Some rates are order-of-magnitude estimates; the methodology lists which.
Where this mod runs often
Hooks on per-frame and high-rate surfaces, with what their bodies call. Body work, not the hook itself, is what costs frame time.
Other findings
super() only on some paths · 2 · warning
- MissionServer.OnClientNewEvent calls super.OnClientNewEvent() only on some paths — on the others the chain below this mod is dropped.
sentinel_dm.pbo::scripts\5_Mission\DmMissionServer.c:63 - PlayerBase.OnRPC calls super.OnRPC() only on some paths — on the others the chain below this mod is dropped.
sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:74
- MissionServer.OnClientNewEvent calls super.OnClientNewEvent() only on some paths — on the others the chain below this mod is dropped.
Which vanilla methods the mod hooks, which of them drop the chain, how often each hook fires, and which risky calls sit inside hot hooks.
How long hook bodies take, network cost, or engine-side load. Measured across live fleets, most server lag comes from the engine and world state, not mod script chains — a light footprint does not clear a mod of lag, and a heavy one does not convict it. Methodology.
Everything else
All 17 overrides
Surface is the dispatch tier the rubric can price (— = unpriced); server is whether the override exists on a dedicated server; super() shows whether the vanilla chain is preserved on a server.
| method | surface | server | super() | where |
|---|---|---|---|---|
ChatInputMenu.OnChange |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmChatCommands.c:9 |
ChatInputMenu.OnShow |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmChatCommands.c:37 |
ChatInputMenu.OnHide |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmChatCommands.c:43 |
ChatLine.Set |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmChatHistory.c:60 |
ChatLine.Clear |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmChatHistory.c:67 |
DayZPlayerCameraOptics.OnUpdate |
T0 | yes | ✓ | sentinel_dm.pbo::scripts\4_World\DmOpticsGuard.c:118 |
MissionGameplay.OnInit |
T3 | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmMissionGameplay.c:7 |
MissionGameplay.OnKeyPress |
— | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmMissionGameplay.c:18 |
MissionServer.OnInit |
T3 | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmMissionServer.c:7 |
MissionServer.InvokeOnConnect |
T3 | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmMissionServer.c:36 |
MissionServer.PlayerDisconnected |
T3 | yes | ✓ | sentinel_dm.pbo::scripts\5_Mission\DmMissionServer.c:51 |
MissionServer.OnClientNewEvent |
T3 | yes | conditional | sentinel_dm.pbo::scripts\5_Mission\DmMissionServer.c:63 |
PlayerBase.EEKilled |
T3 | yes | ✓ | sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:17 |
PlayerBase.EEHitBy |
T2 | yes | ✓ | sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:26 |
PlayerBase.OnUnconsciousStart |
— | yes | ✓ | sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:40 |
PlayerBase.OnUnconsciousStop |
— | yes | ✓ | sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:61 |
PlayerBase.OnRPC |
T2 | yes | conditional | sentinel_dm.pbo::scripts\4_World\capture\DmPlayerHook.c:74 |
Dispatch surfaces and timers the grade prices
| surface | tier | rate (Hz) | rate source | ms/s |
|---|---|---|---|---|
DayZPlayerCameraOptics.OnUpdate | T0 | 1000.0 | measured | 0.0248 |
PlayerBase.EEHitBy | T2 | 8.0 | placeholder | 0.0002 |
PlayerBase.OnRPC | T2 | 8.0 | placeholder | 0.0002 |
PlayerBase.EEKilled | T3 | 0.1 | placeholder | 0.0000 |
MissionServer.OnInit | T3 | 0.1 | placeholder | 0.0000 |
MissionServer.InvokeOnConnect | T3 | 0.1 | placeholder | 0.0000 |
MissionServer.PlayerDisconnected | T3 | 0.1 | placeholder | 0.0000 |
MissionServer.OnClientNewEvent | T3 | 0.1 | placeholder | 0.0000 |
Includes 0.000 ms/s from placeholder-rated surfaces.
Load-order constraints (CfgPatches)
What each PBO declares: its addon identity and the addons it requires to be loaded first (requiredAddons). A partial load-order signal from the mod's own metadata.
sentinel_dm.pbo
SentinelDMrequiredVersion 0.1 — no requiredAddons
census 1.1 · findings 1.1 · hash 574bf99c28ad16c4