NeoToxin development

Sunday, January 09, 2005

Development source code released

I've released the source code I've been working on the past month. It includes a small demo to illustrate some of the capabilities. The source code can be downloaded here. A precompiled ROM can be downloaded here. All that's needed now is great graphics, level design, enemies and quests, then Neotoxin is ready to hit the shelves!

Saturday, January 08, 2005

Assembler mania

I've written an assembler for my NES virtual machine. It's very crude (had to be since I can't afford to spend weeks on it), but it's sufficient for the time being. Ideally, I should write a compiler above it, but that's a bit of an undertaking, so it's not too high on the priority list right now. It's also a good exercise to code in assembler first so I can better see the requirements and implementation strategies of the compiler.

I've also released yet a new version of my assembler/linker suite. Bugs are still steadily trickling to the surface as I work on the Neotoxin code (it makes for good test input now -- 70 units, 11,000 lines of code), and every time I release a new version I swear "no more... there can't be any more now, can there?". THIS time, of course, it's true.

Next week I begin working on my master thesis, so NES development is likely to be somewhat subdued. Rest assured that Neotoxin will still be worked on steadily, though.

Friday, January 07, 2005


During the last two days I've implemented dynamic memory management on the NES and built a virtual machine on top it. The virtual machine supports non-preemptive multithreading and is quite cool. The plan is to use it to implement scripting of game events (cutscenes and quest logic). I need to write a compiler for it though, since typing in the bytecodes by hand isn't very fun.

The 2D engine is pretty much finished now. It's all very tight; the entropy mentioned in an earlier post has been driven into the ground.

Monday, January 03, 2005

Status report this, status report that

I've come up with new novel implementations of object-to-object collision detection and dynamic object loading/unloading. I've also released a new version of the assembler/linker, which adds support for anonymous unions.

Saturday, January 01, 2005

Status report: The sequel

Another year, another pathetic attempt at finishing Neotoxin.

For those who don't know, I'm rewriting and restructuring large parts of the code since the entropy of it all got out of hand, due to the combined effects of bad memory management, cheap hacks and long compilation times. The premise of this conversion is the advent of my amazing 6502 assembler/linker suite. Since the last report, I've made important progress:

- Animation engine completed
- Object physics engine, per-tile collision detection implemented

The focus now is on:

- Dynamic object loading/discarding (as the player moves through the level)
- Per-pixel collision detection (for slopes)

Once this is done, the 2D engine is pretty much ready. Then I can move on to some other mundane stuff.

Tuesday, December 28, 2004

Status report.

I'm working frantically to get the new code base up and running.

- The background scroller engine is completed.
- The music sequencer is completed.
- The sound mixer is almost completed.
- The object engine, including animation and collision detection, is nowhere near completed.

Since the last update, I've released two new versions of my assembler+linker; the latest version was uploaded just a few minutes ago. With the new features and bug fixes, I'm ready to tackle the remaining parts of the game code.

Saturday, December 18, 2004


The cyclic pattern "write NES code - find assembler/linker limitation(s) - work on assembler/linker - write NES code - ..." reared its ugly head again. While the immediate outward effect is the halt of Neotoxin progress, in a longer perspective, it's certainly for the best. I've released a new version of my assembler/linker suite every three days since December 6. Each version has had significant new features and improvements, and looking back at version 1.0.2 three weeks ago, it's amazing how far it has progressed.

The new version, 1.4.0, is a real milestone, because it introduces constructs that enable the assembly code to communicate data mapping constraints to the linker. The lack of such functionality in earlier versions has been been a source of uneasy thoughts in the back of my head for the longest time, and I knew these limitations would strike me down sooner or later. Well, the time came, and thankfully, it could be dealt with.

With those challenges conquered, I'm ready to go back to NES coding full force. Unless something really, REALLY unforeseen happens (yeah right.. what're the odds of that?), the development won't suffer any long (as in several days) breaks from now on.

Well, I best get on with it.