Update 2.37
6/7/2026
v2.37.0BETA
Seymour
Monster AI Editor: a PROVEN "If HP below X%" condition (IDA+corpus) + 222 named property fields (end of "campo 0xNN")
- Halyson said to use IDA and guessed "it must be a config file where the line = a number" — both spot on. RE in
FFX_recon.i64: the ATEL native dispatch =handler = *(FuncspaceTables[funcId>>12] + 16*(funcId&0xFFF))(slot +0 CALLPOPA / +12 CALL);readChrProperty(0x700F) =0x7A4D70→ afield→propertyswitch (sub_7B2DD0). Cross-referenced with FFXDataParser/ScriptConstants.putBattleActorProperty (the "config" the owner intuited) + the corpus: field 0x00 = HP (stat_hp, the corpus' most-read property — 306×), 0x02 = maxHP (137×), 0x119 = NearDeath (= IDA case 281current<max/2). Arithmetic opcodes proven (* 0x16etc.). #11 REAL shipped: a guarded snippet "If HP below X% → force command" = theHP*100 < maxHP*Xidiom (corpus-proven fields 0/2) — the real boss-enrage, no longer a guess (the earlier v2.35.0 version was generic because the HP field wasn't proven; now it is). Naming: newFfxLib/Ai/AiChrPropertyNames.cs(222 named fields, same public provenance as the codec's func-name table) wired into the buff/stat detector → status actions now show "Haste/Protect/StatusPoison/HP/maxHP…" instead of "campo 0xNN". Gate--ai2: HP%-enrage 346/346 + conditional 346/346;--ai3PASS. Docs:docs/reverse/FFX_AI_NATIVE_DISPATCH_AND_CHRPROPERTY_FIELDMAP_2026-06-07.md(+ rename-queue for the.i64). Honest: structure proven offline, in-game effect = RT2; the 0xDA/218=HP%×256 gauge exists in IDA but the corpus doesn't use it (I used the path the AI actually uses, 0/2). Editor build red due to the Sphere Grid lane's WIP (unrelated); all my files are FfxLib, gate-validated
v2.36.0.1
v2.37.1BETA
Seymour
SPHERE GRID CANVAS: AUTHENTIC visuals (REAL FFX icons via the editor's atlas) + readable nodes + LIVE break warning + colors/legend/glow/hover/sound
- The owner asked to "make it pretty + auto warnings" and pointed out the v1 was a tiny circle with no icon. Key find: the editor ALREADY had the Explorer's gorgeous renderer (
SphereGridPreview_Control+Assets/SphereGrid/icon_atlas.png) — so I stole the REAL atlas (and dropped the game-icons.net I'd added earlier). Now the Canvas: (1) AUTHENTIC FFX icons — a coloured orb + theicon_atlas.pngsprite byAppearanceType(STR/DEF/MAG/HP/MP/white/black/special/skill/lock) OR a text badge (AGI/ACC/EVA/LCK…), exactly like the Explorer, viaSphereGridNodeVisualInfobuilt frompanel.bin(the sameCreatePreviewVisual/BuildShortLabellogic). (2) READABLE nodes — orb ~12px (was 5.5) + the default zoom now opens at a legible level (no longer cramming 828 nodes) + LOD (dots when zoomed out for overview) + viewport cull. (3) LIVE break warning — dragging a node <40u OR crossing a link turns it RED instantly + a banner, no Validate click (a cheap check of just the moved node, per frame). (4) category colors + a legend, a pulsing glow on the selection (DispatcherTimer), hover lighting, and sound viaAudioStudio_Service(bundled FFX UI SFX; allowed because the project is PRIVATE — the owner's correction). NO image AI — it's the REAL game sprite already shipping in the editor. Build 0 errors; editor boots without crash
v2.37.0
v2.37.2BETA
Seymour
Monster AI Editor: #8 real NAMED targets (Self / enemies / allies / Character#N…) — the parser cracked the sentinels
- Following the "look at the parsers":
FFXDataParser/ScriptConstants.putEnum("btlActor")IS exactly the target-sentinel map IDA hadn't delivered (the ATEL resolver timed out). Now named and corpus-consistent: -13/0xFFF3 = Self (proven), -14/0xFFF2 = FrontlineChars (the monster's "enemies" = the player chars; the most common literal sentinel, 272×), -6/-7/-8 = Character #1/#2/#3, -15/0xFFF1 = AllMonsters (the monster's "allies" — matches White Wind→heal monsters), -17 = LastAttacker, -5 = AllActors, -3 = TargetActors, -20 = AllAeons,0x10NN = MonsterType… (enemy/ally is from the monster's POV). So the 🎯 Change target (v2.33.0) stops being "copy by example" and becomes a named target-MODE dropdown — the "one / all enemies / all allies" the owner wanted in #8 from the start; the action list shows "alvo: FrontlineChars"; and the disassembly / operand editor glosses the sentinels (0xFFE9–0xFFFF, the unambiguous range) as "(alvo: Self/…)". NewFfxLib/Ai/AiTargetNames.cs(btlActor, same public provenance as the codec's func/property tables); wired into the dropdown +AiScript_File.OperandGloss. Gate--ai2/--ai3PASS (RT0 byte-identical intact — gloss only, zero bytes changed); editor builds 0 errors. Honest: Self is byte-proven; the rest of the names are from public RE + corpus-consistent (fine semantics = RT2)
v2.37.1
v2.37.3BETA
Seymour
SPHERE GRID CANVAS: nodes scale with zoom + clean vector icons (the atlas cropped wrong)
- Owner feedback on v2.37.1: the Explorer atlas (
icon_atlas.png) cropped its cells wrong (Lv1-4 and many others ugly) and nodes shrank as you zoomed in (screen-constant size → lost in the spacing). Two fixes: (1) radius scales with zoom —CurrentNodeRadius = clamp(26×scale, 5..42px), so zoom-in = a BIGGER orb (readable icon), zoom-out = smaller (overview); the icon/text scale with it. (2) vector icons — back to game-icons.net (CC BY) glyphs (SphereGridIcons.cs, SVG path →Geometry.Parse) that scale crisply at any zoom, no cropping (the bitmap atlas is dropped): locks = a clean "L{n}" badge (Lv1-4 never clipped again), stats get an icon (HP/MP/Strength/Defense/Magic/Agility/Luck/ability), the rest = a scaled text badge (ACC/EVA/MDF/WHT/BLK/SPL/SKL). Keeps the category-colored orb + glow/hover/legend/live-break-warning/sound. Build 0 errors; CC-BY attribution inSPHERE_GRID_ICON_CREDITS.txt
v2.37.2