It’s 1983, yours truly is born, Return of the Jedi hits theatres, Pioneer 10 becomes the 1st man-made object to leave the solar system, IBM releases PC DOS 2.0, and the Gariott brothers start Origin Systems, Inc. (OSI). Just over a decade later Origin creates the world of BioForge, and captures the imagination of my young mind. This is the story of my obsession to understand the code of BioForge.
Space, Cyborgs, Robots, Aliens, Puzzles, and future Technology – BioForge has it all. BioForge is an Action-Adventure game centering on exploration and puzzle solving using items, and also fighting and interaction with NPCs. The player takes on the role of a cyborg (Experimental Unit AP-127) who awakens in a cell on an isolated moon with no prior memories. He must unravel the truth about himself, the research station, the bizarre Mondite cult that controls it, and the mysterious ancient alien race that once inhabited the moon. The in-depth plot, extensive voice acting, and immersive visuals combine for a memorable experience.
BioForge uses a software-only 3D engine to draw polygonal objects and characters against beautiful pre-rendered backdrops. Regarding the development of BioForge Ken Demarest (Producer, Director, Lead Programmer) said:
Every aspect of the BioForge was designed with technology in mind. You are on a lonely planet because we could not show more than two to three characters on screen at a time. Your body has been operated on because the fledgeling skeletal animation technology was too stiff to show smooth human animation.Ken Demarest
The bright coders behind BioForge also pioneered texture-mapped 3D character models with interchangeable skeletons, and real-time pose interpolation. This technique is now common-place in 3D video games. In my late teens I stumbled across a small project with the goal to figure out this system – coined S.A.L.S.A. (System for Animating Lifelike Synthetic Actors). I was intrigued and studied the system inside-out; improving and extending the work to allow me to import the BioForge characters into Maya.
My taste of the brilliant software engineering behind BioForge grew into an insatiable appetite. Circa 2000 I set out to reverse engineer all of the BioForge file formats. With hex editor in hand, lot’s of spare time and patience I was largely successful and shifted my attention to the audacious goal of remaking the BioForge engine to run natively cross-platform. It was at this point that life decided to get in the way, and over a decade later my code remains unreleased.
Update 21-Sep-2019: There has been some renewed interest in this project, so I’ve been using it as an excuse to play with .Net Core. I’m porting my original code to C# (from C++) and I plan to release everything on GitHub in time for the 25th anniversary of BioForge – March 29, 2020 – stay tuned! If you’re interested in the history of this project, check out one of my old blogs on the WayBack Machine – ‘Comportal‘.
Update 29-Mar-2020: BioForge is 25 years old today! I have not yet released my work on GitHub per my previous update, but I have re-kindled my passion for this project, and I’m making good progress again. In the meantime, check-out my presentation from NDC Sydney 2019 on YouTube. I have also been accepted to speak at NDC Oslo 2020 in June (now an online event due to COVID-19), please support by buying your tickets here.
Update 22-Jun-2021: My NDC Oslo 2020 talk about Reverse Engineering BioForge is now available on YouTube. This is an improved version of my NDC Sydney talk by the same name. Over the past couple of months I’ve been focused on game engine architecture, and refactoring to make further progress simpler. I’ve now also painstakingly documented most of the script API, and made further progress on the C# transpiler and API implementation.
Update 19-Jan-2022: Finished moving everything to an ECS architecture and cracked a few more pieces of the puzzle, incl. camera projections, and so levels are loading nicely now. My Roslyn-based script engine is solid so far, but still considering some possible thread contentions. On the audio front (which I had thought was finished long ago), I had ignored some minor clicks and pops in sfx playback thinking it was related to the way I was using FMOD, but I finally investigated and found that I had overlooked another 32 byte header in the PCM data (if you listen carefully to the intro movie at the end of my NDC talks on YouTube you might be able to hear the clicks and pops). Anyway, audio is now buttery smooth, and I’ve also switched to a nice free sound font (rather than gm.dls) which really enhances the music (note that FMOD only supports .dls not .sf2). Currently working on player movement and physics. Things still to go include collisions, waypoints, combat, and polishing the .scp to .cs transpiler.