{"id":21368631,"url":"https://github.com/liraymond04/game-engine","last_synced_at":"2025-07-01T03:39:10.275Z","repository":{"id":214148049,"uuid":"735666586","full_name":"liraymond04/game-engine","owner":"liraymond04","description":"Game engine built in C99 using raylib and Lua scripting for mods","archived":false,"fork":false,"pushed_at":"2024-09-30T13:13:29.000Z","size":662,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-10T17:19:06.285Z","etag":null,"topics":["c","c99","cmake","cross-platform","emscripten","game-development","game-engine","hot-reload","lua","modding","mods","raylib","wasm","webassembly"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liraymond04.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-25T18:39:16.000Z","updated_at":"2024-09-30T13:13:32.000Z","dependencies_parsed_at":"2023-12-26T08:22:02.560Z","dependency_job_id":"976d2a77-b194-4f92-a645-62f470568afa","html_url":"https://github.com/liraymond04/game-engine","commit_stats":null,"previous_names":["liraymond04/game-engine"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liraymond04%2Fgame-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liraymond04%2Fgame-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liraymond04%2Fgame-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liraymond04%2Fgame-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liraymond04","download_url":"https://codeload.github.com/liraymond04/game-engine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243841217,"owners_count":20356446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","c99","cmake","cross-platform","emscripten","game-development","game-engine","hot-reload","lua","modding","mods","raylib","wasm","webassembly"],"created_at":"2024-11-22T07:25:38.688Z","updated_at":"2025-07-01T03:39:10.260Z","avatar_url":"https://github.com/liraymond04.png","language":"C","readme":"# game-engine\n\nGame engine built in C99 using [raylib](https://github.com/raysan5/raylib) and Lua scripting for mods\n\nFeatures:\n- Cross platform\n    - Runs on Linux, Windows, and the web\n    - Builds on Linux can target multiple platforms\n- Easy modding and extensible\n    - Game logic is defined as mods in Lua scripts\n    - Lua metatables provide intellisense and completion suggestions for LSPs\n    - Hooks can be user-defined at runtime, and optionally registered\n    - Event system allows for messaging and communication within the engine\n- Hot-reloading\n    - Modifications to Lua files will see changes reflected in real-time\n    - On POSIX systems, scenes can be loaded at runtime as shared libraries (.so files)\n\n## Building\n\n### Arch Linux\n\nThe prerequisite packages for building are:\n\n```bash\nsudo pacman -S --needed git gcc cmake ninja\n```\n\n```bash\n## Optionally pass the -d flag to build for debug\n./build.sh\n```\n\nAnd run the example project with the run script\n```\n./run.sh test-game\n```\n\n#### Web builds with Emscripten\n\nWeb builds use [Emscripten](https://github.com/emscripten-core/emscripten), and need the following additional packages:\n\n```bash\nsudo pacman -S --needed emscripten\n```\n\nBuild by passing in a new target flag to the build script\n\n```bash\n## Optionally pass the -d flag to build for debug\n./build.sh -t web\n```\n\nAnd run the web build with the run script\n```bash\n./run.sh -t web holojam\n```\n\n\u003e [!WARNING]  \n\u003e Currently, the `test-game` project does not run with Emscripten due to ASYNCIFY stack corruption when using `dlopen()` and `dlsym()` to load and run functions from a shared library file\n\n#### Windows builds with Wine\n\nWindows builds use Wine to run Microsoft's MSVC compilter, through the [msvc-wine](https://github.com/mstorsjo/msvc-wine) project.\n\nFor Arch Linux, the prerequisite packages are,\n\n```bash\nsudo pacman -S --needed git gcc make cmake wine msitools samba python python-simplejson python-six\n```\n\nTo install the MSVC compiler, we can clone the repository and run the install scripts\n\n```bash\ngit clone https://github.com/mstorsjo/msvc-wine.git\ncd msvc-wine\n\n# This example installs the compiler to ~/my_msvc/opt/msvc\n./vsdownload.py --dest ~/my_msvc/opt/msvc\n./install.sh ~/my_msvc/opt/msvc\n\n# Add compiler commands to PATH\nexport PATH=~/my_msvc/opt/msvc/bin/x64:$PATH\n\n# Optional: Start a persistent wineserver\nwineserver -k # Kill a potential old server\nwineserver -p # Start a new server\nwine64 wineboot # Run a process to start up all background wine processes\n```\n\nBuild by passing in a new target flag to the build script\n\n```bash\n./build.sh -t windows\n```\n\n\u003e [!NOTE]  \n\u003e Debug builds will not work when targeting Windows in Wine, and will give errors for various missing DLLs\n\nAnd run the windows build with the run script\n\n```bash\n./run.sh -t windows holojam\n```\n\n\u003e [!WARNING]  \n\u003e Currently, the `test-game` project only builds and runs properly on POSIX systems, due to the global symbol table not being shared with functions from shared libraries in Windows\n\n## Building for release\n\nReleases builds are done in a special release directory and the specified release files are copied into the `release[-\u003cproject-type\u003e]` directory\n\n```bash\n# build files are located in build-release/ and releases are copied to release/\n./build.sh --release\n```\n\n```bash\n# build files are located in build-windows-release/ and releases are copied to release-windows/\n./build.sh -t windows --release\n```\n\nRelease builds are meant to be the final version of your software that is shipped, so make sure all paths are valid when running from the right directory and remember to include all relevant asset files\n\n\u003e [!NOTE]\n\u003e The `release` directory has its file structure determined by a project's CMake config. This is typically done by copying specific files and directories to specific locations with post-build custom commands and CMake variables. Refer to the `holojam` project's CMake files for an example of how its release is configured.\n\n## Libraries\n\n- https://github.com/raysan5/raylib Simple graphics library\n- https://github.com/raysan5/rres File-format for resource-packaging\n- https://github.com/Immediate-Mode-UI/Nuklear Minimal intermediate-mode UI library\n- https://github.com/RobLoach/raylib-nuklear Wrapper of Nuklear for Raylib\n- https://github.com/zfletch/zhash-c Hash table library\n- https://github.com/json-c/json-c JSON library\n- https://github.com/walterschell/Lua CMake based build of Lua\n- https://github.com/emscripten-core/emscripten LLVM-to-WASM compiler\n- https://github.com/paullouisageneau/libdatachannel C/C++ WebRTC network library featuring Data Channels, Media Transport, and WebSockets\n- https://github.com/Keyslam-Group/Concord Feature compute Lua ECS\n- https://github.com/yogeshlonkar/lua-import Relative imports for Lua\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliraymond04%2Fgame-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliraymond04%2Fgame-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliraymond04%2Fgame-engine/lists"}