https://github.com/eduard-permyakov/permafrost-engine Skip to content Toggle navigation Sign up * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code + Explore + All features + Documentation + GitHub Skills + Blog * Solutions + For + Enterprise + Teams + Startups + Education + By Solution + CI/CD & Automation + DevOps + DevSecOps + Case Studies + Customer Stories + Resources * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles + Repositories + Topics + Trending + Collections * Pricing [ ] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this user All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} eduard-permyakov / permafrost-engine Public * Notifications * Fork 85 * Star 2.4k An OpenGL RTS game engine written in C License GPL-3.0 license 2.4k stars 85 forks Star Notifications * Code * Issues 7 * Pull requests 0 * Actions * Projects 0 * Security * Insights More * Code * Issues * Pull requests * Actions * Projects * Security * Insights eduard-permyakov/permafrost-engine This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags Name already in use A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? Cancel Create 1 branch 0 tags Code * Local * Codespaces * Clone HTTPS GitHub CLI [https://github.com/e] Use Git or checkout with SVN using the web URL. [gh repo clone eduard] Work fast with our official CLI. Learn more. * Open with GitHub Desktop * Download ZIP Sign In Required Please sign in to use Codespaces. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching GitHub Desktop If nothing happens, download GitHub Desktop and try again. Launching Xcode If nothing happens, download Xcode and try again. Launching Visual Studio Code Your codespace will open once ready. There was a problem preparing your codespace, please try again. Latest commit @eduard-permyakov eduard-permyakov Update README.md ... 02fc54e May 12, 2021 Update README.md 02fc54e Git stats * 1,161 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time assets Add 'fireball' model March 18, 2021 20:11 deps CPython: export "Py_UniversalNewline" symbols April 25, 2021 10:46 docs Bump to version 1.0; update docs May 8, 2021 18:04 launcher launcher: support setting optional app name and app icon April 25, 2021 10:46 scripts Expose SDL_KEYSYM constants to scripting; send keysym along with SDL_... April 12, 2021 20:09 shaders terrain shader: fix out-of-bounds sampling at the map boundaries April 12, 2021 20:09 src Bump to version 1.0; update docs May 8, 2021 18:04 .gitignore Update .gitignore; remove stray file June 3, 2020 14:56 LICENSE.txt Add license December 30, 2017 13:08 Makefile Makefile: add option to build with address-sanitizer support April 14, 2021 15:44 README.md Update README.md May 12, 2021 19:27 View code [ ] Engine Showcase Engine Summary Dependencies Building Permafrost Engine For Linux For Windows License Devlog Comments/Questions README.md Logo Permafrost Engine is an OpenGL 3.3 Real Time Strategy game engine written in C. It is made in the image of old classics, but incorporating some modern ideas. Engine Showcase everglory-banner EVERGLORY is the flagship game developed using Permafrost Engine. Download the free (or donate what-you-want) demo on itch.io or on Steam. With the demo you also get access to all the scripts and assets powering the gameplay to learn from and modify as you wish. screenshot-01 screenshot-02 screenshot-03 screenshot-04 screenshot-05 screenshot-06 Engine Summary * OpenGL 3.3 programmable pipeline (more modern extensions used where available) * Custom ASCII model format with Blender export script * Skeletal animation with GPU skinning * Phong reflection model with materials * Directional light shadow mapping * Batched rendering with dynamic batches * Ringbuffer-based streaming of data to GPU * RTS camera, FPS camera * Rendering of tile-based map parsed from ASCII file * Water rendering (including reflection, refraction, soft edge effects) * Export/Import of game entites to/from ASCII files * Engine internals exposed to Python 2.7 for scripting * Event system * UI framework (Nuklear-based) * Efficient raycasting * Map/Scene editor * Pause/Resume system * Fast rendering of huge maps * Map navigation graph/grid generation * Implementation of 'boids' steering/flocking behaviours * Hierarchial flow field pathfinding * Handling of dynamic obstacles in pathfinding * Dynamic collision avoidance of multiple entities using Hybrid Reciprocal Velocity Obstacles and the ClearPath algorithm * Pathfinding of different kinds/sizes of units (using "navigation layers") * Efficient spatial indexing using a quadtree * Efficient real-time tracking of entity membership to dynamic spatial regions * Audio system supporting positional effects and multiple channels of global effects * RTS minimap * RTS-style unit selection * RTS unit combat system * RTS fog-of-war system * RTS base-building mechanics * RTS resource gathering (and transporting) mechanics * Ranged combat using an efficient projectile physics simulation * Support for different resolutions and aspect ratios * Configurable graphics settings * Serialization and deserialization of the entire Python interpreter state * Saving and restoring of any engine session, including all Python-defined state * Multithreaded: simulation and rendering in a 2-stage pipeline * Advanced debug visualizations and profiling instrumentatation * Fiber system for putting work in lightweight tasks that are scheduled in userspace * Fiber-backed Python tasks, allowing cooperative multitasking logic in Python * Cross-platform (Linux and Windows) * Windows launcher to automatically capture a minidump and stdout, stderr logs on application error Dependencies * SDL2 2.0.10 * GLEW 2.1.0 * python 2.7.17 * openal-soft 1.21.1 * stb_image.h, stb_image_resize.h * khash.h * nuklear.h All dependencies can be built from source and distributed along with the game binary if desired. Python is built with a subset of the default modules and packaged with a trimmed-down stdlib. Building Permafrost Engine For Linux 1. git clone https://github.com/eduard-permyakov/ permafrost-engine.git 2. cd permafrost-engine 3. make deps (to build the shared library dependencies to ./lib) 4. make pf Now you can invoke make run to launch the demo or make run_editor to launch the map editor. Optionally, invoke make launchers to create the ./demo and ./editor binaries which don't require any arguments. For Windows The source code can be built using the mingw-w64 cross-compilation toolchain (http://mingw-w64.org/doku.php) using largely the same steps as for Linux. Passing PLAT=WINDOWS to the make environment is the only required change. The compliation can either be done on a Linux host, or natively on Windows using MSYS2 (https://www.msys2.org/). 1. git clone https://github.com/eduard-permyakov/ permafrost-engine.git 2. cd permafrost-engine 3. make deps PLAT=WINDOWS 4. make pf PLAT=WINDOWS 5. make launchers PLAT=WINDOWS License Permafrost Engine is licensed under the GPLv3, with a special linking exception. Devlog Follow the development of Permafrost Engine and EVERGLORY on YouTube. Indie RTS Devlog #1: Introducing Permafrost Engine Indie RTS Devlog #2: Saving The Python Interpreter Indie RTS Devlog #3: Group Pathfinding EVERGLORY: Teaser Trailer #1 Indie RTS Devlog #4: Fog of War Indie RTS Devlog #5: Performance Optimization Indie RTS Devlog #6: Fibers, Async Jobs Indie RTS Devlog #7: Main Menu UI, Loading Missions Indie RTS Devlog #8: Python Tasks + Making Pong! Indie RTS Devlog #9: Base Building Indie RTS Devlog #10: Demo Gameplay Indie RTS Devlog #11: Resource Gathering, Game Design Indie RTS Devlog #12: Crafting Units Indie RTS Devlog #13: Large Unit Pathfinding Indie RTS Devlog #14: Projectiles, Big Battles EVERGLORY - Official Trailer (2021 Indie RTS) Comments/Questions Comments or questions regarding the project or the source code? E-mail: edward.permyakov@gmail.com. Discuss EVERGLORY and its' development on Discord. If you have a useful fix for a non-trivial engine issue, feel free to make a PR. Be warned that I will scrutinize every patch to make sure it meets my personal quality standards for the engine code. It you wish to evelove the engine in some way and want the changes to be upstreamed, then do get in touch to discuss it. About An OpenGL RTS game engine written in C Topics python c opengl game-engine rts game-engine-3d rendering-3d-graphics rts-engine real-time-strategy Resources Readme License GPL-3.0 license Stars 2.4k stars Watchers 55 watching Forks 85 forks Report repository Releases No releases published Packages 0 No packages published Contributors 4 * @eduard-permyakov eduard-permyakov * @francois-berder francois-berder Francois Berder * @tujh-rf tujh-rf Egor * @draczer01 draczer01 Languages * C 87.2% * Python 9.6% * GLSL 3.1% * Other 0.1% Footer (c) 2023 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.