Advertisement · 728 × 90

Posts by Zeta

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

4 days ago 0 0 0 0
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.

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:

1 week ago 1 0 0 0
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.

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

1 week ago 12 4 1 0
Preview
IGW Games New games for old consoles! IGW Games makes tools and games targeting classic consoles to mix nostalgia with modern fun.

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

1 week ago 66 33 0 8
Video

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

3 weeks ago 25 7 0 0
Video

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

3 weeks ago 28 8 1 0
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.

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

1 month ago 20 2 0 0
Advertisement
Preview
GitHub - TakWolf/fusion-pixel-font: 开源的泛中日韩像素字体,黑体风格 开源的泛中日韩像素字体,黑体风格. Contribute to TakWolf/fusion-pixel-font development by creating an account on GitHub.

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.

1 month ago 3 0 0 0
Video

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

1 month ago 20 6 2 0
.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

.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.

1 month ago 3 0 0 0
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?

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

1 month ago 26 5 2 0
Omori - Three Bar Logos [2A03 + VRC6] | Dn-FamiTracker Cover
Omori - Three Bar Logos [2A03 + VRC6] | Dn-FamiTracker Cover YouTube video by zeta0134

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...

1 month ago 4 0 0 0
Video

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

1 month ago 8 3 1 0

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!

1 month ago 1 0 1 0
Welcome to Debug Zone! (Sorry, no fancy music.)

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

1 month ago 12 1 1 0
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

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

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.

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.

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

1 month ago 5 1 0 0
Advertisement
Post image

I did some refactoring the other day and gained a whopping 19 (!) additional bytes of zeropage. That was such a relief!

1 month ago 3 0 1 0
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 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.

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.

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

1 month ago 6 2 0 0

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 😔

1 month ago 2 0 0 0
Video

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

1 month ago 15 2 1 0

Gah, that's supposed to be pleasant 50% transparency. Bluesky why >_<.

(I forgot to apply frame blending before uploading. So sorry!)

2 months ago 0 0 0 0
Video

Kijetesantakalu is here to help you remember all of the numbers in Tactus.

😱 "All of them?"
🦝 "ALL numbers, yes yes!"

#gamedev #pixelart #kijetesantakalu

2 months ago 13 3 2 0
"nasin nanpa kijetesantakalu"
All numbers are replaced with 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!

2 months ago 7 1 0 0
Advertisement

I've been following development of this for a while. This game has uncomfortable levels of polish!

2 months ago 2 1 1 0
Sonic Advance - Angel Island [2A03 + VRC6] | Dn-FamiTracker Cover
Sonic Advance - Angel Island [2A03 + VRC6] | Dn-FamiTracker Cover YouTube video by zeta0134

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...

2 months ago 5 1 0 0

... bugger, I forgot the alt text. Ahem: "French Horn of Plenty" - "Harvest some health when defeating Earth foes."

2 months ago 0 0 0 0
Post image

It turns out a cornucopia is too difficult to draw at low res, so I fixed it. #pixelart #gamedev

2 months ago 15 1 2 0
Preview
Tactus on Steam A rhythm-based dungeon crawler with authentic retro charm. Explore mysterious ruins, find powerful weapons, and slay to the beat. Designed and built for the original NES, playable on Steam with modern...

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/...

2 months ago 23 7 1 2
Video

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

3 months ago 18 1 0 0

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! 💖

3 months ago 3 0 0 0