Pages

Sunday, January 3, 2021

Lynn's Legacy

 I'm happy to announce that a project that has been very close to my heart, namely porting FreeBASIC cult classic "Lynn's Legacy" has been completed. You can download and play the game for free from its itch.io page: https://gradualgames.itch.io/lynns-legacy










Way back in 2007 when I had recently graduated college, I was looking for ways to resuscitate my passion for game development. All of my peers told me I should make games for the XBox 360 with XNA, but I didn't listen. I wanted to get the feelings back that I got when I was a teenager making games on DOS in QBasic and x86 assembly language. I eventually discovered that people were making games in 6502 assembly language for the NES, and that became an 11 year saga where I released three NES games: Nomolos, The Legends of Owlia, and Trophy. But prior to that I had found that there was a modern, open source BASIC compiler called FreeBASIC, which featured compatibility with QBasic. I soon discovered one of the most impressive projects that had been created with the language was Lynn's Legacy. I instantly fell in love with the game because it had an ineffable, dark atmosphere that I'd never felt from any other game. It also had excellent music and a compelling story. I started tinkering with making my own game in FreeBASIC, namely The Legends of Owlia, years before it would come to fruition instead on the NES. But while I embarked on the NES journey I'd go back to Lynn's Legacy every once in a while to play it.

Then, something happened. Lynn's Legacy could no longer play full screen with crisp retro graphics on windows machines (somewhere around 2013). I knew that the original creators cha0s and Josiah Tobin had released the source code, and I thought to myself: Maybe I can get it to compile again and fix it up so it works again! I tinkered again with FreeBASIC, and could not figure out how to make SCREEN 13 work like the old days. It would only come up in a tiny window, and when you try to make it full screen it was blurry. I attempted to compile the original FreeBASIC source code, but the compiler had changed so much there were dozens of compiler errors. No matter how long I spend at my career and hobby as a programmer, I have never gotten comfortable with C-like languages---I can only seem to be comfortable working with pure assembly, or the other extreme, super high level languages like Java, Python or Lua. So I failed to figure out how to compile the game. So instead I began musing about how I might actually PORT the game's source code to another platform. C/SDL? Python/PyGame? Maybe even to the SNES since I had done some development for the NES (couldn't be that hard, right?).

I made a start on a C/SDL port back in 2013, I still have the devlog from that attempt. I didn't get further than simply drawing a sprite on a canvas though, because like I said, I really seem to have trouble when I work with C/C++ type languages. Lack of patience? I'm not really sure what it is. I think I have PTSD from college where I realized that programming is not fun like QBasic anymore, you have to be a grown up and deal with really hard problems. But I really wanted to be able to just type simple code, hit F5, and have it WORK, dammit! LOL. But anyway I shelved that port attempt for a few years while continuing to work on my last two large NES projects.

Then, I got into PICO-8 in 2016 or so. This fantasy console was a dream come true, and brought back the nostalgia and joy of QBasic for me probably even greater than it was when I was a teenager. Complete with the nostalgia of a DOS-like prompt, CLS, PRINT, IF THEN ELSE, POKE/PEEK, very easy full screen retro graphics, and then it even had aspects that were like NES, such as 4 channel 8 bit audio, and it had a BUILT IN TRACKER! Similar to FamiTracker only simpler. I was instantly in love with it and still am to this day, it is easily my favorite platform to develop for.

BUT! After a few years I became aware of the Love2D game framework. It seems to occupy the same universe as PICO-8 because it is also based on the Lua programming language, but it is general-purpose without console-like constraints---it is intended only to abstract away OpenGL so that programmers can have an easy time creating 2D games of a lower complexity threshold.

So again the possibility of porting Lynn's Legacy arose in my mind. What if Love2D would be a good framework for porting Lynn's Legacy? So finally in early 2019, I decided to explore the possibility. After much striving and research, I figured out how to simulate a full screen 320x200 graphics mode like SCREEN 13 that featured a 256 color palette, using a fragment shader. See, that wasn't so hard, was it FreeBASIC maintainers??? Haha! From there, I proceeded to reverse engineer Lynn's Legacy's palette, sprite and map formats. Well not entirely because I had the original FreeBASIC source code to read, and I had experience from QBasic so I was familiar with the palette and sprite binary formats, experience which really helped in getting this port off the ground.

But then the project experienced another setback---my wife (who had done the art for all three NES projects) left, and sent my life into chaos and uncertainty. So I put the project on the shelf and thought I would never finish it, as I picked up the pieces of my life and tried to start over in a new city. I had been working from home for 5 years, and I thought it would be great to start over in Tampa FL where my sister lives. I got a job in an office there, and started making new friends. Then March, 2020 rolled around. BAM, a worldwide pandemic, Covid-19 hits and made my new job work from home again, and prevented me from seeing my new friends or jamming with my band. I was again isolated, but now more than ever.

Lynn's Legacy came up in my mind AGAIN. Maybe I could really do it this time. It's starting to make me think the Dimension Seed itself projected itself into our reality and REALLY wanted to be re-assembled, and I was the chosen one to do it. So I tried again to compile the original source code in a modern 64 bit version of FreeBASIC, because I thought surely this would be a saner approach than fully porting the game. But again, I failed. I just can't seem to bring myself to do the research necessary to understand compiler errors from C like languages. I just don't find it fun, I guess, so AGAIN, I gave up on that possibility, and then I dusted off the Love2D port I started in 2019. And then I really started digging in. What I started in 2019 got as far as displaying a scrollable map, so I started digging in to the XML format and loading objects. It wasn't long until I really felt like the project had truly taken off, and that I would indeed finish it. I worked on it faithfully every single weekend since then, and now it is complete: Lynn's Legacy has been fully ported from FreeBASIC to Love2D, and can now be enjoyed hopefully for years to come.

It's one of the most satisfying journeys of my game development hobby, and I am very happy to have preserved a cult-classic game for anyone who finds it. It deserves to be known more as it is a hidden gem. So please download it from https://gradualgames.itch.io/lynns-legacy and let me know if you agree!

I'm not really sure what I'm going to do with myself now that I'm on the other side of that quest, and the other side of 3 enormous NES projects, and even the other side of my 11 year marriage. Probably more PICO-8 projects! I have over 100 ideas of things to do with that platform!