[WIP] Projekt Menetekel: That game I keep talking about
[Very preliminary logotype. Is this readable?]
What is it?
Projekt Menetekel: [Subtitle pending...] is the P1 (and PC and likely also P2 and Wii, DOS, etc.) game I've been working on for a while now. It has been referred to as "The game(tm)", "The big game" or "PropAdv" before. You could say it started in the summer of 2018 when I first created the JET ENGINE graphics system. You could say it started early 2019 when I started developing the custom tools. You could say it starts now, with the engine core being mostly functional and me having a rough idea of what the gameplay and storyline will be like.
The game will be a mix of elements, pulling mostly from the Zelda series, bullet hell shooters (well, as much as that is reasonable on limited hardware and non-linear movement) and classic graphic adventures. There will be a large overworld to explore and some number of dungeons containing tough challenges and useful treasures. There will also be a fleshed out storyline with lots of characters, although I neither can nor want to say more about it at this time.
Why do a post now?
- I have (had?) a habit of starting big projects and then not following through. This seems to have not happened here long enough that I'm confident I'll at least be able to get a demo out.
- I wanted to avoid posting before deciding on a final title, which in turn required deciding on the basic kind of story. Well, I compromised and settled on the main series title Projekt Menetekel (which will be kept if I make another similar game), but not the game's own subtitle. (FYI: "Menetekel" is a semi-obscure german word that roughly translates to "bad omen". It references a bible story (Daniel 5, if you're so inclined), but it doesn't seem to have a become a word of its own in many other languages. Also, yes, there is a reason I chose that beyond it sounding really neat.)
- Recently, I've gotten slightly sidetracked with P2 stuff.
- Idk really
When will it be done?
IDK really. Probably not soon. But i'll post the more-or-less occasional update to this thread.
What will it run on?
The specs for the P1 version are relatively final:
- At least 80 MHz clock speed
- S-Video, Composite, 256 color VGA or 64 color VGA (in order of descending preference)
- SD card socket with very fast SD card (A1 application performance class required for smooth gameplay)
- Input method with 8-way direction input and at least 4 buttons (6 highly recommended). A whole cog is reserved to read it, but no hub RAM.
- Standard audio circuit (technically optional. Stereo recommended.)
- Optional: 64K SPI RAM (reduces writing to SD card) (currently actually required because I haven't bothered writing the RAM-less memdriver yet...)
P2 version estimated requirements:
- Standard 20MHz crystal
- VGA, HDMI/DVI ,YPbPr, SVideo or Composite output. They are all of relatively similar quality, but there may be issues with pixel aspect ratio and sampling on the non-anlaog-SDTV ones. Other outputs may be supported, too, IDK.
- Input method with 8-way direction input and at least 4 buttons (6 highly recommended). Not sure about specifics yet.
- SD card socket. Card doesn't have to be as fast as for P1, but a good card is still recommended.
The emulator currently runs on Windows only, but is designed with portability in mind.
In particular, ports for Linux, Wii and MS-DOS are planned.
What have you got so far?
Important note: Unless otherwise noted, all captures are from the PC version, which features improved graphics (more colors and high-res text).
Main "Action" engine
This is the most important part of the game code, because this is where the actual game happens.
[Complex tile animations]
[Static elements can be above the player]
[Fake multi-layer scrolling]
[Weapons in action...]
Random overengineered visual effects
[Opening a treasure chest...]
[What could this be for?]
Projekt Menetekel uses a fairly advanced text printing system. This allows
- Automatic word wrapping and pagination, including manual linebreaks, NBSPs and ZWSs
- Color text (color can be set by program or in the string itself)
- Text crawl or instant printing
- Flexible text box shapes (not fully implemented yet)
- Including graphics tiles into text
- Including dynamically generated/selected text snippets into a ROM string
- Translation support. Up to 254 languages can be defined. All ROM font characters can be used.
[Language switching on-the-fly]
[Dialog system in action.]
[The name of the player character can be customized (see previous GIF)]
The characters can display many different facial expressions by combining different layers (this required creating some custom tooling to read the proprietary layered format of my favorite paint program...)
[Isn't she cute?]
Custom macro assembler and XMM tooling
Well, it's really just some special methods defined in a Ruby interpreter, but if it quacks like an assembler...
This approach essentially gives you a powerful object-oriented macro language for free.
[An average function. Note the slightly odd syntax, auto-detection of immediate/register S, pointer manipulation macros and emulator-friendly instrumentation (
[A macro being defined]
[Maps are defined in code. They use their own DSL (yes, it's a DSL inside a DSL)]
[Advanced macro magic. This method is defined for MapDSL. Map definitions are evaluated before any code is actually assembled, but the code inside the
mapticker_asm block is stored away and executed later while assembling the map's ticker function]
The assembler also includes a de-compilation feature, which emits C++ code equivalent to the assembled code. This is the core of the PC emulator. The code has to be specially instrumented and well-behaved (don't read or write itself, don't read inline data without a special rdcodexxxx instruction, don't read reserved memory, etc.) to make this work.
[512 byte pages of ROM data are deduplicated and compressed]
[Code after being de-compiled into C++]
Custom Tile/Map Editor
It is called Weltatlas and is written in Java with Swing. The code is spaghetti and inefficient, but it works...
[Tile Editing. It simulates the non-square pixels seen on real hardware.]
[Viewing collision data]
[All four master palettes can be previewed with the click of a button. This is what this map looks like on 64 color VGA, yuck. Marker highlighting can also be disabled for a more aesthetically accurate preview.]
As said above, I have a rough idea of what I want to do with the storyline. (Writing and coming up with good ideas, I'm not very good at)
[Random tech logo screen mockup (as displayed by PixCRUSH. JET Engine has less horizontal overscan.)]
Lines of code
Updated 19th May. 2021
Only non-blank, non-comment lines are counted.
|Main code (Assembly+macros+tables+MapDSL)||112||17881|
|Custom Assembler + Misc. Utilities (Ruby)||23||4260|
|Tile/Map and Dialog Tree Editors (Java)||41||7511|
|P1 VM/kernal/loader (Spin/PASM)||15||4321|
|P2 VM/kernal/loader (Spin/PASM)||5||2973|
|PC emulator (C++)||34||3991|
Updated 2nd Mar. 2021
|Size (source code)||11.4 MB|
|Size (compiled XMM ROM)||566 KB|
|Size (compiled Windows EXE)||1003 KB|