Tenliner Cave Adventure: From ZX81 to VIC-20 to Z-Machine

June 30th, 2019

Jason Compton suggested I port Einar Saukas’ “Tenliner Cave Adventure” game for the ZX81 to the VIC-20. So I did!

If you’d like to play it yourself, you can download various versions of the game here:

The original ZX81 game
My port to Commodore BASIC
Jason’s port to Ozmoo
Jason’s port to Bitshifter
.z3 file of ZIL port, run on any z-machine

You can watch my 8-Bit Show and Tell episode about it here:
https://youtu.be/_d2g5BXdyfU

This is now the 24th episode of 8-Bit Show and Tell! Thanks for watching.

Commodore 64 BASIC V2 Error Messages

December 3rd, 2018

I’ve launched a new Youtube channel called “8-Bit Show and Tell”. The first video is about the various errors that C-64 BASIC will display, and can be watched here:
https://youtu.be/9V1wFXKHTgw

It was suggested that this information would be useful in text form, so I’m presenting it here in my blog. Most of this information can be found in the C64 User’s Guide and Programmer’s Reference Guide (Appendix L and K respectively), but there’s a handful of omissions and errors in those lists that I’ve corrected here.

The descriptions are lifted from the PRG when appropriate, and I’ve written my own for the missing error messages. I’ve included a short example of my own making to produce each error. I hope this is useful. If I’ve made any errors or omissions myself, please let me know in the comments.

Commodore 64 BASIC V2 Error Messages

  • BAD SUBSCRIPT ERROR

    Description: The program was trying to reference an element of an array whose number is outside of the range specified in the DIM statement.

    Example:
    A(11) = 0

    DIM B(2)
    B(3) = 5

  • BREAK ERROR

    Description: Disk or cassette access was stopped because you hit the STOP key.

    Notes:

    1. This error was left out of Appendix L in the C64 User’s Guide completely
    2. It was included in Appendix K of the C64 Programmer’s Reference Guide as “Program execution was stopped because you hit the STOP key” but this is not the BREAK *ERROR* but merely how to create the BREAK message.
    3. This error message has 3 spaces between BREAK and ERROR, compared to the usual 2 spaces of the other error messages.

  • CAN’T CONTINUE ERROR
    Description: The CONT command will not work, either because the program was never RUN, there has been an error, or a line has been edited.

    Example:
    10 PRINT "HI"
    CONT

  • DEVICE NOT PRESENT ERROR
    Description: The required I/O device was not available for an OPEN, CLOSE, CMD, PRINT#, INPUT#, or GET#.

    Example: Without device 9 (such as a 2nd disk drive) attached:
    LOAD”$”,9

  • DIVISION BY ZERO ERROR
    Description: Division by zero is a mathematical oddity and not allowed.

    Example:
    ?0/0

  • EXTRA IGNORED
    Description: Too many items of data were typed in response to an INPUT statement. Only the first few items were accepted.

    Example:
    10 INPUT A,B,C
    RUN
    1,2,3
    RUN
    1,2,3,4

    Notes: Like REDO FROM START, this error doesn’t actually print the word “ERROR”, and doesn’t stop program execution. It’s an error (or warning) directed at the user to correct their input.

  • FILE DATA ERROR
    Description: String data was received from an open file, but the program was expecting numeric data.

    Example:
    10 OPEN 1,0
    20 INPUT#1,A
    RUN
    Y

  • Notes: This is referred to as the BAD DATA ERROR in the C64 User’s Guide and PRG. This was the original error name in the very early Commodore PET ROMs, but had been renamed in later PET revisions, as well as the VIC-20, so it’s strange that the C64 documentation still had the old naming.

  • FILE NOT FOUND ERROR
    Description: If you were looking for a file on tape, and END-OF-TAPE marker was found. If you were looking on disk, no file with that name exists.

    Example: On a disk that doesn’t contain the file “WHATEVER”:
    LOAD”WHATEVER”,8

  • FILE NOT OPEN ERROR
    Description: The file specified in a CLOSE, CMD, PRINT#, INPUT#, or GET#, must first be OPENed.

    Example:
    PRINT#0

  • FILE OPEN ERROR
    Description: An attempt was made to open a file using the number of an already open file.

    Example:
    OPEN 1
    OPEN 1

  • FORMULA TOO COMPLEX ERROR
    Description: The string expression being evaluated should be split into at least two parts for the system to work with, or a formula has too many parentheses.

    Example:
    ?(“”+(“”+(“”+(“”))))

    or
    ?POS(“”)POS(“”)POS(“”)

  • ILLEGAL DEVICE NUMBER ERROR
    Description: Attempting to LOAD from a device between 0 and 255 that doesn’t support LOADing, such as devices: 0, 2, and 3. Attempted LOADing from a device outside of the range will trigger an ILLEGAL QUANTITY range.

    Example:
    LOAD”FILE”,0

    Notes: Not included in the C64 User’s Guide or PRG.

  • ILLEGAL DIRECT ERROR
    Description: The INPUT statement can only be used within a program, and not in direct mode.

    Example:
    INPUT A$

  • ILLEGAL QUANTITY ERROR
    Description: A number used as the argument of a function or statement is out of the allowable range.

    Example:
    POKE -1,0
    or
    POKE 0,256

  • LOAD ERROR
    Description: There is a problem with the program on tape.

    Example of generating a LOAD ERROR:
    10 ?CHR$(205.5+RND(1));:GOTO10
    SAVE”10 PRINT”
    rewind the tape
    LOAD
    When the file is found, hit run/stop
    SAVE”BREAK IT”
    rewind the tape
    LOAD

  • MISSING FILE NAME ERROR
    Description: A non-null filename string must be included in disk operations.

    Example:
    LOAD””,8

    Notes: Missing from both the C64 User’s Guide and PRG.

  • NEXT WITHOUT FOR ERROR
    Description: This is caused by either incorrectly nesting loops or having a variable name in a NEXT statement that doesn’t correspond with one in a FOR statement.

    Example:
    NEXT
    Or in a program:
    10 FOR X = 1 TO 10:NEXT
    20 NEXT
    RUN

  • NOT INPUT FILE ERROR
    Description: An attempt was made to INPUT or GET data from a file which was specified to be for output only.

    Example:
    OPEN 0

  • NOT OUTPUT FILE ERROR
    Description: An attempt was mode to PRINT data to a file which was specified as input only.

    Example:
    OPEN 1,1,0
    PRINT#1

  • OUT OF DATA ERROR
    Description: A READ statement was executed but there is no data left unREAD in a DATA statement.

    Example:
    Hit return on READY.
    Or
    10 READ A : READ B
    20 DATA 1
    RUN

  • OUT OF MEMORY ERROR
    Description: There is no more RAM available for program or variables. This may also occur when too many FOR loops have been nested, or when there are too many GOSUBs in effect.

    Example:
    0 GOSUB 0
    RUN

  • OVERFLOW ERROR
    Description: The result of a computation is larger than the largest number allowed, which is 1.70141884E+38.

    Example:
    PRINT 2^127

  • REDIM’D ARRAY ERROR
    Description: An array may only be DIMensioned once. If an array variable is used before that array is DIM’D, an automatic DIM operation is performed on that array setting the number of elements to ten, and any subsequent DIMs will cause this error.

    Example:
    DIM A(5):DIM A(6)

  • REDO FROM START
    Description: Character data was typed in during an INPUT statement when numeric data was expected. Just re-type the entry so that it is correct, and the program will continue by itself.

    Example:
    10 INPUT A
    RUN
    HI

  • Notes: Like EXTRA IGNORED, this error doesn’t actually print the word “ERROR”, and doesn’t stop program execution. It’s an error (or warning) directed at the user to correct their input.

  • RETURN WITHOUT GOSUB ERROR
    Description: A RETURN statement was encountered, and no GOSUB command has been issued.

    Example:
    10 RETURN

  • STRING TOO LONG ERROR
    Description: A string can contain up to 255 characters.

    Example:
    10 A$=A$+”X”:GOTO 10

  • SYNTAX ERROR
    Description: A statement is unrecognizable by the Commodore 64. A missing or extra parenthesis, misspelled keywords, etc.
    in the manual it specifies ?SYNTAX ERROR with the question mark and error (but not the double space in front of error) but it doesn’t include those for the other errors

    Example:
    FOUR OVER TWICE

  • TOO MANY FILES ERROR
    Description: Attempting to open more than 10 files at once.

    Example:
    10 FOR X=1 TO 11
    20 OPEN X,8
    30 ?”OPENED FILE:”;X
    40 NEXT
    RUN

    Notes: Missing from C64 User’s Guide and PRG.

  • TYPE MISMATCH ERROR
    Description: This error occurs when a number is used in place of a string, or vice-versa.

    Example:
    A$=-1
    Or
    A=”HI”

  • UNDEF’D FUNCTION ERROR
    Description: A user defined function was referenced, but it has never been defined using the DEF FN statement.

    Example:
    ?FN X(0)

  • UNDEF’D STATEMENT ERROR
    Description: An attempt was made to GOTO or GOSUB or RUN a line number that doesn’t exist.

    Example:
    RUN 10
    or
    GOTO 0

  • VERIFY ERROR
    Description: The program on tape or disk does not match the program currently in memory.

    Example:
    10 PRINT ”C64 RULES”
    RUN
    SAVE”TEST1”,8
    VERIFY”TEST1”,8

    Modify program to:
    10 PRINT ”C64 RULEZ”
    VERIFY”TEST1”,8

2-Player Karateka for Commodore 64

August 22nd, 2018

Day22b

I heard about Charles Mangin’s hack to make the Apple II version of Karateka a 2-player game and I wondered if I could do the same thing with the Commodore 64 version.

The C64 version of Karateka has notorious levels of copy protection. In fact, I remember trying to run a pirated copy of it on my new 1541 disk drive in late 1984, and it left my drive inoperable for a couple horrific hours as I tried to figure out what went wrong and fix it. I think the copy protection forced the drive head to the extreme end of the guide rails, and it got stuck there. Eventually I freed it. It had been one of the worst days of my 12-year-old life.

To perform the hack on, I went to the best available crack of the game. As is often the case, it’s by the legendary Jack Alien/Remember: Remember’s crack of Karateka

The patch notes from Charles were useful as I tracked down the location of the code in the C64 version. The port is closely tied to the Apple II code, and much of the game logic is identical, though at times the code is offset by 16 bytes in memory.

The code to read the Apple II keyboard was adapted to instead read the port 1 joystick on the C64. Port 2 controls the regular player as usual. Pushing up on the port 1 joystick now causes the enemy fighter to punch, pushing down, to kick. The AI still controls the height of the punches and kicks, as with the Apple II hack. It’d be interesting to dig deeper and allow the enemy player full control over the attacks, like the regular player has.

Joystick left causes the enemy fighter to advance to the left. I wasn’t happy with the Apple II omission of allowing retreat to the right, so I disassembled more of the game until I found a solution. The routine at $6C62 causes the enemy to advance. It starts with a LDA #$01. If that routine is called at $6C64 with the accumulator loaded with #$FF, then the enemy steps back.

These are the 4 patches I made to the game:
>6c21 ad 01 dc 29 01 c9 01 f0 15 a9 d7 ea (push up to punch)
>6c30 ad 01 dc 29 02 c9 02 f0 06 a9 c5 ea (down to kick)
>6bab ad 01 dc 29 0c c9 0c f0 04 4c 00 c0 ea (left/right to walk, part 1)
>c000 c9 08 d0 03 4c 62 6c c9 04 d0 05 a9 ff 4c 64 6c 4c b8 6b (left/right to walk, part 2)

Once the patches were working when applied live to the game, I needed to unpack the Remember release, removing the intros, instructions, and trainers. This is a somewhat tedious process made a lot easier by the monitor in the VICE emulator. Set a break point, and once the break occurs, disassemble code and determine the next break point, repeat. It involves some trial and error, mostly looking for JMPs that end a section of code. Once these layers were removed, I could then apply the patches, and save the binary. Then I packed it with Exomizer and arranged the disk image.

Here’s the final product: Download 2-Player Karateka for C64

Bedford Level Experiment – the band

August 12th, 2016

Welcome, patient reader, to an update at long last. I want to tell you about my latest band, called Bedford Level Experiment. We’re launching our website today! Visit us at: http://bedfordlevelexperiment.com/

Our music is almost all about geeky subjects dear to my heart, such as Commodore 64, Atari 2600, other old computers and video games, and perhaps strangely, Shakespeare. Our sound varies within the rock family – sometimes folk-rock, indie, post-punk, or shoegaze. My daughter Rianna plays drums and keys on the recordings, while I handle most of the writing, engineering, and guitars and bass.

When we play live, I enlist the help of my old friends Richard (bass) and Darren (drums) who are in some of my other not-entirely-dead bands, such as The Transparencies, and North and the Sea.

BLE is a thematic continuation from the handful of Commodore 64-related songs I wrote back in 1999 when Darren and I recorded “My 64” which was released by PSW. In fact, I had written geek song even before that; “Love Is A Scalar (A Geek’s Love Song)” was written in my highschool physics class in 1990, and I even wrote a song about Pac-Man around 1982, which was recorded on tape by my grandmother.

We’re going to be releasing our first album on September 12th, 2016, debuting at Vintage Computer Festival Midwest. It’s called “Place Without A Computer” and it chronicles my geek origin story – being a budding computer nerd without a computer at home, and the ways I coped until I finally got my very own computer.

For more info, please visit our website and sign up for our mailing list: Bedford Level Experiment

Thanks for reading,
Robin

Errors in “10 PRINT CHR$(205.5+RND(1)); : GOTO 10”

April 5th, 2014

I should start this by saying I love the book 10 PRINT; reading it was a great way to start 2014 and inspired some creativity in me that you can read about here.

It was written by ten or so people, a smart bunch it seems. So I was really surprised when I was reading the chapter about the Commodore 64, page 229 in particular, to find several errors. I was even more surprised to find no one discussing these errors online, and the errors remain in the .pdf version available on their website as of this writing. I tried to contact a couple of the authors (Ian Bogost in particular, because I’m a fan and I found him on Twitter easily) but didn’t catch his attention. I realize he’s a busy guy. So I’ll blog about it, in the hopes it’ll be corrected before the paperback version is released.

Error 1: “1,000 characters do fill the entire screen—in what might be considered an illusory consummation of the maze—before the text scrolls upward, leaving two more twenty-five-character rows to fill.”

This should, of course, be “two more forty-character rows to fill”. The Commodore 64 screen is 40 characters wide, and 25 characters tall; 1000 characters in total. When the screen scrolls upward, the bottom two rows are left empty, requiring 80 new characters of maze to be filled in.

Error 2: “While the code for 10 PRINT specifies one of two characters to display on the screen, it says nothing about where on the screen the chosen character should appear. That placement is defined by the VIC-II chip.”

This statement is sufficiently vague that perhaps it’s not in error, but to be clear: the VIC-II chip has no control over where a PRINTed character will appear on the screen in 10 PRINT; it simply provides the 40×25 character screen that BASIC accesses through the PRINT command, which in turn uses the C-64’s KERNAL operating system. Zero page locations $D6 (line number) and $D3 (column number) are used by the KERNAL to calculate where the character will be plotted in memory.

Error 3: “The large border that surrounds the maze is not addressable by the VIC-II; the thirty-two pixel borders on the left and right and thirty-five pixel borders on the top and bottom were created in consideration of the wide variation within cathode ray tube televisions of the era.”

I’m guessing that these numbers were obtained from an emulator screenshot, but they don’t at all represent what the VIC-II does. Depending on the version of the VIC-II, there are between 403 and 411 pixels visible per scanline (as per the famous VIC-II document); subtracting the 320 pixels of the 40 column screen, we’re left with between 83 and 91 border pixels viewable, if your monitor/TV will show them. I don’t know how they’re split between the left and right sides, but as an odd number, it probably isn’t evenly! The top/bottom values are also incorrect; the VIC-II (again, depending on version) produces between 234 and 284 visible scanlines per frame; subtracting the 200 pixels of the 25 row screen leaves between 34 and 84 potentially viewable pixels worth of border.

Error 4: “Running 10 PRINT in a software emulator, of course, eliminates the need for such a border, though the Commodore 64’s KERNAL nevertheless draws it.”

The KERNAL has no part in drawing the border; this is solely an automatic function of the VIC-II chip. Interestingly, through precise and active manipulation of the VIC-II’s registers, the borders can be prevented from appearing, revealing sprites placed behind that area. This has been used in games to display information (such as scores) in otherwise unusable display space.

Error 5: “In addition to wrapping text automatically, the VIC-II also automatically scrolls the contents of the screen when the cursor is on the bottom row and attempts to move down.”

The VIC-II plays no role in scrolling the contents of the screen in _10 PRINT_. That is done by the BASIC and KERNAL software.

I welcome any corrections to my corrections!

10 PRINT CHR$(205.5+RND(1)); : GOTO 10

March 25th, 2014

“10 PRINT CHR$(205.5+RND(1)); : GOTO 10” is a BASIC program that will run on all Commodore 8-bit computers including, most famously, the Commodore 64.

It’s also the title of a book released in 2012 that can be purchased in hard copy, or downloaded for free from the official website: 10print.org

I got a copy of the book for Christmas 2013, and thoroughly enjoyed reading it. It’s a terribly close reading of the titular one-line program; that program, when run on the C-64, creates an infinitely scrolling maze pattern. The output seems too involved and interesting to be the product of such a tiny, cryptic program. The book discusses every facet of the program and connecting fields of study, such as mazes and randomness. I found the section on computational randomness in the arts especially inspirational.

So inspirational, that when my online song-writing group decided to collectively write a concept album based upon Shakespeare’s Sonnet 64, and I ended up with line 10, “Or state itself confounded to decay”, I used an old Amiga program called NIALL to generate the lyrics for the song. I dumped Sonnet 64 and some Wikipedia commentary into NIALL, and then NIALL used its simple Markov-chain-like procedure to generate new sentences based on the input I gave it. I edited the output a bit, to make it somewhat more lyrical.

We had an additional constraint in the song-writing process: we had to use the common ii-V-I chord progression for at least some of the song. I spent a couple short sessions working on the music, doing my best to write a more interesting melody than most of songs to date. My eldest daughter and I then recorded the song in my basement home studio, using a slightly modified preset on my Zoom MS-50G pedal (a wah filter driven by a step sequencer) as the main bed track that we built the song on. After several poor attempts at singing the vocals myself, my daughter took over the lead vocal, and did a great job. We added some gradually increasing distortion to the vocals to add to the decay or corruption theme of our key lyric.

The video footage was all filmed with my iPod 5g, recording the 1702 monitor hooked up to my Commodore 64, running a couple 6502 programs I wrote specifically for this purpose. One is a 6502 port of _10 PRINT_ with the addition of smooth scrolling. I wanted the visuals to seem like an infinite maze world passing by under the viewer.

The other program increments every character on the screen, so an ‘A’ will become a ‘B’, and so on. It does so in a pattern determined by a 10-bit LFSR that I wrote in BASIC for this forum 7 years ago, and ported to 6502 for this purpose; it allows the screen to be changed in a seemingly random order, but still guarantees that all 1000 locations on the screen will be changed in linear time. I added a delay loop whose length is controlled by a paddle controller, so I could make the effect run faster or slower while it was running. I also created a “corrupted” version of the same program that would periodically skip incrementing locations, to cause the effect to run less uniformly.

I’m still skimming over many details, but that’s probably sufficiently detailed to satisfy the curiosity of the one person who was interested. So, here’s the video:

In a future blog post, I want to talk about _10 PRINT_ more. Specifically, despite the book’s awesomeness, page 229 has, by my count, five errors. I’ve been looking for any discussion of this online, but surprisingly, have come up with nothing so far, and my feeble attempts to contact some of the book’s authors haven’t got anywhere. So, I should blog about it.

Another year, another post…

October 8th, 2013

I see another year has gone by since I last blogged. What have I done this past year? Let’s see…

My company P1XL Games released another iOS game, called 4NR. It’s a platform game with a classic Game Boy style, with some puzzle/discovery mechanics. I’m pretty proud of it.

One of my bands, Ziklag Offramp, released an album which can be streamed free or purchased (download or real CD) here: ZiklagOfframp.bandcamp.com. We started recording it in early 2012, and we finally wrapped up the whole project and released it in April 2013. I mixed 8 of the 11 tracks, and learned a lot through the process. I co-wrote three of the songs (with my friend Tim Lappala), sang vocals on those three, and played bass on the whole thing. My daughter Rianna plays keyboards on a few tracks too.

I started another band with my daughter, called Bedford Level Experiment. It’s kind of geeky folk rock. Rianna plays drums and keyboards, and I play guitars, bass, and sing. We released a number of songs on Youtube over the last year: Bullet the Blue Sky (U2 Cover), October Breeze (original), Old Man (Neil Young cover), And Your Bird Can Sing (Beatles cover), There’s a World (Neil Young cover), and Barfight With Myself (original).

We also worked with Debs & Errol on a Commodore 64-related song for their soon-to-be-released EP. I’ll blog about that once it’s released.

Work continues on RPG Quest – Minimae II, and we hope it’ll be done by US Thanksgiving this year.

I did a port of Minima Reloaded to the Commodore PET 4032 computer, unofficially called “PETima” and showed it off at the Chicago Commodore computer show, ECCC. I also made a quick utility to load images into a real Commodore REU: REU Image Loader. It’s especially useful for playing otherwise-unplayable Infocom games on the C64 with the very-cool Zeugma.

My side-project game label ROM12 once again took first place in the 2013 Christian Speedgame Competition, with our game SG13.

I always feel disappointed that I don’t get nearly as much finished as I’d like to, but when I sum it all up a year at a time, it doesn’t seem SO bad.

Virtual Move and catching up again

October 10th, 2012

I spent quite a bit of time the last two weeks consolidating my various websites and email servers together so I’ve got a single host and more importantly, a single hosting bill! It was fairly fun to do a bit of database and web work, so I don’t get too rusty at it. And doing that work reminded me I have this blog!

What have I done since early 2011? Not as much as I’d like, but still:

We released P1XL Party and a few updates for it: http://itunes.apple.com/app/p1xl-party-retro-minigames!/id444404696

Helped out on a game for metalcore band Oh, Sleeper: Stand Your Ground: http://itunes.apple.com/app/oh-sleeper-stand-your-ground/id501239707

More updates on Pocket God: Journey To Uranus: http://itunes.apple.com/app/pocket-god-journey-to-uranus/id404405151

Took first place in the 2011 and 2012 Christian game dev compos with my side-project team ROM12 with our games 4NR: http://talk.christiandevs.com/viewtopic.php?f=38&t=3393 and Vanguard: http://blog.christiandevs.com/?p=313

Did a lot of work on Pocket God: The Runs but it’s still not released: http://www.gamezebo.com/games/pocket-god-runs/preview

Also not-quite-finished are RPG Quest: Minimae II, Super Splatform, more P1XL Party updates.

Oh, and I’m a father yet again. His name is Silas! 🙂

Catching up

January 16th, 2011

Wow – over two years since I’ve blogged! I tried to update last year, but in mid-2010 my blog suddenly broke: only the header and title of my entries would appear, all the body was just blank. So, I finally backed up the blog’s database, upgraded to the latest WordPress, jumped through a few hoops, and it’s back. Wasn’t as painful as I feared.

I’ll attempt to quickly sum up the last couple years of game dev. So, as I mentioned at the end of 2008 I bought a Mac mini and iPod touch and started learning how to program it. By early 2009 my last Nintendo DS game programming contract came to an end, and apart from one short NDS game prototype project I did for 8 weeks, I’ve found no more NDS work. So, I got into iPhone dev at just the right time, it seems.

Sam Washburn and I formed P1XL Games later in 2009, and together built a simple RPG engine for iOS. We adapted my Minigame Competition 2003-winning Commodore 64 game Minima Reloaded to the engine, spruced it up quite a bit with some NES looks and sounds, and released it in November 2009 on iTunes. You can check it out here: RPG Quest – Minimæ.

We then started porting my other successful minigame, Splatform. We still haven’t released it as we want to improve on it more, but it *really* should be coming out early in 2011. We had a couple other false starts on games, and in hindsight, a lack of direction.

By mid-2010 we still didn’t have a second game done, money was getting a bit tight – so we looked for some contract work, and through a friend, ended up helping Bolt Creative out with their first iPad game, Pocket God: Journey to Uranus. Classy name, classy game! It’s been a lot of fun to work on, especially because we were able to make “tribute” minigames to Joust and Tempest in it.

Meanwhile, we’re starting to really move on RPG Quest – Minimæ 2.

I had hoped I’d be releasing games at a faster rate by now, but still seem to be averaging just one a year. Here’s hoping 2011 will be more productive!

Happy New Year

December 31st, 2008

Well, that was a terribly long absence.

Back in March I couldn’t keep up with my Game of Life due to working two jobs at once, and that got me out of my blogging habit too.

But I think I’ll at least catch you all up on the major happenings this year, and then maybe I’ll start a new Game of Life shortly (possibly with less rigid rules).

So, most importantly, kid #6 arrived way back on July 12th, 2008. We named her Stella Joy, and she’s a lot of fun. She gets so intensely happy sometimes that her smile spreads right through her body, causing her to twist up in pretty weird ways. It always makes us laugh 🙂

I’ve taken leave from that telephone job since her birth and just continued to do video game programming from home since. So it’s been a great (almost) 6 months of being home. I’m working a lot, but I’m able to take breaks whenever needed to help with the kids or whatever.

The Nintendo DS game I started working on back in February was finished in late August and released in stores in November. It was a great learning experience once again… very challenging at times almost to the point of “I don’t think I can do this” but I got through. I finally did some 3d game code, and was most proud of fixing a bug in the game engine. The engine programmers didn’t have time or motivation to fix it, so they gave me a workaround that I thought was just too poor. So I took a weekend and really dug in and fixed the bug myself. Just a couple days before the game was finished, this same bug was discovered in a different part of the game that I wasn’t responsible for. I was able to give the fix to the lead programmer and in minutes it was working 100%.

I’m working on yet another Nintendo DS game now, and there’s talk of more work after this, so we’ll have to see what the new year holds. I’m due to head back to the telephone job in early April, so I’ll have to see how things fit together.

I did a lot of travelling this year. Carla and I went to two homeschool conferences: one in April and one in May. The one in Hamilton meant we took our first flight together – ever, in 12 years of marriage! I really enjoyed both conferences, but was shocked how the Minnesota conference (held in Duluth this year) was so much bigger than the one for all of Ontario. I really enjoyed the vendor areas for both. I always find books and other educational materials interesting, but at these conferences the actual people who produce the materials are present and very willing to talk. Fun!

It was especially cool to meet Steve Demme, the guy who made Math-U-See which is the math curriculum we use with our kids. We had a good talk, and over lunch I showed him the prototype of a MUS game I’ve been working on, and he seemed quite interested. However, I haven’t followed up with him on that… I really should!

I also made it out to the same 3 geek conferences again this year: Milwaukee’s Midwest Gaming Classic in March, Chicago’s ECCC in October, and Toronto’s World of Commodore in December. I made out especially well in Chicago, getting loads of boxed games for a song. And there was the usual great food and conversation with friends.

There was also Ron and Mary Ellen’s long-awaited wedding in October in Scotland. I had a great time on the way, visiting my friend Brian in Oxford, visiting many C.S. Lewis sites, and then took the train up to Edinburgh for the wedding, and a neat trip to Stirling Castle. It was great spending time with the whole wedding party. I’ve got a bunch of pictures to share from the trip, and it deserves its own post later.

More recently I bought myself a Mac mini and an iPod touch and have set about learning to program it. I’m getting somewhere with it now, and am prototyping my first game for it now. I hope to finish a couple games for it in the new year.