From 511badae6dd7331cac05564a4f1f59a416f522e9 Mon Sep 17 00:00:00 2001 From: gamer147 Date: Mon, 3 Aug 2026 11:25:08 -0400 Subject: [PATCH] Add frontend production project --- docs/PROJECT-STRUCTURE.md | 12 +++++++++++- docs/remake-architecture-and-roadmap.md | 14 +++++++++++--- .../Age.Engine.Frontend.csproj | 13 +++++++++++++ .../Age.Engine.Frontend}/GodotTimelineLog.cs | 0 .../Age.Engine.Frontend}/GodotTraceSink.cs | 0 .../Age.Engine.Frontend}/GodotVmOptions.cs | 0 .../Age.Engine.Frontend}/PageLocatorState.cs | 0 .../Age.Engine.Frontend}/PerformanceFrameLog.cs | 0 .../StepLimitDiagnosticFormatter.cs | 0 .../Age.Engine.Frontend}/WindowLaunchOptions.cs | 0 engine/Age.Engine.Tests/Age.Engine.Tests.csproj | 8 +------- engine/AgeEngine.sln | 16 +++++++++++----- godot/Himegari.csproj | 1 + godot/Himegari.sln | 8 ++++++++ 14 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 engine/Age.Engine.Frontend/Age.Engine.Frontend.csproj rename {godot => engine/Age.Engine.Frontend}/GodotTimelineLog.cs (100%) rename {godot => engine/Age.Engine.Frontend}/GodotTraceSink.cs (100%) rename {godot => engine/Age.Engine.Frontend}/GodotVmOptions.cs (100%) rename {godot => engine/Age.Engine.Frontend}/PageLocatorState.cs (100%) rename {godot => engine/Age.Engine.Frontend}/PerformanceFrameLog.cs (100%) rename {godot => engine/Age.Engine.Frontend}/StepLimitDiagnosticFormatter.cs (100%) rename {godot => engine/Age.Engine.Frontend}/WindowLaunchOptions.cs (100%) diff --git a/docs/PROJECT-STRUCTURE.md b/docs/PROJECT-STRUCTURE.md index b897687..5f499e3 100644 --- a/docs/PROJECT-STRUCTURE.md +++ b/docs/PROJECT-STRUCTURE.md @@ -106,7 +106,7 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ ├── opcodes.json GENERATED from opcodes.toml (machine view for the C# VM) │ └── manifest.json, opcode-coverage.md (opcode-coverage.md GENERATED from opcodes.toml) │ - ├── engine/ DELIVERABLE — the .NET VM core (AgeEngine.sln: Age.Engine / Age.Cli / tests) + ├── engine/ DELIVERABLE — the .NET VM/runtime projects and tests (AgeEngine.sln) │ ├── Age.Engine/Model/ retained graphics state plus separately navigable public │ render, transition, diagnostic, and persistence contracts │ ├── Age.Engine/Sys4/ runtime game-root selection, catalog parser, loose-first bounded @@ -118,6 +118,9 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings) │ ├── Age.Engine/Persistence/ native S3SD/S4SD + S3RT codecs, shared payload/ReadTextDB, │ layout-3 numbered state/history/gfx, DAT/STH pair + BMP codec, │ and profile-owned state + │ ├── Age.Engine.Frontend/ platform-neutral frontend diagnostics/options project: page + │ locator, timeline/trace/step-limit diagnostics, VM/window launch + │ options, and performance-frame logging │ └── Age.Engine.Text.Windows/ optional exact Windows GDI gray-4 reference backend; kept │ outside the platform-neutral VM/runtime core ├── native/ authored native runtime boundaries @@ -147,6 +150,13 @@ surface-transition drawing, raster helpers, and compositor decision logging. `go Godot input routing, locator/debug hotkeys, debug-scene dispatch, cursor control, native alerts, and full-width text entry. +`engine/Age.Engine.Frontend/` is the production owner of frontend helpers that do not depend on Godot types. +Both `engine/AgeEngine.sln` and `godot/Himegari.sln` include the project; Godot and `Age.Engine.Tests` consume it +through project references rather than compiling duplicate linked sources. The first owned cluster contains +`PageLocatorState`, `GodotTimelineLog`, `GodotTraceSink`, `StepLimitDiagnosticFormatter`, `GodotVmOptions`, +`PerformanceFrameLog`, and `WindowLaunchOptions`. Movie runtime/decoder helpers remain under `godot/` until their +separate ownership slices. + `godot/GodotAdvHost.cs` retains cross-domain host coordination. Its partial-class companion `godot/GodotAdvHost.AdvText.cs` owns live/retained ADV text, surface glyph rasterization and caching, history presentation, message-window alpha, and retained wait-indicator configuration/publication. diff --git a/docs/remake-architecture-and-roadmap.md b/docs/remake-architecture-and-roadmap.md index d9e9aca..a99f51d 100644 --- a/docs/remake-architecture-and-roadmap.md +++ b/docs/remake-architecture-and-roadmap.md @@ -827,6 +827,13 @@ do not mix mechanical moves with semantic changes. code into a small production project referenced by Godot, tests, and the corpus gate. Retain both existing solution files because Godot export requires the frontend-local solution. + **Progress (2026-08-03):** the first bounded build-graph slice introduced the platform-neutral + `Age.Engine.Frontend` production project and added it to both existing solutions. Page locator, timeline/trace + and step-limit diagnostics, VM/window launch options, and performance-frame logging moved unchanged from + `godot/` into the new owner. Godot and `Age.Engine.Tests` now use project references, eliminating seven direct + test source links without changing public types, namespaces, behavior, or export configuration. Both solution + builds and runtime validation remain green. + 5. **Close repository-policy and storage gaps.** Add an explicit project license, third-party notices and checksums/provenance for committed binaries, consistent editor/build policy, a pinned .NET SDK, and a CI entry point built on the same validation driver. Remove the empty workspace-root `.git` directory and @@ -1181,8 +1188,9 @@ layer's rendering diverges from ADV; save layout. ## 8. Immediate next step Begin step 4 of the **codebase consolidation** maintenance slice: make the build graph express source ownership -without changing behavior. Introduce the production project boundary for platform-neutral frontend helpers now -linked directly from `godot/` into `Age.Engine.Tests`, starting with the diagnostic/options helper cluster. Replace -source links with project references while retaining both existing solution files and Godot export behavior. +without changing behavior. Move the platform-neutral movie abstractions and runtime support—decoder interfaces, +movie/audio runtime state, movie-surface registry, and RIFF sanitization—from `godot/` into +`Age.Engine.Frontend` next. Replace their test source links while preserving the intentionally internal API through +explicit friend-assembly access; leave FFmpeg interop/decoder ownership for the following slice. 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. diff --git a/engine/Age.Engine.Frontend/Age.Engine.Frontend.csproj b/engine/Age.Engine.Frontend/Age.Engine.Frontend.csproj new file mode 100644 index 0000000..017440a --- /dev/null +++ b/engine/Age.Engine.Frontend/Age.Engine.Frontend.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/godot/GodotTimelineLog.cs b/engine/Age.Engine.Frontend/GodotTimelineLog.cs similarity index 100% rename from godot/GodotTimelineLog.cs rename to engine/Age.Engine.Frontend/GodotTimelineLog.cs diff --git a/godot/GodotTraceSink.cs b/engine/Age.Engine.Frontend/GodotTraceSink.cs similarity index 100% rename from godot/GodotTraceSink.cs rename to engine/Age.Engine.Frontend/GodotTraceSink.cs diff --git a/godot/GodotVmOptions.cs b/engine/Age.Engine.Frontend/GodotVmOptions.cs similarity index 100% rename from godot/GodotVmOptions.cs rename to engine/Age.Engine.Frontend/GodotVmOptions.cs diff --git a/godot/PageLocatorState.cs b/engine/Age.Engine.Frontend/PageLocatorState.cs similarity index 100% rename from godot/PageLocatorState.cs rename to engine/Age.Engine.Frontend/PageLocatorState.cs diff --git a/godot/PerformanceFrameLog.cs b/engine/Age.Engine.Frontend/PerformanceFrameLog.cs similarity index 100% rename from godot/PerformanceFrameLog.cs rename to engine/Age.Engine.Frontend/PerformanceFrameLog.cs diff --git a/godot/StepLimitDiagnosticFormatter.cs b/engine/Age.Engine.Frontend/StepLimitDiagnosticFormatter.cs similarity index 100% rename from godot/StepLimitDiagnosticFormatter.cs rename to engine/Age.Engine.Frontend/StepLimitDiagnosticFormatter.cs diff --git a/godot/WindowLaunchOptions.cs b/engine/Age.Engine.Frontend/WindowLaunchOptions.cs similarity index 100% rename from godot/WindowLaunchOptions.cs rename to engine/Age.Engine.Frontend/WindowLaunchOptions.cs diff --git a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj index 9bb7299..fe6bf19 100644 --- a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj +++ b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj @@ -22,21 +22,15 @@ + - - - - - - - diff --git a/engine/AgeEngine.sln b/engine/AgeEngine.sln index aa049d0..523b022 100644 --- a/engine/AgeEngine.sln +++ b/engine/AgeEngine.sln @@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Engine", "Age.Engine\Age.Engine.csproj", "{DD04FB21-F83D-4547-BBEC-97295F30623A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Cli", "Age.Cli\Age.Cli.csproj", "{795573A0-A283-4A28-B26C-606C1AA5E1FE}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Engine", "Age.Engine\Age.Engine.csproj", "{DD04FB21-F83D-4547-BBEC-97295F30623A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Engine.Frontend", "Age.Engine.Frontend\Age.Engine.Frontend.csproj", "{2B018D3E-4057-465E-89CB-4CC77FDD60E2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Cli", "Age.Cli\Age.Cli.csproj", "{795573A0-A283-4A28-B26C-606C1AA5E1FE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Engine.Tests", "Age.Engine.Tests\Age.Engine.Tests.csproj", "{2ED171C8-DA87-40FD-A6FB-3B3F6501029F}" EndProject @@ -22,8 +24,12 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {DD04FB21-F83D-4547-BBEC-97295F30623A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD04FB21-F83D-4547-BBEC-97295F30623A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD04FB21-F83D-4547-BBEC-97295F30623A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD04FB21-F83D-4547-BBEC-97295F30623A}.Release|Any CPU.Build.0 = Release|Any CPU + {DD04FB21-F83D-4547-BBEC-97295F30623A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD04FB21-F83D-4547-BBEC-97295F30623A}.Release|Any CPU.Build.0 = Release|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Release|Any CPU.Build.0 = Release|Any CPU {795573A0-A283-4A28-B26C-606C1AA5E1FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {795573A0-A283-4A28-B26C-606C1AA5E1FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {795573A0-A283-4A28-B26C-606C1AA5E1FE}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/godot/Himegari.csproj b/godot/Himegari.csproj index 552e122..19a5bf6 100644 --- a/godot/Himegari.csproj +++ b/godot/Himegari.csproj @@ -13,6 +13,7 @@ + diff --git a/godot/Himegari.sln b/godot/Himegari.sln index 26a6079..afb98ed 100644 --- a/godot/Himegari.sln +++ b/godot/Himegari.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Himegari", "Himegari.csproj", "{5821B505-EBD3-4B50-A83A-7AFE22AA1528}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Age.Engine.Frontend", "..\engine\Age.Engine.Frontend\Age.Engine.Frontend.csproj", "{2B018D3E-4057-465E-89CB-4CC77FDD60E2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,5 +23,11 @@ Global {5821B505-EBD3-4B50-A83A-7AFE22AA1528}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU {5821B505-EBD3-4B50-A83A-7AFE22AA1528}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU {5821B505-EBD3-4B50-A83A-7AFE22AA1528}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.ExportDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.ExportDebug|Any CPU.Build.0 = Debug|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.ExportRelease|Any CPU.ActiveCfg = Release|Any CPU + {2B018D3E-4057-465E-89CB-4CC77FDD60E2}.ExportRelease|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal