File this under blasphemous acts of hackery, reported on by Video Game Esoterica (Youtube, 10 minutes) and Time Extension, a super-deluxe techno-nuts person going by malucard is trying to port Super Mario 64 to the original Playstation. They have a GitHub repo containing their efforts so far.
The growing number of fan-made decompilations of classic games is what make these hilarious affronts to the very idea of console exclusivity possible. But while ports of such games to PC platforms allow for much greater visual clarity and the resolution of long-standing deficiencies, this is almost a celebration of the idea of technical limitations—and I, for one, am all in favor. But you have to understand, I’ve given serious thought to the idea of picking up an old CP/M machine and coding on it in assembly. I’m crazy pants, is what I’m saying, and on things of this nature you probably shouldn’t be listening to me.
Just look at the footage in that video, and how it’s more glitch than game. It seems impossible that it’ll ever run like the N64 original, but we can dream, can’t we?
Sundry Sunday is our weekly feature of fun gaming culture finds and videos, from across the years and even decades.
The circus is back, the creation of wonderful Youtube animator Gooseworx and distributed by Glitch on Youtube and Netflix. We’ve linked to several of their past installments, for being obviously computer-game adjacent. It’s about a bunch of humans trapped in a virtual world, as cartoon characters, overseen by a well-meaning but generally hapless AI overseer.
Here are the previous times we’ve linked TADC: Episodes 1-3, Episode 4 and (with Wigglewood) Episode 5. If you aren’t caught up it might be a good idea to see the ones you’ve missed; if you’re new, you should at least watch the first episode to get a good idea of the situation and the characters.
So, that new cartoon (34 minutes). Fed up with trying to come up with interesting adventures for the trapped humans, ringmaster Caine just dumps a bunch of guns in on them and puts them in a standard first-person shooter scenario: everyone gets three lives, go ahead and kill each other. the stakes are pretty light because they can’t die, a fact understood intuitively by the most mischievous of the Circus’s inmakes, Jax.
Not many of the characters like Jax. He’s the most cartoon-like of the bunch of them, always teasing the others, sometimes relentlessly, and making them the butt of his jokes. He really leans into his animated reality, a Bugs Bunny figure (although one who hates cross-dressing). But it’s hinted that he hasn’t always been like that, that he lost a friend, a frog called Ribbit, to being abstracted, the closest a Digital Circus character comes to truly dying, turning into a big blob-like eyeball monster and then being sent by Caine to a dark place called The Cellar for the safety of the others.
It’s a fun episode, but also very dark. Of course, most Amazing Digital Circus episodes are that way. Here it is:
Sundry Sunday is our weekly feature of fun gaming culture finds and videos, from across the years and even decades.
It was vitally important to tell all of you about Pugberto last week, I’m sure you’ll all agree. A couple of other items had to wait a week before I could present them to you.
The Amazing Digitial Circus has a fifth episode now. It got over 40 million views in a few days so there’s a good chance you’ve found it by now. Still though, here ’tis (25m):
The Amazing Digital Circus has merchandise, and some pretty amusing videos to sell it. There’s a new one of those too (4m):
Over on a much less trafficked portion of Youtube, the hapless heroes of the Wigglewood Tales have a couple of new videos too, The Bandit (2m):
Final Fantasy games tend to have weird and crazy bugs, and VII was certainly no different. A bug beloved of speedrunners is called “Cloudsurfing,” where taking advantage of the way the game detects walkable overworld triangles and the way they’re cached to use Chocobos to walk over oceans and through mountains. Properly utilized, it can be used to skip a large portion of Disc 1.
Prior Final Fantasy games used a simple tilemap to represent terrain. Final Fantasy VII’s overworld switched over to a world made up of triangles, each of which with a terrain code that indicated which entities can traverse it.
The triangles, additionally, are divided into square chunks. No triangle extends outside its chunk. Additionally, in each chunk, the triangle vertices aren’t represented literally for each triangle. Instead, the triangle coordinates are indexes into a list of coordinates, all to save a bit more memory.
Now, while each chunk is much smaller than the entire overworld, each can have over 100 triangles, so the code does some additional optimization. It keeps track of the last six triangles Cloud has touched, and checks them first when moving. If a triangle in this list is touched, then the search is stopped without checking the 100+ other triangles in the chunk.
Now, chunks are loaded into memory dynamically as Cloud explores, both for interaction and for rendering. The game loads the 25 chunks immediately around him off the disk, and some more in the direction the camera is facing. These chunks are constantly going stale (going out of range) and being refreshed as Cloud moves and the camera changes direction. Chunks are stored in a linked list, so are usually located by pointers, which means the chunks don’t need to be actually moved in memory, but instead references to them are copied and moved around. Some older chunks stick around in memory, then, while new ones are loaded, and the new chunks get moved to the top of the list.
Now this is the hardest part for me to explain, as I don’t have the firmest grasp on it….
When Cloud boards most vehicles, his entity is despawned and the vehicle is created with an empty list of cached triangles. But when he gets on a Chocobo, his entity is not despawned. While the Chocobo has its own cached list of triangles, since Cloud is still being rendered on screen, his entity is preserved, and with it pointers to the last triangles he interacted with. These are kept, unused, while the Chocobo handles all of the collision and terrain checking.
When Cloud gets off Choccy, he still has a list of the last triangles he interacted with… but they refer to the data from the chunk he was last in. Now the game is smart enough that, if this is different from his original chunk, to refresh things, but if it’s the same chunk I think this doesn’t happen. But this doesn’t mean everything will work without problems. The chunks will probably be loaded in a different order, and that means the cached triangles will refer to different data.
And since the vertices themselves aren’t stored in the triangle list, but indexes* to another list of data, it’s possible for some of this data to come from outside of the expected area, and for there to be duplicated coordinates among them.
Due to the way FFVII figures out which triangle Cloud is in, if two of the points in a triangle are on the same location, the game becomes much less discerning about whether Cloud is inside it or not. And if all three of the triangle’s vertices are in the same spot, forming what’s called a point triangle, just a single dot, then the game can’t declare Cloud is outside of it at all! So long as that triangle gets checked first, then the game will think Cloud is inside that triangle, so long as he’s in the same chunk. This could potentially turn the whole thing walkable.
Did I get it sufficiently right? Watch the video, and decide for yourself!
* The English graduate in me demands I point out that I know I’m being inconsistent with the plurals of vertex and index. Properly, like how I’m not writing vertexes, I should be writing indices, not indexes. I think that index is used more in contemporary English, so I made an editorial decision to pluralize it in a more familiar way. There, explanation: given.
I had a different post ready to go today, but it’s been delayed by a few days for unavoidable reasons, so let’s do another Nintendo obscurity video, this time for things that can be found “out of bounds.” There’s several interesting cases mentioned and shown off here in this video from Nintendo Unity. It’s 11 minutes long.
Some of cases shown:
In Punch-Out!! on the Wii, off-camera, Piston Hondo is reading a Sailor Moon manga in a between-round cutscene.
On the original Pikmin’s title menu, the name of the menu programmer is off-camera to the left.
There’s a cartoon drawing of a Goomba as a texture beneath Pinna Park in Super Mario Sunshine. This has been given the name “Kug,” and there’s more information on it on Supper Mario Broth and The Cutting Room Floor.
Noki Bay in Sunshine has a model of a book locked in an unreachable area. There’s more info on it on The Cutting Room Floor.
This one’s relatively well known: the trophy of Princess Daisy in Super Smash Bros. Melee has a texturing error that gives her a third eye, hidden beneath her hair on the back of her head. The trophy for Meta Ridley also has a hidden heart texture inside of it.
In Earthbound, if you can clip outside of the terrain in the upper-right corner of Onett, you can reach the ultimate upper-right corner of the whole map. (All of the areas in Earthbound are connected on a single huge map!) Interacting with the corner there can access a debug menu left in the game.
There’s a secret control room beneath the island in Donkey Kong 64.
Another well known glitch, the video mentions the glitch that lets Samus get inside the level terrain in Metroid by rolling into a ball and coming out of it repeatedly while a closed door surrounds her. This is the means by which people can get to the glitchy “secret worlds” mentioned in an early issue of the Nintendo Fun Club News.
At the end, the video reminds of the “Minus World” glitch in NES Super Mario Bros.
Argh! This video from Press A! on Youtube promises big by promising to explain how speedrunners blast through the over 5 1/2 million Bells needed to fully upgrade their (pre-2.0) house in Animal Crossing New Horizons, but then in typical game Youtuber fashion they explain nearly everything else about the game, the debt, and all the other things speedrunners must do along the way! Here is the 12-minute video, but I’ll give you the gist below:
First: the glitch only works on version 1.2.1 or earlier, so nowadays it requires hacks to downgrade your Switch to do them. And the trick also means having at least two users on the same Switch, both with residents on the island.
The trick involves duplicating items, then selling the duplicates. The items are duplicated by putting an item that can have other objects put on top of it, like tables or the cardboard boxes in the Recycle Bin, down near the border of the town square area.
First, an expensive item is put on the table or box. The Switch promo item given to the first player upon starting the game is typically used by runners. Both players are brought in, then the second player spins the box while the first player picks the item up off of the box. If done on the same frame, Player One will pick up the item, but Player Two’s rotating of the box will mean it also remains on the box. Now there’s two copies of the item. This process can be repeated immediately, filling up Player One’s inventory with the item. They then sell the items for profit, and continue.
I miss the days when you could just find this out from a text file on GameFAQs, but then tricks like that are a lot harder to discover randomly these days without something like Youtube’s discovery algorithm to uncover them, although it too is random and scattershot, or else following a ton of Discords to seek out all of the little gaming communities where all this data is hoarded.
So that is how they do it, but since it’s specifically on an old version of the game that you can’t even play anymore it’s of limited use to normal players. New Horizons changed so much in that first year that this information is largely of use as a curiosity unless you’re involved in the frankly bizarre speedrunning community.
My own trick for paying off your house means breeding expensive roses, ideally blue but black will do, then growing tons of them in the fields of your island and selling them. If you have the DIY recipes to make wreathes or crown from them, then it doubles their sale price. It won’t pay off your house of in under two hours, but if you can get your starter roses from elsewhere, you can pay it off much faster that way, maybe in a couple of months. I’ve explained the details of that process before, and in multiple places, but hey at least I didn’t just post it in a Discord where non-obsessives will never see it.
There, that’s my annoyed internet oldbie rant for today. Come back tomorrow where I’ll shake my fist at something else, probably AI slop. Ta!
Sundry Sunday is our weekly feature of fun gaming culture finds and videos, from across the years and even decades.
Who, among everyone on the internet, is just finding out about the release of Episode 4 of the breakout Youtube hit The Amazing Digital Circus here? It’s already up to 44 million views.
I’ll embed it here, but before we get to that it’s worth noting how it got to this place. Its creator Gooseworx made a number of items before it, including one linked to directly from these halls, Little Runmo. A few other representative Worx from the Goose are The Darly Boxman Show, The Ghost of the Year Award and Elain the Bounty Hunter.
Not too long ago Gooseworx joined up with Glitch Productions, a small outfit that hither-then had been known mostly for machinima based on Super Mario 64. Soon after they released the extremely popular show Murder Drones, but it was tADC that really caused them to blow up.
Now, tADC is released on Netflix around the same time it debuts on Youtube. I hope they didn’t have to sign some kind of demonic contract to do that; some folk have been treated badly by the Netflix regime. But the show is still on Youtube and can be watched there, if you can put up with their horrendous advertising scheme, that is.
Several characters show heretofore unseen sides of their personalities in this one. Up until now Gangle has only been a bit character; usually-helpful Ragatha spends most of the episode in a Stupid Sauce stupor; and Jax, under the prospect of punishment, doesn’t get to be nearly as entertainingly belligerent as in the past. It also sees the return of Gummigoo, but is it really the same person as Pomni remembers?
Gooseworx has a Tumblr, which is full of hints about the show and the direction it may take. One piece of information revealed there is that The Amazing Digital Circus is planned to be a limited series, with a total of nine episodes, although with some possible short detours along the way. The show has turned out to be popular in Japan, and there’s a manga adaptation of it being web-published. I’ll leave it to you to find links to that (there’s fan translations out there too), but one fun page from it, from the issue-end artist created content, is this festive/creepy Abstracted Kaufmo christmas tree!
It’s a bit old, but Chaz on Youtube has a great video explaining some weird facts about Earthbound, including mysterious crashes, when the game registers the effects of statuses like Sunstroke, and why there’s a small number of places in the game where you can find an early enemy, the Mole Playing Rough, in regions where you usually find much stronger enemies. It’s ten minutes long:
Here’s the gist:
Earthbound maintains a flag that the video calls the Overworld Status Supression Flag. If this flag is on then your characters can’t get a number of statuses like Sunstroke, or take environmental damage. If this flag is on, though, and your party loses to a scripted (not random) battle, then a bug is triggered that’s popularly called the Game Over Glitch: the battle loss cutscene music plays, but the screen turns black and nothing appears to work. In fact, the game has not crashed: entering the Town Map screen, or feeling around for and entering a door, will display graphics again, although glitched out. The Game Over Glitch is best known for happening if the player loses to one of the Shattered Man fights in the Museum after the game has been won: during the ending, the Overworld Status Supression Flag is set on permanently, so getting into any scripted fight and losing will result in the glitch happening.
As it turns out, random encounters disable the flag. So there is a hard-to-avoid Mole Playing Rough at the entrances to areas with environmental damage, to make sure the flag is turned off. But the mole is just hard to avoid, not impossible, so if you can avoid it, and all other random enemies of course, and then reach a place with a scripted fight, then lose to it, the glitch will still happen.
It’s another highly technical game glitch explanation, although from a source we don’t often follow here: even though it has to do with explaining glitch Pokemon from the first generation of that series, it was the ending presentation of RustCon 2020 given by Siân Griffin, despite having little to do with Rust, other than showing the possible results of not having strong memory safety in your programming language.
It’s 39 minutes long, and it might prove difficult to get through for some, but it’s good and interesting information:
I will give you an overview:
When the original Pokemon games generate a random encounter with wild Pokemon in the overworld, they refer to one of two lists in RAM memory, copied there from ROM. One list is for “grass” Pokemon, that are generated when walking through tall grass, and one is for “water” Pokemon, that are generated when in riding a Pokemon using Surf over water tiles. The lists are copied when entering a new region, with a differing enemy generation table.
Due to an oversight in the tile checking code, a different subtile is checked when generating a Pokemon from each list. This means it’s possible, on some shores, to generate a Pokemon from the grass list when actually on the water. If one of the lists has a Pokemon generation rate of 0% for its type, then its list doesn’t actually get copied. Some regions that are largely aquatic aren’t intended to ever generate grass Pokemon, and so have a 0% grass encounter rate, and so never copy a grass Pokemon encounter table. The Pokemon generated come from whatever was in memory before, which may be all zeros, or may be whatever used the memory in that area previously. Pokemon has little RAM to work with, so the Pokemon generation table memory has other things that use that memory, and one of those is data for the trainers you trade Pokemon with.
If you use Fly to fast travel to Cinnabar Island, you can reach a region where the grass encounter table won’t have been initialized, but you can still cause grass encounters to happen by Surfing on the shoreline. The contents of that table can be manipulated by doing something else that uses that memory beforehand. As a result, you can cause an encounter with an undefined Pokemon, which has the name MISSINGNO and has various glitch attributes.
Because the Pokemon has faulty definitions for some of its attributes, like appearance and cry, it’s possible to crash the game or wreck your save data from playing around with MISSINGNO. But if you run from it, this damage can be minimized. And when it tries to mark that you’ve seen MISSINGNO in the bit array that records which Pokemon you’ve seen, it overshoot that table and actually sets a bit in the memory that follows it, which usefully, is your inventory. Generate the right version of MISSINGNO and run from battle, and you may suddenly find yourself with over a hundred of an item in a specific slot in your inventory. If you put the Rare Candy there before, you now can give your Pokemon over a hundred experience levels, or you could create stat-gain items this way, or lots of Master Balls.
Glitches such as these seems like they’re rare, but really, there’s lots of games that have them. It’s one of the perils of coding your game in assembly, really.
A bit of scanline flickering is a fairly common problem on the NES. Even Super Mario Bros. 3 had it, and that game was made by Nintendo themselves.
Game graphics in the 8- and 16-bit ages often came down to tricky hardware manipulation. The art of doing raster effects, changing the registers in the video hardware so as to divide the screen into different sections, ultimately comes down to timing. On the Atari VCS/2600, nearly all the graphics had to be done that way, but it was still a useful technique for over a decade after that.
A lot depends on the specifics of the video chip, a custom-built piece of silicon developed for the express purpose of taking graphics defined in memory and folding it, like electronic origami, into a shape that the TV would perceive as a broadcast signal. At that time, while it might still have been possible with clever coding, CPUs weren’t nearly fast enough to do that job themselves and still produce acceptable graphic quality and run game logic. (If you want to see what it would be like, I refer readers interested in doing it the very hard way to the amazing Freespin demo, which runs on a 1541 disk drive, and no video hardware at all.)
Older NES games used a supported bit of hackery called the “Sprite 0 Hit,” a signal the PPU would send at the moment the first of the system’s 64 sprites began to be drawn. By watching for it, games could do rudimentary raster effects on a system not designed for them. The issue there was processor time: the Sprite 0 Hit feature wasn’t hooked up to an interrupt line, so the program had to continually watch for it, checking a memory location repetitively over and over until it changed. Some games spent large portions of their runtime in a tight loop checking for the Sprite 0 Hit. Since, from the program’s perspective, the signal might come at any time, the loop needed to be tight, meaning the game couldn’t spend that time doing other work or else it might be delayed in responding to the extremely time-sensitive signal.
The MMC3 mapper had a special function though that could time out when a programmable scanline was reached, and send the processor an interrupt request at that time, greatly freeing up the processor for doing other things with that time. But not all programmers understood the best way to use it, which is why Mega Man 3 has some scanline glitching in a couple of very visible places, in the pause window and on the level select screen.
Displaced Gamers’ Behind the Code series, which we’ve linked to multiple times in the past, has done an exposé looking into how Mega Man III’s glitches happen (28 minutes), and even wrote some code that erases all trace of them. As usual for Behind the Code, the explanation is fairly technical, especially of the fix, but the first half of it is fairly comprehensible. No one says you have to watch the whole thing. Or, indeed, any of it, but I always enjoy them!
PannenKoel2012 is the Super Mario 64 enthusiast (that’s the only word I can think of that matches) who has been working on reducing the number of A button presses needed to finish the game. They haven’t gotten it down to zero yet, and likely never will, but by resorting to increasingly extreme measures they continue to figure out ways to get it down. I think they’ve been working at this project for over 12 years; the oldest video on their Youtube account is that old.
Of arguably more interest than their quest, though, is its interesting byproducts, which is a series of Youtube videos, on both their main channel and alternate channel UncommentatedPannen, which not only explain how their many subtle and effective stratagems work, but also a number of aspects of how Super Mario 64’s engine works, and even basic principles of computer science. These videos are so in-depth that they have their own wiki to track the concepts they use, to explain turns like Parallel Universe (PU) and Pedro Spot.
When I say they return, it’s not that they ever left, but it’d been a while since they had a solid explainer. Now they have one, it has spoken narration instead of the text that marks many of the best videos, and the production values have even increased a bit:
In this video, a clever way to manipulate the pendulums in Tick Tock Clock to crash the game after 39 1/2 days of playing also takes into its sweep an excellent explanation of many of the systems compilers use to represent numbers and their limitations.
The Legend of Zelda: Breath of the Wild is a gigantic game, and where content proliferates, so too do bugs. Many of these bugs are highly entertaining (my favorite is the bullet time bounce), but there are some that are just head-scratching, leaving one to wonder why does this happen? That the occur pulls back the curtain on the many technically complex things a big game like BotW does behind the scenes to realize its world, for, every step of a process that a system must go through is one more opportunity for something to go wrong.
Youtuber Jasper has made a 35 minute video about why, if Link stands in a specific spot in BotW, inside the broken corner of a stone wall, the cel shading usually applied to his model goes away, and he appears with normal light shading. In the way of Youtubers, the explanation is contained within a 35-minute discursive video that goes into the history of game lighting, why some older 3D games have graphics that have aged well while others don’t, the basics of cel shading, and still other topics. Here is that video, embedded:
The whole video is pretty interesting, and if you have the time and interest you should watch the whole thing. However, in the event that this is all tl;dw, allow me to summarize.
Because Breath of the Wild is both a huge game and has a dynamic world, baking lighting in into textures would consume way too much storage and memory, so lighting has to be done dynamically.
As an optimization measure, the more complex steps of cel shading are deferred to later in each frame’s rendering. The main rendering is done, then the cel shading is applied afterward, when the visibility of the area has been determined, so this effort-expensive process is only done for visible pixels.
One of the deferred steps of rendering marks which of nine different kinds of material will be applied to each pixel. Terrain in BotW is not cel shaded, while characters link Link are, so they have different types of material that determine whether that shading is applied to them.
In the location where Link’s cel shading disappears, there is a decal applied to the crumbling bridge that erroneously extends over the corner, and overwrites Link’s character material type with the terrain material, causing the cel shading not to be applied to him.