It has been a while, it would seem. I’ve been rather silent about my work here lately, and although I post a lot of my progress on Twitter, it would be nice if some of this was also documented on my website.
Here is a timeline of sorts!
- More work on NES rom stuff, mainly just doodling mockups for an RPG scene.
Rough doodles. Playing with the idea of sprite layering to create interesting effects, and using tiles to create enemy artwork:
More fleshed out, fussing with the background pixels. In particular, the grass has been improved greatly, added water and an incomplete skyline. Slightly more refined and tile-aware, although obviously a mock.
- Started thinking about how to make a crappy map editor for my NES RPG project.
- Generally distracted by work.
- Molasses NES prototype. A simple sidescroller metasprite loader, tilemaps, and basic tile-based collision. Doesn’t handle off-screen obstructions gracefully (wraps to other side of the map):
- March 6, 2011 – First official release of nel, an NES 6502 assembler (version 0.1.1). Written in D, supports many features that typical 6502 assemblers don’t support, has a fairly flexible syntax that can be parsed with recursive descent and minimal ambiguity. Does multipass so symbol scopes can be handled intelligently, and a separate linker tool isn’t necessary.
- March 16, 2011 – Let’s Play Magna Braban started. Intentionally low production values. Typically recorded during late night, after a few drinks ingested.
- April 18, 2011 – Got the idea to possibly demake Eversion as an NES game (with Zara’s blessing). Toyed with the possibility of converting some of the sprite art, kind of:
- April 18, 2011 – Finished Let’s Play Magna Braban. Great art and music, funny story, too bad the programmers apparently overlooked the fact that full inventory access with no restrictions is horribly broken.
- April 19 – 20, 2011 – Started and finished Let’s Play Gradius III. Apparently the enemy patterns are still fresh in my head.
- April 25, 2011 – Started and finished Let’s Play Vector Knights. Vector Knights: You’ll Die A Lot: The Game.
- April 26, 2011 – Started Let’s Play Banana Nababa. As ustor put it, “Drunken banana nababa. You are a madman.”
- May 1, 2011 – Attempted Ludum Dare 20, but realized I was out of time. But I made a timelapse of the development. I kind of had fun learning Flashpunk, and drawing weird Earthbound-like characters:
- May 10, 2011 – Wanted a scrolling map system, so prototyped a scroller demo to go along with nel:
- May 11, 2011 – Converted a lot of Eversion artwork to NES specs:
- May 15, 2011 – Made a tool for converting Eversion’s SHINY engine maps (Verge2 .map files) into a raw byte format I could easily load on the NES.
Made my scroller demo bundled with nel use the first level maps from Eversion instead.
- May 9, 2011 – Continued Let’s Play Banana Nababa. Beat the third boss, after taking a second attempt.
- June 3, 2011 – Started Let’s Play La-Mulana. Was inspired to replay this after La-Mulana Wii’s release date was announced in Japan.
- June 16, 2011 – Created a backloggery account. It’s a tad depressing how many games own and haven’t completed yet.
- June 25, 2011 – Played around with making NES scrolling and tile copying faster during vblank interrupts, so more tiles can be transferred per frame.
Turns out the absolute fastest way (provable by cycle-counting vblank routines) is to copy opcodes into RAM to generated unrolled tile copy loops from your main game loop. Then you can just call that code during vblank. This wastes a lot of time in your main loop, with a lot of extra work needed to buffer tiles that wasn’t there before. It also requires a sizable chunk of RAM — 15 bytes to setup
@ppu.ctrlcopy stride, 10 bytes to tell
@ppu.addrwhere to locate the copy, and 5 bytes per subsequent tile copy to
However, if you do this, you get a decent savings. It allows for some pretty large tile copies to be made on-screen, and could be used for 2-axis scroll or quickly processing a game with destructible terrain that can regenerate.
The unrolled loop looks like this (although written as individual opcodes):
a: get #stride, put @ppu.ctrl // Set stride by clobbering the PPU ctrl. (5 bytes / 6 cycles) Vblank code will need to reset this afterwards. a: get #addr_hi, put @ppu.addr // Write address high to address register (5 bytes / 6 cycles) a: get #addr_lo, put @ppu.addr // Write address low to address register (5 bytes / 6 cycles) a: get #tile, put @ppu.data // Write first tile (5 bytes / 6 cycles) a: get #tile, put @ppu.data // Write second tile (5 bytes / 6 cycles) a: get #tile, put @ppu.tile // Write third tile (5 bytes / 6 cycles) // ... and so on. return // Done! (1 byte / 6 cycles)
The actual code to generate such unrolled loops is somewhat more frightening. I won’t get into that.
- Moved to a new apartment!
- Got a job offer out of country! Suddenly, need to find a new place, and fill out paperwork!
- Wrapped up my old job!
- Dungeons of Dredmor came out!
- Very little work was done.
- Home for a week!
- Home for half a week!
- August 18, 2011 – Second release of nel, the NES assembler (version 0.2)!
Now with if statements, while statements, repeat statements, enum declarations, more flexible ROM sizing and relocation statements, a scroller demo. Other fun. See the documentation!
- Moved to California. Slept on an air mattress.
- Work started!
- Vaguely remember working on this, amongst all the chaos:
- Bank card!
- Real furniture!
- Tired. No games.
- Still tired.
- Someone contacted me out of the blue to work on GBC homebrew! The actual project is ongoing, in secret. But here are nondescript test programs of some minor things, to tide you over:
- Suddenly, TIGJam 4 appears! This was lots of fun. Met many inspiring people, saw a ton of cool games, and I was inspired to work on things again!
I got the C++ for Plum, my Lua game engine compiling in MSVC 2010 on my newer netbook, then I spent time converting Molasses’s old Verge maps into tiled maps. Managed to make my Molasses Meow demo work after rejiggering the Lua code from my Verge project. And the reception during demo night of TIGJam made me feel like I should probably see this through. Things were good!
Here, have another screen:
I’ve been brainstorming ways to improve the map design of Molasses Meow. Basically it boils down to sparser powerup collection, and more interesting environments to interact with. Taking an idea from Star Tropics, I was thinking of having fairly simplistic button-hitting puzzles. You bump into buttons on floors, ceilings and walls, and then something simple happens as a reaction to that.
Also came up with an idea that goes with the enemy capture system. Basically, after capturing guys, you’d bring them to an ominous looking room and crush them into tetris-style puzzle pieces. Each creature type would map to a unique piece. You’d then use those pieces to build a tower to the final area, in the outer reaches of space.
That brings us to today. It is barely still October, but I’m still working on stuff. It goes slowly but steadily. This is a rather long timespan to not post on my site, but I’m hoping this mega-post makes up for that lack of posting. Maybe future posts will be of somewhat more sane length.
Until next time,