Game as the Core mod: data-driven content and localization

The whole game is now described by Mods/Core — the first consumer of
the engine's new MrGameEng.Mods module:

- textures/ moved to Mods/Core/Textures; atlases are built at game
  start from the merged texture tree of all active mods into Cache/
  (gitignored, incremental) instead of being committed, and the
  GameAssets atlas handles are gone with them
- terrain, plants and pawns are JSON defs (Mods/Core/Defs) with parent
  inheritance; scenes read TerrainDef/PlantDef/PawnDef instead of
  hardcoded arrays, and the TerrainKind enum is retired
- HUD strings come from Mods/Core/Languages (ru default, en fallback)
  through LanguageManager; the language switches at runtime
- new console commands: mods, lang [code], defs [type]; atlas now
  inspects the runtime-built cache
- bump engine: MrGameEng.Mods module and the explicit-sources
  AtlasBuilder overload

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Leonid Pershin
2026-06-11 21:51:46 +03:00
co-authored by Claude Fable 5
parent 218973ae60
commit 8b531bcd7e
4266 changed files with 723 additions and 54164 deletions
+30
View File
@@ -47,6 +47,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MrGameEng.Pathfinding.Tests
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MrGameEng.Collisions.Tests", "engine\tests\MrGameEng.Collisions.Tests\MrGameEng.Collisions.Tests.csproj", "{B9161776-32FE-415E-9401-DC5BB87FC225}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MrGameEng.Mods", "engine\src\MrGameEng.Mods\MrGameEng.Mods.csproj", "{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MrGameEng.Mods.Tests", "engine\tests\MrGameEng.Mods.Tests\MrGameEng.Mods.Tests.csproj", "{07986629-FE7C-42BE-868B-0FCA1915D2A2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -273,6 +277,30 @@ Global
{B9161776-32FE-415E-9401-DC5BB87FC225}.Release|x64.Build.0 = Release|Any CPU
{B9161776-32FE-415E-9401-DC5BB87FC225}.Release|x86.ActiveCfg = Release|Any CPU
{B9161776-32FE-415E-9401-DC5BB87FC225}.Release|x86.Build.0 = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|x64.ActiveCfg = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|x64.Build.0 = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|x86.ActiveCfg = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Debug|x86.Build.0 = Debug|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|Any CPU.Build.0 = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|x64.ActiveCfg = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|x64.Build.0 = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|x86.ActiveCfg = Release|Any CPU
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82}.Release|x86.Build.0 = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|x64.ActiveCfg = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|x64.Build.0 = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|x86.ActiveCfg = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Debug|x86.Build.0 = Debug|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|Any CPU.Build.0 = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|x64.ActiveCfg = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|x64.Build.0 = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|x86.ActiveCfg = Release|Any CPU
{07986629-FE7C-42BE-868B-0FCA1915D2A2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -298,5 +326,7 @@ Global
{9406DB4C-FABF-48FE-BEA7-25AD319D2172} = {F4A69A46-AF86-AB4E-7D23-4CCCB7B9A519}
{47E5E756-64F9-4B5A-8EC3-B016745166C4} = {CD3B5CE5-C23F-38B4-04AA-A303F94731A5}
{B9161776-32FE-415E-9401-DC5BB87FC225} = {CD3B5CE5-C23F-38B4-04AA-A303F94731A5}
{F91AA8C8-FD6B-4B92-BB3A-844DCA932D82} = {F4A69A46-AF86-AB4E-7D23-4CCCB7B9A519}
{07986629-FE7C-42BE-868B-0FCA1915D2A2} = {CD3B5CE5-C23F-38B4-04AA-A303F94731A5}
EndGlobalSection
EndGlobal