git:20260924.fa4f23e to git:20261001.e42d2f4

164 added, 164 removed. Audit A to A.

---
name: dayz-underground
description: >
Use when: terrain holes, terrain hole, SurfaceIsHole, CfgWorlds Holes, tiles[],
holes.cfg, hole in the terrain, agujero o hueco en el terreno, underground area,
zona subterránea, bunker, búnker, tunnel, túnel, trench, trinchera, cave,
irrigation tunnel, cfgundergroundtriggers.json, UndergroundTrigger, breadcrumbs,
EyeAccommodation, EUndergroundPresence, INPUT_UDT_UNDERGROUND_SYNC, underground
trigger editor, disallowedTypesInUnderground, bunker broadcast,
cfgbunkerbroadcast.json, Buldozer MarkUnderground or CopyTileCoord. DayZ 1.30 Exp
(1.30.164014). Not construction parts, rebuilding or code locks: dayz-basebuilding.
Not the bunker-broadcast storage file: dayz-persistence. Not sandstorm or heat:
dayz-environment-hazards.
---
# DayZ Underground (1.30 Exp)
- Zonas bajo el terreno en DayZ 1.30 Experimental (build 1.30.164014): el agujero en el
- terreno (*terrain holes*, nuevo en 1.30), los triggers subterráneos que oscurecen y
- cambian el ambiente, el estado «bajo tierra» del jugador y lo que Badlands monta encima
- (búnkeres anunciados por radio, entrada del túnel de riego).
+ Underground areas in DayZ 1.30 Experimental (build 1.30.164014): the hole in the
+ terrain (*terrain holes*, new in 1.30), the underground triggers that darken and
+ change the environment, the player's "underground" state, and what Badlands builds on top
+ (radio-announced bunkers, irrigation tunnel entrance).
- Las citas `exp\scripts\scripts\…` son del `dta\scripts.pbo` de 1.30.164014, comparado
- con el de 1.29. Todo lo marcado `source_verified` se abrió en esos ficheros. **Nada de
- esta skill se ha probado todavía en el juego**: §Estado de verificación dice qué nivel
- tiene cada afirmación y §Antes de diseñar sobre holes, cómo subirlo.
+ Citations `exp\scripts\scripts\…` are from `dta\scripts.pbo` of 1.30.164014, compared
+ with 1.29. Everything marked `source_verified` was opened in those files. **Nothing in
+ this skill has been tested in game yet**: §Verification Status states the level
+ of each claim and §Before designing with holes, how to raise it.
- ## El modelo: tres piezas
+ ## The model: three pieces
- | Pieza | Qué es | Dónde se define | Quién lo usa |
+ | Piece | What it is | Where defined | Who uses it |
|---|---|---|---|
- | Agujero | celdas del heightmap sin terreno | `CfgWorlds >> <mundo> >> Holes` (config del mapa) | el motor, al cargar el mundo |
- | Geometría | túnel o búnker colocado bajo la superficie | `.wrp` (Terrain Builder), Object Spawner o script | el motor |
- | Triggers | cajas que oscurecen, cambian el sonido y marcan «bajo tierra» | `cfgundergroundtriggers.json` | el servidor las crea, el cliente aplica los efectos |
+ | Hole | heightmap cells without terrain | `CfgWorlds >> <world> >> Holes` (map config) | the engine, upon loading the world |
+ | Geometry | tunnel or bunker placed below the surface | `.wrp` (Terrain Builder), Object Spawner or script | the engine |
+ | Triggers | boxes that darken, alter sound, and flag "underground" | `cfgundergroundtriggers.json` | the server creates them, the client applies the effects |
- El agujero solo quita terreno: no crea ningún espacio. Qué ocurre si algo cae por un
- agujero sin geometría debajo no está medido; diseña como si no hubiera suelo. Sin
- triggers, dentro no oscurece.
+ The hole only removes terrain: it does not create any space. What happens if something falls through a
+ hole without geometry underneath is not measured; design as if there were no ground. Without
+ triggers, it does not darken inside.
## Terrain holes
### Formato
- Entre los mapas vanilla legibles de 1.30.164014, solo Livonia tiene holes (Chernarus no;
- Sakhal va cifrado): siete celdas en dos grupos, junto a las dos entradas del búnker de
- Dambog. El config 1.29 del mismo mapa no los tiene.
+ Among readable vanilla maps in 1.30.164014, only Livonia has holes (Chernarus does not;
+ Sakhal is encrypted): seven cells in two groups, next to the two entrances of the Dambog
+ bunker. The 1.29 config of the same map does not have them.
```cpp
// [EXACT][CLAIM-UG-HOLES-SCHEMA-130] Addons\worlds_enoch.pbo > config.bin > CfgWorlds > Enoch (1.30.164014, pasado a texto con CfgConvert)
class Holes
{
- class Dambog // un grupo = una subclase; el nombre es libre
+ class Dambog // one group = one subclass; the name is arbitrary
{
tiles[]=
{
{118,195},{118,196},{118,197},
{94,180},{95,180},{94,181},{95,181}
};
};
};
```
- - Cada entrada de `tiles[]` es `{x, z}`: índices de celda del heightmap, no metros.
- - El motor valida el rango: el código que lee `tiles` usa los mensajes
- `x (%d) out of range <0, %d)` y `y (%d) …` (cadenas de `DayZDiag_x64.exe` 1.30;
- detalle en `references/terrain-holes-evidence.md`).
- - Cada grupo es una subclase, así que un mod podría añadir el suyo sin pisar el de
- Bohemia. **Sin probar**: que un parche de config de un mod sobre
- `CfgWorlds >> ChernarusPlus` abra agujeros es la primera hipótesis que hay que medir.
+ - Each entry in `tiles[]` is `{x, z}`: heightmap cell indices, not meters.
+ - The engine validates the range: code reading `tiles` uses the messages
+ `x (%d) out of range <0, %d)` and `y (%d) …` (strings from `DayZDiag_x64.exe` 1.30;
+ details in `references/terrain-holes-evidence.md`).
+ - Each group is a subclass, so a mod could add its own without overriding Bohemia's.
+ **Unverified**: that a mod config patch on
+ `CfgWorlds >> ChernarusPlus` opens holes is the first hypothesis that must be measured.
- ### Unidad: celda del heightmap
+ ### Unit: heightmap cell
- En Livonia la rejilla es de 2048 celdas de 6,25 m (12 800 m). Con ese tamaño, los dos
- grupos caen sobre los triggers subterráneos vanilla de Dambog; con 5 m o 10 m no cae
- ninguno (cuentas en la referencia):
+ In Livonia the grid is 2048 cells of 6.25 m (12,800 m). With that size, both
+ groups fall over the vanilla underground triggers of Dambog; with 5 m or 10 m neither
+ falls within range (calculations in the reference):
- - `{118, 195–197}` → X 737,5–743,75, Z 1218,75–1237,5: entrada principal.
- - `{94–95, 180–181}` → cuadrado de 12,5 m en X 587,5–600, Z 1125–1137,5: segundo acceso.
+ - `{118, 195–197}` → X 737.5–743.75, Z 1218.75–1237.5: main entrance.
+ - `{94–95, 180–181}` → 12.5 m square at X 587.5–600, Z 1125–1137.5: second entrance.
- Es `cross_checked` por ese encaje: no se ha leído el tamaño de celda en la cabecera del
- `.wrp` (OPRW v32) y los demás mapas no están medidos. Calcula siempre
- `celda = floor(coordenada / tamaño_de_celda)` con el tamaño de tu terreno.
+ It is `cross_checked` by that fit: the cell size was not read in the header of the
+ `.wrp` (OPRW v32) and the other maps are not measured. Always calculate
+ `celda = floor(coordenada / tamaño_de_celda)` with the size of your terrain.
- ### API de script
+ ### Script API
```c
// [EXACT][CLAIM-UG-SURFACEISHOLE-130] exp\scripts\scripts\3_Game\Global\Game.c:1203-1204
//! Returns whether tile at provided world coordinates is a hole.
proto native bool SurfaceIsHole(float x, float z);
```
- - Es la única API nueva de holes y es de solo lectura: no hay forma de abrir ni cerrar
- agujeros desde script en tiempo de juego.
- - Ningún script vanilla 1.30 la llama.
- - Sirve para no colocar nada donde no hay terreno: loot propio, puntos de spawn,
- hologramas propios.
+ - It is the only new holes API and is read-only: there is no way to open or close
+ holes from script at runtime.
+ - No vanilla 1.30 script calls it.
+ - Useful to avoid placing anything where there is no terrain: custom loot, spawn points,
+ custom holograms.
- ### Dónde viven los datos
+ ### Where data lives
- - `enoch.wrp` y `chernarusplus.wrp` pasan de OPRW v29 a v32 en 1.30 y crecen un 5 % los
- dos; Chernarus no tiene `Holes`. Ese cambio es de formato, no de agujeros: los holes
- están en el config del mundo (`cross_checked`).
- - `exp\scripts\scripts\4_World\Classes\Hologram.c` es idéntico en 1.29 y 1.30: ninguna
- comprobación de colocación de kits sabe de holes.
+ - `enoch.wrp` and `chernarusplus.wrp` go from OPRW v29 to v32 in 1.30 and both grow by 5%;
+ Chernarus has no `Holes`. That change is format-related, not hole-related: holes
+ reside in the world config (`cross_checked`).
+ - `exp\scripts\scripts\4_World\Classes\Hologram.c` is identical in 1.29 and 1.30: no
+ kit placement check is aware of holes.
- ## Flujo de autoría
+ ## Authoring workflow
- - Buldozer 1.30 trae cuatro inputs nuevos: `UABuldLinkCamToTerrain`,
- `UABuldCopyTileCoord`, `UABuldMarkUnderground` y `UABuldRemoveUnderground`
- (`exp\bin\bin\constants.xml:282-285`, citado en `enforce-script-reference`; los dos
- últimos también aparecen en `DayZDiag_x64.exe` 1.30).
- - Changelog 1.30, sección Terrain Builder: la cámara de Buldozer se puede desligar de la
- altura del terreno para editar bajo la superficie (tecla 8 por defecto), y cada objeto
- tiene un flag «underground» que evita que un objeto estático bajo el terreno se oculte
- por oclusión cuando debe verse.
- - Ese flag es de Terrain Builder. No hay equivalente en script para objetos creados por
- el Object Spawner o por `CreateObject`, y si esos objetos se ocultan bajo el terreno
- está sin medir.
- - Una DayZ Tools estable de abril de 2026 no contiene ninguna cadena de holes ni del flag
- (medido el 2026-09-24): hace falta un Terrain Builder posterior.
- - Herramienta de terceros: Flynn's Terrain Tools (FTT, publicada el 2026-09-19).
- - Marca celdas y escribe `holes.cfg` junto a `layers.cfg`, donde según su guía lo leen
- Terrain Builder y Buldozer.
- - Añade el `#include` al `config.cpp` del terreno.
- - Buldozer lo relee en cada alt-tab.
- - Encaja con la cadena `\holes.cfg` que el motor usa en su función de carga del mundo,
- pero la ruta exacta y la recarga no están verificadas aquí.
+ - Buldozer 1.30 brings four new inputs: `UABuldLinkCamToTerrain`,
+ `UABuldCopyTileCoord`, `UABuldMarkUnderground`, and `UABuldRemoveUnderground`
+ (`exp\bin\bin\constants.xml:282-285`, cited in `enforce-script-reference`; the last
+ two also appear in `DayZDiag_x64.exe` 1.30).
+ - Changelog 1.30, Terrain Builder section: the Buldozer camera can be unlinked from
+ terrain height to edit below the surface (key 8 by default), and each object
+ has an "underground" flag preventing a static object below terrain from being hidden
+ by occlusion when it should be visible.
+ - That flag belongs to Terrain Builder. There is no script equivalent for objects created by
+ Object Spawner or `CreateObject`, and whether those objects are occluded under terrain
+ is unmeasured.
+ - A stable DayZ Tools from April 2026 contains no hole strings or flag strings
+ (measured 2026-09-24): a later Terrain Builder is required.
+ - Third-party tool: Flynn's Terrain Tools (FTT, released 2026-09-19).
+ - Marks cells and writes `holes.cfg` next to `layers.cfg`, where according to its guide
+ Terrain Builder and Buldozer read it.
+ - Adds the `#include` to the terrain's `config.cpp`.
+ - Buldozer re-reads it on each alt-tab.
+ - Matches the `\holes.cfg` string that the engine uses in its world-loading function,
+ but the exact path and reload behavior are not verified here.
- ## Triggers subterráneos
+ ## Underground triggers
- - Fichero: `$mission:cfgundergroundtriggers.json`; si no existe,
+ - File: `$mission:cfgundergroundtriggers.json`; if not present,
`dz/worlds/<mundo>/ce/cfgundergroundtriggers.json`
(`exp\scripts\scripts\3_Game\UndergroundAreaLoader.c:105-125`).
- - El servidor crea las cajas (`UndergroundTriggerCarrier`) al arrancar la misión
- (`5_Mission\mission\missionServer.c:91`) y envía el JSON entero a cada cliente al
- conectar (`UndergroundAreaLoader.c:174-177`; `missionServer.c:342,363`). Un JSON propio
- de la misión funciona sin que el cliente tenga el fichero.
- - Tipo de trigger (`4_World\Entities\ScriptedEntities\Triggers\UndergroundTrigger.c:97-116`):
- - con `Breadcrumbs` es `TRANSITIONING` (32 como máximo);
- - sin ellos, `EyeAccommodation == 1.0` da `OUTER`;
- - cualquier otro valor da `INNER`.
- - [EXACT][CLAIM-UG-TRIGGER-LIMIT-130] Tope de 4096 triggers por JSON: `m_TriggerIndex` se
- sincroniza en `-1..4095` (`UndergroundTrigger.c:10`); en 1.29 era `-1..255`.
- - Triggers ligados a un objeto (`CustomSpawn`): por `ParentNetworkId` para objetos del
- mapa, o por `Tag`.
- - Patrón vanilla para una estructura colocada por el Object Spawner: su entrada del
- spawner lleva `"customString": "undergroundTriggerTag=TAG"`.
- - La clase, en `OnSpawnByObjectSpawner`, crea los triggers cuyo `Tag` coincide
+ - Server creates boxes (`UndergroundTriggerCarrier`) on mission startup
+ (`5_Mission\mission\missionServer.c:91`) and sends the entire JSON to each client upon
+ connecting (`UndergroundAreaLoader.c:174-177`; `missionServer.c:342,363`). A custom mission
+ JSON works without the client having the file.
+ - Trigger type (`4_World\Entities\ScriptedEntities\Triggers\UndergroundTrigger.c:97-116`):
+ - with `Breadcrumbs` it is `TRANSITIONING` (maximum 32);
+ - without them, `EyeAccommodation == 1.0` yields `OUTER`;
+ - any other value yields `INNER`.
+ - [EXACT][CLAIM-UG-TRIGGER-LIMIT-130] Cap of 4096 triggers per JSON: `m_TriggerIndex` is
+ synchronized in `-1..4095` (`UndergroundTrigger.c:10`); in 1.29 it was `-1..255`.
+ - Triggers bound to an object (`CustomSpawn`): via `ParentNetworkId` for map
+ objects, or via `Tag`.
+ - Vanilla pattern for a structure placed by Object Spawner: its spawner entry
+ contains `"customString": "undergroundTriggerTag=TAG"`.
+ - The class, in `OnSpawnByObjectSpawner`, creates triggers whose `Tag` matches
(`4_World\Entities\Building\Underground\Land_WarheadStorage_Bunker_Facility.c:62-94`;
`3_Game\ObjectSpawner.c:63,107`).
- - Esa lógica vive en las clases de Sakhal, no en una base común: una clase de mod
- tiene que implementarla.
- - Editor in-game, nuevo en 1.30: `LCTRL+/`, solo en DayZDiag y en partida local.
- - Doble clic crea un trigger; edita cajas y breadcrumbs.
- - Exporta a `$mission:cfgundergroundtriggers.json` y deja una copia
- `…json.backup-<fecha>`.
- - Citas: `4_World\Plugins\PluginBase\PluginUndergroundTriggerManager.c:1,360,821,922`;
- `PluginKeyBinding.c:55`. Más detalle en `dayz-mod-workflow`.
- - Esquema completo del JSON y receta del trigger con `Tag`: `references/underground-triggers.md`.
+ - That logic lives in Sakhal classes, not in a common base: a mod class
+ must implement it.
+ - In-game editor, new in 1.30: `LCTRL+/`, only in DayZDiag and in local game.
+ - Double-click creates a trigger; edits boxes and breadcrumbs.
+ - Exports to `$mission:cfgundergroundtriggers.json` and leaves a backup copy
+ `…json.backup-<date>`.
+ - Citations: `4_World\Plugins\PluginBase\PluginUndergroundTriggerManager.c:1,360,821,922`;
+ `PluginKeyBinding.c:55`. More details in `dayz-mod-workflow`.
+ - Full JSON schema and trigger recipe with `Tag`: `references/underground-triggers.md`.
## Presencia bajo tierra
- `EUndergroundPresence`: `NONE`, `OUTER`, `TRANSITIONING`, `FULL`
- (`4_World\Classes\UndergroundHandlerClient.c:1-7`). La calcula el cliente según el
- trigger en el que está (`:470-475`).
- - [EXACT][CLAIM-UG-PRESENCE-SYNC-130] En 1.30 el cliente la envía al servidor.
- - `SetUnderground` manda `INPUT_UDT_UNDERGROUND_SYNC`
+ (`4_World\Classes\UndergroundHandlerClient.c:1-7`). Calculated by the client based on the
+ trigger it is in (`:470-475`).
+ - [EXACT][CLAIM-UG-PRESENCE-SYNC-130] In 1.30 the client sends it to the server.
+ - `SetUnderground` sends `INPUT_UDT_UNDERGROUND_SYNC`
(`4_World\Entities\ManBase\PlayerBase.c:2853-2865`).
- - El servidor la acepta en `OnInputUserDataProcess` solo con una comprobación de rango
+ - The server accepts it in `OnInputUserDataProcess` with only a range check
(`:6531`, `:6557-6563`).
- - En 1.29 el valor solo existía en el cliente.
- - Consecuencia: el servidor ya conoce la presencia. Antes, cualquier comprobación de
- servidor que la leyera veía `NONE`.
- - Una de esas comprobaciones es `CanPlaceItem` (`PlayerBase.c:2834-2846`, llamado desde
- `Hologram.c:438`): dentro de un trigger bloquea los tipos de
+ - In 1.29 the value only existed on the client.
+ - Consequence: the server now knows presence. Previously, any server-side
+ check reading it saw `NONE`.
+ - One such check is `CanPlaceItem` (`PlayerBase.c:2834-2846`, called from
+ `Hologram.c:438`): inside a trigger it blocks types from
`disallowedTypesInUnderground`.
- - Por defecto: `FenceKit`, `TerritoryFlagKit` y `WatchtowerKit`
+ - By default: `FenceKit`, `TerritoryFlagKit`, and `WatchtowerKit`
(`3_Game\CfgGameplayDataJson.c:229-232`).
- - Se configura en `cfggameplay.json` > `BaseBuildingData` > `HologramData`.
- - El valor lo decide el cliente: el servidor no lo recalcula.
+ - Configured in `cfggameplay.json` > `BaseBuildingData` > `HologramData`.
+ - The value is decided by the client: the server does not recalculate it.
- ## Badlands en los scripts de 1.30
+ ## Badlands in 1.30 scripts
- - **Búnkeres anunciados por radio.**
- - Clases `Land_Bunker_Basement_*` y `Land_Bunker_Shelter_*`
- (`4_World\Entities\Building\Bunker.c:289-294`), con cerradura de código.
- - La radio emite coordenadas y código en Morse.
- - Se configuran en `cfgbunkerbroadcast.json`, en `$mission:` o en
- `dz/worlds/<mundo>/ce/` (`3_Game\CfgBunkerBroadcastHandler.c:5,23-27`), más
- `bunkerBroadcastEnabled` en `cfggameplay.json` (`CfgGameplayDataJson.c:193`).
- - El fichero de estado lo cubre `dayz-persistence`.
- - **Túnel de riego.** `Land_IrrigationTunnel_Entrance_01` está en
- `4_World\Entities\Building\Rebuildable\` (`IrrigationTunnel_Entrance.c:1-11`): la
- entrada es reconstruible, y su spawn de depuración le mete palos y cuerda. La
- reconstrucción la cubre `dayz-basebuilding`.
- - Los configs y modelos de Nasdara no vienen en la 1.30 Exp: solo sus scripts (medido el
- 2026-09-24 sobre los PBO sin cifrar).
- - Bohemia (Dev Blog Recap 2, Steam, 2026-09-22): las instalaciones subterráneas de
- Badlands usan el sistema de terrain holes, que estará disponible para otros mapas y
- para la comunidad de modding.
+ - **Radio-announced bunkers.**
+ - Classes `Land_Bunker_Basement_*` and `Land_Bunker_Shelter_*`
+ (`4_World\Entities\Building\Bunker.c:289-294`), with code lock.
+ - The radio broadcasts coordinates and code in Morse.
+ - Configured in `cfgbunkerbroadcast.json`, in `$mission:` or in
+ `dz/worlds/<mundo>/ce/` (`3_Game\CfgBunkerBroadcastHandler.c:5,23-27`), plus
+ `bunkerBroadcastEnabled` in `cfggameplay.json` (`CfgGameplayDataJson.c:193`).
+ - State file is covered by `dayz-persistence`.
+ - **Irrigation tunnel.** `Land_IrrigationTunnel_Entrance_01` is in
+ `4_World\Entities\Building\Rebuildable\` (`IrrigationTunnel_Entrance.c:1-11`): the
+ entrance is rebuildable, and its debug spawn populates it with sticks and rope.
+ Rebuilding is covered by `dayz-basebuilding`.
+ - Nasdara configs and models are not included in 1.30 Exp: only its scripts (measured
+ 2026-09-24 on unencrypted PBOs).
+ - Bohemia (Dev Blog Recap 2, Steam, 2026-09-22): Badlands underground facilities
+ use the terrain holes system, which will be available for other maps and
+ for the modding community.
- ## Estado de verificación
+ ## Verification status
- | Afirmación | Nivel |
+ | Claim | Level |
|---|---|
- | Formato `Holes`/`tiles[]`, `SurfaceIsHole`, sincronización de presencia, tope de triggers, esquema del JSON | `source_verified` |
- | Una entrada de `tiles[]` es una celda del heightmap; 6,25 m en Livonia | `cross_checked` (encaje con los triggers) |
- | Los holes viven en el config, no en el `.wrp` | `cross_checked` (el `.wrp` crece igual con y sin holes) |
- | Cómo se ve y colisiona un agujero, qué pasa al caer por él, IA y navmesh | `unverified` |
- | Un mod de solo config abre holes en un mapa vanilla | `unverified` (hipótesis) |
- | `holes.cfg` junto a `layers.cfg` y recarga en alt-tab | `unverified` (terceros: FTT) |
- | Efecto de `ECE_OBJECT_SPAWNER` | `unverified` |
+ | Format `Holes`/`tiles[]`, `SurfaceIsHole`, presence synchronization, trigger cap, JSON schema | `source_verified` |
+ | One entry in `tiles[]` is a heightmap cell; 6.25 m in Livonia | `cross_checked` (fit with triggers) |
+ | Holes reside in config, not in `.wrp` | `cross_checked` (`.wrp` grows identically with and without holes) |
+ | How a hole renders and collides, what happens when falling through it, AI and navmesh | `unverified` |
+ | A config-only mod opens holes in a vanilla map | `unverified` (hypothesis) |
+ | `holes.cfg` next to `layers.cfg` and reload on alt-tab | `unverified` (third parties: FTT) |
+ | Effect of `ECE_OBJECT_SPAWNER` | `unverified` |
- ## Antes de diseñar sobre holes
+ ## Before designing with holes
- Cada prueba sube una fila de §Estado de verificación. Juntas caben en una sola sesión de
+ Each test advances one row of §Verification status. Together they fit in a single session of
DayZDiag 1.30 (`dayz-test-ingame`, `dayz-mcp-verify`):
- 1. **Livonia vanilla.** `g_Game.SurfaceIsHole(740, 1225)` debe dar `true` (celda
- `{118,196}`) y `g_Game.SurfaceIsHole(1000, 1000)` `false`. Una captura desde fuera y
- otra desde dentro del agujero.
- 2. **Mod de solo config.** Añade un grupo propio en `CfgWorlds >> ChernarusPlus >> Holes`
- y repite la comprobación en su celda.
- 3. **Geometría del mod.** Coloca un objeto con el Object Spawner bajo ese agujero y
- comprueba que se ve desde dentro y desde fuera, y que colisiona.
- 4. **Caída.** Suelta un objeto y entra con un personaje en un agujero sin geometría.
+ 1. **Livonia vanilla.** `g_Game.SurfaceIsHole(740, 1225)` must return `true` (cell
+ `{118,196}`) and `g_Game.SurfaceIsHole(1000, 1000)` `false`. One screenshot from outside and
+ another from inside the hole.
+ 2. **Config-only mod.** Add a custom group in `CfgWorlds >> ChernarusPlus >> Holes`
+ and repeat the check on its cell.
+ 3. **Mod geometry.** Place an object with Object Spawner under that hole and
+ verify that it is visible from inside and outside, and that it collides.
+ 4. **Falling.** Drop an object and enter with a character into a hole without geometry.
## Delegaciones
- | Tema | Skill |
+ | Topic | Skill |
|---|---|
- | Partes construibles, reconstrucción, cerraduras | `dayz-basebuilding` |
- | Fichero de estado del bunker broadcast | `dayz-persistence` |
- | Editor de triggers dentro del flujo general del mod | `dayz-mod-workflow` |
- | Inputs de Buldozer y API de Enforce 1.30 | `enforce-script-reference` |
- | Lanzar el juego y verificar con capturas | `dayz-test-ingame` + `dayz-mcp-verify` |
- | Tormenta de arena y calor de Nasdara | `dayz-environment-hazards` |
+ | Base building parts, reconstruction, locks | `dayz-basebuilding` |
+ | Bunker broadcast state file | `dayz-persistence` |
+ | Trigger editor within general mod workflow | `dayz-mod-workflow` |
+ | Buldozer inputs and Enforce 1.30 API | `enforce-script-reference` |
+ | Launch game and verify with screenshots | `dayz-test-ingame` + `dayz-mcp-verify` |
+ | Sandstorm and heat of Nasdara | `dayz-environment-hazards` |
## Referencias
- - `references/terrain-holes-evidence.md`: cadenas nuevas del motor y sus referencias en el
- código, diff del config de Livonia, cuentas del tamaño de celda, `.wrp` v29→v32 y fuentes
- oficiales y de terceros.
- - `references/underground-triggers.md`: esquema completo de `cfgundergroundtriggers.json`,
- receta del trigger con `Tag` y presencia bajo tierra.
+ - `references/terrain-holes-evidence.md`: new engine strings and their references in
+ code, Livonia config diff, cell size calculations, `.wrp` v29→v32, and official
+ and third-party sources.
+ - `references/underground-triggers.md`: full schema of `cfgundergroundtriggers.json`,
+ trigger recipe with `Tag` and underground presence.
- ## LO QUE ESTA SKILL NO PUDO VERIFICAR
+ ## WHAT THIS SKILL COULD NOT VERIFY
- - Ningún comportamiento en el juego: render, colisión, oclusión, caída, IA y navmesh.
- - El tamaño de celda de cualquier mapa que no sea Livonia, y el de Livonia leído de la
- cabecera del `.wrp`.
- - Sakhal: su mundo va en un `.ebo` cifrado y no se pudo leer.
- - Dónde busca exactamente el motor `holes.cfg` y si un mod de solo config abre agujeros.
- - Qué hace el motor con `ECE_OBJECT_SPAWNER`.
+ - Any in-game behavior: rendering, collision, occlusion, falling, AI, and navmesh.
+ - Cell size of any map other than Livonia, and Livonia's read from the
+ header of `.wrp`.
+ - Sakhal: its world is stored in an encrypted `.ebo` and could not be read.
+ - Exactly where the engine looks for `holes.cfg` and whether a config-only mod opens holes.
+ - What the engine does with `ECE_OBJECT_SPAWNER`.