Okay, here we go. Retrochallenge. 2017. April. We can do this.
This month I’m going to be working on a continuation of my last Retrochallenge project, which was a CRPG-style game for the Commodore 64. I knew going in that would be a longer challenge than one month – or even
two three six – so it’s something I can keep coming back to, probably mixed in with other projects to keep things fresh. As a reminder, here are the key points:
- Runs on a stock C64.
- Written in a combination of C and assembly, using the cc65 cross-compiler.
- Uses overlays for dynamic code loading.
- Build system built around Emacs & Vice 64, giving me a chance to work on my Emacs skillz.
- Support for a large wilderness map, such as in Ultima III or IV.
- A keyword-based conversation system, also similar to some of the Ultimas.
- Lots of equipment and items to play with.
- For the combat system, I’m leaning away from the Ultima style, and thinking about doing something more menu-based, maybe inspired by JRPGs, Might and Magic, and Bard’s Tale.
During the last Retrochallenge, I made a lot of progress on the maps, and even created a built-in map editor. I figure this time around I’m going to start in on item 6, and see what I can do to create a conversation system that’ll be as memory-efficient as possible.
You’d figure that with everything working so smoothly when I left off at the end of the last challenge, it’d be easy to pick things up again, but of course that wasn’t the case. I cleverly decided to start building my code on a different computer with a new version of cc65.
Now, it turns out that cc65 is under new management with a new repository over at Github, and the new version did not like my code. Can you believe that they changed the #pragma names and linker configuration format? Ah, who am I kidding; if I took over a project like that I’d probably make those sorts of changes too. After all, for most code bases these changes would be pretty transparent. My code needed an overhaul because of the customized overlay stuff, and it took a bit of fiddling to get everything to play nice.
Once everything would compile and run again, I started doing some groundwork. Last time, I created a fairly minimal “console” that could print messages on the side of the screen, and I just used that for some input logging and messages as the player moved around the map.
So far, I’ve upgraded the console to allow the user to enter in words, and also to more smoothly handle single-character commands (like using the cursor keys to move around). I even added a cheap animated cursor – really just one of the animated characters I created for water on the map. At some point I’ll go back and do proper artwork for it, but even as a weirdly-out-of-place set of wavy lines, it gets the point across that this is where the user’s input will be shown.
I’m hoping that this weekend I’ll be able to sketch out just how the conversation system is going to work. The trickiest part of this project might be finding worthwhile things to take screenshots of – there just isn’t going to be much to look at until things are pretty much working. So I’m going to apologize for the wall of text in advance, but I’m confident I’ll have something to see before long.