Video: Its Programmer, On SNES DOOM

I’ve been doing a lot of high-effort posts lately, even for things that should be fairly quick. Working to make this more sustainable, here’s a laid-back post that’s mostly just a Youtube video of a talk between the guys of Digital Foundry and Randy Linden, coder of the SNES port of DOOM, which uses the SuperFX chip to make the hardware push polygons at a rate that, while not stellar by PCs-of-the-time standards, at least not abysmal.

Let’s run down the differences of hardware:

PC running MS-DOS: targets VGA monitors, displays all its pixels in software, but makes up for it with a minimum requirement of a 386 running (if memory holds up over nearly 30 years) at 33 mHz.

SNES: Its processor is a much slower workalike of the 65C816, a 16-bit version of the 6502, running at 3.58 mHz. While it makes up for its slower clock speed with a simpler design, meaning instructions complete generally in fewer cycles, it’s hard to make up for that 10-fold difference in speed.

Their use of specialized graphics hardware was an important advantage, at the time, of consoles over personal computer hardware. Even many standard home microcomputers, like the Commodore 64 and Atari 800, had dedicated graphics hardware that helped games run better than what most PCs could do. Even when VGA came out, the standard had no hardware-level support for scrolling or sprites.

Consider what it takes to scroll a screen without hardware support: something in the system has to be able to move every pixel from one spot on-screen to another. The NES pulls this task off by having a bank of memory that its PPU can be pointed within, meaning the memory could stay in the same place, and the graphics chip would just work from a different region within it. Sadly, this technique is not amenable to 3D graphics, which usually do require every pixel on the screen to be recalculated every frame, either in software or hardware.

The SNES is known for having a rather slow chip for its time, but more demanding games tended to make up for it with co-processor chips included on the cartridges. The most well-known of these are the DSP-1, which functioned as a math co-processor; the SA-1, which was basically a second 65C816 running at around triple the speed and with a few added features; and the SuperFX, which ran at about the SA-1’s clock speed but functioned as a graphics accelerator. (The later SuperFX 2 ran at twice that speed.)

These were far from the only add-on chips included on Super Famicom and SNES carts. Since the SNES had a much larger address space than the NES’s 6502-clone, the need for mapper chips was much less, but these co-processors were used in a number of more notable games to help it make framerate goals.

Hm. Well, I tried making it a laid-back kind of post. Ah well, back to playing Live-A-Live.

DF Retro: The Making of Doom on Super NES – The Original ‘Impossible Port’

Let’s Learn About Pixel Scaling and Rotation

When you start using emulators, it won’t be long before you’re brought up against the choice of which scalers to use, a bewildering collection of options with names like Nearest Neighbor, AdvMAME3x, and RotSprite.

Resizing pixel images in an intelligent way is a difficult problem for many reasons. Most techniques intended for use on photographs won’t apply, since they’ll produce unacceptably blurry results when applied to extremely low resolution art. Pixel art is designed so that every dot matters, and adding new pixels carelessly can cause problems, such as Mario flipping us the bird in the right-hand image below:

Mario vs MMarrioo:A possible result of bad upscaling.

Additionally, being done frequently in real-time emulation, scaling algorithms must be fast. Yet the fastest solution, called Nearest Neighbor, produces very blocky results, and also only really works well if images are scaled up to an integer multiple of the original in X and Y dimensions.

A good backgrounder of various issues is available from an old blog post here, but there’s been some interesting advancements in the field since then. RotSprite is a good contemporary solution that also can rotate pixel art images well.

The problem of rotation is made simpler by a nifty trick that’s used by many image editors and libraries. It turns out you can rotate an image by an arbitrary amount with three simple shear operations. (If you don’t know what shearing is, it’s just tilting an image by some amount in a direction. It’s pretty awesome that this works since shearing is easy to do.)

Example image borrowed from the above linked page. I’m amazed this works.

Video: Make Your Own Raycaster

A raycaster engine is a simple 3D engine that just draws lines from the player’s position to the nearest terrain wall for each horizontal pixel on the screen. It was what was used in one of the foundational 3D action games, id Software’s Wolfenstein 3D.

For those with a coding bent (the word bent seems so suitable when it comes to people who enjoy programming), Youtube account 3D sage demonstrates how to implement a raycaster in a series of three videos. The first one is embedded below:

Here are links to the whole series: Part 1 (17 minutes), Part 2 (14 minutes), and Part 3 (22 minutes)

Later he did another series on implementing the kind of engine that’s in DOOM, but we’ll look at that at a later date.

Sonic Retro’s Physics Guide

tl;dr: The description of the physics and implementation details of the 16-bit Sonic the Hedgehog games hosted at Sonic Retro is complete and amazing.

This is one going out to all you developers out there, either current or aspiring.

It’s amazing to me how fussed, nay, obsessed-over the 16-bit Sonic the Hedgehog games are even to this day. There are a lot of good things about them, and arguably the best is their platforming engines, which are among the best in the field. They take advantage of the processing power of the Genesis/Mega Drive, fueled by a Motorola 68000 processor, the same processor as the classic Apple Macintosh, clocked only slightly slower. This was basis of Sega’s infamous “blast processing” slogan at the time, touting how much faster the Genesis was than the Super Nintendo Entertainment System. This was somewhat unfair, as SNES carts often came with supplemental chips in them that acted like co-processors, and was of a completely different architecture as well with different characteristics, but it did make the Sonic engine possible. A lot of the credit also goes to Sonic programmer Yuji Naka, who is legendary in game coding circles for a very good reason.

If this is the kind of discussion that makes your heart race, we’re glad to have you reading Set Side B! If it’s not, that’s okay. I’m a bit stymied myself, even though I love dives like this.
(All images in this post from Sonic Retro.)

The result of the Genesis’s power and Naka’s expertise was a game engine with, yes, raw speed, but also a lot of nuance. If you jump and land on an enemy or monitor, you can control the height of your rebound, no matter how fast you were going when you hit it. If you jump while on a slope, you don’t jump straight up but away from it, which takes some getting used to at first but can be taken advantage of. There’s lots of fun little cases like these, and figuring them out, and their implications, is the source of a lot of the joy of playing Sonic the Hedgehog for the first time.

Those two places where the slope only intrudes slightly into Sonic’s ground tile are what get me.

I’d even argue, without the solid engine, and great level design taking advantage of it, all of Sega of America’s marketing efforts, which formed the foundation of the media juggernaut that Sonic has become today, with several cartoon series and comic books, and two successful movies and a third one in the works, would have been for naught.

Judging by the later 2D adventures, the nuances of Sonic the Hedgehog’s engine are difficult to grasp without a good amount of effort. It is likely that Sega themselves don’t have the institutional memory to understand how they worked, which is why they went to Christian “The Taxman” Whitehead, and others from the fan game community, to make Sonic Mania, which has a faithful recreation of the original games’ physics.

Why has no one made a Sonic half-pipe trick skateboarding game?

Bringing it back around, the obsession of the Sonic fan community has produced a number of disassembles of the game’s code, which have served as the basis for a wide array of romhacks of rather shocking levels of quality. I wrote about many of those in the Someone Set Up Us The Rom ebooks (ahem).

They also served as the basis for the subject of this post, the physics descriptions at Sonic Retro. Here is basically all you need to make a Sonic-style platformer. Synthesizing this and putting it into practice is a formidable task on its own, but it’s a doable one, and you don’t have to read source code (other than your own) to do it. To those who attempt this task, we salute you! And let us know how it goes!

Sonic Retro: Physics Guide

Zelda Classic & ZQuest

It’s hard to believe that Legend of Zelda fangame construction system Zelda Classic and ZQuest is 23 years old. Many such systems have fallen by the wayside during that time, but Zelda Classic continues on. Its first versions were made for DOS, but it continues to see improvements to this day.

ZQuest has this weird interface where they rolled their own controls for everything. The dev system seems to be rendered in Allegro.

Zelda Classic and ZQuest are made specifically to make overhead view action-adventures in the Legend of Zelda style, to the extent that it has graphic sets taken directly from the games and many items that work like their console counterparts.

It even simulates many of the quirks from the various Zelda series titles. And yet, it doesn’t require you to abide by them. Pretty much every technical or creative limitation of the 2D Zelda series has an option to disable it if you like, but if for some reason you consider it intrinsic to the experience you can keep it too.

The graphics can be completely changed out. With it, you can make a game that doesn’t look anything like a Zelda title, which I suspect is why it’s been able to survive 23 years in a legal landscape overseen by a Nintendo increasingly draconian in its approach to guarding its intellectual property. Still, it’s pretty heavily aimed at making Zelda fangames, right down to having pages and pages of checkboxes for every known quirk of Zelda engine behavior.

Look at that gloriously pedantic list of quirks! The ZQuest developers are awesome.

While it does offer a scripting facility (which it’s difficult to find documentation for), ZQuest is mostly a construction set type of program. You place tiles and enemies, lay out overworlds and dungeons, decide what items to include, and go. The program itself has little in the way of documentation but the site has a tutorial that should help one get started. I strongly suggest, if you are interested in creating for this system, that you read it.

Fan projects going on for this long suggests a kind of mania, but the ZQuest people are serious. They even forked Allegro to fix bugs and adapt it for their purposes. May they keep it going for another 23 years and beyond.

Zelda Classic & ZQuest

Masahiro Sakurai’s Game Design Series

Sakurai’s fifth video, on frame rates.

A lot of the gaming web has been fawning over Kirby and Smash Bros. creator Masahiro Sakurai’s design videos. I haven’t had the chance to look at them yet, but they look interesting at least. They’ve been coming out at a good clip, like one every two days.

Sakurai’s star is so high right now, that it’s worth noting that (going by memory) he left Nintendo with a bit of a cloud over his head, after Kirby Air Ride was seen as something of a failure. Nowadays KAR (nice acronym!) is seen as an underrated classic, and I have put many hours into its City Trial mode, which is terrific, a tiny open-world high-speed racing/party game. More people should have the chance to play it; it is unique, which is something I can’t say about many other games. While the 3DS version of Smash Bros. has a mode inspired by it, in versus mode human players cannot interact with each other during the exploratory portion of the game, which harms it somewhat.

At the height of his abilities, Sakurai can make really interesting and new kinds of games, like Smash Bros. was, and like Kirby Air Ride and (the sadly neglected these days) Meteos are. It’s a shame that Smash is so popular, one of Nintendo’s biggest tentpoles, enough to crowd out his other work. I’m really interested to see what the next crazy idea he comes up with will be!

Sakurai’s Game Design Videos, on YouTube

Video: Why Was 3D Pinball Removed From Windows Vista?

I’ve mentioned the work of NCommander before, when I posted a link to his video about getting DOOM to run on an IBM RS/6000.

Another interesting game-related video he’s made is about the beloved old pinball game that was included with Windows during the XP days, but vanished with Vista. The game’s exclusion was the subject of a blog post by former Microsoft developer Raymond Chen, who mentioned that he had trouble getting the game to work correctly under 64-bit Windows. The ball kept clipping through objects, and sometimes falling through the plunger and out of the table. NCommander’s examination indicates that the problem was probably related to floating point precision as Chen had said, but that the cause was probably more complicated than that, and may have had to do with issues getting the game to run correctly on Intel’s ill-fated Itanium architecture, their first attempt at a 64-bit processor.

NCommander’s explorations were made possible by the discovery that, although there was no way to get the installer to offer it, the 3D Pinball game files are on the CD for the various editions of XP for Itanium. For more information, I refer you to the video, embedded above.

Notably, Chen has responded to NCommander’s video with more details about the game’s removal, which make the story even more interesting, bringing in Alpha AXP, a second obscure 64-bit architecture that could run Windows XP.

It should be said that all of this is much more technical than the usual post here. Please don’t freak out too badly if this makes little or no sense to you. We’ll have something marginally more comprehensible for you tomorrow.

Pixel Art Manipulation Tools

Tiled is a popular open-source tool for tilemap construction

Popular and prolific game asset creator Kenney has a page up at Github that links to some of his favorite tools for manipulating pixel art, such as creating sprite sheets and extracting images out of them. It’s got a lot of useful info! If you have an interest in this style of art, especially making games with it, these programs are worth having in your toolbox.

Kenney: Manipulating pre-made game assets

The Twisting Gyre of Mobile Game Ads

If the algorithms that drive the ad servers of social media sites have you pegged as a casual gamer, you will be given a little window into a world of madness. Searching for “mobile game ads youtube” will turn up a fair number of YouPotatoes pointing at that madness and saying, “Look! Isn’t it crazy! How can that be allowed!”

Those kinds of videos themselves are their own exploitative little world, but they have a point. One such video recently made the Blue (that’s what Metafilter users call their main site), and it’s a prime example of both worlds, accurately calling out a lot of mobile gaming ads for being batshit insane, while also having the dismissive, hyper-edited, sound-effect-laden style all too illustrative of the problems with YouTube’s own engagement algorithms. It’s a crappy thing, making fun of a very crappy thing.

Edit: Here’s the video itself, which might be useful, it’s about 13 minutes long:

The thread is interesting, arguably more interesting than the video. Two MeFi users currently in the industry had a conversation there, and after a somewhat rancorous beginning, it was fairly civil by internet standards. Jilder is a writer in the mobile games space, and Ryvar works as a dev in more traditional computer gaming.

Here are some selected quotes:

[…]the ads aren’t aimed at children. Children don’t have money. The game developers want whale tier players – so people who can drop thousands of dollars a year on a game without blinking. There is a whole industry dedicated to building games to find and catch these sorts of players and the game developers are very much not interested in children – the ethics of that not withstanding, the legal implications are expensive.

Jilder

[…]boy, hes got no idea how wild ads can get if he’s only seeing the Dude Ads. Lily’s Garden ads are a whole ass thing all on their own and one of the grande dames of the genre, along with Merge Mansion, which is I suspect the game Alison mentions above. Merge Mansion’s most recent crop of ads full on have Oscar Award winner Kathy Bates starring as sketchy grandma Ursula (which, I must stress, are basically a tv mystery series only very loosely connected to the game).

Jilder (same comment)

The basic model for mobile game profitability is to release several dozen lightly reskinned clones of the exact same game and invest continued development into the handful that attract a sustainable population of whales. It’s grift, all the way down.

Ryvar

When mobile exploded the market and dropped financial barrier to entry by an order of magnitude, both game dev and game consumer culture were considerably thinner on the ground and even the best things to come out of the resulting environment (Genshin Impact, Lineage 2 Revolution) are still exploitative as shit. […] Part of the reason devs and gamers alike fucking hate Diablo Immortal is that it’s an extremely public beachhead for the tentacles of pure capitalist greed into a culture that has until now been moderately successful at keeping this avalanche of bullshit at bay.

Ryvar

All competitive online gaming has a pay-to-win element, it’s just not easily seen a lot of the time – it’s just that you pay for a decent gaming rig, and in my case you pay for having a decent internet connection. Like I’m in Australia, so lol how’s my ping bruh?

Jilder

But the gatekeeping around AAA rated gaming is huge – gamergate bros are just the most visible manifestation […]. As I mentioned in my first comment here, I’m a middle aged woman, so you know, I’ve been dealing with gatekeeping shit around gaming my entire gaming career.

Jilder

There’s lots more interesting discussion to be seen, start from this point and read on from there.

RPG In A Box

Lots of players are also armchair designers, so we like to present interesting tools as they appear. One that recently went up on Steam is the voxel-oriented RPG In A Box ($29.99). It has that interesting 3D-yet-8-bit vibe that make the Dragon Quest Builder games so appealing.

There are a lot of interesting tools out there for a variety of skillsets, and greatly differing levels of flexibility. Some considering are RPG Maker MZ and MV (who knows what the letters are meant to stand for), Zelda Classic for action games, and for more flexible tools it might be worth checking out Godot, or maybe creating something with Python and Pygame.

A Map Randomizer Denounces Map Randomization

Keith’s Gem Wizards Tactics

I’ve known and spoken with Keith Burgun for over a decade now, and his early hit 100 Rogues for iOS was featured back on @Play. (It’s sadly now unplayable because of a combination of rights issues and Apple’s upgrade policy that makes old iOS software impossible to use.)

Many of Keith’s games made heavy use of randomization. 100 Rogues was a roguelike, Auro was a single-character puzzle/tactics game with randomized maps, and his current Gem Wizards Tactics (Steam, Switch, Xbox, Android) uses random maps.

But Keith is always reexamining his ideas. A while back he decided he didn’t want to keep making roguelikes, taking the ideas from it he liked and leaving the rest behind. And now he’s questioning his use of randomization as well.

He’s written an essay on his blog, titled “Space Narratives: A Map Randomizer Denounces Map Randomization.” It’s got some very interesting points, and he draws in the awesome Ocarina of Time Randomizer project in his discussion, as a way to have benefits of randomness without having to randomize the map itself. It’s good food for thought for developers interested in procedural content!