Hey dude. Read this document, I am working on this idea and I have a new feature I thought of last night. This document is slightly out of date, I will probably make the engine run in 3-D and some other small changes but it's still pretty convergent on the main idea. Here it is:
Mobile ASCII Game Engine Concept v2
Overview
This project aims to create a mobile-first platform for self-contained games reminiscent of classic handheld consoles (Gameboy Advance/SP, DS Lite, PSP/PS Vita, etc). The focus is on immersive, distraction-free experiences with curated content, avoiding ads or intrusive monetization. Games will run as lightweight “cartridges” with a standardized interface, allowing creators to easily develop and distribute their work.
The platform will support two cartridge runtimes:
- JavaScript-based cartridges (easy for beginners, readable, moddable, fast iteration)
- Wasm-based cartridges (compiled, non-readable, high-performance, optionally paid or protected)
Both models share a unified file extension (e.g., .glyph), ensuring a consistent player experience regardless of the underlying runtime.
To deepen immersion and support extensibility, the console is architected as modular hardware, where hardware “chips” (engine modules) can be added, removed, or upgraded. These chips mirror real console responsibilities as closely as possible, and are represented by actual code modules that must be physically “installed” (via NFC-card unlocks or in-console part swapping). If a chip isn’t present, its capabilities are literally unavailable at runtime.
In the end, you should end up with a console — a built-in ASCII display and on-screen hardware buttons. Cartridges hook into these as though interacting with real hardware. You also end up with a collection of games to play on that console, and ideally an ecosystem vibrant enough that developing cartridges and modding consoles becomes a creative hobby.
Goals
- Provide a simple, standardized engine for ASCII-style games.
- Support curated cartridges that can be easily downloaded or shared.
- Enable both real-time games and turn-based text adventures.
- Maintain a clean, focused user experience with no ads.
- Offer optional physical interaction (e.g., NFC cartridges or NFC hardware upgrades).
- Make the console feel like real moddable hardware with swappable modules (“chips”).
- Support two cartridge runtimes — JavaScript and WebAssembly — under one consistent UX.
- Allow developers to create compiled, non-readable cartridges using Wasm, enabling premium or protected games.
- Make it easy to expand the game engine to more complex experiences (e.g., side-scroller to top-down) by following modular, clean architecture principles.
Non-Goals
- Building an entirely new scripting language or interpreter.
- Supporting high-resolution graphics.
- Including aggressive multiplayer, MMO worlds, or heavy physics engines.
- Monetization via ads or intrusive mechanisms.
- Requiring online connectivity for core functionality (only optional for premium verification).
---
Game Modes
1. Real-Time 2D (Side-Scroller / Top-Down)
Characteristics:
- Player moves continuously through a map.
- Supports entities (player, NPCs, enemies, items) interacting in real-time.
- Includes collision detection, health/stats, and game AI-driven behaviors.
- Side-scroller variant uses a single horizontal axis and vertical jumps; easily extendable to full 2D movement, possibly eventually 3D
Engine Responsibilities:
- Maintain a game loop for updating entity positions, collisions, and game state.
- Render the ASCII map and entities efficiently.
- Handle real-time input and translate it into game actions.
- Provide a flexible map/grid system that can grow from 1D to full 2D (and possibly eventually 3D)
- Support AI and interaction logic for enemies and NPCs.
- Manage persistent state (player progress, inventory, discoveries).
---
- Turn-Based / Text Adventure
Characteristics:
- Player progresses one action at a time (move, search, interact).
- Game state includes inventory, health, story progression, optionally a map, etc.
- Can include interactive maps or mini-maps as optional components.
- Supports encounters, branching storylines, and turn-based challenges.
Engine Responsibilities:
- Process single-turn updates on player input.
- Render textual output, ASCII art, and UI elements.
- Maintain and update game state across turns.
- Handle events, encounters, and logic for creatures or challenges.
- Provide optional components like maps or journals for world-building.
---
Common Engine Features
- Modular, chip-based architecture: Engine capabilities are split into hardware-like modules (GraphicsChip, SoundChip, MathChip, InputChip, StorageChip, etc.). The console loads only the chips physically “installed.”
- Cross-platform: Runs fully native (swift and kotlin) on iOS and Android with:
- JavaScript cartridges executed in a tightly sandboxed JS runtime.
- WebAssembly cartridges executed in a secure, high-performance Wasm host.
- Unified cartridge format: Both JS and Wasm cartridges use the same .glyph container file, containing metadata, resources, and either JS sources or Wasm binaries.
- Persistence: Saves game progress locally through installed storage chips.
- API for creators: A consistent set of interfaces exposed through hardware chips. Each chip registers its own API; cartridges only see what the current console hardware actually supports.
- Curated content: Cartridges are reviewed or signed to ensure quality, safety, and (optionally) licensing.
---
Cartridge Formats & Runtimes
.glyph Cartridge File
All cartridges share a unified container format:
- manifest.json
- includes required hardware chips
- includes runtime type (js or wasm)
- includes optional licensing/sig info
- /assets folder (ASCII art, maps, metadata)
- /src (for JS cartridges)
- /bin (for Wasm modules)
JavaScript Cartridges
- Readable, modifiable.
- Perfect for beginners, hobbyists, open-source creators.
- Dynamically evaluated within a capability-restricted environment based on installed chips.
WASM Cartridges
- Fully compiled and non-readable (suitable for paid games).
- High-performance option for advanced developers.
- Can support many languages: Rust, C/C++, AssemblyScript, Go, Python → WasmPy, Zig, etc.
- Imports only the hardware APIs exposed by installed chips.
Runtime Selection
When a .glyph file is inserted:
- Console reads manifest
- Determines runtime
- Checks chip requirements
- Instantiates JS runtime or Wasm host with only available chips
If missing chips:
→ Classic “This cartridge cannot run on this console” screen
---
Hardware Modules (“Chips”)
The console emulates real hardware by splitting engine capabilities into separate modules:
- Graphics chip: tilemaps, sprites, ASCII rendering
- Sound chip: tones, SFX mixer
- Math coprocessor: SIMD, noise, advanced math
- Storage chip: save files
- Entity chip: entity/component management
- Input chip: button state & event dispatch
- Network chip (optional future): leaderboards, connectivity
- Physics chip (optional future)
Each chip corresponds to actual code.
If a chip is not installed, its functionality does not exist in the runtime.
Hardware Installation & Upgrades
- Chips can be:
- Preinstalled on new consoles
- Swapped from other consoles through the virtual back panel
- Installed via NFC hardware cards shipped physically
- Each console and each chip has a unique serial number.
- Opening the back panel and modifying internals becomes part of the user’s hobbyist experience.
---
User Experience & Magical Moments
- Focused, distraction-free gameplay that harkens back to handheld consoles.
- Ritualized discovery: power button, boot screens, startup sequences.
- Randomized cartridge failures requiring blowing into the slot (microphone detection).
- Swappable back-panel internals with visible “chips” and dip switches.
- Collectible NFC cards that install hardware modules or upgrades or individual cartridges.
- Portrait and landscape console orientations for different game genres, with buttons and controls appropriately arranged for each to give developers lots of opportunity for configuration.
- Curated store with skins, refurb units, and special-edition hardware.
---
Next Steps / Considerations
- Solidify chip-based modular engine architecture for both JS & Wasm runtimes.
- Define cartridge manifest structure and .glyph container packaging.
- Build import tables dynamically based on installed hardware chips.
- Outline game creator API unified across runtimes (JS imports and Wasm imports).
- Explore licensing & copy protection for premium Wasm cartridges (offline-friendly).
- Design initial chip lineup for v1 of the console.
- Prototype NFC-based hardware installation flow.
- Iterate on UI mockups for the console, cartridges, and back panel.
- Investigate language tooling for compiling to Wasm (Rust & AssemblyScript first, Python via WasmPy optional).
---
Notes
Brain Dump - document has been somewhat updated since this brain dump, but it encodes some good information so I'm leaving it
Okay, so it's been a couple of days that I've been working on this idea. I think this document pretty much captures the gist of it, but I wanted to brain dump just by speaking to really hone the concepts to make sure that we get all the aspects. The first most important thing to think of is this is basically treated as a piece of hardware. It's like you're buying a handheld console.
So you download the app for free, and the first thing you have to do is purchase a console. There will be ones that are brand new. They'll probably be $8, something like that, $10 maybe. I'll also have used ones, or maybe you call them refurbished, and they'll be 30 or 40% off, but then they'll have some scratches. You'll have a scratch overlay basically on the UI that you can't ever remove. You won't be able to change the color of the device after you buy it, like it is an individual device.
One idea I had was you should get shipped an NFC when you purchase one, so you can't use it right away. You have to wait for the card to get to your house, then you tap your phone on it, and that is your ID. Maybe you could use it right away, but to load it up on other devices or new devices or whatever, you can tap your phone on this NFC, and that is the unique ID for your specific handheld.
Then I also thought you'll be able to flip it over and look on the back, and there will be four screws. If you tap the screws, maybe if you hold all four screws at once, the back cover will pop open so you can see the internals. When you buy it, each one of those internals would be assigned a lifetime, like three years, three and a half years, somewhat at random. When it dies, then you could get another one used for parts, and you could open it up and swap those parts out instead of buying a new model. That's a work in progress idea. I don't know that I want to make people have to buy more*, but at the same time, if the parts were cheap, I think it'd be kind of cool, and I think people would get into it. You kind of want to make it something that can become a hobby.
*After discussing with my wife, I'm going to can the idea that parts break on their own. The phone itself will do that lol. Instead, I want to keep the idea that you can pop the back cover open and swap parts from other consoles for example if you want to mod or upgrade your console. Maybe there are some dip switches in there as well that change the behavior? The idea is that you can open it up and mess around yourself and get it to do cool stuff
Other stuff, when you load a cartridge, sometimes at random it won't load, so you have to blow into it. You can use the phone's microphone to track this, but you blow into the device to blow the dust out and try to reload the cartridge, and then it works. There's going to be a power button on the user interface. You load up the app, and it's just the console, but the console's off. Then you have to boot up the console. You can try restarting the console instead of just refreshing the app if you're having issues. Basically, we're trying to treat it like an actual piece of hardware. There's other things. You have a store with different skins for it and stuff like that. So that's kind of the console idea.
Then we have the whole game engine, which at this point we have mapped out all the modules in my IDE and basically have pseudocode, basic pseudocode rundowns of each module and kind of how the whole JavaScript bridge will work and what all that will look like. So the mechanics of the actual engine itself are sketched out. What I want to do next is write it out more concretely in Weft, and then I'll have a translator translate to Swift and to Kotlin. This might be... I'm going to do that. It might make a little more sense on this project to just write native instead of writing Weft since it is a game engine, a little more performance intensive. So maybe just the basic pseudocode here makes more sense and not wasting time trying to write Weft. Honestly, as I say that, that's probably what I'm going to do, and I'll just try to work on them in sync. I don't know. At the same time, Weft won't take that long to write, and it would be fun, and that's another project I have, so I want to see how it performs in the game world. So scratch that. I will write it in Weft.
Then I have some user interface mock-ups. The cool thing, you'll be able to have a landscape user interface, and then you'll also have a portrait mode user interface for more like text adventure style games or any games that developers want to make for portrait. But I thought specifically when you're typing a lot and it's more like scrolling text, kind of like the terminal, that would make a lot more sense in portrait mode. So anyway, those are all my ideas. I think they're pretty cool.
The idea is you would buy the hardware once, but all the games that I develop will probably be free. Other developers could charge money for their cartridges, but the idea is it's kind of running open source games that are all free.** You just buy the hardware, and then you own it, and then you can buy upgrades for it if you want to, like swap pieces out and stuff like that, but that's kind of the idea, and I'm still trying to think through names. The idea is to basically bring back fun mobile gaming, because right now the mobile gaming landscape is so terrible. It's all ads. No games are really fun to play anymore. They're just mindless, time suck, ad based, they suck. So I want to bring back fun mobile gaming. In that sense, maybe you make the console a little cheaper, or maybe it's free for a limited time when the app first goes live. We're giving away the first hundred units or something like that. So we need to think about how to get people to actually jump on board, but that's the idea.
_**I do like the idea of developers being able to charge for their cartridges, but I haven't figured out how to do this and enforce no copies. You should be able to pass a single copy around, just like a real cartridge, but you shouldn't be able to copy and paste the code and run it on two different consoles at once. Need to research how to make this work, esp with no internet connection cause I don't want it to depend on WiFi... maybe paid games depend on WiFi? _
So that was the first document, and then here is the little note I wrote the other night for my new idea:
A thought about the ascii console
Been reading up on the Halo 3 ODST Superintendent and thinking about R2-D2 and C-3PO. Also had a conversation with a couple buddies about how I like a future where machines are machines and humans are humans and we work together great. AIs don't pretend to be human and humans don't try to fill human needs with AI. Like Star Wars. C-3PO and R2 are both in line with the capabilities of existing LLMs. But they are very clearly droids. I like that. It makes for a good relationship.
All that to be said, what if the console itself was a superintendent of sorts? A droid? A companion to play these games with? A new way to interact with models? Maybe that's what makes this system unique and not just another emulator to play roguelike games. The system itself is a character. Games are designed to be played by the human and an assistant. The assistant isn't per-game anymore (Cortana, Jarvis, etc) but is on the console itself, with available hooks into these games with APIs designed to allow the assistant to assume the correct role for the game. The consoles could be designed to allow many different types of AI to emerge so every console would require the owner to get to know it to effectively collaborate.
What about API costs? Is this backed by an LLM or is it something simpler? If LLM, a local one right on the phone? What about API costs?
If the AIs on the consoles could truly be unique for each user, that would be so friken cool. This could be a cool idea or a stupid one.
I've thought a lot about putting together the game itself and I've actually started to implement it natively for iOS, but I wanted to pause and think through this feature because I think it could be really cool. What are your first impressions on all of this?