{"id":23113935,"url":"https://github.com/stuin/skyrmion","last_synced_at":"2025-08-22T13:41:21.814Z","repository":{"id":45809041,"uuid":"289054448","full_name":"stuin/Skyrmion","owner":"stuin","description":"2D Game Engine built in C++ and SFML, with basic collision and tilemaps","archived":false,"fork":false,"pushed_at":"2025-02-28T07:15:34.000Z","size":9896,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T14:24:45.268Z","etag":null,"topics":["sfml","sfml-2d-engine"],"latest_commit_sha":null,"homepage":"","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/stuin.png","metadata":{"files":{"readme":"README.md","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-08-20T16:24:18.000Z","updated_at":"2025-01-11T04:21:47.000Z","dependencies_parsed_at":"2024-08-24T23:25:15.960Z","dependency_job_id":"6749ec51-6130-4860-8097-71200acd1104","html_url":"https://github.com/stuin/Skyrmion","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stuin%2FSkyrmion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stuin%2FSkyrmion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stuin%2FSkyrmion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stuin%2FSkyrmion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stuin","download_url":"https://codeload.github.com/stuin/Skyrmion/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247100364,"owners_count":20883569,"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":["sfml","sfml-2d-engine"],"created_at":"2024-12-17T03:16:53.722Z","updated_at":"2025-08-22T13:41:21.790Z","avatar_url":"https://github.com/stuin.png","language":"C++","readme":"# Skyrmion\nA 2D Game Engine built in C++, very focused on tilemaps.\nCurrently built on top of [Raylib](https://github.com/raysan5/raylib), with support for PC/Web/Android. (Can also be compiled with [Sokol](https://github.com/floooh/sokol)).\n\nMany dependencies included as submodules, including: [Dear ImGui](https://github.com/ocornut/imgui), [nlohmann json](https://json.nlohmann.me/) and [libnoise](https://libnoise.sourceforge.net/).\n\n## Tilemaps\nLoad from txt files as ASCII art, each char representing a tile and it's properties, or randomly generate tiles and modify them during the game.\n\n- Collision\n- Transparency\n- Animations\n- Rotated and flipped textures\n- Tiles with different properties sharing the same texture\n- Invisible tiles\n- Changing tiles during runtime\n- Dynamic Lighting (emmision and shadow casting)\n- Randomly rotating or choosing between multiple textures\n- Perlin noise and related options provided by libnoise\n- Choosing textures based on intersections between multiple tiles (Autotiling)\n- Multiple layers rendering below and on top of other objects\n- Using multiple layers to visually extend into other tiles\n- Spawning objects at specific locations on startup\n- Buffering to a render texture\n\n#### Sources\n- [GridMaker.h](https://github.com/stuin/Skyrmion/blob/main/tiling/GridMaker.h)\n- [TileMap.hpp](https://github.com/stuin/Skyrmion/blob/main/tiling/TileMap.hpp)\n- [LightMap.h](https://github.com/stuin/Skyrmion/blob/main/tiling/LightMap.h)\n\n## Nodes:\nEverything visible in the game is a Node.\nEach node is attached to a specific layer in UpdateList, usually ordered and named by an enum, which decides render, collision, and update order.\n\n- Vectors for Position, Origin, Size, and Scaling\n- Textures are stored separatly and referenced with a global id\n- Texture Rectangles allow for rendering sections of textures with transformations\n- Support for animations, tilemaps, rotations\n- Can replace texture with text rendering\n- Can be hidden while still updating\n- By default nodes are only rendered when on screen\n- Layers can be paused while still being visible, or hidden without being paused\n- Thread safe node deletion\n- Nodes can be deleted on mass by layer\n- Camera can be static or attached to any node\n- Parent a node to any other node in a tree\n- Uses centered position by default\n- Set and get position relative to parent or globally\n- Set position by screen coordinates\n- Collision with tiles\n- Collision with other nodes by layer\n- Send signals to any nodes by layer\n- Subscribe to input/window events by type (resizing, mouse, keyboard, etc)\n- Thread safe deletion and render texture drawing\n\nUpdates are run at ~100 per second, with a time delta variable provided for consistency. Draw calls are done in a separate read-only thread.\n\n#### Sources\n- [Node.h](https://github.com/stuin/Skyrmion/blob/main/core/Node.h)\n- [UpdateList.h](https://github.com/stuin/Skyrmion/blob/main/core/UpdateList.h)\n\n## Backends\n- Include `core/backend/RaylibUpdateList.cpp` to compile for Raylib\n- Include `core/backend/SokolUpdateList.cpp` and `SokolAudio.cpp` to compile for Sokol\n- Most functionality should be identical between them\n- Originally built using SFML\n\n## DearImGui debug windows:\n- FPS counters for draw thread and update thread, with both real times and theoretical unlimited times\n- List of layers with names and flags\n- Debug information and collision box for individual nodes\n- Stream of latest events and inputs\n- Modifyable perlin noise generator\n- Color picker with list of loaded textures\n\n## Other tools:\n- Json settings file with static/global reading and writing  \n- Json customizable controls supporting keyboard/mouse/gamepad buttons, joystick movement, and up to 3 binds for every action\n- N dimensional directed edge-vertex graph\n- Basic networking with a server to pass events between clients\n\n#### Sources\n- [Settings.h](https://github.com/stuin/Skyrmion/blob/main/input/Settings.h)\n- [Keylist.cpp](https://github.com/stuin/Skyrmion/blob/main/input/Keylist.cpp)\n- [VertexGraph.hpp](https://github.com/stuin/Skyrmion/blob/main/util/VertexGraph.hpp)\n- [nbnetServer.cpp](https://github.com/stuin/Skyrmion/blob/main/core/backend/nbnetServer.cpp)\n\n## Example games:\n- The engine was originally built with a group as the core systems of [Temple-of-Pele](https://github.com/skyrmiongames/Temple-of-Pele), and later extracted into it's own project. As more game jam type projects were created with it I added more features\n- Lighting was added with [The Path Below](https://stuin.itch.io/the-path-below) : [Source](https://github.com/stuin/ThePathBelow)\n- For GMTK 2022, Roll of the Dice, I created [Rolling Labyrinth](https://stuin.itch.io/rolling-labyrinth) : [Source](https://github.com/stuin/RollingLabyrinth)\n- For GMTK 2024 Built to Scale, I designed a side-scrolling physics engine (Soon to be moved into the engine proper) [Climbing Blocks](https://stuin.itch.io/climbing-blocks) : [Source](https://github.com/stuin/ClimbingBlocks)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstuin%2Fskyrmion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstuin%2Fskyrmion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstuin%2Fskyrmion/lists"}