Releases: heaven-hm/project-igi-editor
Release list
v3.6.7-pre — Fog Intensity (0-200%) + Lightmap Crash Fixes
✨ New Feature
- Fog Intensity spinner in Terrain Options,
Fog Intensity [-] [N%] [+], under the existing Fog checkbox in the pause menu's expanded "Terrain Options" section. Value is a percentage, 0-200%, step 10, defaults to 200% (maximum thickness) — persists toqedconfig.qscasFogIntensityand scales fog distance live, no level reload needed. - 100% = the level's original fog distance, 0% = 2x distance (thinnest), 200% = 0.05x distance (thickest, clamped so the fog shader's
far - nearnever hits zero). Pure CPU-side distance scaling — no shader changes.
🐛 Bug Fixes
- Fixed fog scale inverted at low percentages. An earlier build's
100/percentformula made the (then-)default 20% setting push fog five times farther away instead of thickening it, making fog effectively invisible. Replaced with a linear scale anchored at 100% = unchanged, and changed the shipped default to 200% (thickest) enabled by default. - Fixed pause-menu mouse hit-test offset.
Input_OnMouse's localmenu_hhad drifted out of sync with the actual rendered menu height after the Fog Intensity row was added, misaligning every click target below it by ~19px. - Fixed Lightmaps checkbox silently doing nothing on large levels. A hardcoded
targets.size() > 350guard skipped the entire bulk lightmap bake on levels with more than 350 objects (e.g. level1 = 481). Removed entirely — all objects are now processed regardless of level size. - Fixed crash on very large levels (e.g. level 13, 1023 targets) during bulk lightmap bake. igi1ed.exe is a 32-bit process; baking lightmaps for 1000+ objects could exhaust its virtual address space and crash. The bulk bake now checks available virtual memory before each object and stops gracefully with headroom to spare instead of racing toward a crash.
📦 Assets
igi1ed.exe— editor binary onlyigi-editor-3.6.7-pre-win32.zip/.7z— full release folder (igi1ed.exe, freeglut.dll, glew32.dll, editor/ runtime files)
Full changelog: see CHANGELOGS.md in the repo.
v3.6.0-pre — Animations, Music, Lightmapping & More
v3.6.0-pre — Animations, Music, Lightmapping & More
✨ Major Highlights
- 🤖 AI Auto-Playing Animations — Every eligible AI animates automatically at level load, all in parallel across worker threads.
- 🔫 AI Held Weapons — Soldiers now hold their assigned weapon in-hand, attached to the right hand bone.
- 🎵 Level Music + Escape-Menu Toggle — Level-specific .wav auto-plays on load with seamless looping.
- 💡 Full Lightmap Bake-Apply Pipeline — Select an object, click Calculate Light Mapping, and the editor bakes a ray-traced lightmap and applies it live.
- 🎮 Escape-Menu Fog Controls — Fog On/Off toggle + Fog Intensity spinner (0–200%).
- 🖥️ Developer Mode & Automated Screenshots — --developer-mode flag enables headless command polling.
- 🔧 Cross-Level Foreign Model Extraction — Fixed .mef/.tex extraction for models from other levels.
v3.4.1-pre — Live Graph Sync, Exact-ID Find & AI Script Notepad
IGI Editor v3.4.1-pre
Pre-release build of the IGI Editor. All file conversion is now routed through the bundled igi1conv.exe (v1.7.0); see the igi1conv release notes for the matching converter release.
3.4.1-pre — Live Graph Sync, Exact-ID Find & AI Script Notepad
🐛 Bug Fixes
- Live graph-overlay sync (F7 view follows the AIGraph task live). Moving the AIGraph task via the TaskTree property panel, the 2D position pad / Z slider, or Undo / Redo updates the renderer's
graph_overlay_offset_immediately so the 3D nodes and edges stay anchored to the task. - Exact-match
TaskFindByTaskID. Task IDs are pixel-perfect — typing"7"now matches only the task with id"7", not"73","700", or any other id containing"7". Other find modes (TextInTask,ByNote,TaskNameTypeId) keep their substring behaviour. - AI Script editor Ctrl shortcuts work. GLUT sends the ASCII control-character code for
Ctrl+letter(1=SOH/A, 3=ETX/C, 0x18=CAN/X, 0x16=SYN/V, 0x19=EM/Y, 0x1A=SUB/Z), not the letter itself. The handler now matches on both forms. - AI Script selection highlight draws on the right line. OpenGL Y is bottom-up; the blue band now wraps its vertices in
gl_y()so it sits on the selected characters, not at the top of the screen.
✨ New Features
- AI Script editor — full notepad surface, scoped to the AI Script text only. Gated on
prop_text_edit_field_ == kAIScriptTextFieldso other property text fields, the find bar,Ctrl+N, save bindings, andCtrl+Hkeep working unchanged.Ctrl+ASelect allCtrl+C/Ctrl+X/Ctrl+VCopy / cut / paste via Windows clipboardCtrl+ZUndo (AI-script-local stack, capped at 100 entries)Ctrl+Y/Ctrl+Shift+ZRedoShift+Left/Right/Up/Down/Home/EndExtend selectionCtrl+Home/Ctrl+EndStart / end of bufferBackspace/Delete/Enter/ printable typing — replace the active selection- Mouse: click places caret and clears selection;
Shift+Clickextends from existing anchor;Click+Dragis live drag-selection with auto-scroll at the box edges; clicking elsewhere drops the selection.
- AI Script editor — local undo/redo. Each mutating op (insert, paste, cut, delete, replace) pushes a full-text snapshot so
Ctrl+Z/Ctrl+Yare O(1) and byte-perfect. Edits stay in the live buffer; onlyCtrl+S/Ctrl+W(existing save bindings) commit to the.qvmon disk.
⌨️ New Keybindings (AI Script editor only)
| Event | Binding | Action |
|---|---|---|
AiScriptSelectAll |
Ctrl+A |
Select all in the AI Script text |
AiScriptCopy |
Ctrl+C |
Copy selection (or whole buffer) to clipboard |
AiScriptCut |
Ctrl+X |
Cut selection (or whole buffer) to clipboard |
AiScriptPaste |
Ctrl+V |
Paste from clipboard at caret |
AiScriptUndo |
Ctrl+Z |
Undo last AI Script edit |
AiScriptRedo |
Ctrl+Y / Ctrl+Shift+Z |
Redo last undone edit |
AiScriptExtendSel |
Shift+Left/Right/Up/Down/Home/End |
Extend selection (no auto-commit) |
AiScriptDragSel |
Click+Drag in AI Script text | Live drag-selection with edge auto-scroll |
3.4.0-pre — igi1conv-Only Parsers Migration
🛠️ Refactor
- Removed
source/parsers/folder entirely. Every file-conversion call in the editor now goes through the bundledigi1conv.exe(v1.7.0, located ateditor/tools/igi1conv/). The newsource/utils_igi1conv.{h,cpp}shared runner is the single spawner used by every consumer. - Single source of truth for asset conversion.
dat export,mtp dump,qvm decompile,qsc compile,res list/extract/append,graph export,tex to-png/to-tga,mef export,fnt export,terrain export-lmp/export-ctr. - In-process loaders kept only where no CLI subcommand can supply the runtime data the editor needs every frame:
mef_native→source/renderer/(rawParsedGeometryfor GL upload)fnt_parser→source/renderer/(per-glyph UV/advance for HUD draw)qsc_lexer,qsc_parser→source/level/(AI script token/AST walk)terrain_files→source/level/(LMP/CTR runtime loaders)qvm_parser,qvm_compiler,qvm_decompiler→source/level/(used byverify_level_core,--run-tests, and the qvm roundtrip gtest)
- Writer classes relocated to consumer folders (read side replaced by
igi1conv; write side kept in C++):dat_writer,graph_writer,mtp_writer,tex_writer,res_writer,res_compiler. - Dead code removed:
mef_parser,mef_exporter,mtp_tool.
📦 New API
igi1conv::namespace insource/utils_igi1conv.hexposes high-level wrappers for every subcommand the editor needs:ResList,ResExtract,ResAppend,ResPack,DatExportJson,DatToMtp,MtpDumpJson,MtpInfo,GraphExportJson,GraphInfo,TexDecode,TexToPng,TexToTga,TexInfo,QvmDecompile,QvmInfo,QvmDisasm,QscCompile,QscValidate,FntExportPng,FntInfo,TerrainExportLmp,TerrainExportCtr,TerrainInfo,MefExportObj,MefInfo.
🔧 Build / Toolchain
CMakeLists.txt: dropped thefile(GLOB SOURCES_PARSERS "source/parsers/*.*")line and thetarget_include_directories(... source/parsers ...)entry. Theigi_teststarget_sourceslist updated to point at the new locations.assets/editor/tools/igi1conv/ships with v1.7.0.
📁 File-level change summary
- 14 parsers relocated from
source/parsers/tosource/renderer/orsource/level/ - 3 dead parsers deleted (
mef_parser,mef_exporter,mtp_tool)
Tests
- 275 tests across 28 suites. 273 pass on level 1; the same 2 pre-existing writer byte-roundtrip failures carry over from
feature/graph-editor(GraphParserTest.WriteUnchangedIsByteIdentical,MtpWriterTest.PreservesUntouchedChunksByteForByte) and are unrelated to either of these releases.
Quick start
- Extract
igi1ed_v3.4.1-pre.7zto your IGI install folder. - Make sure
editor/tools/igi1conv/igi1conv.exeis present (bundled with the editor). - Run
igi1ed.exe --helpfor CLI options or launch the GUI.
What's in the archive
igi1ed.exe— main editor (GUI + headless CLI)igi_tests.exe— standalone GoogleTest binary (no source tree needed at runtime)editor/— full editor resources (docs, fonts, shaders, igi1conv + Qt runtime)fixtures/— test fixtures for the gtest suitefreeglut.dll,glew32.dll— OpenGL runtimeversion— version string
v3.3.0-pre
v3.3.0-pre — Auto-Save, Unified Undo/Redo & AI Script Hotkey Support
✨ New Features
- Auto-Save System — New pause-menu "Auto Save" row with toggle (
Save Enable/Save Disable) and interval spinner (10s steps, 10s–3600s). Toggle withCtrl+Shift+A, adjust withCtrl+Shift+]/Ctrl+Shift+[. When enabled the editor auto-saves the current level at the configured interval. - SaveState (Ctrl+W) & SaveObjectFile (Ctrl+S) work from
qedkeybindings.qsc— All save hotkeys are dispatched viaDispatchEventBindingsusing bindings loaded fromeditor\qed\qedkeybindings.qsc, no hardcoded keys. - AI script saves via Ctrl+W / Ctrl+S — The text editor pre-checks save bindings and commits the in-flight AI edit before letting the key reach the dispatcher. The AI script
.qvmis now saved correctly when pressing SaveState while the AI textbox is focused. - ESC closing the property panel commits AI script edits — previously ESC discarded the in-flight edit buffer; now it commits to
ai_script_text_withai_script_dirty_=true.
🐛 Bug Fixes (initial release)
- AI Script not saved via Ctrl+W / Ctrl+S — text editor was swallowing the key as a printable character.
- ESC discarded AI script edits — fixed.
- Undo/Redo broke building ATTA positions — restored ATTA proxies are now re-flushed to the MEF binary.
- Pause-menu AutoSave row not updating display — missing fields in the pause-mode
task_tree_viewstruct, fixed. - ResetLevel did not fully reset graphs / AI / textures — changed to full folder replacement (
remove_all+ recursive copy) so deleted graph nodes, removed AI scripts, and other stale files are all reverted. - AutoSave config not reloaded on startup —
QEDAutoSaveEnabledandQEDAutoSaveIntervalare now parsed on launch. - Terrain undo/redo didn't restore heightmap edits — added
SnapshotHMP/RestoreHMPthat byte-copies the HMP buffer. - Editor created a
contentfolder in the install path — all asset cache stamps and terrain extract moved undereditor\.
🐛 Bug Fixes (post-release patches)
- HumanAI not found when nested under a non-AI child (e.g.
HumanSoldier → GunM16A2 → HumanAI) —LoadAIScriptForSelected()now walks the children tree recursively (BFS, up to 15 levels deep) instead of only checking direct children. If not found within 15 levels a warning is logged with the parent name and taskId. - AI script editor section never appeared for HumanSoldiers whose modelId isn't tagged
AITYPE_in IGIModels.json — bothLoadAIScriptForSelected()and the renderer'sselected_obj_is_aiflag now also check the object type (HumanSoldier,HumanSoldierFemale,HumanPlayer,HumanSoldierRPG,HumanAI) in addition to theai_model_ids_set, so the AI Script section renders for every AI container regardless of modelId. - AI script load diagnostic logging — on success, the loaded path and resolved
HumanAItaskId are logged; whenHumanAIis found but itstaskIdis empty, a warning is logged.
⌨️ Pause Menu Reorder & UI Polish
- Pause menu now lists rows in this order: Resume → Font → Select Level → Auto Save → Model Search → Terrain Options → Reset Level → Save Level → Quit
- Row spacing increased from 35px to 38px for a cleaner, less cramped layout; first row starts at a slightly higher position for better top padding
- Title "IGI EDITOR" and subtitle "PAUSED" are now centered by measured text width (was hardcoded offset)
- Terrain header and checkbox rows use the same
strlen * 4centering as plain buttons, so all text is consistently aligned - Auto Save label shortened from "Auto Save Enable" / "Auto Save Disable" to "Save Enable" / "Save Disable" for a cleaner row
- Click hit-zones updated to ±16px to match the new 38px row spacing
🎯 Pause Menu Alignment Fixes (post-release)
- Spinner rows now share identical layout: Font / Select Level / Save Enable all use the same
btn_w=22,gap=6,val_w=44,label_gap=14and compute label width dynamically fromstrlen(lbl) * 6. The whole label+spinner group is centered in the 460px menu, so the- [val] +group sits at the same horizontal position in every spinner row. - Model Search text input box no longer overflows the menu border — the whole label+box group is centered.
- Centering math corrected: button-label centering was using
strlen * 4(only correct for 6-7 char strings like "PAUSED") which shifted longer strings like "Reset Level" and "Save Level" off-center. Changed tostrlen * 3(half of the 6px font width) so all plain buttons center correctly relative to the menu's vertical axis. Title "IGI EDITOR" and subtitle "PAUSED" use the same correct formula.
⌨️ New Keybindings
| Event | Binding | Action |
|---|---|---|
ToggleAutoSave |
<Ctrl><Shift><A> |
Toggle auto-save on/off |
AutoSaveIntervalUp |
<Ctrl><Shift><]> |
Increase auto-save interval by 10s |
AutoSaveIntervalDown |
<Ctrl><Shift><[> |
Decrease auto-save interval by 10s |
📦 Download
Extract igi1ed_v3.3.0-pre.zip into your IGI1 install path (or use the editor's editor/ tree). The release zip intentionally excludes igi_tests.exe and the fixtures/ test folder — it contains the editor binary, DLLs, version file, and the full editor/ tree. See README.md for setup.
v3.2.0-pre — Graph Link Editing, Legacy Format & Edge Visibility
3.2.0-pre — Graph Link Editing, Legacy Format & Edge Visibility
✨ New Features
- Add/Remove Links (Two-Step Workflow): Navigation edges between graph nodes can now be added and removed interactively. Select node A, press
Alt++to mark it as the link source (green double-ring indicator), select node B, pressAlt++again to create the link. UseAlt+-to remove a link the same way. - Node Label Toggle: On-screen node ID labels can now be toggled on/off with
Alt+L. The title banner shows[labels off]when disabled. - Legacy Graph Format Support: Added a parser, full writer, and position-patch saver for the undocumented alternate tagged graph format (1-byte type tags:
0x05=int32,0x06=float,0x08=Vec3d,0x09=string, no magic number). This fixes the "bad magic" error that prevented level 8'sgraph1.datandgraph7.dat(and other legacy graphs) from loading and displaying.
🐛 Bug Fixes
- Fixed: "Bad magic" error on level 8 graph1: Graph files using the legacy tagged format (no
0xFFEEDDCCmagic) are now auto-detected and parsed transparently — both standard and legacy formats produce the same editableGraphFileand support full add/remove/edit/save. - Fixed: Links not visible / not above ground: Edge lines were drawn at node Z (ground level), getting buried under terrain. Edges now render at the vertical centre of the node boxes (
z + H) so they sit above ground and are clearly visible.
⌨️ New Keybindings
| Event | Binding | Action |
|---|---|---|
AddGraphLink |
<Alt><Plus> |
Two-step: mark source node, then link to target node |
RemoveGraphLink |
<Alt><Minus> |
Two-step: mark source node, then unlink target node |
ToggleGraphNodeLabels |
<Alt><L> |
Toggle on-screen node ID labels |
🧪 Tests
- Added 4 new tests for the legacy graph format: parse validity, node data sanity, write round-trip, and position-patch save.
- 31/32 graph tests pass (1 pre-existing failure in
WriteUnchangedIsByteIdentical, unrelated to this release).
📦 Build
- Built as 32-bit (Win32/x86) Release with CMake + VS 2022.
igi1ed.exedeployed toD:\IGI1\.
3.1.0-pre - 3D Graph Editor
Visual 3D Graph Editor
- Added: Visual 3D Graph Editor (interactive 3D nodes, material color coding, and path/edge rendering via F3 overlay).
- Added: Binary parser, patch saver, and full writer serialization for AI navigation graph
.datfiles. - Added: Config option
QGraphNodeSizeto control node box sizing. - Fixed: Terrain sculpting vs object selection click conflicts, right-click triggers.
- Fixed: Syncing of level graph subdirectories to backup folders.
IGI Editor v3.0.0 — igi1conv Qt Integration & Bug Fixes
IGI Editor v3.0.0 — igi1conv Qt Integration, Module Refactor & Bug Fixes
🔧 igi1conv — Standalone Asset Converter (Qt)
- Developed at project-igi-conv — ships with GUI and headless CLI mode
- Full Qt5 runtime bundled (
editor/tools/igi1conv/) — no separate Qt install needed - Updated to igi1conv v1.6.0 with improved conversion accuracy
- Native MTP generation via
igi1conv dat to-mtpfixes transparent/wrong-texture issues on model import
🗂️ Module Refactor
renderer_objectssplit into picking, mesh, visual, metadata, texture, ATTA subsystemsappsplit into input (mouse/keyboard/dispatch), editor, view, lookup, level, UI modulesterrainsplit into terrain_io, terrain_lod, terrain_mesh, terrain_query
🖥️ UI Improvements
- Level spinner in pause menu for quick level switching
- Texture panel removed from pause menu
- Editor file verification on launch with clear error dialog
🐛 Bug Fixes
- Arrow keys no longer move camera without SHIFT+ALT
- Weapon/ammo model orientation corrected
- ESC menu re-open regression fixed
- Terrain rings appear immediately on right-click
- DAT round-trip data loss fixed
- matCount bounds guard added
- terrain_lod stack underflow fixed (stack_size < 0 changed to <= 0)
- Switch object modelId serialize/parse index mismatch fixed (index 11 to 17)
- Wrong error message in HeightMap loader corrected
- Boundary-aware texture matching fixed
- JSON parser edge-case crash fixed
📦 Installation
- Extract the zip to your Project IGI game folder (alongside igi.exe)
- Run: igi1ed.exe -level 1 -draw_parts 49 -stick_to_ground
Requires a legally licensed copy of Project I.G.I.
Release 2.9.0
2.9.0 — New Terrain Editor, Foreign Models Support & UI Fixes
This release introduces a new Terrain editor, support for loading and adding foreign models from other levels, and critical bug fixes to the pause menu layout and viewport interaction.
🗺️ New Terrain Editor
- Interactive Terrain Tools — Enhanced level design capabilities with the new terrain editor interface and brush controls.
📦 Foreign Model Support
- Cross-Level Assets — Added the ability to import and add foreign models from different game levels directly into the current level.
🔧 Pause Menu & UI Bug Fixes
- Terrain Options Expand/Collapse — Fixed the list in Terrain Options in the Pause menu to properly expand and collapse when clicked.
- Immediate 3D Rings Refresh — When terrain is selected via right-click, the 3D brush rings now display immediately in the viewport without delay by forcing immediate frame redisplays.
v2.8.0 — AI Script Editor, Object List, Terrain Editor
🤖 IGI Editor v2.8.0 — Pre-Release
This release brings a full inline AI Script Editor embedded inside the property panel, a proper mini-notepad text editor with scrolling and arrow-key navigation, a complete autocomplete overhaul that makes Ctrl+N/Ctrl+Space work in every textbox, and three keyboard shortcut fixes in the find system.
✨ What's New
🤖 Inline AI Script Editor
The biggest feature of this release. When you select any HumanSoldier or HumanAI task and open its properties, the panel now shows a dedicated AI Script section at the bottom:
- AI Script Path — Editable textbox showing the resolved
.qvmfile path (e.g.D:\IGI1\missions\location0\level1\ai\2203.qvm). Change the path and press Enter to load a different script file. - AI Script — Tall multiline textbox showing the fully decompiled QSC source of the AI behaviour script. Edit it like a text file.
- Correct task ID — The path correctly uses the HumanAI child task's ID (e.g.
2203), not the parent HumanSoldier's ID. - Compile-on-Save — Changes compile back to
.qvmonly when you save the level (F3 / Save button). An orange "modified — save to compile" label appears when unsaved edits exist. - Round-trip validation — After compiling, the written
.qvmis parsed back to catch silent corruption before it reaches the game.
📝 Mini-Notepad Text Editor
The AI script textbox is a real text editor — not just a display:
| Feature | Detail |
|---|---|
| Vertical scrolling | Mouse wheel + PageUp / PageDown |
| Arrow key navigation | ← → by character · ↑ ↓ by visual line (column preserved across wrapped lines) |
| Mouse click positioning | Click anywhere in the box to move the caret to that character |
| Horizontal scroll (path box) | Path textbox scrolls horizontally as you type or move the caret |
| Proper line wrapping | \n-aware: each logical line renders on its own row; long lines wrap at box width |
| Active border | Box highlights with a yellow border when focused for editing |
| Autocomplete | Ctrl+N opens keyword picker, Ctrl+Space inline-completes the word at cursor |
🔡 Autocomplete Overhaul — Works Everywhere Now
Root cause fixed: A stale prop_text_edit_field_ < 0 guard was silently blocking Ctrl+N, Ctrl+Space, and Ctrl+O in every text field. All guards now correctly check == -1 (the actual "no field" sentinel), so AI field IDs (-10, -11) no longer get blocked.
| Shortcut | What it does |
|---|---|
Ctrl+N |
Opens keyword picker — INSERT at cursor in AI script, REPLACE in standard fields |
Ctrl+Space |
Inline autocomplete — completes the word before the cursor in any text box |
Ctrl+O |
Model ID picker — unchanged, still working as before |
Caret-preserving insert: When Ctrl+N opens the picker, the cursor position is saved. Confirming a pick inserts the keyword exactly where your cursor was in the script — the code before and after the cursor is preserved.
Example: Type
WEAPON_ID_AK→ press Ctrl+Space → auto-completes toWEAPON_ID_AK47
⌨️ Find Shortcut Fixes
| Shortcut | Fix |
|---|---|
Ctrl+Shift+X |
TaskFindTextInTask — rebound from Ctrl+H (was permanently blocked by ASCII backspace) |
Ctrl+Shift+N |
TaskFindByTaskNote — was consumed by Ctrl+N autocomplete intercept; now correctly fires |
Ctrl+Shift+F |
TaskFindAgain — now scrolls and highlights the found task in the tree after each press |
📦 Installation
- Download IGI Editor v2.8.0 (Windows x86) below
- Extract to your Project IGI game directory (next to
igi.exe) - Run
igi1ed.exe
Requires: Project IGI installed at a known path. The editor auto-detects the IGI root from its own directory.
🗒️ Full Changelog
See CHANGELOGS.md for the complete change log.
Compatibility: Fully backward compatible — existing levels and configurations work without modification.
v2.6.0
IGI Editor v2.6.0 is here!
• Added Properties Editor with a new UI.
• Added support for editable Attachments objects.
• Fixed Road Tracks SplineObjs.
• Added Editor Fonts and Sprites.
• Fixed more bugs and improved stability.
Try it out and let me know what you think!