{"id":20983696,"url":"https://github.com/andersnm/lurium","last_synced_at":"2026-04-27T00:31:31.961Z","repository":{"id":66334505,"uuid":"258522599","full_name":"andersnm/lurium","owner":"andersnm","description":null,"archived":false,"fork":false,"pushed_at":"2020-04-24T14:04:24.000Z","size":1805,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-02T07:19:53.167Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andersnm.png","metadata":{"files":{"readme":"readme.html","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-04-24T13:38:45.000Z","updated_at":"2020-04-24T14:04:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"4440d37e-b33c-48e9-aad2-f53c191a2012","html_url":"https://github.com/andersnm/lurium","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andersnm/lurium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersnm%2Flurium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersnm%2Flurium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersnm%2Flurium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersnm%2Flurium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andersnm","download_url":"https://codeload.github.com/andersnm/lurium/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersnm%2Flurium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32318417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"ssl_error","status_checked_at":"2026-04-26T23:26:25.802Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-19T05:49:48.951Z","updated_at":"2026-04-27T00:31:31.945Z","avatar_url":"https://github.com/andersnm.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js\"\u003e\u003c/script\u003e\n\n\u003cpre id=\"md\"\u003e\n# Lurium Engine #\n\nFramework for building multiplayer game servers and clients in\nC++ targeting web, mobile and desktop platforms.\n\nRe-implementations of the classic games Nibbles and Scorched Earth.\n\n## Included third party libraries ##\n\n- stb_truetype\n- stb_image\n- stb\\_image\\_write\n- utf8\n- picojson\n- earcut (triangulation)\n- beast (http client)\n- websocketpp\n- glm (vector and matrix math)\n- glew (opengl on windows)\n\n## Lurium classes ##\n\n- 2D graphics: bitmaps, fonts, text, images\n- 3D graphics: \n\t- textures from png, bitmaps\n\t- triangle, quad, sphere, terrain, linked obj2h meshes, shape, line\n\t- render to texture\n\t- shader utilities, extensible shader base class\n\t- basic material shader with directional light and shadows\n- Math:\n\t- quadtree, quadtree diffing\n\t- line/line, ray/sphere, sphere/sphere intersection\n\t- random generator\n- Game server:\n\t- configuration parser\n\t- control client (load balancer backend)\n\t- binary serializer and deserializer, messaging\n\t- game_server (framerate, messaging, load balancing)\n- Game client:\n\t- control\\_frontend\\_client (load balancer frontend)\n\t- main_loop with render window for Win32, Emscripten, Android\n\t- httprequest, websocket wrappers for native and browser\n\t- welcome screen ui component using load balancer\n\t\t\n## Lurium tools ##\n\n- obj2h - converts many 3d formats to a .h file (uses AssImp)\n- bin2h - converts any binary files to a .h file\n- control_server - game mode and game server load balancer\n\n## Use cases ##\n\n- Develop, build and package for web and Windows in Visual Studio\n- Build and package for Android using Android Studio\n- Build and package for iPhone/iOS using Xcode\n- Build and package Linux game server tarball using autoconf\n- Set up a Linux game server with systemd and nginx\n- Set up a Linux load balancing server with systemd and ngingx\n\n\n# Develop, build and package for web and Windows in Visual Studio #\n\n## Dependencies ##\n\nRequired software and dependencies must be installed manually:\n\n- Visual Studio 2015 Community or newer with C++\n- Emscripten\n- Boost (headers only, not in the repo)\n\nVisual Studio must be configured to find the Boost headers. Additionally, the \nEmscripten project files have hardcoded the path to the Emscripten SDK in the \nbuild actions. These must be updated if not installed in the default location:\n\n\tC:\\Program Files\\Emscripten\\emsdk.bat\n\n\n# Build and package for Android using Android Studio #\n\n## Dependencies ##\n\n- Android Studio\n- LLDB (from SDK Manager)\n- Intel x86 Emulator Accelerator (HAXM Installer) (from SDK Manager)\n- NDK (from SDK Manager)\n- Boost (manually installed prebuilt binaries)\n\nOpen the Android Studio SDK Manager and find the \"SDK Tools\" tab. It is \nlocated\there: Tools -\u003e Android -\u003e SDK Manager -\u003e Appearance and Behavior -\u003e \nSystem Settings -\u003e Android SDK -\u003e SDK Tools\n\n## Install Boost for Android ##\n\nDownload the prebuilt binaries of Boost for Android from here: TODO: link\n\nCopy the Boost binaries into NDK's default directory for third party libraries \nwhere Android Studio can find them. On Windows, this directory is here: \n%LOCALAPPDATA%\\Android\\sdk\\ndk-bundle\\sources\n\n## Build Boost for Android using ndkpkg on WSL ##\n\nThe prebuilt binaries does not contain everything yet. The prebuild binaries \nwere made with a custom tool called \"ndkpkg\" - basically a primitive package\nmanager for NDK. ndkpkg requires a Unix environment such as WSL or Ubuntu.\n\t\t\nSteps to build Boost for Android in Bash:\n\n\tcd ~\n\twget https://dl.google.com/android/repository/android-ndk-r14-linux-x86_64.zip\n\tsudo apt-get unzip subversion g++\n\tsudo unzip android-ndk-r14-linux-x86_64.zip -d /opt\n\n\techo 'export ANDROID_NDK=/opt/android-ndk-r14' \u003e\u003e ~/.bashrc\n\techo 'export NDK_ROOT=/opt/android-ndk-r14' \u003e\u003e ~/.bashrc\n\techo 'export PATH=$PATH:$ANDROID_NDK' \u003e\u003e ~/.bashrc\n\tsource ~/.bashrc\n\n\tsvn co svn://anders-e.com/ndkpkg/trunk ndkpkg\n\tcd ndkpkg\n\tchmod +x ndkpkg.sh\n\n\tsudo -E ./ndkpkg.sh boost_1_63_0 android-9 armeabi-v7a\n\tsudo -E ./ndkpkg.sh boost_1_63_0 android-9 x86\n\tsudo -E ./ndkpkg.sh boost_1_63_0 android-21 x64\n\n\n# Set up a Linux game server with systemd and nginx #\n\n\tsudo apt-get install g++ make libboost-dev libboost-system-dev \\\n\t\tlibboost-chrono-dev\n\ttar xzfv lurium-engine-1.0.tar.gz\n\t./configure \u0026\u0026 make\n\tsudo make install\n\nIf everything went well, the server binaries should be installed to\n/usr/local/bin. Next you want to set up locked down user accounts and install\ninit scripts for running one or more game modes.\n\n## Install init scripts on Debian ##\n\n\tcd debian\n\tchmod +x install_service.sh\n\tsudo ./install_service.sh control\n\tsudo ./install_service.sh nibbles default0 ../nibbles/default0.ini\n\tsudo ./install_service.sh nibbles small0 ../nibbles/small0.ini\n\ninstall_service.sh creates:\n- locked down user account\n- home directory with configuration\n- systemd service which restarts automatically after a reboot\n\nUse the systemctl command to manage the services:\n\tsystemctl start control_server.service \n\tsystemctl stop nibbles_default0.service \n\tsystemctl status nibbles_small0.service \n\n# Build and package Linux game server tarball using autoconf #\n\n\tsudo apt-get install autoconf \n\tautoreconf -i\n\t./configure\n\tmake dist\n\nIf working in the repository and making changes to configure.ac, regenerate configure:\n\n\tautoconf\n\n\nhttp://stackoverflow.com/questions/26837148/autoconf-and-init-scripts\n\nhttps://www.debian.org/doc/manuals/maint-guide/dother.en.html#initd\n\n\nhttps://www.digitalocean.com/community/tutorials/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps\n\n\n\nhttps://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-examples#step-4-%E2%80%94-configuring-mysql-to-auto-start-after-crash\n\n\n\n\nBuilding Boost for Android\n\nsudo -E ./ndkpkg.sh boost android-21 x86_x64\nsudo -E ./ndkpkg.sh boost android-9 x86\nsudo -E ./ndkpkg.sh boost android-9 armeabi-v7a\n\nGeneral minimum Android API version requirements for architectures:\n\nx86_64: minimum android-21\nThe NDK provides native versions of Android APIs for 64-bit x86 machine code starting from Android 5.0 (Android API level 21). If your project files target an older API level, but include x86_64 as a targeted platform, the NDK build script automatically selects the right set of native platform headers and libraries for you.\nsource: https://developer.android.com/ndk/guides/x86-64.html\n\nx86: minimum android-9\nx86 support requires, at minimum, Android 2.3 (Android API level 9). If your project files target an older API level, but include x86 as a targeted platform, the NDK build script automatically selects the right set of native platform headers/libraries for you.\nsource: https://developer.android.com/ndk/guides/x86.html\n\nmips: minimum android-9\nMIPS support requires, at minimum, Android 2.3 (Android API level 9). If your project files target an older API level, but include MIPS as a targeted platform, the NDK build script automatically selects the right set of native platform headers/libraries for you.\nsource: https://developer.android.com/ndk/guides/mips.html\n\narm, armeabi-v7a: minimum android-3, effectively android-9\nARM has been supported since the first releases (release 3 is the first one to support native NDK development at all). Since both armeabi and armeabi-v7a link to the same libraries (in the arch-arm subdirectory), both of them are supported since release 3.\nsource: http://stackoverflow.com/questions/25699252/android-apis-and-cpu-architectures\nsource: personal testing: earliest version included in the latest NDK is android-9\n\n\u003c/pre\u003e\n\n\u003cscript\u003e\nvar converter = new showdown.Converter();\ndocument.body.innerHTML = converter.makeHtml(md.textContent);\n\u003c/script\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandersnm%2Flurium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandersnm%2Flurium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandersnm%2Flurium/lists"}