{"id":19672412,"url":"https://github.com/ostanton/tailsengine","last_synced_at":"2025-10-19T17:25:40.592Z","repository":{"id":243148684,"uuid":"811598313","full_name":"ostanton/TailsEngine","owner":"ostanton","description":"The only (maybe) two-tailed game engine!","archived":false,"fork":false,"pushed_at":"2024-10-23T23:27:14.000Z","size":462,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-24T12:27:15.497Z","etag":null,"topics":["2d-game-engine","cmake","cpp","cpp20","game-engine","retro","sfml","sfml3"],"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/ostanton.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":"2024-06-06T23:18:59.000Z","updated_at":"2024-10-23T23:27:17.000Z","dependencies_parsed_at":"2024-07-19T02:23:07.252Z","dependency_job_id":"5f8442af-c56c-4a46-a62d-254eb37f4b00","html_url":"https://github.com/ostanton/TailsEngine","commit_stats":null,"previous_names":["ostanton/tailsengine"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ostanton%2FTailsEngine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ostanton%2FTailsEngine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ostanton%2FTailsEngine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ostanton%2FTailsEngine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ostanton","download_url":"https://codeload.github.com/ostanton/TailsEngine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240981566,"owners_count":19888346,"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":["2d-game-engine","cmake","cpp","cpp20","game-engine","retro","sfml","sfml3"],"created_at":"2024-11-11T17:12:04.727Z","updated_at":"2025-10-19T17:25:40.571Z","avatar_url":"https://github.com/ostanton.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tails Engine\n\nThis is a rather simple, and very incomplete, 2D game \"engine\". It uses SDL3, and aims to run on all the platforms SDL3 supports.\nYou can think of it almost like a game-focused wrapper for SDL more than its own thing, as it relies on SDL a lot.\n\n\u003eIt is very early in development, with many things being either unimplemented, broken, or mid-refactor. Have a look if you dare, but don't expect much!\n\n- [Dependencies](#dependencies)\n- [Compilers](#compilers)\n- [Platforms](#platforms)\n- [How to use](#how-to-use)\n\n## Dependencies\n\nDependent libraries (SDL3, etc.) are downloaded automatically via CMake's FetchContent (or Zig's build system if you are using that) if not already available.\n\n- C++20\n- [CMake](https://cmake.org/) or [Zig](https://ziglang.org/)\n- [SDL3](https://libsdl.org/)\n\n## Compilers\n\nI mainly use MSVC because I develop on Windows, however I do use GCC for PSP builds and Clang for Zig builds.\nAll three of those compilers should work fine.\n\n## Platforms\n\nSince Tails uses SDL3, it more or less supports all the platforms SDL3 supports. However, these are the platforms I know work:\n- Windows\n- Linux (Ubuntu and Arch)\n- PSP (native \u0026 emulator)\n\n## How to use\n\n### CMake\n\nA simple FetchContent in CMake to this repo and then linking it should suffice. Something akin to:\n\n```cmake\ncmake_minimum_required(VERSION 3.24)\nproject(MyGame)\n\ninclude(FetchContent)\nFetchContent_Declare(\n    Tails\n    GIT_REPOSITORY https://github.com/ostanton/TailsEngine.git\n    GIT_TAG master\n)\nFetchContent_MakeAvailable(Tails)\n\nadd_executable(MyGame main.cpp)\ntarget_link_libraries(MyGame PRIVATE ostanton::Tails)\n```\n\n### Zig\n\nRequires Zig 0.15.1, and it is still early on and WIP, so don't rely on it, but:\n\n```\nzig fetch --save git+https://github.com/ostanton/TailsEngine\n```\n\n```zig\n// build.zig\nconst tails_dep = b.dependency(\"tails\", .{\n    .target = target,\n    .optimize = optimize,\n    // etc.\n});\nexe.root_module.linkLibrary(tails_dep.artifact(\"tails\"));\n```\n\nExample `build.zig` file:\n\n```zig\nconst std = @import(\"std\");\n\npub fn build(b: *std.Build) void {\n    const target = b.standardTargetOptions(.{});\n    const optimize = b.standardOptimizeOption(.{});\n\n    const tails_dep = b.dependency(\"tails\", .{\n        .target = target,\n        .optimize = optimize,\n    });\n\n    const mod = b.createModule(.{\n        .target = target,\n        .optimize = optimize,\n        .link_libcpp = true,\n    });\n\n    mod.linkLibrary(tails_dep.artifact(\"tails\"));\n    mod.addCSourceFile(.{\n        .file = b.path(\"src/main.cpp\"),\n        .flags = \u0026.{\n            \"-std=c++20\",\n        },\n        .language = .cpp,\n    });\n\n    const exe = b.addExecutable(.{\n        .name = \"my_exe\",\n        .root_module = mod,\n    });\n\n    b.installArtifact(exe);\n}\n```\n\n### `main.cpp`\n\nA minimal `main.cpp` is like so:\n\n```cpp\n#include \u003cTails/Application.hpp\u003e\n#include \u003cTails/Window.hpp\u003e\n\nint main(int argc, char* argv[])\n{\n    using namespace tails;\n    app::init(argc, argv, {});\n    app::run();\n    app::deinit();\n    return 0;\n}\n```\n\nEach of these application functions are more or less just a wrapper around calling various subsystem functions of the same name.\nSo if you want to insert your own subsystem between default engine subsystems, just disect whatever function you need in main.\n\nFor a more in-depth example, see the [example](example/) folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fostanton%2Ftailsengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fostanton%2Ftailsengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fostanton%2Ftailsengine/lists"}