RSSAmplifier

Blog

sf2platinum

A look inside the code of Street Fighter 2

sf2platinum.wordpress.comRSS feed ↗10 posts

Latest posts

Row scrolling for parallax effects

In the last post we looked at what tilemaps are and how they’re used in SF2, and ended with a mention of how multiple layers (or scrolls) of tilemaps can be moved at different amounts to achieve parallax scrolling, creating the illusion of depth. This really only works for elements that are standing upright, though. […]

What are tiles and scrolls?

[This post is a prologue to an upcoming post about parallax scrolling in Street Fighter 2] Most games of the SF2 era were tile-based, meaning the graphics weren’t drawn in individual pixels, but with square tiles of pixels. This helped reduce the RAM that would be required to store individual pixels (often in multiple layers) […]

Getting started in Reverse Engineering

In this post, I’m going to outline a few areas of study that will help you get started reverse engineering a game, and outline the method I took with World Warrior. I won’t be going into too much detail that can already be found elsewhere, only pointing you in the right direction so you can […]

I’m back!

I’ve had a bit of contact through the blog lately, and have been helping someone who’s starting out on reverse engineering another game but doesn’t have much reveng experience, so I’m going to compile my communications with him into a series on how to get started on a project like this. Most of it will […]

Behind the name

I saw this blog got a lot of attention in the last few days, so I though I’d at least post to say I’m still around, even if I haven’t done much recently. I even woke up the old twitter account, so you can follow me there if you like: https://twitter.com/sf2platinum Here’s the story behind […]

The AI Engine

By today’s standards, the Artificial Intelligence in Street Fighter 2 World Warrior isn’t very sophisticated. These days, when most people talk about AI they’re talking about machine learning. There’s not any of that in SF2. Anyone looking for some insight into how to write an AI engine for a game today will be disappointed. Moves […]

Not just code, but data too

Originally the project included a lot of data structures dumped directly from the ROMs, such as sprite animation, palettes, hitboxes, AI bytecode and more. The only data not ported were the actual tiles; the game depended on four tile ROMs from the original game to be present. Since all this data from the code ROMs […]

State of the project in 2010

A video from 2010, bugs by the thousand! Most have been fixed now, but haven’t got around to making a new video. Here it can be seen running on MacOS and Linux, as well as some of the tools I made to convert the sprites.

Random number generator

The random number generator is pretty simple. A 16-bit seed is stored which for convenience in code is split into two 8-bit values. The routine is at 0xdd4 in the sf2ua ROM. Here’s the equivalent C code: short sf2rand(void) { int x = (g.randSeed1 <> 8; g.randSeed2 += x; […]

Guile&#8217;s World Warrior bugs

One of the first things I went looking for was to see what the cause of Guile’s Invisible Throw bug (and others). This is why I started with the earliest, buggiest version, SF2UA, date 910206. A ‘move’ in Street Fighter is encoded using three variables, one to signal whether the move a standing / crouching […]