JARVIS-MAGIC
アップデート 2.124
2026/6/16
v2.124.0.0MINORJarvis-MAGIC
アイテムのスタック上限 99→255:新規`ItemStackCapHook` no`FfxHooksDll` (新機能、フラグによるゲート制御)
- (新機能:ランタイムでの新しいフック+vanillaの制限を超えてスタックの上限を解除するライター風のパッチ;初めて実装した)
FFX_Inventory_AddItem). この発見(idalib MCP を通じて証明されたもの)は、FFX_recon.i64(2026-06-16): スロットあたり99アイテムの上限と、中央のクランプが、ある関数においてFFX.exe—FFX_Inventory_AddItem@0x003905A0(IDAフラット0x7905A0) — 2つpush 63h** 汎用ヘルパーへのデータ渡しFFX_Math_ClampInt(v, 0, 99)@0x0039A0D0. 14個のコーラー(steal/drop/mix/shop/treasure/event/menu)はすべて**この単一の関数を通じて処理されます。他のパスへのclampのコピー&ペーストは行われません。ロード時のノーマライゼーションなし(以下で実証済み)FFX_Btl_PrepareSaveCommandState@0x786BC0: 空のスロットのみを初期化し、既存のカウントについてはエラーを出さない)。ストレージ(1バイトのQuantityBase+slotセーブ +byte[112]RAM上の0xD30B5C) は、再割り当てなしで 0~255 をすでにサポートしています。選択した戦略: バイトナローパッチでは 255 まで対応できません(push imm86A FF(-1 に対して符号拡張されるはず)→ トランポリン+スタブを用いた 5 バイトの迂回(テンプレートと同様)NovaSuperDamageHook). 各スタブ:push imm32 <cap>に置き換えるpush 63h, 2~3バイト分オフセットしたデータを再生し、経由して戻るjmp rel32~のために0x00390622/0x00390652. 設定可能なキャップ(設定方法:)FFXHOOKS_ITEM_STACK_CAPenv(デフォルト 255、1~255 にクリップ)。ゲーティング:item_stack_cap_255.flag(デフォルトではオフ = 標準の挙動を維持、自然な回帰テスト)。パッチ適用前に検証されたセンチネルバイト数:kExpectedNew[5] = {6A 63 6A 00 53}(サイト #1 / 新規スロット) およびkExpectedExist[5] = {6A 63 8D 04 1E}(サイト #2 / 既存のスロット)。2回目の書き込みが失敗した場合は自動的にロールバックされる (中途半端な状態で残さない)。PolyHookのビルドに成功(11/11 cpp、新しいものを含むItemStackCapHook.cpp), デプロイされたリリース版DLL (932352→935936 bytes, 新しいフックの+3584)。リネーム+コメント.i64適用されるもの(IDAの黄金律):0x7905A0→FFX_Inventory_AddItem,0x79A0D0→FFX_Math_ClampInt,0x790500→FFX_Inventory_GetItemCount,0x784A90→FFX_Inventory_DebugMaxAll,g_CmdAggregateAvailArrays→g_FFX_InventoryAggregate、コメントは0x79061D/0x79064D(トランポリンのレシピを使ったクランプサイト)。UIの評価(スパイクによる):safe-above-99-provavel(ゲッターはリクランプなしの生のバイトを返す;視覚的なリスク=2桁のレイアウトでは「100」以上でオーバーフローする可能性があるが、フォーマッタは%d(3桁の入力でもクラッシュしない)。Phase 3 UIパッチは事前適用されていない — RT2で確認済み。 Phase 4 RT2の6つのシナリオのレシピ(save-edit Quantity=200、steal/drop、shop buy、mix、Potionの使用、UIレンダリング)はdocs/reverse/FFX_ITEM_STACK_CAP_99_RESEARCH_2026-06-16.md§8. RT2 ゲーム内 テストが必要 (Halyson)。ドキュメント:docs/reverse/FFX_ITEM_STACK_CAP_99_RESEARCH_2026-06-16.md. 新規ファイル:RuntimeTools/FfxHooksDll/hooks/ItemStackCapHook.{h,cpp}. 再生されたファイル:shared/ffx_addresses.h(10個の新しいRVA+定数)、dllmain.cpp(include + フラグ有効化機能 + InstallItemStackCapHook をInstallHooks+ RemoveItemStackCapHook),FfxHooksDll.vcxproj,build_hooks.ps1. [前へ:v2.123.5.1]
v2.124.0.1REVISIONJarvis-MAGIC
ロンソ・マナ(先週の第5回RE):「バー満タン」説は完全に否定された — 真のゲートはメニューツリーのノード解決である(`ResolveMenuTreeNode`), ゲージは使用しないでください
- (RE/doc + ファイル名の変更/コメントの追加
.i64実際;一切の動作変更はなく、DLLも変更なし — 他のルームでも使用可能)。RT2のhudSafe=24(v2.123.4.1) 失敗し、ログにはゲージの行全体(hudSafe 23/24)が誤っていた理由が示されています:P0 ディスパッチ #1..#48 負荷=100 最大=100em TODOS os 48 frames (o pino persistente funcionou, a barra ficou genuinamente cheia todo frame) + bits0x590=0x0D+IsOdReady ->1(atévanilla=1) +311Ano anel — e o OD continuou oculto / "esquerda" bloqueada. ⇒charge==maxNÃO é o gate. (Bônus: o log inunda警告:コマンド 0~49 に OD リングヘッダーが見つかりません—ScanForOdRingHeaderprocura no range errado; o header de OD é cmd282.) O gate REAL (provado por decompile idalib):FFX_Btl_UI_BuildCommandRing@0x7ACEC0constrói o anel principal (Attack/Skill/Special) viaFFX_Btl_UI_BuildMainCommandRingTree@0x7A07D0só quandokind<=8; o anel Overdrive ékind=12→ PULA7A07D0e depende 100% deResolveMenuTreeNode(2,1,slot+41) ≥ 0(só entãosub_7979E0finaliza). Para Kimahri (slot 2) =Resolve(2,1,43), que retorna −1. A causa exata está emFFX_Btl_UI_WalkMenuBlobIndex@0x797420:idx=blob[2+treeId]; cnt=blob[1]; if(idx==0xFF || treeId>=cnt) return 0→LookupMenuBlob=0→解=−1→ anel OD nunca exibe. Mapeamento das duas vias: principal=Resolve(2,**0**,slot+109)no blobg_FFX_MenuTreeBlob_MainRing(*0x112A994) — resolve OK (user vê); OD=Resolve(2,**1**,slot+41)no blobg_FFX_MenuTreeBlob_OdRing(*0x112A9B4) — Kimahri testablob[45]. Ambos blobs são DADO ESTÁTICO do recursosystem_01(viaFFX_Btl_UI_InitMenuBlobPointers@0x783ED0:blob = base + *(base+N)), idênticos com/sem OD →blob[2+treeId]é índice de nó, não bool (por isso ohudSafe=19errou a semântica). Nada disso lê0x5BC/0x5BD(charge/max). Renames+comentários.i64aplicados e salvos (REGRA DE OURO):0x112A9B4→g_FFX_MenuTreeBlob_OdRing,0x112A994→g_FFX_MenuTreeBlob_MainRing,0x112A9A8→g_FFX_MenuBlobBase_system01+ comentários em0x797420(fórmula do gate),0x7985A0,0x7ACEC0,0x7A07D0,0x783ED0. EXPERIMENTO DECISIVO (próximo, precisa de 1 sessão DLL): DIAG no detour deResolveMenuTreeNodequandoa1==2&&a2==1logandotreeId,blobPtr=*0x112A9B4,cnt=blob[1], ``idx=blob[2+treeId]、vanillaの結果 — **2つのシナリオ**(ODが満杯であることが確認されたsave-edit対当社の強制)および**d iffar theidx/cnt** → フィックスの正確な値を表示(入力blob[45]有効にするか、treeIdをリダイレクトするか、あるいはcase 3オペレーターごとactor+0xF7C). **推奨事項:** のゲージピンを元に戻す/無効化するhudSafe=24(それは道ではない)、ただgateMin/drainCost(消費量はすでに確定済み)。資料:docs/reverse/FFX_RONSO_MANA_COMMAND_RING_PIPELINE_RE_2026-06-16.md§11. [前項:v2.124.0.0`]
v2.124.0.2REVISIONJarvis-MAGIC
Build+deploy の`ffx-hooks.dll` (DLLが解放された): の固定メニューバウンドを具現化する Nul Ward + Nul Ward用フラグおよびRT2用アイテムスタック上限;オフライン事前チェック GREEN
- レーン。 (運用:バージョン管理済みのコードの再ビルド+デプロイ+フラグの作成;今回のパスでは新しいソースコードの動作はなし — menu-boundの修正は
v2.123.4.0(エディタの「LearnedMove」エンコーディングは、そのエントリ独自のものです)。HalysonがDLLを公開しました(Ronso Manaがその使用を終えました)。アクション:(1)build_hooks.ps1 -WithPolyHook -Release→ 10/10 のフックがコンパイルされました。以下を含むNulWardTeachHook.cppマルチサイト用フィックス(cmp r32,140h/cmp eax,140h→322、PLACEMENTのループを含むすべてのサイトをパッチ適用する81 FF=edi) 以前はコード化されていたもの; (2) デプロイはinstall_to_modules.ps1 -EnableApply -EnableTeach— 以前のDLLのバックアップ (ffx-hooks.dll.backup-nul-ward-20260616-071450), 新しいSHAプレフィックス95E1D56A8B9269F7, フラグnul_ward.flag+nul_ward_apply.flag+nul_ward_teach.flag+nul_ward_teach_grant.flag; (3) 他のレーンからの要請により、作成されたmodules/item_stack_cap_255.flag(空) → 装填するItemStackCapHook(スタック上限 99→255;他レーンによるフック、共有DLLに既にコンパイル済み、デフォルト)FFX_ITEM_STACK_CAP_EXTENDED=255)。ゲート--nul-ward-static現在 判定:合格 (exeバイト数 + 322行 +engine_lookup_resolvesRadiant@0x7814/Umbral@0x7874inRange + DLL文字列 + デプロイフラグ + 新しいクリア)。RT2 ゲーム内実装済み(Nul Ward:320/321の非攻撃型キャストはオフラインで既に検証済み、ホワイトメニューでの表示+グリッド経由の指導+パーシストが未実装; アイテムスタック上限:ドキュメント§8の6つのシナリオ — ポーション100個のスタック、Steal/Drop/Mix/Shop/Treasure、回帰テストフラグオフ)。ドキュメント:FFX_NUL_WARD_TEACH_SURFACE_RE_VERDICT_2026-06-16,FFX_ITEM_STACK_CAP_99_RESEARCH_2026-06-16§8
v2.124.0.1