Perimeter – Open-Source Real-Time Strategy Game

https://github.com/KD-lab-Open-Source/Perimeter

Периметр | Perimeter

Perimeter

Linux Build MacOS Build Windows MSVC Build Windows MSYS Build

Join the chat at https://t.me/PerimeterGame

Discord: https://discord.com/invite/jg9G7cp

Community in telegram: https://t.me/PerimeterGame

About

Perimeter is a real-time strategy video game with unique gameplay elements such as terraforming deformable terrain, morphing units, energy network, protective shield and surreal worlds.

Game needs assets/resources (3D models, textures, sounds, texts, configs, etc.) to run which can be obtained from purchased games in physical copies or digital stores.

Some parts may still need fixing or be experimental, expect some unexpected behavior, artifacts, bugs or crashes.

Issues for feature requests, suggestions, propositions, bugs, pull requests and other contributions are welcomed.

Where to play

Лицензией | License

© ООО "КД ВИЖЕН" (Калининград) | © LLC "KD VISION" (Kaliningrad)

Весь код, за исключением сторонних библиотек, публикуется под лицензией GPLv3. Код сторонних библиотек (где указана иная лицензия) публикуется под лицензией этих библиотек.

The whole code, except 3rd-party libraries, is published under the GPLv3 license. Code of 3rd-party libraries (where another license is specified) is published under the license of these libraries.)

Compiling and installing

There is instructions available in:

English

Supported games

  • Perimeter
  • Perimeter: Emperor Testament

Enhancements from original game

  • Modding support
  • Bugfixes
  • Right click on morph units to request basic units required
  • Automatic game assets searching in these paths order:
    • Path from content= command argument
    • Linux: $HOME/.local/share/K-D LAB/Perimeter/Content
    • MacOS: $HOME/Library/Application Support/K-D LAB/Perimeter/Content
    • Executable path
    • Windows: %AppData%\Roaming\K-D LAB\Perimeter\Content
    • Previous used content stored in settings
  • Support for 64 bits and other CPUs architectures than x86
  • Frame selection in battle/multiplayer menu and new colors
  • Experimental widescreen and custom resolutions support:
    • Game scans Resource/Icons/intf for XxY named folders such as 1920x1080 and adds as selectable option
    • Custom resolutions uses the height to load Resource/Icons/MainMenu/ and Resource/Icons/Portraits/ with folder name xY such as x1080 with above example. This allows reusing same height menu elements that still use 4:3 aspect ratio
    • Both .ini and resx= resy= command arguments accept custom resolutions, these will use the closest UI resolutions upscaled/centered to maintain visual consistency.
  • Experimental resizable windows
  • Better save game map / content checking
  • Enhancements for multiplayer:
    • TCP/IP protocol instead of DirectPlay8
    • Cross platform multiplayer
    • Host Scripts transfer and basic l3d files checksum to ensure matching gameplay between players
    • Allow players to watch game after being defeated
    • Support for saving and continuing multiplayer saves
    • Experimental recovery mechanism for desyncs
  • Experimental support for MacOS
  • More than 4 player maps supported

Game settings:

Application preferences paths:

  • Linux: $HOME/.local/share/K-D LAB/Perimeter/
  • MacOS: $HOME/Library/Application Support/K-D LAB/Perimeter/
  • Windows: %AppData%\Roaming\K-D LAB\Perimeter\

NOTE: Some settings like current language, active profile, multiplayer settings and game content path can be found now at file Settings.ini inside application preferences directory. This file is automatically created/updated by the game.

Repository contents

  • Source/ - Contains source code for the game and tools, most folders purpose can be guessed but some noteworthy:

    • Configurator - Unknown - GUI utility distributed with game that allows players to change language and other settings.
    • EasyMap - Unknown - Some kind of map demo.
    • EFFECTTOOL - Unknown - Seems to be a tool for editing effects
    • Exodus - Working - Contains helper code and libraries for porting game outside Windows/DirectX (unrelated to game Exodus faction)
    • Game/ - Working - Contains entry point for game in Runtime.cpp and other game related code.
      • Scripts - Working - Destination folder for generated hi/cppi files from .prm script files, these are compiled using XPrm
    • HT - Working - From "HyperTreading", contains some multithreading related stuff.
    • Network - Working - Contains high abstraction networking code which is used from other parts of game and low level networking code used by higher abstraction networking code. TCP sockets are provided by SDL_net.
    • PluginMAX - Working - Handles game 3D models loading from M3D/L3D files. Name comes from "3ds Max" which was used originally for creating and exporting these models.
    • Render - Working - Provides graphics/rendering abstraction API, uses DirectX APIs under the hood which is provided by dxvk and Exodus outside Windows platform.
    • Scripts/ - Working - Contains .prm files that are compiled using XPrm tool, *Library files that are loaded by game at runtime which contain some game configs/data and Texts.tdb containing ingame texts. Some game copies may contain a copy of this folder.
      • Triggers - Trigger chains containing maps and AI triggers/behaviors.
    • Sound - Working - Provides sound effects abstraction and music control API, uses SDL_mixer.
    • Terra - Working - Seems to contain deformable terrain related code.
    • TriggerEditor - Unknown - A GUI providing library which could be called from debug builds of game to edit Trigger chains.
    • tx3d - Working - "Procedural 3D Texture Library", used by Terra and SCodeInterpreter
    • UserInterface/ - Working - Handles game UI such as main menu and submenus, ingame HUD and inputs.
      • SCodeInterpreter - Working - Interpreter for chain history files seen during main menu and campaign.
    • Util - Working - Utilities for game and other modules.
    • XPrm - Working - Tool for compiling .prm into declaration/implementation files such as hi/cppi.
    • XTool - Working - Previously a separate library containing various X* named helpers for different projects, currently only the essential stuff for the game remain. Some removed stuff may be need to ported from original XTool/XUtil sources for the rest of tools.
  • XLibs.Net/ - Contains some library headers and binaries

  • MSDXSDK_02_06/ - DirectX SDK used by the game

Unknown - Not tested, not compilable with modern compilers nor available in more platforms than Windows.`

Windows - Compilable with modern compilers but not available in more platforms than Windows.

Working - Compilable and available in other platforms such as Windows, MacOS and Linux.

Meta issue for tracking code modernization/porting progress: #58

{
"by": "mikae1",
"descendants": 5,
"id": 40249474,
"kids": [
40249498,
40252149,
40252825
],
"score": 11,
"time": 1714753670,
"title": "Perimeter – Open-Source Real-Time Strategy Game",
"type": "story",
"url": "https://github.com/KD-lab-Open-Source/Perimeter"
}
{
"author": "KD-lab-Open-Source",
"date": null,
"description": "Contribute to KD-lab-Open-Source/Perimeter development by creating an account on GitHub.",
"image": "https://opengraph.githubassets.com/e6c3f898591c58d9e79d97dca35ca9906764747f486b5e9abbddd8c3e4ccb52c/KD-lab-Open-Source/Perimeter",
"logo": "https://logo.clearbit.com/github.com",
"publisher": "GitHub",
"title": "GitHub - KD-lab-Open-Source/Perimeter",
"url": "https://github.com/KD-lab-Open-Source/Perimeter"
}
{
"url": "https://github.com/KD-lab-Open-Source/Perimeter",
"title": "GitHub - KD-lab-Open-Source/Perimeter",
"description": "Периметр | Perimeter Discord: https://discord.com/invite/jg9G7cp Community in telegram: https://t.me/PerimeterGame About Perimeter is a real-time strategy video game with unique gameplay elements such...",
"links": [
"https://github.com/KD-lab-Open-Source/Perimeter"
],
"image": "https://opengraph.githubassets.com/e6c3f898591c58d9e79d97dca35ca9906764747f486b5e9abbddd8c3e4ccb52c/KD-lab-Open-Source/Perimeter",
"content": "<div><article><p></p><h2>Периметр | Perimeter</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D1%82%D1%80--perimeter\"></a><p></p>\n<p><a target=\"_blank\" href=\"https://camo.githubusercontent.com/29ed01d134a1da602057714be145266004fc48e7074e3955fb03ac9625792ed8/68747470733a2f2f63646e2e616b616d61692e737465616d7374617469632e636f6d2f737465616d2f617070732f323533303137302f6865616465722e6a7067\"><img src=\"https://camo.githubusercontent.com/29ed01d134a1da602057714be145266004fc48e7074e3955fb03ac9625792ed8/68747470733a2f2f63646e2e616b616d61692e737465616d7374617469632e636f6d2f737465616d2f617070732f323533303137302f6865616465722e6a7067\" alt=\"Perimeter\" /></a></p>\n<p><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/linux_build.yml\"><img src=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/linux_build.yml/badge.svg\" alt=\"Linux Build\" /></a>\n<a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/macos_build.yml\"><img src=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/macos_build.yml/badge.svg\" alt=\"MacOS Build\" /></a>\n<a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/windows_msvc_build.yml\"><img src=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/windows_msvc_build.yml/badge.svg\" alt=\"Windows MSVC Build\" /></a>\n<a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/windows_msys_build.yml\"><img src=\"https://github.com/KD-lab-Open-Source/Perimeter/actions/workflows/windows_msys_build.yml/badge.svg\" alt=\"Windows MSYS Build\" /></a></p>\n<p><a target=\"_blank\" href=\"https://t.me/PerimeterGame\"><img src=\"https://camo.githubusercontent.com/671443122aa7673220b67773ade350ee41858ffb64168215d0c9a9ed31494e8b/68747470733a2f2f706174726f6c617669612e6769746875622e696f2f74656c656772616d2d62616467652f636861742e737667\" alt=\"Join the chat at https://t.me/PerimeterGame\" /></a></p>\n<p>Discord: <a target=\"_blank\" href=\"https://discord.com/invite/jg9G7cp\">https://discord.com/invite/jg9G7cp</a></p>\n<p>Community in telegram: <a target=\"_blank\" href=\"https://t.me/PerimeterGame\">https://t.me/PerimeterGame</a></p>\n<p></p><h2>About</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#about\"></a><p></p>\n<p>Perimeter is a real-time strategy video game with unique gameplay elements such as terraforming deformable terrain,\nmorphing units, energy network, protective shield and surreal worlds.</p>\n<p>Game needs assets/resources (3D models, textures, sounds, texts, configs, etc.) to run which can be obtained from\npurchased games in physical copies or digital stores.</p>\n<p>Some parts may still need fixing or be experimental, expect some unexpected behavior, artifacts, bugs or crashes.</p>\n<p>Issues for feature requests, suggestions, propositions, bugs, pull requests and other contributions are welcomed.</p>\n<p></p><h2>Where to play</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#where-to-play\"></a><p></p>\n<ul>\n<li>Windows / Linux <a target=\"_blank\" href=\"https://store.steampowered.com/app/2530170/PERIMETER_Legate_Edition/\">Steam</a></li>\n<li>Web <a target=\"_blank\" href=\"https://www.gamepix.com/play/perimeter\">GamePix</a></li>\n</ul>\n<p></p><h2>Лицензией | License</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%B5%D0%B9--license\"></a><p></p>\n<p>© ООО \"КД ВИЖЕН\" (Калининград) | © LLC \"KD VISION\" (Kaliningrad)</p>\n<p>Весь код, за исключением сторонних библиотек, публикуется под лицензией GPLv3.\nКод сторонних библиотек (где указана иная лицензия) публикуется под лицензией этих библиотек.</p>\n<p>The whole code, except 3rd-party libraries, is published under the GPLv3 license.\nCode of 3rd-party libraries (where another license is specified) is published under the license of these libraries.)</p>\n<p></p><h2>Compiling and installing</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#compiling-and-installing\"></a><p></p>\n<p>There is instructions available in:</p>\n<p><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/blob/cmake/INSTALL.eng.md\">English</a></p>\n<p></p><h2>Supported games</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#supported-games\"></a><p></p>\n<ul>\n<li>Perimeter</li>\n<li>Perimeter: Emperor Testament</li>\n</ul>\n<p></p><h2>Enhancements from original game</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#enhancements-from-original-game\"></a><p></p>\n<ul>\n<li>Modding support\n<ul>\n<li><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/blob/cmake/MODDING.eng.md\">English</a></li>\n</ul>\n</li>\n<li>Bugfixes</li>\n<li>Right click on morph units to request basic units required</li>\n<li>Automatic game assets searching in these paths order:\n<ul>\n<li>Path from content= command argument</li>\n<li>Linux: $HOME/.local/share/K-D LAB/Perimeter/Content</li>\n<li>MacOS: $HOME/Library/Application Support/K-D LAB/Perimeter/Content</li>\n<li>Executable path</li>\n<li>Windows: %AppData%\\Roaming\\K-D LAB\\Perimeter\\Content</li>\n<li>Previous used content stored in settings</li>\n</ul>\n</li>\n<li>Support for 64 bits and other CPUs architectures than x86</li>\n<li>Frame selection in battle/multiplayer menu and new colors</li>\n<li>Experimental widescreen and custom resolutions support:\n<ul>\n<li>Game scans Resource/Icons/intf for XxY named folders such as 1920x1080 and adds as selectable option</li>\n<li>Custom resolutions uses the height to load Resource/Icons/MainMenu/ and Resource/Icons/Portraits/\nwith folder name xY such as x1080 with above example. This allows reusing same height menu elements\nthat still use 4:3 aspect ratio</li>\n<li>Both .ini and resx= resy= command arguments accept custom resolutions, these will use\nthe closest UI resolutions upscaled/centered to maintain visual consistency.</li>\n</ul>\n</li>\n<li>Experimental resizable windows</li>\n<li>Better save game map / content checking</li>\n<li>Enhancements for multiplayer:\n<ul>\n<li>TCP/IP protocol instead of DirectPlay8</li>\n<li>Cross platform multiplayer</li>\n<li>Host Scripts transfer and basic l3d files checksum to ensure matching gameplay between players</li>\n<li>Allow players to watch game after being defeated</li>\n<li>Support for saving and continuing multiplayer saves</li>\n<li>Experimental recovery mechanism for desyncs</li>\n</ul>\n</li>\n<li>Experimental support for MacOS</li>\n<li>More than 4 player maps supported</li>\n</ul>\n<p></p><h2>Game settings:</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#game-settings\"></a><p></p>\n<p>Application preferences paths:</p>\n<ul>\n<li>Linux: $HOME/.local/share/K-D LAB/Perimeter/</li>\n<li>MacOS: $HOME/Library/Application Support/K-D LAB/Perimeter/</li>\n<li>Windows: %AppData%\\Roaming\\K-D LAB\\Perimeter\\</li>\n</ul>\n<p>NOTE: Some settings like current language, active profile, multiplayer settings and game content path can be found now at file Settings.ini inside application preferences directory.\nThis file is automatically created/updated by the game.</p>\n<p></p><h2>Repository contents</h2><a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter#repository-contents\"></a><p></p>\n<ul>\n<li>\n<p>Source/ - Contains source code for the game and tools, most folders purpose can be guessed but some noteworthy:</p>\n<ul>\n<li>Configurator - <em>Unknown</em> - GUI utility distributed with game that allows players to change language and other settings.</li>\n<li>EasyMap - <em>Unknown</em> - Some kind of map demo.</li>\n<li>EFFECTTOOL - <em>Unknown</em> - Seems to be a tool for editing effects</li>\n<li>Exodus - <em>Working</em> - Contains helper code and libraries for porting game outside Windows/DirectX\n(unrelated to game Exodus faction)</li>\n<li>Game/ - <em>Working</em> - Contains entry point for game in Runtime.cpp and other game related code.\n<ul>\n<li>Scripts - <em>Working</em> - Destination folder for generated hi/cppi files from .prm script files, these are\ncompiled using XPrm</li>\n</ul>\n</li>\n<li>HT - <em>Working</em> - From \"HyperTreading\", contains some multithreading related stuff.</li>\n<li>Network - <em>Working</em> - Contains high abstraction networking code which is used from other parts of game and\nlow level networking code used by higher abstraction networking code. TCP sockets are provided by SDL_net.</li>\n<li>PluginMAX - <em>Working</em> - Handles game 3D models loading from M3D/L3D files. Name comes from \"3ds Max\" which was used\noriginally for creating and exporting these models.</li>\n<li>Render - <em>Working</em> - Provides graphics/rendering abstraction API, uses DirectX APIs under the hood which is provided\nby dxvk and Exodus outside Windows platform.</li>\n<li>Scripts/ - <em>Working</em> - Contains .prm files that are compiled using XPrm tool, *Library files that are loaded by game at runtime\nwhich contain some game configs/data and Texts.tdb containing ingame texts. Some game copies may contain a copy of this folder.\n<ul>\n<li>Triggers - Trigger chains containing maps and AI triggers/behaviors.</li>\n</ul>\n</li>\n<li>Sound - <em>Working</em> - Provides sound effects abstraction and music control API, uses SDL_mixer.</li>\n<li>Terra - <em>Working</em> - Seems to contain deformable terrain related code.</li>\n<li>TriggerEditor - <em>Unknown</em> - A GUI providing library which could be called from debug builds of game to edit Trigger chains.</li>\n<li>tx3d - <em>Working</em> - \"Procedural 3D Texture Library\", used by Terra and SCodeInterpreter</li>\n<li>UserInterface/ - <em>Working</em> - Handles game UI such as main menu and submenus, ingame HUD and inputs.\n<ul>\n<li>SCodeInterpreter - <em>Working</em> - Interpreter for chain history files seen during main menu and campaign.</li>\n</ul>\n</li>\n<li>Util - <em>Working</em> - Utilities for game and other modules.</li>\n<li>XPrm - <em>Working</em> - Tool for compiling .prm into declaration/implementation files such as hi/cppi.</li>\n<li>XTool - <em>Working</em> - Previously a separate library containing various X* named helpers for different projects,\ncurrently only the essential stuff for the game remain. Some removed stuff may be need to ported from original\nXTool/XUtil sources for the rest of tools.</li>\n</ul>\n</li>\n<li>\n<p>XLibs.Net/ - Contains some library headers and binaries</p>\n</li>\n<li>\n<p>MSDXSDK_02_06/ - DirectX SDK used by the game</p>\n</li>\n</ul>\n<p><strong>Unknown</strong> - Not tested, not compilable with modern compilers nor available in more platforms than Windows.`</p>\n<p><strong>Windows</strong> - Compilable with modern compilers but not available in more platforms than Windows.</p>\n<p><strong>Working</strong> - Compilable and available in other platforms such as Windows, MacOS and Linux.</p>\n<p>Meta issue for tracking code modernization/porting progress: <a target=\"_blank\" href=\"https://github.com/KD-lab-Open-Source/Perimeter/issues/58\">#58</a></p>\n</article></div>",
"author": "",
"favicon": "https://github.githubassets.com/favicons/favicon.svg",
"source": "github.com",
"published": "",
"ttr": 185,
"type": "object"
}