Radiant is the map editor supplied with BO3 Mod Tools. Apothicon edits supported source data and invokes native tools; it also lets your agent inspect maps and compose changes without operating Radiant for every step.
Work safely with Radiant
Save the map in Radiant before an external edit, then reload it after applying the change. Source hashes catch edits made before a transaction commits, but cannot prevent a later save from an old in-memory Radiant document.
Most editing tools apply changes unless dry_run=true. Start with a preview when reviewing an unfamiliar operation. Successful writes are journalled; edit_history, undo_edit and recover_workspace provide the history and recovery paths. Related changes can use batch_edit_map so a preparation failure writes nothing.
Inspect before editing
Use inspect_map, list_entities and get_entity to understand the source and select entity IDs. zone_graph describes static progression, while export_map_preview gives an SVG XY plan. Neither establishes runtime navigation or collision.
Standard map inspection covers top-level entities. Use inspect_prefab_hierarchy for nested misc_prefab references. It resolves staged and installed source, reports missing files and cycles, and expands supported yaw-only transforms within explicit budgets. An incomplete branch remains visible in the result.
Coordinates use [X,Y,Z], with Z up. Distances are Radiant units; yaw rotates around Z.
Author geometry and materials
Tools include add_box, create_room, create_stairs, create_ramp, create_arch and create_platform. Room bounds describe clear interior space; wall thickness extends outside those bounds. Openings must fit within the wall.
seal_exterior adds six slabs around explicit clear bounds. It does not prove the BSP is leak-free. Check the official compiler’s diagnostics and inspect the map in the engine.
Choose visible materials that exist in your installation. caulk is useful for blockouts and hidden faces, but is invisible. A valid identifier does not establish that a surface renders as intended.
For existing geometry, transform_geometry supports selected brushes in worldspawn or inert func_group entities, using translation, yaw and positive uniform scale. Unsupported grammar, moving brush owners and unsupported transforms fail before writing. set_brush_face_material replaces selected planar-face material identifiers. subtract_box supports bounded subtraction from proven axis-aligned six-plane boxes.
These operations preserve unrelated text and supported source formatting. Inspect texture alignment after transforms; retaining projection bytes does not guarantee the same visual result.
Place gameplay features
Create managed zones before placing their spawners. Use connect_zones and add_buyable_door for explicit progression. Stock windows and feature prefabs need the corresponding installed source; missing or ambiguous exemplars are reported before writing.
Keep clear paths around doorways, spawn entries and interaction points. Source structure checks are followed by compiled collision, navigation and gameplay checks.
Add reproducible terrain
generate_terrain creates seeded noise heightfields; persist_terrain accepts a hand-authored grid. Managed terrain commits geometry and usermaps/<name>/apothicon/terrain.json together.
sample_terrain returns height and a surface normal. place_on_terrain projects supported point recipes onto that saved grid. It does not automatically align models to slopes or measure their footprints.
Stored hashes detect changed terrain. Regenerate or reconcile stale sampling data after geometry edits. Sampling describes the saved grid; compiled tessellation, collision and navigation still need inspection. Original noise terrain requires no GPU or model download; optional diffusion is a separate prepared workflow.