• Little tells about you and Vancouver

    I’ve been a resident of Metro Vancouver for most of my life and a resident of the city for two years. There are little things that are super apparent about you that tell me that you’re not from around here or spend little time in the city itself.

    This is all tongue and cheek and should not be taken at all as serious.

    Transit

    You run for the train presently idling at the platform despite the fact that the trains run every two to five minutes.

    This means one or more of the following:

    • You rarely take transit despite living in the region
    • You’re on the Millennium Line and it’s off-peak, a weekend, or a holiday
    • You’re from out of town

    Even though you do not need to run, I still root for you making it for the train.

    Be sure to not run into someone as they get off the train. That isn’t necessary I can assure you.

    Also the train going away from downtown may not be going to Surrey if that is where you need to go.

    On top of that, don’t hold the doors. It’s a bad idea.

    Clothing

    This one is super tricky.

    One story I have is my then-girlfriend was visiting me from Texas and was woefully unaware of the our January climate. From October to March, you’re better off wearing waterproof shoes and best have a jacket and umbrella. In her case, she wore some chucks and had a jacket that was perfect for a rainy spring day but not one in winter where it is barely above freezing.

    It only snows maybe two or three days out of the year and most of the time the snow disappears by the end of the day and if not, the day after.

    However, her situation is just a funny story.

    It’s harder to spot this situation instead of seeing a random couple wandering down Burrard on a Wednesday summer afternoon wearing clothing you’d find best-suited in some gated community in Palm Springs. That ball cap for an American hotel chain that is well-weathered or even just something on your person donning has an American flag just makes quite apparent you’re a tourist.

    Wear what is comfortable! Just let it be known that we probably will figure out that you’re not from around here sometimes.

    Gastown

    Everyone loves to rag on this one, but here’s my take.

    If you’re taking photos of the steam clock at Water and Cambie, you are absolutely a tourist or at a minimum an Instagram influencer (or trying to be).

    If you’re the local that complains about it and you don’t live near there, just avoid walking along Water street near Cambie on a the weekend or any nice day in the summer.

    The clock is fine and if someone likes it despite being built in the late 1970s, that is totally okay too. If you cannot accept that, once again avoid Water and Cambie if you are able to.

    Closing

    I am sure I can come up with other things but these came to mind earlier today and I felt like dumping this post here.

  • I'm still angry about Professor Layton vs. Phoenix Wright

    Late last year, I tried playing the original Phoenix Wright: Ace Attorney trilogy for the first time ever. Within a week, I was hooked and was determined to play every single Ace Attorney game by the end of 2022.

    As of today, I have completed the original trilogy, Apollo Justice: Ace Attorney, Phoenix Wright: Ace Attorney - Dual Destinies, and the subject of this post, Professor Layton vs. Phoenix Wright. While, Dual Destinies is often lamented as the worst of the mainline games, it never left me as angry as the Layton/Wright did–hereby referred to as “PLvPW” moving forward.

    This post is going to contain spoilers so be warned. Also preemptive content warning around some matters relevant to the story. Also enjoy the typos and linear inconsistencies.

    This game should have been good

    PLvPW is an interesting game as we’re taking the mechanics of the Layton series with using puzzles to investigate mysteries and merging them with the defence and logic approach with defending the accused from the Ace Attorney games. The thing that makes this even more interesting is that the logic approach has a slight twist: we’re dealing with witch trials.

    Historically, witch trials were baseless in logic and instead rooted in everything from fear to economics. With the Salem witch trials in particular, 80% of the accused were women and many found themselves in the crosshairs of these trials due to petty disputes with neighbours or were behaving outside of the expectations of gender. Of those who were accused, 15% of them were imprisoned and around two-thirds of convicts found themselves executed with another 15% dying due to neglect.

    The stakes are high enough that introducing the Ace Attorney world to the concept of a witch trial should be a slam dunk. Out goes the frustrations of expecting to be punished for perjury and inadequate evidence handling and in comes the reasonable frustrations of being made to counter the beliefs around witches. It isn’t really outlandish to have this plot considering your legal assistant, Maya Fey is herself a spirit medium and can channel the dead–this is also a point of frustration of which I’ll address later on.

    With Layton, I’ll admit my ignorance: up until this point, I was familiar with the Tumblr memes about him and Luke, but overall I was out to lunch. However, he’s known for dealing with unusual mysteries and having learnt a little bit about the games since completing PLvPW, I feel that it works–sort of.

    So we have witch trials, puzzle solving, confusion how we ended up in this situation, and a need to completely rethink our use of logic in solving the case. This should be a slam dunk right? I’m afraid not.

    There is always something “wrong”

    As I streamed my progress through PLvPW, there was something always unusual with the scenery I was observing. The city (named “Labyrinthia”) is walled off, there are slight anachronisms about the clothes and mechanics of the world we’re in, and the references to the city’s past are extremely cloudy.

    We’re at least given the impression that time has passed because when Layton and Luke first meet Phoenix and Maya, they claim to have been bakers for the past five years and have no recollection of their past. And this is where I start to get really confused: if our AA dual are unaware of their pasts, why is it that our Layton counterparts are not too? Perhaps I missed this, but I felt like the reason why we were all here were due to one person.

    And that one person is: Espella. She claims that she left her father who is known as “the Storyteller” due to vague circumstances with his behaviour and in turn the entire town have many suspicions about her. Her only confidant aside from her cat, Eve is also her aunt who is claimed to be her sole ally in all of Labyrinthia.

    It has been supposedly years since Espella has found herself the subject of much ire by the city folk. This itself is weird because the Storyteller himself is apparently in control of the fate of every person residing within the city walls. And then it happens: Espella is accused of being the “Great Witch Bezella” because her father decreed in his most recent parade that this must occur.

    How did we end up here?

    I need to explain how we end up in this world because when I discuss the ending, you’ll understand where my discontent comes from.

    The game opens up with an epic car chase scene where these “witches” are flying through the sky, chasing a vehicle resembling a Morris Oxford–no wonder it didn’t end well. Statues are coming alive and the witches are flying around effortlessly as the man driving attempts to protect Espella.

    We’re then introduced to supportive characters from the Layton series who then segue to a scene introducing Professor Layton and his assistant, Luke. Coincidentally, they end up speaking about witch trials and the existence of witches, with Layton stating that they’re no more than mere fantasy as a thunderstorm rolls on.

    Parallel to all of this, we’re then taken to a scene showing Maya and Phoenix on a flight approaching into London. Phoenix is here as part of an exchange trip for the Legal League of Attorneys–which is a weird name consider “attorney” is an American word–to observe and participate in the British court system.

    We’re then taken back to Luke and Layton introduce the mechanics of puzzle solving, with its completion leading to Espella visiting their home. Through her accounts, we’re introduced to her protector (a detective) who she gives to Layton as instructed by him. At this point, he’s no longer important, but after a bit prelude, a witch breaks into Layton’s residence and Espella is kidnapped. Witches are real?

    And now we spend the next bit meeting some Layton characters we’ll never see again, solve a few puzzles, and finally with one remaining puzzle, we come to find Espella and meet the witches. We’re given the trope of “this is bigger than you think” from the lead witch and with a diversion, Espella escapes on to a freighter moving by on the Thames.

    Layton and Luke find this book that Espella had been running around with and upon reading the text, they find it starts to move and see themselves in it. They’re then thrusted in a forested scene and fade out. At which point, Espella finds herself party to a crime.

    So naturally this is somehow becomes Phoenix’s problem and we have defend Espella from the accusations laid upon her. Her guardian, Darklaw informs him and Maya that she doesn’t see the need to defend her and that we should let the whims of the court decide her fate. This is an affront to our trusty lawyer of course and we proceed to do what he does best anyway. All the while, Espella is very different from before. Aside from her attire resembling that of a school uniform, her eyes and voice appear lifeless as if she was under the control of something greater than her.

    The usual AA mechanics for how the court proceeds and flows exist here and upon victory, Espella is cleared and the real culprit is arrested. After being congratulated by Darklaw for a job well done, they depart but curiously the same book that Layton and Luke saw earlier was left behind.

    Maya insists on reading the book and just like before, the same moving text appears but this time the image we saw before is replaced with them instead. At this point, they’re teleported into the book and the book lands to the ground.

    Layton and Luke plus Maya and Phoenix have been sucked into another world.

    This was a good approach to an isekai

    The term “isekai” (異世界) means “other world” in Japanese and in my opinion, this is a good execution of the trope. A mysterious book and this blurring overlap between what seems to be our world and the realm of magic really do make for a good story. While I cannot comment on the Layton games, it’s at least to me plausible for Ace Attorney to have this situation because we’re constantly coming across Maya channeling her dead sister in the original trilogy.

    Things are extremely curious once we find ourselves in Labyrinthia. We’re made to solve puzzles as somehow the entire city is into them and then eventually introduced to the the Storyteller through a parade. He’s writing and copies of his writings are being thrown out to the towns people. However, a curious individual steps out to the front: it’s Darklaw, the woman Maya and Phoenix had met earlier in London.

    Why is she here? Is she the reason why we’re here? What is going on? What did that book actually do? Espella eventually rescues us because Layton opines against the writings of the divine texts of the Storyteller, raising the ire of the city folk and nearby guards. It is at this point she leads us to meeting her aunt and now we have Layton and Luke finally meeting Maya and Phoenix for the first time–except they’re both bakers.

    We’re then introduced to more of the lore through Labyrinthia’s archives, leading to additional backstory. After we leave, it’s time to defend Espella in a witch trial.

    The game goes to eleven out of ten as for the first time ever, we walk into a court room at the tail end of a prior trial, watching as someone convicted thrusted into a fire pit at full force–in all previous AA games, executions are implied but never shown.

    It’s time to go to court, except with a twist.

    The courtroom mechanics are awkwardly augmented

    Typically in an AA game, we have evidence, profiles, and choices in order to provide our defence. However, we learn quickly that this is all useless as evidence and logic has to battle against conjecture and irrationality. Phoenix suddenly learns through his suggestion we examine fingerprints that the concept of modern forensics is as alien to the people we’re battling as computers would be to pre-common era mathematicians. This is exciting and should be again a slam dunk, right?

    And it is at this point Layton introduces Phoenix to the book that brought us here in the first place: The Grand Grimoire. It’s a book which outlines the incantations witches can use alongside accompanying stones in order to cast magic. At no time can a witch other than Bezella make use of these words without the accompanying stone and to add to that, they are only able to have two of those stones on their staff at any given time.

    The book is cool but is also a problem. It’s pivotal to the story of this game but the way the overall story is paced and how we’re to argue our cases, the logic and reason Phoenix still ends up using collides with the book’s purpose. We have to use the evidence we have and this magic book, but as the game progresses, the importance of this magic book becomes less so.

    The importance of magic

    And that is where things just get weird. What is this magic? Why is it that the Great Witch Bezella is seemingly capable of using magic but the rest of the witches are limited to one of two stones and their staff? This becomes clear as the story inches a long when the anachronisms we noticed earlier appear more and more.

    As mentioned earlier, there are a lot of spoilers, but we eventually find ourselves having to defend Espella once again as she opts to lay claim to being the Great Witch despite the woman herself being a century old and she is merely 18. When she is found guilty, we’re treated a scene where Maya and Phoenix object and through some mishaps, Maya finds herself in the contraption, landing in the fire pit below.

    Espella has escaped and Maya is dead? Well, no. Eventually we go to investigate what is below and we discover that the fire pit itself is merely an illusion. The contraption that the witches are put inside is essentially an elevator which passes safely through the flames to a tunnel below. It is unlikely that anyone who goes through here is dead at all and we eventually are led to a chase scene where Layton rescues Maya.

    It was at this point I asked: is this something akin to Westworld, the Running Man, or better yet, The Truman Show? The latter of the three happens to be a favourite movie of mine as it centres around a single man unknowingly held captive to entertain the masses. He is kept with a confined space with artificial lighting and cameras in every single nook and cranny. The outcome of the movie is that he comes to discover the truth of the world he lives in is al a sham.

    My thoughts were not baseless considering that in every single past Ace Attorney game I played, there was always a reason behind the unusual circumstances of whatever story faced. Ockham’s Razor is the antithesis of the AA universe and I found myself convinced that there was something sort of rational about everything going on.

    There was no magic and I was also about to find out how on the nose my thoughts were.

    The unravelling of the world

    After meeting someone claiming to be the Great Witch with her unusual mansion built atop of ancient ruins, we find ourselves at the Great Witch Trial with Espella herself charged after she claimed to be the witch who killed her father earlier in the day. Phoenix once again has to defend her in court, but now faces Darklaw as the inquisitor (instead of prosecutor) for the trial as our previous foe, Barnham was accused of treason after the Storyteller’s death.

    Parallel to this trial, Layton once and for all decides to visit the residence of the Storyteller himself. It is here that we come to discover a curious photograph.

    And yeah. A photograph. This is a society that seems to straddle the line between medieval and renaissance and yet in his hand he’s holding a full colour print showing a young Espella holding hands with someone who resembles Darklaw, the woman presently tasked with convicting her of being a witch.

    This world is not at all an isekai; it’s still made up however. After a battle with the Storyteller himself (oh what a surprise that he is not dead either), he relents after Layton points out what is happening and opts to accompany him and Luke to the trial.

    Layton finally shows up just when Darklaw herself has been formally accused by Wright as the Great Witch. There’s no inquisitor to convict her so the Professor volunteers him and finally we get where the “versus” in the game’s title comes from. We get something akin to Edgeworth and Wright from game two’s final case where it’s now Layton in Miles’ role.

    The truth is finally revealed: there was no Great Witch Bezella. It turns out that every year the Labyrithians would have a giant pyre in the square. During that time, it was revealed that a much younger Espella and Darklaw (who is revealed to be named “Eve”) were hanging out atop of the local bell tower. They decided to ring the bell against the wishes of their respective fathers (their fathers were friends and business partners), leading to a great catastrophe.

    And why was the bell forbidden to be wrung? Because the whole concept of Labyrinthia was a research facility on some island, largely funded by the British government. Everyone had been contractually living on the island in a mind-altering drug programme which had been going on for over a decade. The sheer legal nonsense around this had me recalling my readings about the troubles with the Pitcairn Islands (content warning: sexual assault).

    The ringing of the bell caused a side-effect due to the frequency emitted, causing everyone who was drugged to collapse and fall unconscious. This coinciding with the pyre led to the entire town being engulfed in flames and because of Espella’s father using a made up story to prevent her from messing with the bell in the first place, when she looked at the fire through the grates of the fence, she was led to believe that she herself was seeing the Great Witch and thought that it was all her fault.

    Espella was so traumatized that her involvement in difficult situations (such as being in court) would lead to her mentally shutting down. Her trauma combined with herself being subject to the drugs led to believing that she was the great witch. Because of Eve’s involvement in all of this, she had to take on a special role in effectively playing a central role in building a whole world where nobody suffered in a great fire because she only dreamt it. It was all because her father couldn’t tell her the truth and instead of therapy, he’d just drug her and make a fucked up reality world for her to live in.

    So how did this whole charade persist? Easy. Nobody had any recollection of their lives prior to being placed in this facility. The drugs were part of the water they drank so they constantly had a dose of whatever medication suppressed their past memories and additionally the writings on the paper were written with an ink which as it gassed out would convince someone of what was to happen. It was all brainwashing and it was claimed that everybody living on this island signed contracts that only Scientology could dream of legally enforcing.

    As a consequence of this, it led to Eve’s father (who’s also the Storyteller’s business partner) to commit suicide midway through the game’s story. We were never given details about Eve being his daughter as we’re given the impression that his adoptive daughter was his only kin, but it speaks volumes to the impact and horror this island has made.

    To make people “see” the magic, they were told that they could not see black. If you review all of the things you see in the game, there isn’t much of that. The writers decided to really lean into the idea of Vantablack paint, which at the time was rather controversial. Everything required to make things appear other worldly were merely painted in this paint and because people were convinced through this brainwashing medication that they couldn’t see anything painted with this colour, they would substitute it out of their sights.

    So with one magic word said to everyone involved, Layton says “taelende” and those subject to the drug’s effects would see that they were not living in a world of magic but something akin to movie magic instead.

    I was right.

    This was not my problem The reveal at the end was admittedly in line with a lot of things I have seen so far in Ace Attorney. The intensity of the story had me thinking back to some emotions I had when finishing off the final story of the original trilogy.

    But unlike that story which had me sobbing at the end, this one decided to make a hard left turn straight into a concrete wall, ruining everything it built up.

    Legal ramifications are a weird area for Ace Attorney games, but you are able to roll along with the outcomes because it usually makes sense. However, I brought up the story of Pitcairn because the legal nonsense around that island was an actual think the UK government faced and I cannot think of any way an island in the middle of the ocean could past muster with anybody marginally capable of performing a legal review.

    I cannot see how an island funded by the UK government with dubious contracts and outright brainwashing could go without any scrutiny in the House of Commons. MKUltra was highly controversial in the United States and it would equally be so in the UK–the parallels between this story and the real-life CIA one are rather staggering.

    You’d think that with Espella aware of her father’s unethical behaviour that she’d not be pining for a return to normalcy in the relationship, but she does and why wouldn’t she? Having been sheltered on a remote island for so long, I guess you probably wouldn’t have developed that level of critical thinking that her father is actually a huge problem.

    And of course, he reveals that he is dying! Of course he is! But then three sentences later, his research team has developed a new “wonder drug” and that he is going to take it after having surgery. Yep. No consequences. Happy family. Too bad about Eve’s dad, though.

    Closing I’ve wanted to complete this rant for a month now. Having learnt about the development of this game and how it led to the problems around Phoenix Wright: Ace Attorney - Dual Destinies (they were developed in parallel with PW’s creator, Shu Takumi on this game instead), I am still annoyed.

    One of the things about Layton games I’ve learnt is that the happy ending is always the one the writers go for. However, that is not really the case in Ace Attorney.

    After we finished game three of the original PW trilogy, we come to realise the impact the abuse one character faced at the hands of her mother will have lasting impacts as she becomes an adult. Espella herself was about the same age as Pearl when she started to be manipulated, but consequences be damned, we must be happy. I guess it’s obvious that Shu didn’t get his way on this outcome.

    This game had fantastic story, probably one of the best soundtracks of any Ace Attorney game I’ve played thus far, and mechanics and concepts that were rather refreshing, but because of this desire to make everything seem “okay” as we depart the island, I’m not left feeling anything like that at all.

    At least we got an Edgeworth cameo at the end.

  • Porting Doom to A/UX


    Ever since Doom was made open source, porting the game to run on anything with a display has been a hobby for programmers. From digital cameras to web browsers, the game has touched any computer capable of running the code.

    Last May, NCommander released a YouTube video documenting the perils of porting Doom to run on an IBM RS/6000-series computer from the early 2000s, which cost at least US$10,000 at the time of its launch and ran AIX, a UNIX operating system by the same manufacturer.

    I’ve never considered porting Doom before, but I was curious if my favourite abandoned UNIX variant had a port. With some very brief cursory searches on Google and GitHub, I was led to believe that this was unlikely or if it had been done, it was never publicly announced a port or it has been lost to the sands of time.

    If it is the case nobody has bothered, there is a good reason: it isn’t exactly necessary. Once I explain A/UX, it’ll make sense why I am likely the first person ever to port the game to this platform.

    What is A/UX?

    Prior to Mac OS X (now macOS), Apple did have another operating system built on the foundations of UNIX. A/UX was Apple’s UNIX implementation and it is a true UNIX in that it ran AT&T System V under the hood, just like IBM AIX.

    Its purpose was to give Apple a foothold within the United States government’s computer contracts as it provided the ease of the Finder interface with the power of UNIX, which was the backbone of many projects.

    And all of this sounds weird already I am sure you are thinking; it is. A/UX is UNIX but it runs the Macintosh System software as its own thread. This meant that your copy of Microsoft Office or Adobe Photoshop could run simultaneously with something like a COBOL application initially written in the 1970s on the same computer.

    Apple maintained the operating system from 1988 through to 1995, at which point it was abandoned as it was written solely for the Motorola 68000 series computer models — the company had moved on to PowerPC.

    Hardware requirements for the operating system were rather steep. Most entry-level machines could not run it (really the vast majority including all PowerBooks) and the base models of any qualifying computer were often not sufficient either. It wasn’t ever meant to be used by the general public.

    Other projects like MkLinux and Copland came along around its demise as well, but they too were abandoned when Next was bought by Apple and subsequent development on Rhapsody led to the release of Mac OS X, ending the use of the legacy operating system Apple was formerly chained to.

    Interestingly, both Mac OS X and A/UX share one thing in common: the ability to execute classic Mac applications atop of a multithreaded operating system. Macintosh System didn’t have any true multitasking and was a rather inferior operating system in contrast, but these two operating systems got around that problem in a rather effective manner.

    Preparing to port Doom

    I have had a Quadra 800 with 64 MB of RAM sitting in my closet for a long time. I’ve streamed it a few times and have it to thank for a speedrun that failed due to a softlock (Mario’s Time Machine Deluxe, which I hold the solo world record for on the Windows release), but it has never really been used to its full potential.

    A/UX has been something I have always been curious about and I’ve maintained an SD card with an install of it for my Quadra for a few years — this is helped by my SCSI2SD. Having seen Doom ported to AIX with all of its challenges made me wonder about doing it myself.

    I myself am not very confident in my programming abilities despite my online username, but I figured I was capable enough so I went forward. My primary language is Python, but I had written C on embedded systems and figured my knowledge was enough to take a crack at this.

    The latest and final release of A/UX was version 3.1.1 in 1995. Doom was released a few years prior and was itself developed on NeXTSTEP, meaning that the code should with some work port over quite easily as it was meant to use X11 from the ground up — this is the windowing system the majority of UNIX operating systems used then.

    June 8, 2022 — Whoa. What a mistake I made with the last paragraph. NeXTSTEP used Display PostScript, which isn’t like X11 at all. I completely overlooked this fact considering OS X’s display mechanism. Anyway, I am leaving the above as is.

    A/UX has an X11 environment, but I wanted to use its full experience: the Finder environment it came with — you can switch between them easily at the login prompt.

    Login options from a computer running A/UX.

    You have a choice between a console emulator, a 24-bit or 32-bit Finder, or X11.

    In order to achieve this, this required the use of MacX, an X11 implementation also abandoned by Apple. This software permits the use of the system on any Mac seamlessly within the Finder — and it is not just limited to A/UX-running systems either, but that is a different topic all together.

    Same computer but loading MacX atop of A/UX.

    “High-performance” by 1997 standards.

    Having the base system ready, I also needed some other tools: namely the GNU GCC compiler and its various components.

    Fortunately, someone who worked at NASA had for almost a decade after A/UX’s demise maintained ports of modern-ish software — a mirror is available here. This meant that I had the ability to use version 2.7.2 of GCC plus a myriad of other required tools to both compile the software and also not make me pull my hair out. Additionally, you can find other useful software including OpenSSH via other mirrors, which made transferring files easy.

    As for Doom itself, the source code has been freely available for decades. All you need to make it run post-compilation is a WAD file, which contains all of the assets for the game to run. Most Doom releases over the decades have included this file in one form or another and I had both the shareware and retail releases handy.

    I had the tools and the pieces, but now I had to do the hard work.

    You can’t just make this stuff up

    Often when you get source code, you can just browse to the directory and type ‘make’ at the command line to have it compile into something useful. This is almost the case here with Doom on A/UX, but its codebase expects you to be building for Linux instead and very quickly you are presented with problems.

    Sound was designed for Linux for one and unfortunately isn’t simple or consistent across UNIX and UNIX-like operating systems — OSS is not an option either. I didn’t feel like dealing with this mess, so I commented out all instances of sound and music in the source code. I could have just changed the code to just do nothing, but I was admittedly looking for the quick way out rather than build something flagged at compile time to contend with this.

    Being that A/UX is also ancient in the operating system sense, a lot of functions that would be included in anything made in the past thirty years are missing. Fortunately, these functions are limited to the use of alloca, which can be replaced by malloc (with some extra code); and strcmpi, which I just commented out.

    The latter’s removal had a slight consequence: the WAD file, which contains the game content, now must have a lowercase filename as that function’s task is to do a string comparison without case sensitivity. It didn’t exist in GCC until just after the turn of the millennium so we either had to remove it or write something in its place.

    Doom does a file scan in the same directory as where it is executed from for files matching the extension “wad” upon launch, so my workaround is an annoyance but reasonable.

    One joke about the Motorola 68000 architecture is that it’s basically “backwards x86” — 68000 is abbreviated as “68k” and if you reverse it you get “k86” (get it?). At an instruction level, there is an unsurprising overlap between the two, but honestly where the joke lands at is that it’s big endian as opposed to little.

    This presents a problem with these WAD files as their byte order is meant for a little endian system, which while is the case for x86, it is not for the 68000. I had to add compiler flags to make use of the built-ins which manage this problem and fortunately that was the last hurdle to get the game to actually load and seemingly function on its own.

    Screenshot of me editing C code on a Twitch stream.

    Reversing a suggestion to run these as signed as opposed to unsigned was the last hurdle after adding a compiler flag to force use of the functions if the flag is used. After this point, I had success!

    One small thing: I had left networking untouched in the code, but I disabled at compile time as it was presenting problems. However, I think it would be neat to take NCommander’s suggestion of trying to do something akin to a deathmatch between two different dinosaur systems.

    It works, but it’s slow and has other problems

    After two evenings worth of streaming on Twitch my making code changes and testing on actual hardware, one compile finally led to it executing. I actually didn’t expect the last fix to be the final task remaining to make it run as expected, but it did and for the first time we had Doom running natively on A/UX in an X11 window within Finder.

    Aside from the lack of sound and having to tell MacX to let me use the arrow keys as desired (apparently mouse emulation with them is a default), the game was running at maybe 2–3 frames per second. Lowering the graphic details improved things a bit, but adjusting the overall screen size in-game netted no change.

    Doom being played in A/UX.

    Becky Heineman’s README file for the 3DO Doom port comes to mind now.

    Keybindings also restricted me to anything but move around, change weapons, select menu options, and open doors — I was unable to shoot enemies, which is an objective in winning the game. However, I was able to get from the start of the first level in Episode 1 to the exit, meaning that I was able to play the game in a pacifist setting.

    Screenshot of a Mac running A/UX with a level completed in Doom.

    I made it to the end of the level with no kills, but I did at least one secret! Also, someone asked if this was real hardware, so I made my OSSC show the display details.

    But the frame rate problem remained. The running theory I have is that since MacX is running the game in Finder which itself is a process in A/UX, the game has to traverse through the TCP network stack to output to Finder, meaning there is additional CPU overhead. The 33 MHz processor is handling the operating system, Finder, MacX, networking, and Doom all at the same time, so as a consequence, the visuals suffer.

    The first thing I did to tackle the problem was to set the compiler flags to automatically optimise the code just so we can at least improve the existing situation. This is all handled by GCC itself with a simple flag and the consequences of doing so should be (and “should be” is key) additional memory use and longer compilation time.

    It didn’t add much to the latter and the memory use was inconsequential, but the graphics rendering absolutely suffered with little improvement to the frame rate. Effectively I turned a slideshow that looked otherwise normal into a slideshow resembling a music video for a vaporwave single. So let’s not enable this option for now I guess.

    Screenshot of Doom showing visual artifacting as I move the game around.

    At least the HUD was normal.

    I tried to find a reason for why using this flag led to this problem, but it could be many things and the Makefile in the original source doesn’t have them enabled anyway.

    The problem I have right now is that X11 doesn’t wish to be a solo session on my A/UX install and I cannot figure out why. My only guess is that maybe it might hate my Radius graphics accelerator, but I haven’t had the time to diagnose this.

    However, I am confident that the performance problem resides with the sandwich Doom must crawl through to make it to my eyeballs and that running it in a pure X11 session is the best way to go.

    Feel free to figure this out for yourself however!

    Why am I (likely) the first to do this?

    I think there are two reasons.

    The first is that A/UX is obscure. It never really had a market outside of the US government and organisations associated with it. Even with its largest customer, it had an extremely small user base and its abandonment accelerated its irrelevance. You’re more likely to find an RS/6000 running AIX today than a Quadra 900 running A/UX.

    The obscurity is also hastened by hardware it runs on often never being intended for the at home market. The only mainstream Mac I can think of capable of running it was the SE/30. It’s “mainstream” in the sense that it appeared in Seinfeld as a prop in Jerry’s apartment for several seasons.

    Additionally, with it pre-installed on a Macintosh, it would set you back almost US$10,000 in the late 1980s, or about US$25,000 in 2022 money. This was never meant for the average end user!

    The second reason is the least likely but came to mind: Doom sort of can run on A/UX already. When I say “sort of”, I am referring to A/UX’s Finder implementation which gives a System 7.0.1 environment. The caveat here is that Doom requires System 7.1, but with a few hacks and tweaks, you can run a later version of the system software albeit with the loss of certain components which makes A/UX itself useful alongside Mac software.

    My Quadra’s processor while sluggish should not be a problem in running this game I must add, but these older CPUs are single-threaded and can only do much at a time. Doom may seem like a really simple game by modern standards (and it is really a glorified 2D one), but it was cutting edge when it came out in the 1990s.

    Overall, because of its obscurity and hardware requirements plus emulation capable of running the OS still in its infancy (Shoebill and QEMU are the only options as of this writing), it is likely that my hobbyist exposure plus my love of Doom finally led to an attempt to build the game to run on the platform.

    The help I received when I streamed my porting attempts definitely made this possible as well, so it was not a solo effort I must admit.

    Up until this point, my knowledge of any operating system development was limited to Linux, macOS, and Windows, but I guess I can now say I know a little bit about AT&T System V and its A/UX variant.

    Where can I get this?

    The source code is available on my GitHub and a compiled binary is available there too. I have no intention to update this further beyond maybe a few tweaks to make it more playable. If you wish to make changes on your own, feel free to fork it or just send me pull requests.

    Make sure to read the README before compiling as there are a few steps you might need to take in order to get it up and running.

    I have no idea if the emulators capable of running A/UX can even run this game and I have even less of a clue whether you can run this on anything earlier than version 3.1.1 of the operating system.

    I have the two streams where I worked on it archived on YouTube (June 5th and June 6th were their recordings), but do give me a follow on Twitch as well as I stream speedrunning, visual novel games, and occasionally stuff like this.

  • Thoughts on Ace Attorney — the original game trilogy and anime series


    Hey! Spoilers ahead! This is your only warning! If you have not watched the anime or played the original three games, you are going to learn things you might not want to know yet! I ended up going into a synopsis over an important aspect of the trilogy’s backstory and that will 100% spoil things for you.

    Sometime around Christmas, the Phoenix Wright Ace Attorney series was on sale. On a whim I opted to buy it with zero expectation that I’d personally enjoy playing it, but I figured that at CA$20, even a single play through of one or two cases would be its money’s worth.

    I made a lot of remarks about how painful aspects of the game were and yet I still wanted more.

    Three months later and 100+ hours of streaming the trilogy on Twitch — with one stream lasting nearly 13-hours for a single case — I have labeled myself as a “fangirl” of this genre.

    I was also determined to finish this game before Frost Fatales, as I intended to binge watch the anime series during my travel to and from the event — of both which the event and the watching were successful.

    So now I have thoughts!

    Why did I become so engrossed?

    Prior to working in security engineering, I worked in digital forensics incident response (DFIR), which taught me a lot about evidence handling, chain of custody, and so forth.

    Thanks to a lawyer friend, I was given a reality check on how civil and criminal matters in the American context do differ greatly (my focus was primarily in the former), but it never stopped me from looking at everything I did from the point of view of my former work.

    Aside from the completely bizarre way a lawyer must conduct their own investigation and how evidence is presented in court with it sometimes being modified by the prosecution on the fly, the dialogue and storytelling is paced fairly well and throughout the games you discover how incidents from early on matter in the end.

    I think the best example of how it all ties together is in the third game, Phoenix Wright: Ace Attorney — Trials and Tribulations, you start a case as Mia Fey, Phoenix’s mentor who an integral and supportive character in the series despite her being deceased. Phoenix himself (who is not yet a lawyer as it is set five year in the past) is accused of the murder of a pharmacy student who was conveniently the ex-boyfriend of Phoenix’s girlfriend.

    This story, entitled Turnabout Beginnings, and the outcome of the case is extremely important to the final game despite being just the tutorial. In the first two games, the tutorial is not as important to the overarching story (the second game’s tutorial is important to the third game weirdly), but here it completely cements it as pivotal to how the whole game will turn out.

    My field of work and the intense story writing is what really drew me in overall. It’s rather impressive that a game that frustrates me due to its lack of due process and terrifying evidence handling, that it pulls me in due to its excellent story writing and character development.

    The prosecutors Miles Edgeworth and Fransiska von Karma and to a certain extent, Larry Butz are great characters.

    I hate the circus

    And staying on frustrations, the second game, Phoenix Wright: Ace Attorney — Justice for All, has one of the most frustrating stories and yet the whole game is important to play. The first game could and did stand on its own, but when it was rereleased for the Nintendo DS (originally it was on the Game Boy Advance), an additional case was added to help tie it all together.

    In this game’s third story, Turnabout Big Top, we are introduced to the Berry Big Circus (get it?) and its David Bowie-esque magician, Maximillion Galactica who has a personality so big that it literally swallows up the rest of the circus cast. As per usual, he has been accused of murder of his boss and circus ringleader, Russell Berry.

    Anyone who has played the third case of the second game knows the circus.

    The problems with this case are vast and are hard to pin down, so let’s start with its awful music. Despite playing the HD release on the Nintendo Switch, the music pierced into my ears, literally having me state on stream that I wished that my hearing impairment were worse than it already is.

    Referencing back to the bonus case added to the first game, it too had music I could not stand, but it never inflicted the horrible pain that this story gave.

    But then we have the characters and boy did I ever just not like any of them.

    We have Regina, the ringleader’s daughter and tamer. She’s 16-years old and is completely naive to her father’s death, suggesting that he is not gone but simply a star in the night’s sky.

    Her behaviour implies that she has little education and is completely enamoured with the attention she gets. How she handles the threat against her life and her approach to practical jokes suggests how oblivious she is to the happenings around her. She consistently demonstrated throughout the case an inability to perform any level of critical thinking. She deserves so much better.

    There’s a ventriloquist, Benjamin, who cannot speak coherently without the aide of his puppet, Trilo. You cannot get anything out of Ben without having to deal with Trilo’s behaviour and it becomes infuriating.

    To make matters worse, Ben, who is 31, has an engagement ring for Regina, who is nearly half his age. It’s just outright gross and I was really hoping that he was the murderer, but then the game managed to find a worse outcome.

    We have the accused, Max and is aged 22, who is just obnoxious and honestly probably the least frustrating because despite his big ego, you learn that he has a facade up to hide the fact he is from a lower class. He too wants to form a romantic relationship with Regina — please stop.

    His redeeming factor is that while he has disputes with the rest of the cast, he does want what is best for the circus as a whole.

    Then there’s Moe, a late-30s, divorced clown who ends up being the most reasonable character, but his jokes and puns are frustrating. He along with the previous led me to state that despite my prison abolishionism stance, I wanted everyone jailed because it was the best overall option.

    And finally the murderer and boy did I ever hate this reveal.

    After the first part of the trial, we return to investigate at the circus and we’re introduced to Acro, who is a former acrobat (get it?) and is presently confined to a wheelchair because of an injury. The paralysis-inducing injury was caused by him intervening in an attack on his younger brother by a lion.

    We learn that the lion had injured Acro’s brother, Bat (ugh?), leaving him in a coma. The lion was then shot by Russell. It was revealed that Regina had as a joke gifted Bat a handkerchief laced with pepper, which resulted in the lion sneezing as Bat playfully placed his head in the animal’s mouth to impress the girl (also Bat is 22) all the while wearing the gift he had just received.

    This case had me audibly complaining about every character presented.

    The coma Bat was in and his own paralysis left Acro extremely bitter towards Regina, who he intended to seek revenge on.

    Of course, when Acro decided to take out his revenge on Regina, the letter he had slipped into her clothes as she came to deliver him food never actually made it to her. She did find it, but her naivety led her to just stick it up in the cafeteria for someone else to find. This caused her father to discover it and when he followed the instructions, he died from the dropping of a jade stone or copper lifesize bust resembling Max atop of his head.

    Then we get into the ableism nonsense. The bust made its way to Acro’s room via his monkey, Money. This room is on the second floor of the circus dormitories, which is screwed up because this means that Acro is stuck up there with no ability to get down. Downstairs from him is Moe, which then led me to wonder why the hell he didn’t offer to swap room — perhaps this was offered and one’s proudness was in the way, but it’s still messed up.

    Of course, for story purposes, Acro had the bust tied to a rope from the second floor and dropped it atop of the ringleader, who he presumed to be Regina. He had no clue that he was murdering his boss, who he claimed to be a father figure in his life, despite the fact that the man kept him upstairs for months.

    The game decides to dial this up further: the bust is missing. The prosecution and Phoenix himself cannot find the thing. Where is it? How could it go missing? It’s so massive.

    And this is the answer: Acro is called to be a witness and you’re compelled to call him out on the bust. Phoenix proudly announces that the bust is in the courtroom and is is literally contained within Acro’s wheelchair, hidden beneath a blanket covering his legs. Acro is revealed to be the murderer and you’re just left completely angry that this is where the game went.

    Finally, it is revealed that Moe is the most reasonable of the cast, but it is hard to recognize this because you spent the whole time angry with everyone either because of the game’s ableism, the negligence toward’s Regina’s intellectual development, or the absurd number of older men being romantically interested in a teenaged girl.

    My friend, Aura pointed out early on that she liked Moe the most due to his reasonable-ness. While I agree with her wholeheartedly, this case is engrained my mind negatively for so many reasons and consequently became a low point.

    Kurain village, mysticism, and the Feys

    This by far is what redeems Justice for All and is what really drives what happens in the second and third game. I’m going to recount what happens so I am sorry for this part being long. The story very much cemented my thoughts and feelings on all three games.

    Mia Fey is introduced to us in the first game, but she dies in the second story, Turnabout Sisters, who is found murdered in her office first by her sister, Maya, and then by Phoenix himself. Maya is then accused of murder because she was first to the scene.

    Oddly, this case and the handling of electronic data was what started to really draw me in because chain of custody definitely is not a strong suit of these games, but I digress.

    In this case, we learn of the Kurain channelling method. This permits Maya to channel her sister, Mia who then assists Phoenix with helping reveal the murderer and win the case for Maya. Mia then tells Phoenix that he should watch over her sister, who then plays a role in all the games, channeling Mia numerous times.

    She does not appear in the bonus story, Rise from the Ashes, as she had returned back to her home village at the end of the previous story — hence why the story exists to tie things together.

    Where it really starts to matter with the Fey family is when we’re introduced to Maya’s aunt, Morgan, and her 8-year old cousin, Pearl in the second game’s second story, Reunion and Turnabout. This story discusses the abilities of the Fey family to channel the deceased into the real world, a skill that both Maya and most importantly for this story, Pearl possess.

    Maya is accused of murder because she supposedly channels someone who was killed due to the actions of her client, who himself was found dead. The story reveals the internal politics of the Fey family, as Maya is from the main branch and as a result is the one to inherit the leadership of the Kurain method as her mother has been missing for long enough.

    Pearl is important to this overarching story and also provides us with a game mechanic that while I am not fond of, becomes rather important for progressing through. You’re given a ‘magatama’, which is a special mystical stone you can present as a way to break through someone’s bluffs or lies with evidence to reveal the truth and progress the story — the game gives a visual clue to use the stone through the appearance of “psyche locks”.

    Since Maya has been once again accused of murder, you presume that you’ve lost Mia but nope, it turns out that Pearl herself is able to channel too and you work with Mia this way. Pearl’s abilities matching that of Maya is what is driving the politics around the village and Fey family, which becomes extremely important through game 2 and 3.

    One thing I didn’t mention about Maya or Pearl channeling Mia is that when they do so, they also channel the appearance of whoever it is. This means that Mia will appear in Maya or Pearl’s clothing, but also ages the body in a way that while with Maya is not unnerving. It becomes extremely so with Pearl since she’s instantly becoming a 27-year old woman.

    It’s less troubling to me with Maya, who is 17, but Pearl is 8 so yeah. At least Phoenix always saw Mia as a mentor and nothing more, but still. What we learn in the third game provides some level of comfort here.

    In any event, it is revealed that Morgan helped set up the murder through the help of someone seeking revenge over an unrelated matter. It is revealed that Maya never channeled the person the client wanted because the person who he thought was dead wasn’t!

    She actually faked her death in a car accident with her sister being the casualty. The injuries endured required facial reconstruction surgery and she used that as an opportunity to take on her sister’s identity right down to her physical appearance. When this is revealed, it’s a fun plot twist, but it results in Maya’s acquittal and Morgan being placed in prison due to her participation in the crime.

    This story becomes important and the game makes it apparent at the end of the case, but we don’t come back to the topic until the third game, which opens up with the aforementioned Turnabout Memories, which is where Phoenix and Mia meet. We are introduced to Phoenix’s ex-girlfriend, Dhalia Hawthorne, who is then revealed to be the murderer in this case.

    Phoenix reveals his desire to become a lawyer, but is adamant about the person Dhalia was to him and the sort of person she is, giving the impression that he is naive about the people around him. With this in mind, Dahlia becomes important despite being dead by the time we get to the last two cases of the third game.

    The second last case, Turnabout Beginnings involves Dahlia, her sister, Valerie; and her “tutor”, Terry — who seems to be modelled on a certain John Steinbeck character — in a fake kidnapping plot resulting in Terry being accused of murder of Valerie, who herself is a police officer.

    So many things are revealed, but importantly it shows that Dhalia has been engaged in shenanigans since she was 14-years old, including seducing a 25-year old “tutor” into being an accessory to everything.

    While as unnerving as we saw in Turnabout Big Top, it didn’t force matter more than suggestion and instead we witnessed Terry commit suicide on the stand using a poison given to him from Dhalia. This poison becomes important to the backstory behind the game’s main prosecutor, Godot.

    The case is left with Dahlia under suspicion, but Terry is dead and the prosecution is fine with remaining with him accused. We’ve dealt with Dahlia twice now and now we’re going into the final case, Bridge to the Turnabout.

    One of the things about the Kurain channeling method and who is to lead it is that May and Mia’s mother is still leader despite having been missing for almost two decades — the reasons for why are revealed in the first game’s fourth story, Turnabout Goodbyes. Time has passed and it is now required for Maya to begin the process to assume leadership

    We travel to a temple and meet new characters including Elise Deauxnim, who is this up and coming children’s story author and is Pearl is absolutely enamoured with. Also, we meet some other characters, including someone named Iris who looks the same as Dahlia with just a different hair colour. She doesn’t have the same cold demeanour though?

    This of course had me on edge because she was found guilty of murder and the game makes it clear that execution soon follows. Has Dahlia escaped death row and has escaped from prison? What is going on? I was pretty terrified of where things were going because this was the last case and we were getting some extreme concentrations of coincidences and occurrences simultaneously.

    And then Elise is suddenly found murdered! Then we discover that the rope bridge to the building where Maya is has somehow caught fire (and oh boy it is the same bridge as the previous story), Pearl is missing, and now Phoenix has been swept away by a fast moving current below the bridge because he wanted to rescue Maya.

    I was so relieved when there was a murder. It’s incredibly messed up for me to type that statement.

    The breaking of tension here was incredible and while we are fortunate to learn that Phoenix has been rescued and is alright, his arch-rival and long-time friend, Edgeworth has been tasked to defend Iris at Phoenix’s request. It is confusing because isn’t Iris just Dahlia?

    The part of Edgeworth playing defence attorney as opposed to prosecutor is a strange but enjoyable change and he discovers what it is like to play the role Wright has had for so long. We do eventually learn that Dahlia was in fact executed just recently, so who the hell is Iris?

    We endure a trial where Edgeworth and his adopted sister and fellow prosecutor, von Karma face off, with the day ending with no verdict, so now we’re to move forward and figure out what has happened to everyone.

    The bridge has been given a temporary fix and we run into Pearl (phew) and strangely Godot, who did not show up for the first portion of the trial but will for the second because Phoenix is now out of hospital. However, where is Maya? We did briefly lose Iris, but now she’s back and we’re trying to unlock a chamber that suddenly went from having a single lock to multiples. Why?

    Eventually we perform some investigations and at some point it is revealed that Elise is infact Misty Fey, Maya and Mia’s mother and Morgan’s sister. Oh yeah. Morgan is still around and it seems that Pearl has been visiting her in prison. We also learn that Dahlia has been visiting Morgan in prison. Oh yeah. We also learn that Dahlia is Morgan’s daughter. Oh yeah. We also learn that Iris is Dahlia’s twin sister, which means that we have our answer to who the hell Iris is — phew.

    This is of course a trope that gets overplayed, but with the whole spirit channeling we’ve dealt with for the past three games, it actually isn’t that bad here and in my opinion works well.

    So who murdered Misty? Larry’s art (oh yeah he’s an artist now and has assumed the last name “Deauxnim”) suggests that she flew across the bridge while it was ablaze — but that is impossible, right? How did Iris do this if she was found on the other side and the bridge was on fire?

    This is where the big reveal comes in: we’re in court and we’re trying to figure out Iris’ innocence and Phoenix is now facing off against Godot. It finally dawns upon him: Maya is not missing and the murderer is in court.

    “I have been saying for the past three hours that Dahlia is not dead” (hours pass) “well, okay, this makes more sense now, but I am still sort of right!!!”

    Where is Maya? Simple: she is right here and is channeling Dahlia. But why would she do that? Does that mean that Maya killed her own mother? Well, it is pointed out that Maya reached out to her sister in a panic and Mia suggested she channel Dahlia.

    The spirits are not aware of who they’re being channeled by (unless a clue is left in the physical world such as Maya did by leaving a note asking for Mia’s help) and has assumed that Maya was so distraught from having killed her mother that she committed suicide that it was in fact Pearl channeling her since it was what was arranged between her and Morgan.

    But surprise for Dahlia! Mia is right next to Phoenix in court and she is being channeled by her step-sister, Pearl. This leaves Dahlia confused which then reveals that it is Maya! Dahlia disappears and now we’re left with Maya having to testify to what happened.

    It turns out that Godot had killed Misty in an attempt to save Maya. Misty on purpose channeled Dahlia and was working with Godot in order to protect Maya in the first place. Dahlia had no clue to what had happened.

    Godot is then revealed to be Diego Armando, a defence lawyer and former love interest of Mia who held a grudge against Wright for not stopping her being murdered.

    Iris is found to just be the receiver of the body of Misty and wasn’t actually the murderer — at worst she desecrated a body, which is oddly similar to the game 2 story, Farewell, My Turnabout. Iris would blindly follow her sister’s wishes and did so because she felt that she had to.

    It’s also revealed that Diego was poisoned by Dahlia in the same way that Terry had, but managed to survive albeit with a five-year long coma and severe damage to his nervous system. This resulted in him requiring the use of goggles to aide in his vision. Because of their glowing red in the dark, it resulted in a clue Maya gave in her testimony.

    Maya is saved, Dahlia is eternally damned to know she failed to do what she sought out to do, and Godot consumed four dozen cups of coffee in two days.

    Also the Dahlia Phoenix thought he was dating was actually Iris and Iris was in fact love with Phoenix, so there’s that reveal.

    The anime tries so hard

    The thing about the above is that what I described is really just the surface of the whole game’s story mechanics and imagination. I honestly am not giving it enough justice in how I describe the events as I haven’t talked about the backstory of Miles Edgeworth and Larry Butz in any detail. Their relationship with Phoenix is rather interesting and that is where I think the anime is a bit stronger than the game despite overall being weaker.

    The Ace Attorney anime series largely sticks to the stories from the original trilogy for the most part save for excluding the bonus case from the first game, the addition of some backstory (of which I feel is important and missing from the game), a case on a train that wasn’t in the triology, and that the stories are a bit out of order — I don’t think it is consequential however.

    The circus is more bearable in the anime than in the game. On purpose, I am only showing Phoenix and Maya because they’re talking to Moe and I don’t want to see Moe again.

    Additionally, the pacing in the anime does not match the game, which I feel took a way a bit of the magic that we got in all the games.

    There were a few changes that I felt were either not the best or were for the best. I believe that they were done to fix some pacing or to permit the reordering of stories.

    For example, Lotta Hart shows up in the first two games as a pivotal character, but then Larry takes her place as photog during Reunion and Turnabout, which I think worked because one of my complaints of the second game was a lack of him — yes, I did miss the guy.

    Maggey Byrde from game 2’s first case, The Lost Turnabout should have been left in sequence in order to provide pacing for the follow up case from game 3’s, Recipe for a Turnabout. Why I found this disjointing is simply because game 2’s last case, Farewell, My Turnabout was made the first season’s finale.

    However, the anime really shines on the backstory behind Larry, Miles, and Phoenix. Phoenix credits his being a defence attorney because of Edgeworth coming to his aide and while the game spends some time giving details on their backstory, they really rope it in better in the TV series. It really is what makes the anime compelling to watch even if the pacing is out of whack.

    What is next?

    If you want to see all of my play-throughs of the trilogy, they’re up on my YouTube. They were some of my best streams I feel and they’re also the first that have gotten a lot of people watching recordings of.

    Starting tomorrow, Tuesday, March 15th at 5 PM PT, I’ll be live on Twitch streaming Great Ace Attorney Adventures, which I guess is a prequel of sorts. I’m super excited and I hope you all will come watch.

  • Adventures with an 11,000 kilometre-long Game Boy Advance link


    One of the things I lamented a lot growing up was an inability to find anyone else to do Game Boy link cable games with. I had a few games which would work with the setup, but very few of my friends had Game Boys themselves and when my younger brother received a Game Boy Pocket (I had the black-coloured original), it used a different cable all together, making it impossible for us to play Pokémon together.

    My Game Boy was always on its own little island, never to see any real interaction any other device. It wasn’t until I was much older that I would have the ability to hook it up with other Game Boys since I now own a Game Boy Advance (GBA), Game Boy Player, and Super Game Boy 2.

    But everything is online now and starting with the handheld’s successor, the Nintendo DS: it’s also wireless. There are a lot of gems for the Game Boy out there which relied on this cable that have since become largely forgotten or at least cannot have the full extent of their capabilities realized.

    The GameCube and Game Boy Advance

    One of the features of the GameCube was the ability to attach to a GBA via a controller port. This wasn’t meant to output from a handheld to a TV necessarily (such as with the Super Game Boy on the Super Nintendo), but instead to act as an alternate controller or to transfer content between. This same cable also works on Wii consoles with the appropriate controller ports.

    My rather beat-up GameCube attached to a Game Boy Advance

    One other benefit of this cable is when using the Game Boy Player, you can use the GBA as a controller instead of the awkwardly-shaped one provided with the console. And if you want to go further, you can also attach the cable to another GameCube if you want to make use of the Player on there instead.

    As weird as this looks, it’s entirely possible to use your Wii and GameCube this way.

    Or you can go all “chaotic evil” and use this configuration, which too works, but not for the purposes of I am discussing here — I just thought it was neat to share! Two friends of mine gave me a SGB2 after returning from Japan and it’s a far better device than the original Super Game Boy.

    One of the features of the GBA is the ability to load software on it without having to insert a cartridge. This made the handheld rather powerful as a game loaded on a GameCube could load content on to a handheld without additional copies of software.

    This was taken advantage of games such as PacMan Vs., Final Fantasy Crystal Chronicles, and importantly for this article, The Legend of Zelda: Four Swords Adventure. All of these games required the use of a GBA to be attached for multiplayer action and acted a lot like what you’d see in some Wii U games.

    However, this required you to have multiple GBA handhelds, the cables themselves (sold separately), and the appropriate copy of the GameCube game.

    A ridiculous dream

    One of the consequences of the ongoing pandemic is the inability to not only safely play some games in the comfort of our own homes, but to travel to see each other when we have shared interests. I’ve been wanting to play one of the aforementioned games with a few friends, but safety is important.

    So on and off I’ve been thinking about just playing these games over the Internet. It was more or less an idle thought in 2020, but then in early 2021, someone released an adapter which allowed you to make use of a Raspberry Pi Pico to allow a desktop computer to interface with a link cable. I quickly ordered one and assembled it.

    No. This doesn’t work. Yes. That is my Game Boy from childhood.

    There’s now no reason that physically a GameCube couldn’t attach to the Internet if I had at least three of these USB adapters attached to the console with three of those appropriate link cables, and then three other people with GBAs with the same adapters attached to their PCs.

    And that is where the problems started: it required everyone to have the hardware. Unfortunately, that wasn’t going to be the only issue.

    The adapter itself was intended purely to trade Pokémon, which itself should work even with the latency the Internet creates. It was designed around the idea that it should be fine for pure Game Boy to Game Boy connectivity, which is forgiving due to how the protocol is supposed to work.

    Since the link protocol is synchronous and bits are sent and received simultaneously, that means the master device requires the slave to send its response at a rate equal to the clock speed. In non-Game Boy Color mode, the master Game Boy supplies an 8KHz clock (data transfer speed of 1KB/s). This means that there is only a ~120μs window to respond! The Game Boy Color can operate at even higher speeds. No internet connection could possibly satisfy this latency requirement. However, the slave device has no such constraints. It just responds when it receives data!

    Unfortunately, it doesn’t appear that this is the case with the GBA. Based on what I am reading in some excellent documentation, the clock rate is even tighter with its tolerances (256 KHz to 2 MHz for the GBA as opposed to the original Game Boy’s 8 KHz). As a result, the hardware is unlikely to accept being a GameCube controller once you are of significant distance, which in the GBA’s case is more than a few metres.

    But maybe the hardware being a problem is a non-issue. What if we just scrapped the hardware idea and do this using software instead?

    Luck would have it that a few months after the USB adapter was released, the team behind the GameCube (and Wii) emulator, Dolphin announced a new feature: Game Boy Advance netplay.

    This was no small feat for the team, but they’re also known for being rather meticulous and talented with their software. It wasn’t fool-proof and was rife with problems as evident from this excerpt from their blog:

    These games in particular loved to spam tons of commands, sometimes sending over 200 commands a frame. This exposed a rather serious flaw in the TCP GBA protocol. Namely, they could get tripped up if they received a command while they were still emulating forward to catch up to the point from the previous command.

    When I casually brought up in the fall of that year that I wanted to do this, someone linked the above blog piece, which then led to some organization.

    Getting a crew together

    Eventually my friends, authorblues, tinahacks, Aetyate, and I got together to go over playing this game online. We kept testing brief as we wanted to play the chosen game mostly obscured from us aside from “does it work”.

    Once we were assured, we set up a night to play and thus The Legend of Zelda: Four Swords Adventures was being played on Twitch with all four Game Boy Advance displays on stream alongside the GameCube game itself.

    You have to go back and forth between the GameCube screen and the Game Boy Advance you’re playing on in order to complete this game in multiplayer. In single player mode, this is not required.

    While Aetyate and authorblues are in the eastern United States, tinahacks herself is in Finland. With my being in Vancouver, we effectively had two 4,000 KM (2,500 mi) connections and an 11,000 KM (6,800 mi) one going to my PC, playing a game which originally used a two metre (6 ft) cable itself — these distances are approximations and not based on the actual connections between us.

    A single button press would find itself travelling 15,000 KM (9,300 mi) one-way, meaning that we’re approaching at least 3/4ths of the circumference of the whole planet considering the nature of of both TCP and the link cable protocols. The emulator was required to do this in order to keep everything in sync and consequently we had to endure somewhere of a 1/5th of a second delay on our individual inputs just to make it manageable.

    But it was possible and we were playing it.

    Two people in the eastern United States, one in northern Europe, and myself in Western Canada were about to do something that would have been seen as absurd when the game initially came out

    Reducing the latency was something I had considered. I looked at options for acquiring a virtual machine with a GPU located somewhere in eastern North America close to fibre links across the Atlantic to Europe, but the costs for such systems have become quite expensive.

    For example, one large cloud computing service was quoting me US$800 for a single month’s use of a machine meeting these requirements. Even with a discount I had available plus US$450 in credits I had with them, it just didn’t seem worth it.

    One thing we learnt quick to do was test our controllers by using the battle mode within the game just to make sure that nothing found itself remapped.

    This was something another streamer had done in order to host fighting games online and had a great deal of success, but we didn’t feel that the cost was worth it for what we were playing. Four Swords Adventure is an action role playing game and with two streams of this game under our belt, we were feeling that latency would not hinder us too much.

    Or so we thought.

    When the lag caught up with us

    The latency in Four Swords Adventures was largely manageable for us and often was comical. In fact, the latency was the least of our concerns for the most part as we had other issues to deal with.

    During one of our streams, tinahacks’ copy of Dolphin suddenly ran into problems and started to spew all sorts of errors on her computer. Fortunately, we were not too far past the last save point so we all opted to just restart Dolphin and carry on.

    When the game broke, the stream broke.

    On average, I was seeing about 60–80 ms of latency between Aetyate and I, 110–130 ms for authorblues, and unsurprisingly, 180–220 ms for tinahacks.

    This is where the whole 1/5th of a second from earlier comes from. We were restricted by the laws of physics to what options we had available.

    Dolphin includes an adjustable buffer setting in its netplay feature and we can adjust it based on what feels right. I kept it at ‘20’ the whole time as reducing it any further started to introduce audio choppiness and that is just not good “stream content”. It was fine for the first two streams, but towards the middle of our third night of playing the game, it reared its ugly head.

    The game wanted us to walk in-step to get to the other side and failing to do so would result in us having to circle back to where we began on the screen.

    Walking into this square without care will lead to you falling into a pit and having to come around back. You can see Aetyate falling into a pit on the bottom-right with myself and authorblues right — tinahacks is presently dashing across on the far right.

    Typically if you run across a pit in a Zelda game, you can use your “Pegasus Boots” item to quickly dart across large gaps. However, the game developers placed what appears to be potato-pineapple hybrids in the way so if you were to dash across, you’d collide with them and then fall down the pit.

    The game requires you to walk parallel to each other in formation in order to keep the platform balanced and then upon approaching the blocked items, simultaneously pull them off of the ground and then toss them. If you can pull off the second part successfully, then the pit is resolved so all we need to worry about is just getting at least one of us across.

    With the current buffer settings, we probably made a dozen and a half if not more attempts. It was starting to look dire as the input latency combined with the latency that a Discord audio call produces made it impossible for us to just get the timing down right. It was beginning to look like this might be the end of this fun experiment until we tried one idea.

    Let’s just make the buffer not exist and play the game frame-by-frame.

    You absolutely should watch the video in this tweet to understand how everything went because while we were successful, someone decided to be a “bother” once it was known that we made it.

    Each frame we progressed was progress in itself and when we made it to the other side, almost all of us managed to remember to pick up the object on the other end — I inadvertently hit my sword button instead (oops).

    What proceeded was pure comedy because once one of us successfully got over, another went and attempted to sabotage everything because it was possible to get away with that now and I found myself and that saboteur at the bottom of the pit.

    However, this was no longer a problem as now the boots I had put on earlier were now possible as an option across this pit.

    At least two of us were on the other side despite someone’s best efforts.

    This wasn’t the only obvious latency problem we had to contend with as a prior boss battle during this stream was proving difficult due to a need to time certain actions, but this was the first time we had to adjust the emulation in order to actually make any meaningful progress.

    What’s next?

    We have a few more streams of this game left with plans for this upcoming Sunday and Tuesday (February 6 and 8, 2022), with the second day being a hopeful completion of what has been a rather fun experience. This will be on authorblues’ Twitch channel.

    If you’re interested in watching the past broadcasts, you can view the VODs on Twitch here (I will do my best to update this with the other streams once we are done):

    After completing our misadventures, we intend to play Final Fantasy Crystal Chronicles, which is another game I have never played.

    This is likely to be after the upcoming Frost Fatales 2022, an all-women speedrunning marathon I contribute my spare time to. I hope you’ll check out as we’re raising money for Malala Fund and lots of talented women will show how fast they can play games!