{"id":35430274,"url":"https://github.com/awemorris/playfieldengine","last_synced_at":"2026-05-16T20:07:05.330Z","repository":{"id":305135994,"uuid":"1021907560","full_name":"awemorris/PlayfieldEngine","owner":"awemorris","description":"Playfield Engine is a framework to build your own custom 2D game engine that works everywhere — tiny, playful, and portable across desktops, mobile, web, and even consoles!","archived":false,"fork":false,"pushed_at":"2026-05-15T08:43:05.000Z","size":30834,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-15T08:47:42.735Z","etag":null,"topics":["android","cross-platform-game","game-engine-development","game-script","ios","linux","macos","wasm","windows"],"latest_commit_sha":null,"homepage":"https://noctvm.io/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"zlib","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/awemorris.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,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-18T06:23:09.000Z","updated_at":"2026-05-15T08:43:09.000Z","dependencies_parsed_at":"2026-04-01T19:00:15.017Z","dependency_job_id":null,"html_url":"https://github.com/awemorris/PlayfieldEngine","commit_stats":null,"previous_names":["awemorris/noct2d","awemorris/picopicoscript","awemorris/playfieldvm","awemorris/playfieldengine"],"tags_count":351,"template":false,"template_full_name":null,"purl":"pkg:github/awemorris/PlayfieldEngine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2FPlayfieldEngine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2FPlayfieldEngine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2FPlayfieldEngine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2FPlayfieldEngine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/awemorris","download_url":"https://codeload.github.com/awemorris/PlayfieldEngine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awemorris%2FPlayfieldEngine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33117350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"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":["android","cross-platform-game","game-engine-development","game-script","ios","linux","macos","wasm","windows"],"created_at":"2026-01-02T20:29:25.731Z","updated_at":"2026-05-16T20:07:05.324Z","avatar_url":"https://github.com/awemorris.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Playfield Engine\n================\n\n[![License: zlib](https://img.shields.io/badge/License-zlib-blue.svg)](LICENSE)\n\n`Playfield Engine` is a 2D game scripting runtime that works\neverywhere. With scripts written in `Ray`, it can render graphics and\nplay sounds seamlessly across platforms.\n\n`libplayfield` is designed to be a foundation framework of other 2D\ngame engines that are dedicated to game genres. It is already used by\nthe `Suika3` project that is dedicated to Visual Novels.\n\n[Getting Started](docs/mkdocs-en/docs/gettingstarted.md)\n |\n[Official Website](https://noctvm.io/playfield/)\n | \n[Japanese Website](https://noctvm.io/playfield-ja/)\n\n---\n\n## Feature Highlights\n\nBuilt completely from scratch, Playfield Engine features:\n\n- **Comfortable Scripting:**\n    - Powered by `Ray`, a C/JS-like scripting language designed in-house.\n    - Native performance with a built-in JIT compiler.\n    - Write a script and run it instantly — **Jot and Run, Boom!**\n- **Portable Rendering \u0026 Audio:**\n    - Powered by StratoHAL, a portable game library also designed in-house.\n    - Runs virtually everywhere: Windows, macOS, Linux, Chromebook, WebAssembly, iOS, Android, and even consoles.\n    - Deploy to platforms you don't even own — **Go Far, Stay Close!**\n- **Minimal Runtime:**\n    - The runtime is only ~1.4 MB on Windows.\n    - Perfect for mobile apps — **Little Core, Big Hits!**\n- **Game Engine Framework:**\n    - Designed to be a foundation of other dedicated 2D game engines, such as `Suika3`.\n\n---\n\n## Why Playfield Engine?\n\n_\"If a game engine could run anywhere, how would the world change?\"_\n\nPlayfield Engine was born from this single question.\n\nCreativity shouldn't depend on the power of your computer, where you\nlive, or what tools you have.  Playfield Engine was created with the\nbelief that every creator deserves space to explore, no matter their\nsurroundings.\n\nIt runs smoothly even on older or low-spec machines — if you have a\ncomputer, there's a place for you to create.  It's a helpful companion\nfor creators everywhere — especially in places with fewer resources.\nIf you have something to make, Playfield Engine will be here to walk\nwith you.\n\nWhether you're using a Raspberry Pi in a classroom, or using a\nUN-issued Chromebook in a temporary shelter, Playfield Engine offers\ngentle tools to help bring your ideas to life — in a way that feels\nsimple, thoughtful, and your own.\n\nThe goal is simple:\n**To make game development accessible, thoughtful, and within reach\nfor everyone.**\n\n**Dreams fuel it — and they're the only requirement.**\n\n---\n\n## Live Web Demo\n\nThese are the sample games that work on Web browsers.\n\n[![Small Shoot](https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-4.png)](https://noctvm.io/g/4)\n\n[![Heartbeat Clock](https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-2.png)](https://noctvm.io/g/2)\n\n[![Mini Shoot](https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-3.png)](https://noctvm.io/g/3)\n\n[![DON'T RUSH IN COMIKET](https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-1.png)](https://noctvm.io/g/1)\n\n---\n\n## Gallery\n\nPlayfield Engine running on Windows 11:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-win11.png\" width=\"320\" alt=\"Playfield Engine running on Windows 11\"\u003e\n\nPlayfield Engine running on macOS:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-macos.png\" width=\"320\" alt=\"Playfield Engine running on macOS\"\u003e\n\nPlayfield Engine running on Linux:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-linux.png\" width=\"320\" alt=\"Playfield Engine running on Linux\"\u003e\n\nPlayfield Engine running on iOS:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-ios.png\" width=\"320\" alt=\"Playfield Engine running on iOS\"\u003e\n\nPlayfield Engine running on Android:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-android.png\" width=\"320\" alt=\"Playfield Engine running on Android\"\u003e\n\nPlayfield Engine running on HarmonyOS NEXT:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-harmonyosnext.png\" width=\"320\" alt=\"Playfield Engine running on HarmonyOS NEXT\"\u003e\n\nPlayfield Engine running on Windows XP — because why not:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-xp.png\" width=\"320\" alt=\"Playfield Engine running on Windows XP\"\u003e\n\nPlayfield Engine running on Windows 2000:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-win2000.png\" width=\"320\" alt=\"Playfield Engine running on Windows 2000\"\u003e\n\nPlayfield Engine running on NetBSD — Of course it runs!:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-netbsd.png\" width=\"320\" alt=\"Playfield Engine running on NetBSD\"\u003e\n\nPlayfield Engine running on Solaris 11:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-solaris11.png\" width=\"320\" alt=\"Playfield Engine running on Solaris 11\"\u003e\n\nPlayfield Engine running on Haiku OS: — \"Be\" Portable!\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-haiku.png\" width=\"320\" alt=\"Playfield Engine running on Haiku OS\"\u003e\n\nPlayfield Engine running on NP21/W PC-9801 emulator:\n\n\u003cimg src=\"https://github.com/awemorris/PlayfieldEngine/blob/main/docs/img/screenshot-pc98.png\" width=\"320\" alt=\"Playfield Engine running on NP21/W PC-9801 emulator\"\u003e\n\n---\n\n## Status\n\n**Stable,** 1.0.x was released!\n\nCurrently we have many `C APIs` for use with derrived engines, while\nmaintaining a small set of `Ray` wrapper APIs.\n\n**The current version work on:**\n\n| Type       | OS              | Status       | Confirm Date | Confirmed On                        |\n|------------|-----------------|--------------|--------------|-------------------------------------|\n| Desktop    | Windows         | ✅ Works     | 1 Mar 2026   | Windows 11 x64                      |\n|            | macOS           | ✅ Works     | 1 Mar 2026   | macOS 26 Arm64                      |\n|            | Linux           | ✅ Works     | 1 Mar 2026   | Ubuntu 24.04 LTS x86_64             |\n| Mobile     | iOS             | ✅ Works     | 1 Mar 2026   | iPhone iOS 26                       |\n|            | Android         | ✅ Works     | 22 Sep 2025  | Android 16                          |\n|            | HarmonyOS NEXT  | ✅ Initial   | 9 Mar 2026   | DevEco Studio 6                     |\n| BSD        | FreeBSD         | ✅ Works     | 22 Sep 2025  | FreeBSD 14.3 amd64                  |\n|            | NetBSD          | ✅ Works     | 22 Sep 2025  | NetBSD 10.1 amd64                   |\n|            | OpenBSD         | ✅ Works     | 22 Sep 2025  | OpenBSD 7.7 amd64                   |\n| UNIX       | Solaris 11      | ✅ Works     | 16 Mar 2026  | Solaris 11.4 SunCC                  |\n| DOS        | NEC PC-9801     | ✅ Works     | 10 May 2026  | DOS4GW, 16-colors, no sound, JIT    |\n| Others     | WebAssembly     | ✅ Works     | 22 Sep 2025  | Chrome                              |\n|            | Chromebook      | ✅ Works     | 22 Sep 2025  | Chrome [Here](https://noctvm.io/w/) |\n|            | Unity           | ✅ Works     | 22 Sep 2025  | Unity 6.2 Windows 11 x86_64         |\n\n---\n\n## Example\n\nHere's a simple example that displays an image following the mouse\ncursor.\n\nThis shows the basic lifecycle:\n\n- `setup` (window config),\n- `start` (asset loading),\n- `update` (per-frame logic and texture loading), and\n- `render` (per-frame rendering).\n\n```\n// Called when the window is created.\nfunc setup() {\n    // Return the window configuration.\n    return {\n        width: 1280,\n        height: 720,\n        title: \"My First Game\"\n    };\n}\n\n// Called once when the game starts.\nfunc start() {\n    // Create a white 100x100 texture.\n    tex = Engine.createColorTexture({\n        width: 100,\n        height: 100,\n        r: 255, g: 255, b: 255, a: 255\n    });\n}\n\n// Called every frame before rendering.\nfunc update() {\n    posX = Engine.mousePosX;\n    posY = Engine.mousePosY;\n}\n\n// Called every frame to render graphics.\nfunc render() {\n    Engine.draw({ texture: tex, x: posX, y: posY });\n}\n```\n\n---\n\n## Quick Start\n\nPrecompiled binaries are available for Windows, macOS, Linux, and Chromebook!\n\n### 1. Download the latest binary:\n\n- Download the \"full\" zip file at the top of this page.\n- Extract the downloaded file.\n\n### 2. Run a game script\n\n- For Windows:\n    - Double-click the `playfield.exe` file.\n    - The game will be started.\n- For macOS:\n    - Open the `misc` folder.\n    - Open the `macos` folder.\n    - Open the `Playfield.dmg` file.\n    - Copy the application inside the dmg file alongside the `main.pf` file.\n    - Double-click the copied application file.\n    - The game will be started.\n- For Linux:\n    - Open the `misc` folder.\n    - Open the `linux` folder.\n    - Copy the `PlayfieldEngine-x86_64.AppImage` file alongside the `main.pf` file.\n    - Double-click the copied AppImage file.\n    - The game will be started.\n- For Chromebook:\n    - Open [this URL](https://noctvm.io/w/) on the browser.\n    - Press the `Open Folder` button.\n    - Select the folder where the `main.pf` file exists.\n    - The game will be started.\n\n### 3. Edit a game script\n\n- With Playfield Editor (Currently Windows only):\n    - Double-click the `playfield-editor.exe` file to run the editor.\n    - Open the `main.pf` file from the editor.\n    - Edit the file.\n    - Press Ctrl+R to run the game. (Press R key while holding Ctrl key down)\n- With your favorite editor:\n    - Prior to editing, copy the engine alongside the `main.pf` file.\n    - Open your favorite editor and load the `main.pf` file.\n    - Edit the file and save it.\n    - Run the engine.\n\n### 4. Explore more features\n\n- [Getting Started](docs/mkdocs-en/docs/gettingstarted.md)\n- [Ray Syntax](docs/mkdocs-en/docs/syntax.md)\n- [Ray API](docs/mkdocs-en/docs/api.md)\n- [How To Build Playfield Engine](docs/mkdocs-en/docs/build.md)\n\n---\n\n## Technical Overview\n\nPlayfield Engine is not merely a wrapper around SDL combined with a\nscripting language. It features its own rendering and audio backends,\nand its own scripting language, positioning it as a fully independent\ngame engine.\n\n### Core Architecture\n\n```\n+----------------------------------------------------------+\n| User Ray Scripts                                         |\n+----------------------------------------------------------+\n| Playfield Ray API                                        |\n+--------------------------------+-------------------------+\n| Playfield C API                                          |\n+--------------------------------+-------------------------+\n| StratoHAL (Rendering/Audio)    | NoctLang VM (JIT)       |\n+--------------------------------+-------------------------+\n```\n\n* **Scripting**:\n  Integrates [NoctLang](https://github.com/awemorris/NoctLang), a\n  tiny yet mighty language designed for game scripting.\n\n* **Rendering**:\n  Supports native DirectX 9/11/12, Metal, OpenGL, OpenGL ES, and WebGL for wide compatibility.\n\n* **Audio**:\n  Provides lightweight audio support through native DirectSound or XAudio2 (Windows),\n  Audio Unit (macOS/iOS), ALSA (Linux), OSS (BSD), and other APIs.\n\n### StratoHAL\n\nStratoHAL originated as the codebase of a 2D game engine developed\nsince 2001, and has been open-sourced with a proven record of\nexceptional stability. Evolving over a quarter century from the\nWindows 9x era, StratoHAL has grown to support macOS, Linux, iOS,\nAndroid, WebAssembly, and Unity. It has been running reliably on\nsmartphones for more than a decade. While SDL3 already exists as a\npopular open-source alternative, StratoHAL covers the same major\nplatforms as SDL3 — and uniquely provides console support through\nUnity without relying on any NDA-restricted code.\n\n### Platform Support\n\n|Platform Type  |OS / Platform       |Notes                                     |\n|---------------|--------------------|------------------------------------------|\n|Desktop        |Windows             |DirectX 12/11/9, DirectSound, XAudio2     |\n|               |macOS               |Metal, Audio Unit                         |\n|               |ChromeOS            |OpenGL, ALSA                              |\n|               |Linux               |OpenGL, ALSA                              |\n|               |*BSD                |OpenGL, OSS (/dev/dsp)                    |\n|               |Qt                  |Qt OpenGL                                 |\n|Mobile         |iOS                 |Metal, Audio Unit                         |\n|               |Android             |OpenGL, OpenSL ES, NDK                    |\n|               |HarmonyOS NEXT      |OpenGL, OpenSL ES                         |\n|Web            |WebAssembly         |WebGL, OpenAL, via Emscripten             |\n|Console        |Unity               |Unity Plugin                              |\n|               |Xbox Series X\\|S    |Xbox GDK Native (DirectX 12 + XAudio2)    |\n\n### Console Unity Plugin Notice\n\nPlayfield Engine provides Unity Plugin binaries for platforms\nincluding Windows 64-bit and game consoles.  These binaries are built\nentirely with the open-source version of LLVM/Clang toolchain (no\nproprietary SDKs).\n\nFor Xbox series, you can use the native Microsoft GDK port, not via Unity.\n\n### NoctLang\n\n```\nRay = NoctLang + Playfield API\n```\n\n**NoctLang** is a lightweight scripting language designed specifically\nfor Playfield Engine. With a game-oriented syntax, it emphasizes\nclarity, instant startup, and tight integration with the engine.\n\nThe built-in JIT compiler supports a wide range of CPU architectures,\nincluding both 32-bit and 64-bit of: **Intel, Arm, RISC-V, PowerPC, MIPS.**\n\nFor platforms where JIT is restricted (such as mobile or consoles),\nNoctLang can fall back to interpreter mode, and AOT (ahead-of-time)\ncompilation using a C source backend — ensuring full compatibility\neven in tightly controlled environments.\n\n### Script Execution Mode\n\n|Platform       |Mode               |\n|---------------|-------------------|\n|Windows x86    |JIT                |\n|Windows x64    |JIT                |\n|Windows arm64  |JIT                |\n|macOS x86_64   |JIT                |\n|macOS arm64    |JIT                |\n|Linux x86      |JIT                |\n|Linux x86_64   |JIT                |\n|Linux armv7    |JIT                |\n|Linux arm64    |JIT                |\n|FreeBSD x86_64 |JIT                |\n|iOS            |Interpreter or AOT |\n|Android        |Interpreter or AOT |\n|HarmonyOS      |Interpreter or AOT |\n|WebAssembly    |Interpreter or AOT |\n|Unity Plugin   |Interpreter or AOT |\n\n### Runtime Footprint\n\n|Platform       |Binary Size    |Memory Usage (GC)                                              |\n|---------------|---------------|---------------------------------------------------------------|\n|All targets    |~2 MB          |Allocates 256 MB at startup for GC; does not exceed that limit |\n\nThe garbage collector allocates 256 MB at startup because currently 256 MB is the maximum heap size.\n\n### Garbage Collection\n\nPlayfield Engine implements a high-performance garbage collector\nsimilar to the HotSpot VM in Java, so you generally don’t need to\nworry much about delays caused by garbage collection.\n\n* The garbage collector uses a generational GC, managing objects in young and old generations.\n* Young-generation GC runs extremely fast using a copying algorithm (semi-space copy GC).\n* Old-generation GC uses a mark-and-sweep algorithm and performs compaction when necessary (mark-sweep-compact GC).\n\n---\n\n## Tests\n\nPlayfield Engine is tested on the following environments in the\ndevelopment.\n\n| Type       | OS              | Version | Architecture    |\n|------------|-----------------|---------|-----------------|\n| Desktop    | Windows         | 11      | x64             |\n|            |                 | 11      | arm64           |\n|            | macOS           | 15      | arm64           |\n|            |                 | 12      | x86_64          |\n|            | Ubuntu          | 24.04   | x86_64          |\n|            |                 |         | arm64           |\n|            | Kubuntu         | 25.04   | x86_64          |\n| Browser    | Chrome          | 139     | WebAssembly     |\n|            | Safari          | 18.6    | WebAssembly     |\n| Smartphone | iOS             | 18      | Simulator       |\n|            | Android         | 16      | Simulator       |\n|            | HarmonyOS NEXT  | 20      | Simulator       |\n| Console    | Unity           | 6.2     | Windows x64     |\n\n---\n\n## CMake Presets\n\nPlayfield Engine ships with CMake presets covering various platforms\nand build configurations.\n\n| Preset                         | Platform         | Compiler   | Directory                              | Target           | Type           |\n|--------------------------------|------------------|------------|----------------------------------------|------------------|----------------|\n| windows-vs2022-x86-debug       | Windows          | MSVC       | out/build/windows-vs2022-x86-debug     | playfield.exe    | Executable     |\n| windows-vs2022-x86-release     | Windows          | MSVC       | out/build/windows-vs2022-x86-release   | playfield.exe    | Executable     |\n| windows-vs2022-x64-debug       | Windows          | MSVC       | out/build/windows-vs2022-x64-debug     | playfield.exe    | Executable     |\n| windows-vs2022-x64-release     | Windows          | MSVC       | out/build/windows-vs2022-x64-release   | playfield.exe    | Executable     |\n| windows-vs2022-arm64-debug     | Windows          | MSVC       | out/build/windows-vs2022-arm64-debug   | playfield.exe    | Executable     |\n| windows-vs2022-arm64-release   | Windows          | MSVC       | out/build/windows-vs2022-arm64-release | playfield.exe    | Executable     |\n| windows-vs2022-gdk-desktop     | Windows          | MSVC       | out/build/windows-vs2022-gdk-desktop   | playfield.exe    | Executable     |\n| windows-vs2022-gdk-xbox-xs     | Windows          | MSVC       | out/build/windows-vs2022-gdk-xbox-xs   | playfield.exe    | Executable     |\n| windows-vs2026-x86-debug       | Windows          | MSVC       | out/build/windows-vs2026-x86-debug     | playfield.exe    | Executable     |\n| windows-vs2026-x86-release     | Windows          | MSVC       | out/build/windows-vs2026-x86-release   | playfield.exe    | Executable     |\n| windows-vs2026-x64-debug       | Windows          | MSVC       | out/build/windows-vs2026-x64-debug     | playfield.exe    | Executable     |\n| windows-vs2026-x64-release     | Windows          | MSVC       | out/build/windows-vs2026-x64-release   | playfield.exe    | Executable     |\n| windows-vs2026-arm64-debug     | Windows          | MSVC       | out/build/windows-vs2026-arm64-debug   | playfield.exe    | Executable     |\n| windows-vs2026-arm64-release   | Windows          | MSVC       | out/build/windows-vs2026-arm64-release | playfield.exe    | Executable     |\n| windows-vs2026-gdk-desktop     | Windows          | MSVC       | out/build/windows-vs2026-gdk-desktop   | playfield.exe    | Executable     |\n| windows-vs2026-gdk-xbox-xs     | Windows          | MSVC       | out/build/windows-vs2026-gdk-xbox-xs   | playfield.exe    | Executable     |\n| windows-mingw-x86              | Windows          | MinGW      | build-mingw-x86                        | playfield.exe    | Executable     |\n| windows-mingw-x86_64           | Windows          | MinGW      | build-mingw-x86_64                     | playfield.exe    | Executable     |\n| windows-mingw-arm64            | Windows          | MinGW-LLVM | build-mingw-arm64                      | playfield.exe    | Executable     |\n| macos                          | macOS            | Clang      | build-macos                            | Playfield.app    | App Bundle     |\n| linux-x11                      | Linux            | GCC        | build-linux                            | playfield        | Executable     |\n| linux-wayland                  | Linux            | GCC        | build-linux                            | playfield        | Executable     |\n| linux-gdm                      | Linux            | GCC        | build-linux                            | playfield        | Executable     |\n| linux-gdm-rot90                | Linux            | GCC        | build-linux                            | playfield        | Executable     |\n| freebsd                        | FreeBSD          | Clang      | build-freebsd                          | playfield        | Executable     |\n| netbsd                         | NetBSD           | GCC        | build-netbsd                           | playfield        | Executable     |\n| openbsd                        | OpenBSD          | Clang      | build-openbsd                          | playfield        | Executable     |\n| solaris11                      | Solaris 11       | SunCC      | build-solaris11                        | playfield        | Executable     |\n| wasm                           | WebAssembly      | Emscripten | build-wasm                             | index.html       | HTML + Wasm    |\n| wasm-local                     | Chromebook       | Emscripten | build-wasm-local                       | index.html       | HTML + Wasm    |\n| ios-device                     | iOS Device       | Clang      | build-ios-device                       | libplayfield.a   | Static Library |\n| ios-simulator                  | iOS Simulator    | Clang      | build-ios-simulator                    | libplayfield.a   | Static Library |\n| android-x86                    | Android x86      | Clang      | build-android-x86                      | libplayfield.so  | Shared Library |\n| android-x86_64                 | Android x86_64   | Clang      | build-android-x86_64                   | libplayfield.so  | Shared Library |\n| android-armv7                  | Android armv7    | Clang      | build-android-armv7                    | libplayfield.so  | Shared Library |\n| android-arm64                  | Android arm64    | Clang      | build-android-arm64                    | libplayfield.so  | Shared Library |\n| openharmony-arm64              | HarmonyOS arm64  | Clang      | build-openharmony-arm64                | libplayfield.a   | Static Library |\n| openharmony-armv7              | HarmonyOS armv7  | Clang      | build-openharmony-armv7                | libplayfield.a   | Static Library |\n| openharmony-x86_64             | HarmonyOS x86_64 | Clang      | build-openharmony-x86_64               | libplayfield.a   | Static Library |\n| unity-win64                    | Unity Plugin     | Clang-CL   | build-unity-win64                      | libplayfield.dll | DLL Plugin     |\n| unity-switch                   | Unity Plugin     | Clang      | build-unity-switch                     | libplayfield.a   | Static Library |\n| unity-ps5                      | Unity Plugin     | Clang      | build-unity-ps5                        | libplayfield.a   | Static Library |\n| unity-xbox                     | Unity Plugin     | Clang      | build-unity-xbox                       | libplayfield.a   | Static Library |\n| pc98                           | DOS4GW           | OpenWatcom | build-pc98                             | playfield.exe    | Executable     |\n\n---\n\n## Samples\n\nSamples are added timely.\n\n| Name           | Directory             | Description                      |\n|----------------|-----------------------|----------------------------------|\n| bouncer        | samples/bouncer       | A block bounce demo.             |\n| rush           | samples/rush          | A jumping game demo.             |\n| heartbeatclock | samples/hearbeatclock | A clock.                         |\n| shoot          | samples/shoot         | A mini shooting.                 |\n\n---\n\n## AI Support\n\nTo generate game templates with an AI, please let it load the following references:\n\n- [Ray Syntax](docs/mkdocs-en/docs/syntax.md)\n- [Ray API](docs/mkdocs-en/docs/api.md)\n\nAI can then create runnable Playfield Engine games directly.\n\n**Note:** In ChatGPT, you need to click the **\"+\"** button and enable\n**\"Web Search\"** so that it can read the above references.\n\n---\n\n## Localization / Internationalization\n\nPlayfield Engine supports the following locales for the UI messages.\n\n| Language               | Locale Code | Translation Type         | Scope of Translation             |\n|------------------------|-------------|--------------------------|----------------------------------|\n| English                | `en-US`     | Original                 | UI / Docs / Samples              |\n| Spanish                | `es-ES`     | Machine Translation      | UI                               |\n| French                 | `fr-FR`     | Machine Translation      | UI                               |\n| Italian                | `it-IT`     | Machine Translation      | UI                               |\n| German                 | `de-DE`     | Machine Translation      | UI                               |\n| Greek                  | `el-GR`     | Machine Translation      | UI                               |\n| Russian                | `ru-RU`     | Machine Translation      | UI                               |\n| Simplified Chinese     | `zh-CN`     | Machine Translation      | UI                               |\n| Traditional Chinese    | `zh-TW`     | Machine Translation      | UI                               |\n| Japanese               | `ja-JP`     | Professional Translation | UI / Docs                        |\n\n**How to switch languages**  \nPlayfield Engine uses the system locale.\nTo switch languages, set your system locale.\n\n**Contributing Translations**  \nTranslation files are located under the three `i18n/` directories. (main, HAL and NoctLang)\nTo propose a new translation or update an existing one, please open an Issue or submit a Pull Request.\n\n---\n\n## Third-party Libraries\n\nPlayfield Engine uses the following libraries.\nThe source code tarballs for the libraries are included in this repository.\n\n- zlib\n- libpng\n- libogg\n- libvorbis\n- JPEG9\n- libwebp\n- brotli\n- bzip2\n- FreeType2\n\n---\n\n## Compatibility List\n\nDevelopment of this project spans many years, so this list includes\nolder operating systems. Some of them are no longer supported in the\ncurrent codebase, they worked in earlier versions but were removed\ntogether with the software renderer.\n\n**Windows:**\n\nThe official recommended binary is the 64-bit version.\n\n| OS      | Version                     | Patch | CPU    | Runtimes                                        | 64-bit Binary | Direct3D |\n|---------|-----------------------------|-------|--------|-------------------------------------------------|---------------|----------|\n| Windows | 11                          |       | x64    | (None required)                                 | ✅            | 12.0     |\n| Windows | 11                          |       | arm64  | (None required)                                 | ✅            | 12.0     |\n| Windows | 10                          |       | x64    | (None required)                                 | ✅            | 12.0     |\n| Windows | 10                          |       | arm64  | (None required)                                 | ✅            | 12.0     |\n| Windows | 8.1                         |       | x64    | (None required)                                 | ✅            | 11.0     |\n| Windows | 8                           |       | x64    | Microsoft Visual C++ Redistributable 2015       | ✅            | 11.0     |\n| Windows | 7                           |       | x64    | UCRT Update (KB2999226)                         | ✅            | 11.0     |\n|         |                             |       |        | Microsoft Visual C++ Redistributable 2015       |               |          |\n| Windows | 7                           | SP1   | x64    | Microsoft Visual C++ Redistributable 2015       | ✅            | 11.0     |\n| Windows | Vista                       |       | x64    | (No UCRT)                                       | ❌            | -        |\n| Windows | Vista                       | SP1   | x64    | DirectX End-User Runtimes (June 2010)           | ✅            | 9.0      |\n|         |                             |       |        | Microsoft Visual C++ Redistributable 2015       |               |          |\n| Windows | Vista                       | SP2   | x64    | Platform Update for Windows Vista               | ✅            | 11.0     |\n|         |                             |       |        | Microsoft Visual C++ Redistributable 2015       |               |          |\n| Windows | XP Professional x64 Edition |       | x64    | (No UCRT)                                       | ❌            | -        |\n| Windows | XP Professional x64 Edition | SP1   | x64    | (No UCRT)                                       | ❌            | -        |\n| Windows | XP Professional x64 Edition | SP2   | x64    | (No UCRT)                                       | ❌            | -        |\n\nThere is a 32-bit version for backward compatibility.\nNote that the 32-bit version cannot handle multi-byte file names.\n\n| OS      | Version                     | Patch | CPU    | Runtimes                               | 32-bit Binary | Direct3D | Special     |\n|---------|-----------------------------|-------|--------|----------------------------------------|---------------|----------|-------------|\n| Windows | 11                          |       | x64    | (None required)                        | ✅            | 12.0     |             |\n| Windows | 11                          |       | arm64  | (None required)                        | ✅            | 12.0     |             |\n| Windows | 10                          |       | x86    | (None required)                        | ✅            | 12.0     |             |\n| Windows | 10                          |       | x64    | (None required)                        | ✅            | 12.0     |             |\n| Windows | 10                          |       | arm64  | (None required)                        | ✅            | 12.0     |             |\n| Windows | 8.1                         |       | x86    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 8.1                         |       | x64    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 8                           |       | x86    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 8                           |       | x64    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 7                           |       | x86    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 7                           |       | x64    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 7                           | SP1   | x86    | (None required)                        | ✅            | 11.0     |             |\n| Windows | 7                           | SP1   | x64    | (None required)                        | ✅            | 11.0     |             |\n| Windows | Vista                       |       | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | Vista                       |       | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | Vista                       | SP1   | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | Vista                       | SP1   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | Vista                       | SP2   | x86    | DirectX 11 Platform Update             | ✅            | 11.0     |             |\n| Windows | Vista                       | SP2   | x64    | DirectX 11 Platform Update             | ✅            | 11.0     |             |\n| Windows | XP                          |       | x86    | DirectX 9.0b Runtime                   | ✅            | 9.0      |             |\n| Windows | XP                          | SP1   | x86    | DirectX 9.0b Runtime                   | ✅            | 9.0      |             |\n| Windows | XP                          | SP2   | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | XP                          | SP3   | x86    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | XP Professional x64 Edition |       | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | XP Professional x64 Edition | SP1   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | XP Professional x64 Edition | SP2   | x64    | DirectX End-User Runtimes (June 2010)  | ✅            | 9.0      |             |\n| Windows | 2000                        |       | x86    | DirectX End-User Runtimes (Dec 2006)   | ✅            | 9.0      |             |\n| Windows | 2000                        | SP1   | x86    | DirectX End-User Runtimes (Dec 2006)   | ✅            | 9.0      |             |\n| Windows | 2000                        | SP2   | x86    | DirectX End-User Runtimes (Dec 2006)   | ✅            | 9.0      |             |\n| Windows | 2000                        | SP3   | x86    | DirectX End-User Runtimes (Dec 2006)   | ✅            | 9.0      |             |\n| Windows | 2000                        | SP4   | x86    | DirectX End-User Runtimes (Dec 2006)   | ✅            | 9.0      |             |\n| Windows | Me                          |       | x86    | -                                      | Not Checked   | -        | soft render |\n| Windows | 98                          |       | x86    | -                                      | Not Checked   | -        | soft render |\n| Windows | 98                          | SE    | x86    | -                                      | Not Checked   | -        | soft render |\n| Windows | 95                          |       | x86    | -                                      | Not Checked   | -        | soft render |\n| Windows | 95                          | OSR2  | x86    | -                                      | Not Checked   | -        | soft render |\n| Windows | NT 4.0                      |       | x86    |                                        | Not Checked   | -        | soft render |\n| Windows | NT 3.51                     |       | x86    |                                        | ❌            | -        | Insufficient Win32 APIs |\n\nActually, Playfield Engine implements its own software rendering\nengine, so Direct3D is not required for Windows platforms. (However,\nit is slow.)\n\n**macOS:**\n\n| OS                     | Version | Mac CPU              | Status                       |\n|------------------------|---------|----------------------|------------------------------|\n| macOS Tahoe            | 26.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Sequoia          | 15.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Sonoma           | 14.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Ventura          | 13.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Monterey         | 12.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Big Sur          | 11.0    | arm64 / x86_64       | ✅ OK                        |\n| macOS Catalina         | 10.15   | x86_64               | ✅ OK                        |\n| macOS Mojave           | 10.14   | x86_64               | ✅ OK                        |\n| macOS High Sierra      | 10.13   | x86_64               | ✅ OK                        |\n| macOS Sierra           | 10.12   | x86_64               | ✅ OK                        |\n| OS X El Capitan        | 10.11   | x86_64               | ✅ OK                        |\n| OS X Yosemite          | 10.10   | x86_64               | ❌ No Metal                  |\n| OS X Mavericks         | 10.9    | x86_64               | ❌ No Metal                  |\n| OS X Mountain Lion     | 10.8    | x86_64               | ❌ No Metal                  |\n| Mac OS X Lion          | 10.7    | x86_64               | ❌ No Metal                  |\n| Mac OS X Snow Leopard  | 10.6    | i386 / x86_64        | ❌ No Metal, No AVFoundation |\n| Mac OS X Leopard       | 10.5    | ppc / ppc64 / i386   | ❌ No Metal, No AVFoundation |\n| Mac OS X Tiger         | 10.4    | ppc / ppc64 / i386   | ❌ No Metal, No AVFoundation |\n| Mac OS X Panther       | 10.3    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Jaguar        | 10.2    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Puma          | 10.1    | ppc                  | ❌ No Metal, No AVFoundation |\n| Mac OS X Cheetah       | 10.0    | ppc                  | ❌ No Metal, No AVFoundation |\n\n**Linux:**\n\n| Distribution      | Version               | CPU             | Status | Graphics                      |\n|-------------------|-----------------------|-----------------|--------|-------------------------------|\n| Raspberry Pi OS   | Debian 13             | arm64, armv7    | ✅     | X11, OpenGL ES                |\n| Ubuntu            | 24.04 / 22.04 / 20.04 | x86_64, arm64   | ✅     | X11, OpenGL 3                 |\n| Kubuntu           | 25.04                 | x86_64, arm64   | ✅     | Wayland + OpenGL 3            |\n| Linux Mint        | 22.3                  | x86_64          | ✅     | X11 + OpenGL 3                |\n| Fedora            | 43                    | x86_64          | ✅     | X11 + OpenGL 3                |\n| Odroid            |                       | arm64           | ✅     | GBM + DRM + EGL + OpenGL ES 2 |\n\n**iOS:**\n\n| OS     | Status   |\n|--------|----------|\n| iOS 26 | ✅       |\n| iOS 18 | ✅       |\n| iOS 17 | ✅       |\n| iOS 16 | ✅       |\n| iOS 15 | ✅       |\n| iOS 14 | ✅       |\n| iOS 13 | ✅       |\n| iOS 12 | ✅       |\n| iOS 11 | ✅       |\n| iOS 10 | ?        |\n| iOS 9  | ?        |\n| iOS 8  | ?        |\n| iOS 7  | No Metal |\n\n**Android:**\n\n| OS          | Status | Special                      |\n|-------------|--------|------------------------------|\n| Android 16  | ✅     |                              |\n| Android 15  | ✅     |                              |\n| Android 14  | ✅     |                              |\n| Android 13  | ✅     |                              |\n| Android 12  | ✅     |                              |\n| Android 11  | ✅     |                              |\n| Android 10  | ✅     |                              |\n| Android 9   | ✅     |                              |\n| Android 8   | ✅     |                              |\n| Android 7   | ✅     | Change the build properties. |\n| Android 6   | ✅     | Change the build properties. |\n| Android 5   | ✅     | Change the build properties. |\n| Android 4.4 | ✅     | Change the build properties. |\n\n**OpenHarmony / HarmonyOS NEXT:**\n\n| OS         | Status |\n|------------|--------|\n| API 20     | ✅     |\n| API 12     | ✅     |\n\n---\n\n## NoctVM Ecosystem\n\nPlayfield Engine is a part of the [NoctVM](https://noctvm.io/) ecosystem:\n\n- **NoctLang** — portable scripting language (used in this project)\n- **Playfield Engine** — go-anywhere 2D game engine (this project)\n- **Suika3** — Commercial visual novel engine (uses this project)\n- NoctUI — a declarative UI library (not used in this project)\n\nTogether, they form the foundation of the Noct ecosystem.\nNoctLang itself is just the core language engine with no complex runtime.\nPlayfield Engine is one of the runtimes that embeds and extends the NoctLang core.\n\n---\n\n## License\n\n```\nPlayfield Engine\n© 2025 2026 Awe Morris\n```\n\nPlayfield is available as free/libre software under the permissive\n**zlib License**. You're free to use, modify, and share it — even in\ncommercial projects.\n\n---\n\n## Contact\n\nEmail: Awe Morris \u003cawe@noctvm.io\u003e\nProject Page: https://noctvm.io/playfield/\n\n---\n\n## Join Us\n\nPlayfield Engine is still in its early stages. We're building the game\nengine with care, hoping it will inspire and empower creators around\nthe world.\n\nIf you're interested in contributing — whether it's code,\ndocumentation, testing, or ideas — we'd be happy to have you with us.\n\nEvery small step helps shape what Playfield Engine can become. You're\nwelcome to join us on this journey.\n\n[Join us on Discord](https://discord.gg/ybHWSqDVEX)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawemorris%2Fplayfieldengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fawemorris%2Fplayfieldengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawemorris%2Fplayfieldengine/lists"}