I had the opportunity to play this at MAGFest 2026, and it's one of the games I kept coming back to again and again. The pixel animation alone is just loaded with style, and the platforming and combat flowed really well. I can't wait to play the full version :D
Posts by Zeta
It's a screenshot from my translation tool. For the key "one armed bandit death message", the English string is displayed as "The house always wins." Visible in the screenshot is some extra whitespace and a manual line break, which helps to visually center this text when it is rendered by the relatively crude NES game code.
If you were wondering how I got that text centered automatically in 6502 assembly, the answer is that I did not:
Game Over Floor Reached: 1-1 Run Time: 0:00:08.68 Steps Taken: 20 Gold Earned: 0 Carrying: One crummy dagger. Picturing them in roller skates didn't help.
After a bit of effort this morning, I'm pleased to report that the game over screen can now taunt the player based on the specific enemy that led to their demise. #gamedev #nes
It is time! Dizzy Sheep Disaster: EX is now available for purchase for your Nintendo E-Reader! Here's the store link: store.nes.science
It contains 30 puzzles to test your reflexes and skills!
I'm so excited to share this with the world!
#indiedev #homebrew #gba
Moles were feeling weak. So, I reworked them to pop up more quickly, and added elemental variations to their attacks. The tethered wrenches are easily my favorite! Wrench jumping is still technically a valid strategy, but Earth and Air moles now need appropriate resistances. #gamedev #nes #indie
Check out this very WIP effect for "stability" in my warp zones. This is just the torchlight system under the hood, but there's no reason the alternate tiles have to be "lightness variants" exclusively. Needs tweaking, and less placeholder walls. #gamedev #pixelart #nes
It's gameplay footage from Tactus. The player stands in a dark, dingy room, surrounded by purple walls adorned with industrial orange stripes. Lining the back wall are three variously colored machines, adorned with flashing lights. Who knows what they're for.
Finally working on a new in-game area. I've just reworked the tile compression system (I *have* tile compression now) and that means I can go nuts with metatile variants without blowing out my CHR budget. I haven't even started on detail structures and I already love how this looks. #pixelart #nes
Oh, before I forget, art credits! I drew all of the sprite and background art in this footage, and also the 12px sitelen pona font. The latin glyphs are from the delightful Fusion Pixel Font, located here: github.com/TakWolf/fusi...
Now that this is all working, I can add new bitmap fonts easily.
After a few more rounds of polish, the new VWF system for dialog is complete! Here's a quick tour of the new stuff it can do. Being able to mix and match all unicode glyphs on an NES is wild.
(Pay no attention to the Combat Anchor's brief visual bug. I see it. 😱)
#gamedev #nes #pixelart
.proc str_utf8_110xxxyy NametableAddr := T0 AttributeAddr := T2 StringPtr := T4 perform_zpcm_inc ; Draw a 2-byte single character. This is bitpacked, so we ; need to do some work to extract the bits and format the codepoint correctly ; Source bytes will be: ; 110xxxyy 10yyzzzz ; Destination bytes will be: ; 000uvvvv wwwwxxxx yyyyzzzz lda #0 sta UiTargetCodepoint+2 ; ...uvvvv ldy #0 lda (StringPtr), y ; 110xxxyy lsr ; .110xxxy lsr ; ..110xxx and #%00000111 ; .....xxx sta UiTargetCodepoint+1 ; wwwwxxxx lda (StringPtr), y ; 110xxxyy . ror ; .110xxxy y ror ; y.110xxx y ror ; yy.110xx x and #%11000000 ; yy...... . sta UiTargetCodepoint+0 ; yy...... . inc16 StringPtr lda (StringPtr), y ; 10yyzzzz and #%00111111 ; ..yyzzzz ora UiTargetCodepoint+0 ; yy...... sta UiTargetCodepoint+0 ; yyyyzzzz ; Access that glyph near_call FAR_ui_access_glyph_at_codepoint ; It should be safe to draw, yes! near_call FAR_ui_draw_current_glyph ; onward! inc16 StringPtr perform_zpcm_inc rts .endproc
If you're wondering, here's what the 6502 assembly looks like to parse a 2-byte UTF-8 codepoint. Once expanded into its 3-byte form (and separated from the prefix codes) it is used to index into a giant lookup table of glyphs.
There are two more of these decoders for 3-byte and 4-byte codepoints.
On the left, a giant table of exported and technical strings, formatted for ca65 assembly language. On the right, a python routine whose behavior can be summarized as, "scan for extended commands, and otherwise pass unicode glyphs through unmodified." On the screen, the resulting unicode is rendered in sitelen pona, except for the player's name. The font it uses isn't widely supported yet, so I'll transcribe in sitelen lasina instead: sina jan seme? 1. Zeta 2. lipu musi sin 3. lipu musi sin o ala e lipu musi o tu e lipu musi In English, this loosely translates as: Who are you? 1. Zeta 2. New Game File 3. New Game File Erase Game File? Duplicate Game File?
Oh my stars, it WORKS. I just rendered UTF-8 on an NES! Apparently ca65 can even handle UTF-8 strings by using .literal, so the resulting file with localized strings is shockingly readable.
I'm so happy right now! #programming #gamedev #unicode
What a delightful, cheery game! Nothing bad could ever happen to these characters. #omori #chiptune #famitracker
I'm pleased with how well VRC6 handled the "synth burst" at the start of this. For 8bit hardware it sounds just fine. www.youtube.com/watch?v=49so...
Yes, that's what this solution needed. *Another* raster trick...
VWF system is coming along! Rendering works, nametable layout is solid, and I even managed to squeeze in little dialog portraits for items and such.
#gamedev #nes #pixelart
I'm using a modified fork of rustico for this reason, but I'm stuck on SDL2 since I can't get the Rust SDL3 wrapper to actually compile. Still, it does everything I need and it's delightful to have top to bottom control of the stack.
The custom art in yours looks super slick!
Welcome to Debug Zone! (Sorry, no fancy music.)
I'm so happy right now! My very complicated VWF system just drew its first lines of text today. The core is working, but lots of little polish-y details remain.
This is software-rendering these glyphs directly into CHR patterns on the fly. Goodness, the code is messy!
#gamedev #nes #retrodev
A rather plain set of very bright squares. This is the most expected result of the bunch, with 0xFF data bytes filling all of CIRAM
Unusual horizontal stripes. This was tested on my flashcart, and I think the stripes are leftover nametable data from its menu being reinterpreted as patterns
This is what the real cartridge does. ... incorrectly! We're seeing PPU open bus patterns instead of the expected (random / uninitialized) contents of CIRAM, which suggests a problem with the /CE line. I'll work with my cartridge supplier to troubleshoot.
And this is what my own emulator, "rustico" does. Here at least I know what's going wrong: I'm incorrectly using FPGA RAM as pattern data, instead of the requested CIRAM. So we're seeing the same data that makes up the level also get used as that level's tile graphics. This should be a quick fix.
Various flavors of "ah yes, that's working, technically!" Just normal gamedev things really. #nes #gamedev
I did some refactoring the other day and gained a whopping 19 (!) additional bytes of zeropage. That was such a relief!
A rather dense collection of byte values in a giant list. This is a small portion of the index for an exported font, with the tables arranged in order of unicode codepoint. Several nested tables are used to make the indexing efficient on a 6502 processor, which generally favors "pages" of 256 bytes each.
A lengthy routine in assembly, partially completed, named "access glyph at codepoint." This routine's job is to index into a nested tree of tables, spanning several memory banks in the process, as the entire table is too big to fit in memory at one time.
It's a table describing the 1bpp glyph for a percent sign, along with metadata concerning that glyph's width, height, and bit depth.
"Why, I'll just decode UTF8 on an NES," I said. "It'll be the easiest option!", I said.
So if you're wondering why updates have been slow, it turns out text encoding is remarkably complicated. Who knew? Have a peek into the abyss with me.
#gamedev #programming #unicode
Shoutouts to @provolonecinco.com's artwork for the Cultist enemy, which inspired this item. Under the hood it uses mostly the same logic as the weapon charge system, so it looks way more complicated than it actually is.
I am... not very good at using it! Clearly I need more practice 😔
Crazed cultist casting making you cranky? Turn the tables with the Forbidden Amulet, available at your nearest in-game shop. Now you, too, can cast the forbidden shapes. Show those cultists how it is **done**, yes!
#gamedev #tactus #pixelart
Gah, that's supposed to be pleasant 50% transparency. Bluesky why >_<.
(I forgot to apply frame blending before uploading. So sorry!)
Kijetesantakalu is here to help you remember all of the numbers in Tactus.
😱 "All of them?"
🦝 "ALL numbers, yes yes!"
#gamedev #pixelart #kijetesantakalu
"nasin nanpa kijetesantakalu" All numbers are replaced with kijetesantakalu.
I'm finally working on implementing nasin nanpa kijetesantakalu in Tactus. It's sure to be very helpful on your runs! #gamedev #tokipona
There are so many different ways to draw numbers in this game. It's gonna take a bit to work through them all, but I've committed to the task, yes yes!
I've been following development of this for a while. This game has uncomfortable levels of polish!
Been a while since I posted any of my chiptune covers, so have an Angel Island! ...no not *that* Angel Island, the other one.
NES + VRC6. (Triangle does nothing 😔)
#chiptune #famitracker #sonic
www.youtube.com/watch?v=0HOK...
... bugger, I forgot the alt text. Ahem: "French Horn of Plenty" - "Harvest some health when defeating Earth foes."
If you'll pardon a bit of shameless self-promotion, Tactus is now available for wishlisting on Steam! 🎉 Digital copies will also include an NES ROM, compatible with modern emulators and dev carts.
"Wishlist Now!", "Tell your friends", other clichés, etc!
store.steampowered.com/app/4129270/...
Playtesting revealed that damaging hits weren't obviously successful-looking enough. I realized I can repurpose the coin system to also handle these bouncy damage indicators. Now, if you don't defeat a foe outright, you can see how much damage your (possibly buffed) attack did. #gamedev #nes
Wicked Plague has some of the best pixel art I've ever seen on a Gameboy Color. Dripping with style!
Panzer: Frontiers comes out swinging with goofy writing and solid arcade-style gameplay.
Light from Within feels like a love letter to classic Zelda dungeons. It's huge!
Congrats everyone! 💖