Extract VM runtime settings handler

This commit is contained in:
gamer147
2026-08-03 09:54:45 -04:00
parent ddd9853bd6
commit 716601e6a3
4 changed files with 50 additions and 13 deletions

View File

@@ -216,6 +216,8 @@ string comparison/concatenation/conversion/move, native byte-length and CP932 op
fullwidth string editor; shared operand storage, addressing, and native-string encoding remain in the coordinator. fullwidth string editor; shared operand storage, addressing, and native-string encoding remain in the coordinator.
`engine/Age.Engine/Vm/VirtualMachine.Diagnostics.cs` owns diagnostic value/newline accumulation and synchronous `engine/Age.Engine/Vm/VirtualMachine.Diagnostics.cs` owns diagnostic value/newline accumulation and synchronous
show-and-clear opcode dispatch; shared diagnostic state and native-context formatting remain in the coordinator. show-and-clear opcode dispatch; shared diagnostic state and native-context formatting remain in the coordinator.
`engine/Age.Engine/Vm/VirtualMachine.RuntimeSettings.cs` owns message-window alpha and system-menu enable/show
delay opcode dispatch; reset/default initialization, public menu-state accessors, and host state remain centralized.
The disposable `build/page-map-<SCENE>.jsonl` files are produced by editor/development Godot runs and map The disposable `build/page-map-<SCENE>.jsonl` files are produced by editor/development Godot runs and map
runtime ADV page ordinals to their authoritative script offsets for `tools/locate_page.py`. Packaged exports runtime ADV page ordinals to their authoritative script offsets for `tools/locate_page.py`. Packaged exports

View File

@@ -734,6 +734,13 @@ do not mix mechanical moves with semantic changes.
instruction through guarded `StepDiagnostic`; shared accumulator state and native-context formatting remain instruction through guarded `StepDiagnostic`; shared accumulator state and native-context formatting remain
in the coordinator. Runtime validation remains green. in the coordinator. Runtime validation remains green.
The eighteenth bounded `VirtualMachine.Step` extraction moved message-window alpha get/set, system-menu
enable state, and system-menu show-delay get/set into
`engine/Age.Engine/Vm/VirtualMachine.RuntimeSettings.cs`. The top-level dispatcher retains all labels and
aliases at their existing positions and routes them through guarded `StepRuntimeSetting`; reset/default
initialization, public menu-state accessors, and host state remain centralized. Runtime validation remains
green.
**Gate:** no externally visible behavior or command changes; generated artifacts are byte-identical where **Gate:** no externally visible behavior or command changes; generated artifacts are byte-identical where
deterministic, and the corresponding engine, Python, Godot, and corpus validations remain green after deterministic, and the corresponding engine, Python, Godot, and corpus validations remain green after
each domain move. each domain move.
@@ -1107,8 +1114,9 @@ Continue step 2 of the **codebase consolidation** maintenance slice: behavior-ne
by the tracked launcher and layered validation driver. With the planned `Main`, `GodotAdvHost`, and `GfxState` by the tracked launcher and layered validation driver. With the planned `Main`, `GodotAdvHost`, and `GfxState`
domains isolated and the audio, movie, surface/texture, retained-object, animation, presentation, ADV-text, domains isolated and the audio, movie, surface/texture, retained-object, animation, presentation, ADV-text,
text-history, ADV-service, input, timing, persistence, and memory/collection `VirtualMachine.Step` families routed text-history, ADV-service, input, timing, persistence, and memory/collection `VirtualMachine.Step` families routed
through domain handlers, with control-flow/coroutine, process/root-exit/cross-script lifecycle, value, and through domain handlers, with control-flow/coroutine, process/root-exit/cross-script lifecycle, value,
diagnostic dispatch now isolated as well, extract message-window and system-menu runtime settings diagnostic, and runtime-setting dispatch now isolated as well, route the four remaining recognized opcode bodies
next without replacing the proven dispatcher or changing public types, commands, and generated output. for script entry/root state and surface reload policy into their existing domain handlers, leaving `Step` as the
proven dispatcher and unknown-op fallback without changing public types, commands, and generated output.
Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does
not replace Phase B gameplay validation or the open cross-platform gates. not replace Phase B gameplay validation or the open cross-platform gates.

View File

@@ -0,0 +1,36 @@
using Age.Engine.Model;
namespace Age.Engine.Vm;
public sealed partial class VirtualMachine
{
private int StepRuntimeSetting(string label, IReadOnlyList<Operand> a, int pc)
{
switch (label)
{
case "get-message-window-alpha": // 0x131: process-owned message:MesWinAlpha setting
case "u00415F70":
Write(a[0], _messageWindowAlphaSetting);
return pc + 1;
case "set-message-window-alpha": // 0x141: paired message:MesWinAlpha configuration setter
case "u0041FAA0":
_messageWindowAlphaSetting = (int)Read(a[0]);
_host.SetMessageWindowAlphaSetting(_messageWindowAlphaSetting);
return pc + 1;
case "set-system-menu-enabled": // 0x142: native AGERC menu reentrancy guard
case "u0041FB10": // pre-reference compatibility
_systemMenuActionsEnabled = unchecked((int)Read(a[0]));
return pc + 1;
case "get-system-menu-show-delay": // 0x148: paired TIMER_SHOWMENU getter
case "u004160A0": // pre-reference compatibility
Write(a[0], unchecked((int)_systemMenuShowDelayMilliseconds));
return pc + 1;
case "set-system-menu-show-delay": // 0x149: top-edge dwell threshold in milliseconds
case "u0041FCE0": // pre-reference compatibility
_systemMenuShowDelayMilliseconds = unchecked((uint)Read(a[0]));
return pc + 1;
default:
throw new InvalidOperationException($"Non-runtime-setting opcode routed to runtime-setting handler: {label}");
}
}
}

View File

@@ -1444,24 +1444,15 @@ public sealed partial class VirtualMachine
return StepAdvText(label, ins, pc); return StepAdvText(label, ins, pc);
case "get-message-window-alpha": // 0x131: process-owned message:MesWinAlpha setting case "get-message-window-alpha": // 0x131: process-owned message:MesWinAlpha setting
case "u00415F70": case "u00415F70":
Write(a[0], _messageWindowAlphaSetting); return pc + 1;
case "set-message-window-alpha": // 0x141: paired message:MesWinAlpha configuration setter case "set-message-window-alpha": // 0x141: paired message:MesWinAlpha configuration setter
case "u0041FAA0": case "u0041FAA0":
_messageWindowAlphaSetting = (int)Read(a[0]);
_host.SetMessageWindowAlphaSetting(_messageWindowAlphaSetting);
return pc + 1;
case "set-system-menu-enabled": // 0x142: native AGERC menu reentrancy guard case "set-system-menu-enabled": // 0x142: native AGERC menu reentrancy guard
case "u0041FB10": // pre-reference compatibility case "u0041FB10": // pre-reference compatibility
_systemMenuActionsEnabled = unchecked((int)Read(a[0]));
return pc + 1;
case "get-system-menu-show-delay": // 0x148: paired TIMER_SHOWMENU getter case "get-system-menu-show-delay": // 0x148: paired TIMER_SHOWMENU getter
case "u004160A0": // pre-reference compatibility case "u004160A0": // pre-reference compatibility
Write(a[0], unchecked((int)_systemMenuShowDelayMilliseconds));
return pc + 1;
case "set-system-menu-show-delay": // 0x149: top-edge dwell threshold in milliseconds case "set-system-menu-show-delay": // 0x149: top-edge dwell threshold in milliseconds
case "u0041FCE0": // pre-reference compatibility case "u0041FCE0": // pre-reference compatibility
_systemMenuShowDelayMilliseconds = unchecked((uint)Read(a[0])); return StepRuntimeSetting(label, a, pc);
return pc + 1;
case "get-message-glyph-delay": // 0x7f case "get-message-glyph-delay": // 0x7f
case "u00414C60": case "u00414C60":
case "set-message-glyph-delay": // 0x1b5 case "set-message-glyph-delay": // 0x1b5