JARVIS-ARENA
Aggiornamento 2.130
16/06/2026
v2.130.0.0MINORJarvis-ARENA
Arena+ Multi Dark Aeon tier-lock report CLI (`--print-tier-lock`) + sidecar schema v1
- (nuova funzionalità: primo report offline che incrocia catalog v2 + progress sidecar; nuovo schema canonico del snapshot LOCKED/READY/CLEARED). Nuovo
RuntimeTools/ArenaMultiBossLab/TierLockReport.cs+ 4 flag inProgram.cs:--print-tier-lock,--progress <path>,--out <json>,--json. La modalità predefinita stampa un report umano raggruppato per tier con motivo del gate (← needs: arena.dark.valefor, ...nelle righe LOCKED) e fallbackrt2:<status> risk:<...> token:<mode>nelle righe non-prove. Modo--outou--jsonemite JSON estrito que casa com o novo schemamods/Spira Reforge/arena/spira-arena-tier-lock-state.schema.jsonv1 (format,format_version,generated_utc,summary{total,cleared,ready,locked},rows[]comstateenumLOCKED|READY|CLEARED+unlock_requires/missing_requires). Regras de gating ja documentadas no schema (sao as mesmas que o futuro hook de menu F7 vai aplicar). Run atual contra catalog + sidecar vazio: 13 rows total -> 9 READY (solos) + 4 LOCKED (duo/trio/quartet/penta gateados pelos solos), 0 CLEARED. README demods/Spira Reforge/arena/reescrito com tabela completa dos 5 sidecars + comandos--print-tier-locke--validateexemplificados. Lints clean. Build PASS. [anterior:v2.129.0.0]
v2.130.1.0PATCHJarvis-MAGIC
Ronso Mana (7ª passata): ho letto il `DIAG`/`BLOB-PATCH` del RT2 `hudSafe=24` che avevo SALTATO → il patch del blob scriveva NODO NON VALIDO (`subIdx=0x00`); riscelto per scegliere un nodo VALIDO + `ODBLOB` deep dump
- (corregge l'euristica rotta di
PatchCase2BlobForKimahri+ nuova strumentazione read-only in un hook già spedito/RT2; codice pronto, build/deploy nella prossima release della DLL — un'altra sala lo sta usando). La scoperta (righeDIAG/BLOB-PATCHdi%TEMP%\ffx-hooks.logche non avevo mai letto — facevo solo grep suB0 resolve):BLOB-PATCH #1 treeId=43 set entry=0x00 (was 0xFF)+DIAG G0-ring-post blob2=0x1B5C8D70 hdr=[03 8A] maxE=138 treeId=43 entry=0x00 slots41/42/43=[FF FF 00] OK— ossia ilPatchCase2BlobForKimahriesisteva già e girava già (ha settatoblob[45]da0xFF→0x00) ma ilResolve(2,1,43)è rimasto −1. ⇒ il vecchio fallback (maxUsed→quasi sempre0x00) puntava il treeId 43 a un nodo strutturalmente non valido: passa la porta primaria delWalkMenuBlobIndex(idx!=0xFF,43<count) ma il selettore secondarioringKindsfora (v4>=node.entryCountoentry[v4]==0xFFFF) →*a3=−1. Prove aggiuntive dallo stesso log:count=138(43 è nel range → NON è il caso "count piccolo"/43>=count);slots 41/42 = 0xFF(nessun OD di partito registrato in questo blob a2=1 → non c'è un sibling donatore);DIAG G0-finalize slot=2 od=3065 3064 3066 311A(il ring buffer layer-A HA311A=cmd282 Ronso Rage — conferma che la porta è al 100% il resolve del menu-tree layer-B, non il contenuto). La fix (codice,hudSafe=25): (1)PatchCas e2BlobForKimahrireescrito — agora decodifica o nó no formato EXATO doWalkMenuBlobIndex(v6=(count+1)/2+2*subIdx;nodeOff=*(i16)(blob+2*v6+4);entryCount=*(u16)(blob+nodeOff);entry[k]=*(u16)(blob+nodeOff+2+2*k), tudo bounds-clamped) e escolheblob[2+43]por prioridade: (a) nó que contém0x311A(assinatura exata do OD) e suportaringKind=1; (b) sibling party-OD 41..47 já registrado com nó selector-capaz; (c) nó mais rico que suportaringKind=1(de preferência também 12). Se NADA qualifica, deixa0xFF(a2=1 não tem nó OD usável → é fix-C/redirect pro a2=0) e logaNO viable node, em vez de escrever lixo0x00como antes. (2) novoDumpOdBlobStructureOnce(read-only, dispara 1× mesmo em log-only) — dumpa os índices party-OD 41..47 do a2=1, oentryCount+primeiras entradas dos nós 0..23 (marcando o que tem<<OD311A>>), e os índices 41..47/109..115 do a2=0 (MainRing) → 1 RT2 crava osubIdxcerto OU revela que é redirect pro a2=0. Helpers novos (todosstatic, bounds-clamped, sem dep de PolyHook):OdBlobNode/OdBlobEntry/OdNodeSupportsSelector/OdNodeContainsEncodedOd/ReadMainRingBlobPtr(a2=0 =_BASE0xD2A994). BannerhudSafe=24→25(confirma DLL nova no log). NÃO buildei/deployei (DLL em uso por outra sala — respeitado);ReadLintsclean; código pronto probuild_hooks.ps1 -WithPolyHook -Release. Arquivo tocado:RuntimeTools/FfxHooksDll/hooks/RonsoManaHook.cpp. Doc:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§13. [anterior:v2.130.0.0]
v2.130.2.0PATCHJarvis-MAGIC
Nul Ward: CAUSA RADICE del "non è apparso nulla nel menu di White Magic" TROVATO + CORRETTO — il banca party-wide viene RICARICATO dal `party_data` ad OGNI init di battaglia, cancellando il grant prima che il menu si monti
- (corregge il bug di comportamento che impediva la comparsa del Nul Ward — stessa feature/lab del
v2.123.4.0/v2.124.0.2; RE decisiva provata nella.i64reale + nuovo detour di ri-assert nelNulWardTeachHook; DLL liberata da Halyson, rebuild+deploy effettuati). Il sintoma: anche dopo il fix multi-site del menu-bound (v2.124.0.2) + grant on-load (logNulWardTeach grant ch=0..6 radiant=1 umbral=1), le wards non apparivano nella magia bianca in battaglia. La RE che ha chiuso (idalib MCP, byte-verificata tramitedisasm):sub_7817D0("* BTL INIT") chiamaFFX_Btl_PrepareSaveCommandState@0x786BC0("-- SAVE RAM CLEAR -- Preparing save game data") ad OGNI init di battaglia; in0x786CA3essa famov ecx,21h; mov edi,offset dst__0; rep movsd— copia0x84(132) byte dal kernelparty_data(table id 4) adst__0=0x11307D8, range[0x11307D8,0x113085C)che copre interamente ilg_PartyWideCommandBank@0x11307FC(offset+0x24all'interno della copia; banca = 16 words, id 96..351). ⇒ la banca party-wide intera viene sovrascritta dalparty_dataogni battaglia, eparty_datanon ha bit di ward → word14=0 →IsCommandAvailable(320/321)=0→ il loop di placement salta le wards → "niente è apparso". Sospetti scartati:FFX_Btl_InitPartyWi deCommandBank@0x784960só dáORem bits 0..130 e é debug-gated (if(unk_112A905){ DebugMaxAll(); Init(); }— não roda em jogo normal);sub_78F0B0(Lancet/blue) e o grant só mexem bit individual. Correção mental do §H:PrepareSaveCommandStatenão é só "persistência" — é o reload ATIVO por-batalha do banco a partir doparty_data; qualquer grant de id≥96 ausente doparty_data(sphere-grid teach incluído) reseta toda batalha. Categorização corrigida (empírica): dump docommand.bindeployado mostra os doadores Nul (NulShock id48, NulTide id49) e as wards (320/321) todos comSubMenuCategorization (byte +24) = 0x02— wards são templatadas dos doadores, então caem na mesma categoria de magia branca dos Nul que já aparecem (categorização correta-por-construção; faltava só o bit de disponibilidade vivo). O FIX (labteach_grant, deployado):NulWardTeachHookagora instala umPLH::x86DetournoFFX_Btl_PrepareSaveCommandState; o shim chama o original (deixa recarregar o banco doparty_data) e re-afirmag_PartyWideCommandBank[word14] |= 0x3(Radiant bit0 + Umbral bit1) no retorno — ou seja, logo após o wipe e antes doFFX_Btl_BuildActorCommandMenusemear o ator. Escrita direta no banco (não chamada de grant) pra não re-entrar no menu builder de dentro do init. Log diag (4 primeiros disparos):NulWardTeach reassert #n post-PrepareSaveCmdState: bank word14 0xPRE->0xPOST. Grant one-shot mantido pros menus de field/pré-batalha. Consequência de design (produção): comoparty_dataé a fonte por-batalha pra ids≥96, o caminho limpo pra uma ward sempre-disponível é adicionar o bit no próprio kernelparty_data(innata, party-wide), não no sphere grid — um id≥96 ensinado no grid não persiste pós-init sem (a) o bit doparty_dataou (b) re-assert em runtime como esse detour de lab. Build/deploy:build_hooks.ps1 -WithPolyHook -ReleasePASS (12/12 cpp), deployinstall_to_modules.ps1 -EnableApply -EnableTeach(backupffx-hooks.dll.backup-nul-ward-20260616-081633, novo SHA-prefix0DE302BDF13D5B14). Gate--nul-ward-staticVERDICT: PASS (sem regressão; command.bin/exe/flags intactos)..i64real: coment ari in0x786BC0+0x786CA3(REGOLA D'ORO). 2 nuovi RVA inshared/ffx_addresses.h(RVA_FFX_BTL_PREPARE_SAVE_COMMAND_STATE,RVA_FFX_PARTY_WIDE_COMMAND_BANK). RT2 in-game: avviare la battaglia e confermare Radiant/Umbral Ward nella magia bianca + controllare il logreassert ... word14 0x0000->0x0003. Rischio aperto: larghezza diply_saveper il bit 224/225 (§H) — il lab lo riapplica a ogni caricamento. File:RuntimeTools/FfxHooksDll/hooks/NulWardTeachHook.cpp,shared/ffx_addresses.h. Doc:docs/reverse/FFX_NUL_WARD_TEACH_SURFACE_RE_VERDICT_2026-06-16.md§I. [precedente:v2.130.1.0]
v2.130.2.1REVISIONJarvis-MAGIC
Spira Reforge: Magia Nera Estesa — lockdown del design (famiglia Multi-Skill > livello -ja; `-ja` diventa backlog di nicchia; include-all di Furia di Lulu)
- (design doc + integrazione in VISION; nessun writer/comportamento/RT2 in questo passaggio). Halyson ha aperto un brainstorm sulla creazione di nuove Magie Nere. Ho confrontato due rotte: (a) livello
-ja(Firaja/Blizzaja/Thundaja/Waterja = cloni di -ga con +Potenza, esclude Fury) vs (b) Multi-Skill (versioni AoE di incantesimi single-target vanilla che non hanno un equivalente AoE). Decisione (Halyson): Multi-Skill vince come percorso principale;-japarcheggiato come backlog di nicchia (1 per elemento, MP brutal ~80–120, post-Celestial, ciliegina sulla torta — non compete con il buff di-gainVISION §10.5); Furia di Lulu include TUTTO ("Fury Drainga 16× è un caos bellissimo, fantasia OD"). Perché Multi-Skill vince: (1)TargetFlags.Multiè già nativo del motore (FfxLib/Ability/Ability_Command.cs:125) — single → multi = 1 bit nella riga di comando; (2) gli incantesimi colmano una lacuna reale del vanilla (senza AoE di veleno, AoE di drain, AoE di osmosi) e danno identità; (3)-jaè redundante con il pianoVISION §10.5che bufferà già-gacon Ignore MD EF / Power scaling ("Firaga ritemprata" e non "Firaja"); (4)VISION §10.11ha già accantonato Holyra/Holyga/Wildra come "interessante, forse mai" per lo stesso motivo (gonfia il pool senza identità); (5) Drainga/Osmose-ga alimentano altri fronti (Capture Cascade T7 lunghe, Modo SIN curses, mob OD multicast). Incantesimi prima ondata (v0.5+) validati tecnicamente: Biora (AoE veleno + danno, clone Bio + Multi), Drainga (AoE drain HP cap 9999/lancio), Osmose-ga (AoE drain MP cap 99/lancio), Demita (AoE 50% HP cap 9999/bersaglio), famiglia Multi-Firaga (3× Firaga AoE sequenziale MP triplo — idea diretta di Halyson: "Multi-Firaga per esempio>>>>>>" — sotto-famiglia estendibile a Multi-Blizzaga/Thundaga/Waterga/Ultima). Seconda ondata (v0.6+): Slowga, Reflectga, Demi-fall ("Dimensional Crush" 75% HP singolo MP costoso), Quartera (25% HP AoE MP economico). Bloccchi onesti documentati: (a) slot spell ID0..95— audit incrociato conFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdper identificare donors; (b) righe Lulu Fury#12408–#12422dump pendente; (c) cap Drainga bilanciato dipendente da RT2 (senza cap = healer-by-offense OP, cap stretto = incantesimo inutile); (d) Multi-Firagahit_countplayer-cast RE spike pendente; (e) VFX visuale identica al singolo (ok per v0.5, recolor v0.6+ via engine Flan Flood già provatav2.114.0.0); (f) decisione wire Sphere Grid separata. Piano tecnico incrementale (§6.2 del doc): Fase A audit ID donors (senza codice, questo doc), Fase B authoring offline (clone righe + flip Multi + aggiustare Power/MP + text entries), Fase C writer LAB, Fase D RT2 in-game, Fase E integrazione Fury, Fase F-jabacklog di nicchia (v0.7+). Integrazione con mod: completa§10.5buff Magia nera, alimenta§10.6Lulu Fury, preserva§10.11puzzle elementare, risponde§10.13mob OD multicast con Drainga/Osmose-ga, supporta§11Capture Cascade T7 fights. VISION_AND_ROADMAP.md aggiornato: nuova §12 "Magia Nera Estesa — famiglia Multi-Skill" (design decisione + incantesimi prima/seconda ondata + roadmap tie-in + doc completa); Riferimenti rinnumerata §13. Domande aperte per brainstorm continuo: meccanica Multi-Firaga A/B/C (Doublecast hardwired vs distribuzione casuale vs ibrido el ement — raccomandazione A), Drainga cap per-target vs per-cast, Sphere Grid wire, Demita vs Demi vanilla coesistenza, white magic AoE (Esuna-ga?), tier dei donor. Non tocca: nessuno writer, nessun hook, nessuna probe, nessuna DLL, nessun gate offline/RT2. Solo docs + integrazione di roadmap. Doc nuovo:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(10 sezioni, ~300 righe). File toccati:FFXProjectEditor/FFXProjectEditor.csproj(bump 4-tuple),mods/Spira Reforge/VISION_AND_ROADMAP.md(nuova §12 + renumber Riferimenti §13),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md. [precedente:v2.130.2.0]
v2.130.3.0PATCHJarvis-MAGIC
Ronso Mana CRASH HOTFIX (`hudSafe=26`): la scrittura del blob ha smesso di buttare il nodo (era `via=rich>=1 subIdx=0x01` → crash); ora la scrittura è OPT-IN + solo nodo sicuro + letture protette da SEH
- (corregge il crash di comportamento introdotto dal
hudSafe=25dellav2.130.1.0quando la DLL è stata ricostruita/deployata nellav2.130.2.0della lane Nul Ward). Causa radice (log RT2%TEMP%\ffx-hooks.log):RonsoMana BLOB-PATCH2 #1 treeId=43 set subIdx=0x01 via=rich>=1 nodeOff=0x1B4 ec=24 (was 0xFF)— il fallback (3) "nodo più ricco" del miohudSafe=25ha scritto un indice di nodo BUTTATO (0x01,ec=24) inblob[2+43]. Questo ha fattoResolve(2,1,43)"avere successo" su un nodo che non è l'anello OD →finishMenuTreeha montato/mostrato contenuto fittizio → il gioco è crashato. (Il0x00precedente delhudSafe<=24semplicemente restituiva −1 e per questo NON crashava: non chiamava maifinishMenuTree.) Il mio tentativo "ha trasformato uno stato rotto-ma-sicuro in crash". L'hotfix (hudSafe=26): (1) la scrittura del blob ora è OPT-IN — scriveblob[2+treeId]solo quando l'envFFXHOOKS_RONSO_OD_BLOBWRITE=1è impostato; impostazione predefinita = non scrive nulla (build a prova di crash, puramente diagnostica tramiteODBLOB); (2) anche con opt-in, scrive solo nodi INIZIATI — (a) nodo i cui input contengono il comando OD codificato0x311A, o (b) sibling party-OD 41..47 che il gioco ha già registrato; non scrive mai automaticamente il c
v2.130.3.1REVISIONJarvis-MAGIC
Spira Reforge: Magia Nera Estesa — 4 decisioni fissate Halyson (Multi-Firaga opzione B, Drainga cap per-target supremo, Demita coesiste con Demi, Fury include-all con sfumature)
- a cascata post-
v2.130.3.0(hotfix MINOR al mana Ronso da un'altra Jarvis-MAGIC parallela). Continuazione immediata del design doc div2.130.2.1: brainstorm con H Alyson ha fissato le ultime 4 decisioni in sospeso. (1) Meccanica Multi-Firaga — opzione B (distribuzione casuale) + MP 3-5× base: Halyson: "Opzione B, ma il 'Multi Firaga', 'Multi-Fodase' costerà 3~5× il MP iniziale della skill base per compensare, un sacco di danni del cazzo". Meccanica = 1 cast → N hit (5-7), ogni hit colpisce un nemico casuale (engine nativo tramite formula Holy/Comet/Doublecast). I nemici possono subire 1, 2, 3+ hit dallo stesso Multi-Firaga in base al RNG. Costo MP = 4× base predefinita (Multi-Firaga = 64 MP), Multi-Ultima = 200 MP. Suggerimento di Jarvis: inizia con 4× MP + 6 hit, aggiusta RT2. Famiglia scalabile (rollout incrementale): v0.5 Multi-Firaga + Multi-Blizzaga, v0.6 + Multi-Thundaga + Multi-Waterga, v0.7 + Multi-Ultima (post-Darkness §10.11), v0.8+ backlog Multi-Flare/Multi-Holy. (2) Drainga cap — per target 9999/target (multi-cap): Halyson ha fissato consapevole dell'impatto. 4 nemici vivi = fino a 39.996 HP di cura in un cast = guaritore tramite offesa supremo. ⚠ Potrebbe rompere l'arena lunga — intenzionale, è il mod di Halyson, fantasia endgame. Compensazione: il costo MP potrebbe scalare fino a ~30 post-RT2 se rompe tutto. (3) Demita vs Demi vanilla — coesistono: Mantenere ENTRAMBE. Demi single (16 MP, boss-killer) + Demita multi (24 MP, wave-clear). Il giocatore sceglie lo strumento. Costo: 1 slot ID extra. (4) Fury di Lulu include-all con sfumature (decisioni §4 aggiornate): Biora 16× = ok (poison wave); Drainga 16× = cap Fury-only 9999/pick (non per-target in Fury, altrimenti fino a 639.936 HP di cura — "smette di avere senso"); Osmose-ga 16× = ok (MP cap 9999 = hard wall); Demita 16× = ok (Demi smette di colpire il bersaglio morto); Multi-Firaga 16× = 96 hit potenziali ⇒ Fury Multi- usa hit_count=1 (torna single-cast in Fury)* OPPURE esclude Multi-* dalla Fury pool (unica eccezione all'include all). La decisione finale aggiusta RT2. Domande aperte aggiornate nel §8 del doc: §8.1 decise (4 fissate); §8.2 ancora aperte (Sphere Grid wire, white magic AoE scope, element absorb confusion, tier dei donatori0..95blocca Fase A, Multi-* distribuzione casualecommand.bincampo via spike). Doc aggiornato:docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md§2.2 Drainga (cap per-target fissato), §2.4 Demita (c è stato applicata), §2.5 Multi-Firaga (opzione B + MP 3-5× fissato + tabella elementare completa), §4 Fury (sfumature per incantesimo), §8 domande aperte (4 decise contrassegnate, 5 ancora aperte), §9 Versione di consegna aggiornata. Prossimo passo sicuro: Fase A dell'audit incrociato degli spell ID donor conFFX_SPELL_FREE_ID_AUDIT_2026-06-12.md— Halyson decide se entra ora o posticipa fino a quando v0.5 non si avvicina. Non tocca: writer/hook/probe/DLL/gate. File:FFXProjectEditor/FFXProjectEditor.csproj(cascadev2.130.3.0→v2.130.3.1),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§2.2/§2.4/§2.5/§4/§8/§9 aggiornati),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md. [precedente:v2.130.3.0]
v2.130.3.2REVISIONJarvis-MAGIC
Spira Reforge: PIVOT ARCHITETTURALE — fronte "Magia Nera Estesa" rinominata in "Comandi Per-Character Estesi" (RE D01 prove + distribuzione espansa per 7 char)
- (continuazione immediata
v2.130.3.1; nessun writer/comportamento). Halyson ha proposto: "E se invece di queste ski affinché possano essere acquisite da "tutti", non le limitiamo a "solo un certo personaggio?" — ho incrociato l'ingegneria inversa esistente e HO SCOPERTO che il motore vanilla SOSTIENE GIA' NATIVAMENTE la proprietà per personaggio per gli id0..95. La scoperta critica (RE D01 —FFX_SPELL_LEARN_ABIMAP_INFERNO_2026-06-15.md):FFX_GrantCommandToCharacter @ 0x785D10ha UNO SPLIT ALL'INDICE 96: gli id< 96vanno alla banca per personaggioword_11307FC[74*char+3151+(id&0xFFF)/16](stride 74 parole =ply_saveper personaggio); gli id>= 96vanno alla banca piatta e globale per il gruppo (senza stride). ⇒ lo spazio apprendibile per personaggio è ESATTAMENTE 96 bit, id 0..95. Gli id ≥ 96 non possono essere appresi in modo per personaggio. Implicazione: il riutilizzo degli id0..95= il motore vanilla filtra CHI vede ogni incantesimo senza alcun hook. Il vecchio percorso (id ≥96 + deviazione stile Nul Ward per limitare) è scartato. Distribuzione espansa (decisione di Halyson 2026-06-16, citazioni preservate): Lulu (6 incantesimi, caster burst + drenaggio HP) — famiglia Multi-Firaga × 4 + Drainga + Osmose-ga (spostata da Yuna a Lulu), eventualmente Demita; Yuna (5 incantesimi, Bianca/Buff AoE) — Reflectga + Protectga + Shellga + Esuna-ga + Dispelga ("Reflectga, Protectga, Shellga, Esunaga, Dispelga per Yuna"); Rikku (3 incantesimi, Maestra del Furto) — Copycat diventa esclusiva sua + Mugra (colpo singolo a 2 colpi, furto 2×) + Mugga (AoE a 2 colpi, danno basso, "potendo rubare 6 volte!!!!"); Wakka (da definire, "più skill di status e cose più pazze"); Kimahri (da definire, "Mago Blu. Skill di mostri e finanche i propri overdrivers possano essere appresi per essere usati con mana" — coordinazione con la corsia Ronso Mana); Tidus (da definire, "0 idee, ma forse skill multiHit"); Auron ("IL TANKER DEL CAZZO DEL GIOCO. Evoluzione del Sentinel, forse Breaks in area con più forza"). Totale stimato: 28-31 incantesimi su 96 slot ≈ ~30% del budget, restano 65+ slot per-jail backlog v0.7+ + futuro. 9 decisioni fissate nel doc §9.1, 10 ancora aperte in §9.2 (proprietario di Demita, pool di Wakka/Tidus/Auron, sostituto Copycat per Rikku, collegamento Sphere Grid, audit dei donatori 0..95, campo colpi casuali di Multi-Firaga, Mugra/Mugga con furto per colpo, coordinazione Mago Blu di Kimahri con la corsia Ronso). Vantaggio del modello: (a) zero hook custom — engine vanilla nativo; (b) gli alberi Sphere Grid acquistano significato reale (passare a un altro albero = un reale trade-off); (c) Fury di Lulu si semplifica drasticamente — il Fury pool è per personaggio vanilla, "escludi Multi-* da Fury" cessa di essere un problema; (d) Capture Cascade §11 e Modalità SIN §10.13 ottengono risposte tattiche distinte per personaggio. Piano tecnico (§7.2): Fase 0 fissare pool TBD → Fase A audit donatore (blocca l'inizio) → Fase B authoring per personaggio (B Lulu pilota, B.1 Yuna White AoE, B.2 Rikku famiglia Mug con spike steal-per-hit, B.3 pool TBD) → Fase C/D RT0/RT1/RT2 → Fase E collegamento Sphere Grid (espansione editor Spira Grid) → Fase F righe Fury di Lulu → Fase G Kimahri Blue Mage (dipende da ronzo lane) → Fase H backlog -ja v0.7+. VISION_AND_ROADMAP.md §12 riscritto: "Magia Nera Estesa" → "Comandi Per-Character Estesi" + tabella distribuzione per personaggio + blocchi + roadmap aggiornato. Doc rinominato concettualmente (filepath mantenuto per storico):docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md— 11 sezioni, §1 modello di proprietà Per-character con decompile RE D01 byte-verified fissato, §3 distribuzione per personaggio (3.1 Lulu, 3.2 Yuna, 3.3 Wakka TBD, 3.4 Rikku, 3.5 Kimahri coord, 3.6 Tidus TBD, 3.7 Auron TBD, 3.8 riepilogo). Non tocca: writer/hook/probe/DLL/gate. Solo design + integrazione roadmap. File:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.1→v2.130.3.2),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(riscrittura maggiore: nuova §1 RE D01, §3 distribuzione estesa 7 personaggi, §5/§7/§8/§9/§10/§11 rinumerati e aggiornati),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 riscritto),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md. [precedente:v2.130.3.1]
v2.130.3.3REVISIONJarvis-MAGIC
Spira Reforge: FASE 0 COMPLET A — Halyson ha fissato TUTTI i pool TBD per personaggio in un'unica passata (Demita→Kimahri, Wakka 5 spell, Auron MAX pack 6 spell, Tidus multi-hit + auto-buff, Rikku +1 Thief skill nova)
- (terza passata del 2026-06-16, continuazione immediata
v2.130.3.2; nessun writer/comportamento). 4 decisioni fissate in più (da 9 → 13): (1) Demita owner = Kimahri (gimmick "mostri bizzarri" + tema Blue Mage; libera Lulu per concentrarsi sull'elemental burst); (2) Wakka pool = A+B combinato, 5 spell — Biora (AoE poison + danno) + Sleepra (AoE Sleep) + Quad Foul (AoE Triple Foul + Poison = 4 status) + Double Buster (2-hit singolo, 2 status combo RNG) + Tide Slash (2-hit fisico) — "status master + double hit + cose pazze"; (3) Auron pool = MAX pack, 6 spell — Mass Power Break + Mass Armor Break + Mass Magic Break + Mass Mental Break + Sentinel++ (Sentinel + blocca fisico+magia + party-wide 1 turno) + Provokeja (Provoke + auto-Sentinel + taunt all enemies) — "Auron è il cazzo di TANKER del gioco"; (4) Tidus direction = multi-hit + self-buff, 4-5 spell — Spiral Slash (3-hit singolo, +5 STR/cast cap 25) + Tidal Combo (4-hit AoE, +5 AGI/cast cap 20) + Bladestorm (5-hit casuale, +Haste self 1 turno) + Aurochs Rush (signature, +AGI solido + Haste 3 turni) + opzionale Cheer-strike (2-hit + Cheer self). "Tidus è sempre stato il rapidino. Quick Hit VERRÀ NERFATO, quindi abilità multihit che danno buff che aumentano le proprie" — compensazione diretta del nerf QH §10.6; (5) Rikku +1 Thief skill nova — Halyson ha chiesto "skill di Thief inventata" per completare il pool; suggerimenti Jarvis: Sleight of Hand (Mug raffinato), Pickpocket (steal senza turn cost; predefinito Jarvis), Sticky Fingers (stack +25%/cast), Backstab (ignora PDEF), Cache (steal pool diretto), Smoke Bomb (party skip CTB). Distribuzione finale completa (Fase 0): Lulu 6 + Yuna 5 + Wakka 5 + Rikku 4 + Kimahri 3 + Tidus 4-5 + Auron 6 = 33-34 spell su 96 slot = ~35% del budget (restano 62+ per-jabacklog v0.7+ + white magic extra). Combo emergenti inter-personaggio: Auron Mass Mental Break + Lulu Multi-Firaga (wave-burst senza MDEF); Auron Sentinel++ + Yuna P Protectga/Shellga (2 turni di invulnerabilità quasi totale); Auron Provokeja + Wakka Quad Foul (tank + mass-status); Tidus Bladestorm + Auron Mass Armor Break (burst di Tidus + bersaglie senza DEF). Rischio aggiunto dal self-buff di Tidus: stack STR/AGI infinito = degenerazione tipo QH; mitigazione stack cap (5 STR / 4 AGI) + decay per fine battaglia (non persiste tra i combattimenti). 11 open questions rimanenti in §9.2 — tutte sono sub-decisioni fini (nome finale della skill Thief di Rikku, 4 vs 5 spell di Tidus) oppure technical spikes (Multi-Firaga random-hitcommand.binfield, steal-per-hit Mugra/Mugga, Wakka status-rider per hit, Tidus self-buff stacking, Auron Sentinel++ party-wide buff, Kimahri Lancet+ persistence) — NON bloccano il design complessivo, bloccano fasi specifiche di authoring. Donor audit0..95(§9.2 q18) ora ha ambito concreto: ~33-34 slot richiesti. Doc aggiornato: §3.1.4 Mossa Demita spostata a §3.5.1 Kimahri; §3.3 Wakka 5 spell fissate; §3.4 Rikku +1 skill Thief con 6 suggerimenti; §3.5 Kimahri pool completo (Demita + Blue Mage extension 2-3); §3.6 Tidus pool 4-5 multihit + self-buff con combo vs QH nerf; §3.7 Auron MAX pack 6 spell con combo inter-char + rischio/mitigazione; §3.8 riassunto totale 33-34 spell = 35% budget; §9.1 13 decisioni; §9.2 11 sub-decisioni/spikes; §10 entryv2.130.3.3. VISIONE §12 aggiornata: tabella distribuzione finale per char + combo emergenti. Non tocca: writer/hook/probe/DLL/gate. File:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.2→v2.130.3.3),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§3.1.4 spostato + §3.3/§3.4/§3.5/§3.6/§3.7/§3.8/§9/§10 aggiornati),mods/Spira Reforge/VISION_AND_ROADMAP.md(§12 tabella pool finale + combo),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md. [precedente:v2.130.3.2]
v2.130.3.6REVISIONJarvis-MAGIC
Spira Reforge: REALITY CHECK + 3 inversioni — Percorso 4 (`CharacterUser` nativo) fissato + apprendibilità tramite Sphere Grid fissata. Halyson ha visto quello che io non avevo visto
- (quarta passata del 2026-06-16, continuazione
v2.130.3.3; nessun writer/comportamento). Sequenza di iterazioni architetturali in questa sessione: (1) v2.130.3.2 pivot: scoperto RE D01 che gli id0..95sono per-char nativi, etichettato come "zero hook + 62 slot rimasti". (2) Halyson ha apertoFFX_SPELL_FREE_ID_AUDIT_2026-06-12.mde ha chiesto "Cosa intendi?": audit del 2026-06-12 aveva già provato0/96slot liberi — tutti i 96 id sono occupati con vanilla. La mia narrativa "62 rimasti" era falsa. (3) v2.130.3.4 Percorso 3: ho proposto append≥96+ hook per-char whitelist (stile Nul Ward generalizzato), Halyson ha approvato. (4) Halyson ha individuato Percorso 4: "Nel CommandBin non sarebbe solo io a selezionare lì: CHARACTER USE (per esempio TIDUS) di un'abilità, e il problema è risolto? Non servirebbe hook per nulla". IO NON AVEVO VISTO il campo nativo[Data] public Character_Enum CharacterUserinAbility_Command.cs:29— byte signed nelcommand.binche limita chi usa ogni comando. Prova byte-esatta:FFX_SPELL_FREE_ID_AUDIT_2026-06-12.mdriga 86 cita Yojimbo Dismiss (id 87) haCharacterUser=0x0E(14=Yojimbo) — il motore vanilla filtra il menu da solo tramite questo campo. UI già esistente (KernelCommands_Control.axaml:434ComboBox). Il Percorso 4 sostituisce 1/2/3 — append≥96conCharacterUserper char impostato tramite editor UI diretto. ZERO hook per il filtro del menu. (5) Halyson ha fissato: "Le abilità saranno apprendibili tramite Sphere Grid" — questo riattiva il caveat Nul Ward §H per gli id≥96(banco party-wide reload-by-init sovrascrive grant grid). Soluzione: 1 hook generalizzato estendendoNulWardTe achHook.cpp(já provado emv2.130.2.0) — (a) detourPrepareSaveCommandStatere-asserta bits ≥96 lendo sidecar; (b) detour panel_teach escreve sidecar quando node ativa. Net hook count: 1 (generalização, não hook novo). Sidecar JSON extendsspira-reforge-flags.schema.jsondo Capture Cascade. Plano técnico atualizado (15 bloqueios honestos catalogados): Fase 0 ✅ → Fase A appendcommand.bin≥96 comCharacterUser(A.1-A.7 por pool char) → Fase B sidecar schema → Fase C Sphere Grid editor scope expansion (LearnedMove = 0x3000 | id≥96) → Fase D hook generalizado → Fase E RT0/RT1 writer LAB → Fase F RT2 in-game piloto → Fase G Lulu Fury rows → Fase H-jabacklog v0.7+. Bloqueios pequenos pendentes (spikes): addr panel_teach runtime, sidecar JSON schema design, side-effectsCharacterUserfilter (Trio of 9999, Doublecast cross-char), Multi-Firaga random-hit field, steal-per-hit Mugra/Mugga, Wakka status-rider per hit, Tidus self-buff stacking, Auron Sentinel++ party-wide buff. Vantagens Caminho 4 vs alternativas: (a) zero sacrifício vanilla (coexistência total Firaga + Multi-Firaga, Demi + Demita, Mug + Mugra/Mugga, Sentinel + Sentinel++); (b) net 1 hook (vs 0 do pivot falso, vs 2-3 do Caminho 3); (c) infra ALREADY EXISTING (NulWardTeach hook + sidecar Capture Cascade + editor UI ComboBox); (d) identity vanilla intocada. Lição honesta documentada: "sempre que sentir 'zero hook' soando bom demais, abrir os audits existentes antes de propagar a narrativa". Doc atualizado: §0 verdade curta (3 reversões + 4ª decisão grid), §1 ownership model (Caminho 4 + grid teach), §7.2 plano técnico (Fases 0-H), §7.3 15 bloqueios honestos, §10 entriesv2.130.3.5ev2.130.3.6. Não toca: writer/hook/probe/DLL. Arquivos:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.3→v2.130.3.6, pulou.4/.5por terem sido reversões dentro da mesma sessão de design),docs/reverse/FFX_SPIRA_REFORGE_BLACK_MAGIC_EXTENDED_RESEARCH_2026-06-16.md(§0/§1/§7.2/§7.3/§10 reescritos),CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md. [anterior:v2.130.3.3]
v2.130.3.7REVISIONJarvis-MAGIC
Documento di riferimento: catalogo consolidato delle 96 abilità dei personaggi (ID `0..95`) con `Power`/`MP`/`Formula`/`Acc`/`Hits`/elemento/effetto + architettura AbiMap × party-wide bank
- (doc-di-registro / catalogo di riferimento; nessun writer/comportamento/RT2; consolida solamente in 1 doc le conoscenze già disperse in
FFX_SPELL_FREE_ID_AUDIT_2026-06-12.md+FFX_SPELL_LEARN_ABIMAP_INFERNO_2026-06-15.md+FFX_BATTLE_COMMAND_MENU_INFERNO_2026-06-15.md+CommandCharacter_Dictionary.cs+Ability_Command.cs). Halyson ha chiesto la tabella delle 96 abilità in MD per riferimento operativo del mod. Nuovo docdocs/reverse/FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.md(8 sezioni, ~250 righe): §0 TL;DR che fissa il limite a 95 (AbiMap 96 bit fisici) + prove RE incrociate; §1 come il engine decide il menu (FFX_Btl_IsCommandAvailable @ 0x39BB70per-char vs party-wide con filtroCharacterUser); §2 encodingLearnedMove = 0x3000 | iddelpanel.bin(riferimentoSphereGridExplorer_DataModel.cs:30-31); §3 catalogo completo 0..95 suddiviso in 9 gruppi (Core/Menu 0-5, Skill 6-21, Special 22-25, Cheer 26-31, Kimahri/Def/Social 32-42, Wht Magic 43-64, Blk Magic 65-83, Aeon menu 84-87, Rikku endgame 88-95) con valori canonici FFX HD Remaster (US/JP) — MP/Power/Formula/Acc/Hits/elemento/effetto; §4 traccia decisiva di "what the magic IS" tramite 3 flag (DamageFlags+DamageFormula_Enum+PreviewFlags) con tabella Cura/Revive/Cleanse/Phys/Magic/Status/Buff/Gravity/Drain; §5 gli 11 ID non-insegnabili dal grid (missing=[0,1,2,3,4,5,33,84,85,86,87]in tutte le 10 regioni — system/Defend/Aeon/Yojimbo); §6 ID 96+ party-wide (Overdrives, Aeons, Mortes, Mix, pseudo-IA) con 3 ragioni di design della separazione; §7 conseguenze per Spira Reforge collegando al Cammin
v2.130.3.8REVISIONJarvis-MAGIC
Spira Reforge: Pass 1 Vanilla Offensive Rebalance fissato — 16 skill buff offensive + pulizia Auto-Ability + incremento MP Sphere
- (solo design / decisioni fissate da Halyson; nessun writer/comportamento in questo passaggio). Halyson ha aperto
FFX_PLAYER_COMMAND_CATALOG_0_TO_95_2026-06-16.mde ha fissato: "Le magie svolgono il loro ruolo incluso la cura. Ma il resto? PATETICO. Full Break? Dammi un colpo in culo, oltre a prendere quasi nulla, danno ridicolo per 99 di MP." Diagnostica cruda: 20 skill offensive vanilla conPow er = 16(= multiplier 1.0× = Attack base) ouPower < 16(= pior que Attack); Auron Full Break Power 16 / Acc 36 / MP 99 = crime contra o jogador. Pacote final cravado (3 frentes em 1 pass): (1) Damage buff de 16 skills (Extracts removed): Wakka 8 status-riders (Sleep/Silence/Dark Attack P16→20 Acc 50→60, Zombie Attack P16→24 Acc 50→60, Busters P16→26 Acc 100, Triple Foul P16→32 Acc 100→90 MP 24→28), Auron 4 Breaks (Power/Magic Break P16→22 Acc 50→80 MP 8→10, Armor/Mental Break P16→24 Acc 36→70 MP 12→14), Full Break P16→48 (3× damage cravado Halyson) Acc 36→90 MP 99→75, Tidus 2 Delays (Delay Attack P12→18 MP 5→6, Delay Buster P14→22 MP 10→12), Rikku Mug P16→20. Filosofia: Power ≥ 18 sempre quando skill paga MP; premium MP ⇒ premium Power; Breaks Acc 36-50% sobem 65-90%. (2) Auto-Ability cleanup: Slot 12 Half MP Cost MANTÉM (justificativa Halyson: Lulu Magic Booster + custos altos = ainda paga Ether/Elixir = balance natural). Slot 13 (ex-One MP Cost, cheese de 1 MP universal) REMOVIDO → vira Mana Spring (+5 MP/turno em batalha; regen tick passivo; substitui economia sem virar cheese — em battle de 10 turnos = +50 MP cumulativo). Slot 23 (ex-Break HP Limit) vira "Break Limits" (bits0x0200 | 0x0400OR emability_flags_64, HP cap + MP cap juntos via engine vanilla; byte-edit puro, zero hook); §10.8 do VISION cravado. Slot 24 (ex-Break MP Limit) vira "Devil's Bargain" (+50% dano dado / +50% dano recebido — glass cannon switch simétrico; 2-pass: Pass 1 placeholder funcional agora com bit reassignment, Pass 2 hook damage calc depois com RT2). (3) MP Sphere node bump (escopo B cravado Halyson "B simplesmente B"): Standard Grid MP +40 → +60, Expert Grid MP +20 → +30 (escala proporcional 1.5× cross-grid). Edit trivial viaSphereGridNodeTypeEntry.IncreaseAmount(offset 0x14, ushort) emSphereGrid_File.cs:519. Sequenza di decisioni stabilite in questa sessione: (a) Halyson ha aperto il catalogo, ha identificato il problema; (b) ho proposto una tabella buff con 20 skill + 4 categorie di auto-ability; (c) Halyson ha stabilito Extracts fuori + Full Break 3×; (d) ha stabilito One MP rimosso + Mana Shield no (crea nuova meta); (e) ho confermato §10.8 invertendo Slot 23 diventa Br Break Limits nello Slot 24 riproposto ("xereca"); (f) installato Devil's Bargain Slot 24 + preso atto del caveat del 2 pass; (g) raffinato Mana Spring slot 13 + arretrato Spell Spring. Caveat tecnici catalogati: Devil's Bargain necessita hook damage calc + RE addrFFX_DamageCalc_*pendente; Mana Spring necessita turn-tick hook + identificare bit libero inability_flags_64; Acc hit vs Acc status-rider spike pendente RT2; spike Triple Foul Acc 100→90 pendente (validare che la "garanzia tripla" non si rompa); scaling MP di Full Break nel late game OK (75 ancora carissimo con Half MP); riassegnazione bit auto-ability slot 24 necessita scan flag liberi inAutoAbilityHardcodedFlagCatalog.cs. Piano tecnico Phase 1 (byte-edit purov2.131.xPATCH): 1.1command.bin16 skill offensive buff, 1.2 Slot 23 Break Limits, 1.3 Slot 13 Mana Spring placeholder, 1.4 Slot 24 Devil's Bargain placeholder, 1.5panel.binnodi MP, 1.6 text pool, 1.7 byte-ident gate RT0/RT1, 1.8 RT2 pilota. Phase 2 (hook LABv2.133.x+): 2.1 RE damage calc, 2.2 Mana Spring turn-tick hook, 2.3 Devil's Bargain damage hook, 2.4 hook RT2. Sinergia con VISION: §10.4 nerf QH (complementare — buff skill + nerf QH = offensiva diversificata), §10.5 magia (non tocca, prossimo pass), §10.6 OD Lulu Fury (prossimo pass), §10.8 Break HP+MP fuso (INSTALLATO in questo pass 1.2), §10.9 abilità segreta Auron (RINFORZATO — Break Limits + Devil's Bargain + buff Breaks = "Auron il rischioso indistruttibile"), §10.10 velocità magia (arretrato Spell Spring), §10.11/§10.13 (prossimo pass), Caminho 4 Black Magic Extended (indiretto — baseline vanilla crea contesto per ≥96 spell). Backlog domande aperte: Spell Spring attende prossimo slot vuoto (candidati sacrificio: Slot 18 Double AP, 19 Triple AP, 21 Pickpocket, 22 Master Thief — cheese di progression/loot); Status/Break Sharpness per prossime identità per-char §10.9. Non tocca: writer/hook/probe/DLL/csproj lato writer. File:FFXProjectEditor/FFXProjectEditor.csproj(v2.130.3.7→v2.130.3.8);docs/reverse/FFX_SPIRA_REFORGE_VANILLA_OFFENSIVE_REBALANCE_2026-06-16.md(nuovo, ~280 righe, 7 sezioni: §0 verità breve, §1 diagnosi carneficina vanilla, §2 pacchetto consolidato c om tabella 16 skills + pulizia auto-ability + MP Sphere, §3 avvertenze tecniche 6 elementi, §4 piano implementazione Phase 1+2, §5 domande aperte, §6 versione consegna, §7 riferimenti incrociati);CHANGELOG.md+changelogUS.md+docs/governance/VERSIONING.md+docs/ai/SESSION_HANDOFF.md+mods/Spira Reforge/VISION_AND_ROADMAP.md(prossima revisione). [precedente:v2.130.3.7catalogo di riferimento]