{"id":13712093,"url":"https://github.com/star-tek-mb/Paradise","last_synced_at":"2025-05-06T21:33:08.785Z","repository":{"id":81168354,"uuid":"554396099","full_name":"star-tek-mb/Paradise","owner":"star-tek-mb","description":"WASM first game engine written in Zig.","archived":false,"fork":false,"pushed_at":"2023-03-28T19:16:20.000Z","size":51,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-03T23:24:05.380Z","etag":null,"topics":["game-engine","gamedev","zig"],"latest_commit_sha":null,"homepage":"","language":"Zig","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/star-tek-mb.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":"2022-10-19T18:40:29.000Z","updated_at":"2024-06-05T09:46:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"66edecb7-3eb5-4664-8102-73f2df9e3e38","html_url":"https://github.com/star-tek-mb/Paradise","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/star-tek-mb%2FParadise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/star-tek-mb%2FParadise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/star-tek-mb%2FParadise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/star-tek-mb%2FParadise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/star-tek-mb","download_url":"https://codeload.github.com/star-tek-mb/Paradise/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224535755,"owners_count":17327589,"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":["game-engine","gamedev","zig"],"created_at":"2024-08-02T23:01:14.855Z","updated_at":"2024-11-13T22:31:14.451Z","avatar_url":"https://github.com/star-tek-mb.png","language":"Zig","funding_links":[],"categories":["Multimedia \u0026 Graphics"],"sub_categories":["Game Development"],"readme":"# Overview\n\nParadise is a wasm first game engine written in zig.\n\n# Status\n\nDevelopment stopped for now until zig stage2 async.\n\n# Architecture\n\nAll images are embedded qoi images.\n\nKeep engine as simple as possible.\n\n# TODO\n\n* Use package manager to fetch modules (priority)\n* Find a way to fetch resources (not embed). We should wait for zig async/await in stage2.\n* Find js object/function/string leaks.\n* Port to other platforms (not now).\n\nAdd audio engine.\n\n# Usage\n\n```zig\nconst std = @import(\"std\");\nconst platform = @import(\"platform.zig\");\nconst paradise = @import(\"paradise.zig\");\n\ncomptime {\n    _ = platform;\n}\n\npub const log = platform.log;\npub const gl = platform.gl;\n\nvar renderer: paradise.Renderer = undefined;\nvar sprite: paradise.Sprite = undefined;\n\nfn update(_: f32) void {\n    gl.viewport(0, 0, 800, 600);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n    gl.clearColor(0.2, 0.3, 0.3, 1.0);\n\n    renderer.start(800, 600);\n    renderer.renderSprite(sprite);\n    renderer.stop();\n}\n\npub fn onKeyDown(key: u16) void {\n    if (key == 37) {\n        sprite.x -= 10;\n        sprite.w = -@fabs(sprite.w);\n    }\n    if (key == 39) {\n        sprite.x += 10;\n        sprite.w = @fabs(sprite.w);\n    }\n}\n\npub fn main() !void {\n    platform.init();\n\n    platform.onKeyDown(onKeyDown);\n\n    var image = try paradise.Image.load(std.heap.page_allocator, @embedFile(\"assets/character.qoi\"));\n    defer image.deinit(std.heap.page_allocator);\n    sprite = try paradise.Sprite.fromImage(image);\n    sprite.x = 100.0;\n    sprite.y = 100.0;\n    sprite.w = 64.0;\n    sprite.h = 64.0;\n    sprite.ox = 32.0;\n    sprite.oy = 32.0;\n    renderer = paradise.Renderer.init(std.heap.page_allocator);\n\n    platform.run(update);\n}\n```\n\nsee **src/main.zig**\n\n# Credits\n\nhttps://github.com/hexops/mach - for sysjs, for wasmserve\n\nhttps://github.com/ziglibs/zlm - vector math\n\nhttps://github.com/MasterQ32/zig-qoi - for image loading\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstar-tek-mb%2FParadise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstar-tek-mb%2FParadise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstar-tek-mb%2FParadise/lists"}