Tag: superman

Superman (Atari 2600) alternate map Romhacks, part 3

After publishing part 2 of this series, I played my grid map romhack a few times, and I think it’s rather good. I don’t know that I would say that I prefer it over the original map, but this is certainly a viable alternative map.

After a few playthroughs, I notice a few things:

  1. The helicopter moves bridge pieces away from the Bridge screen much more frequently. In the original, once you’ve placed a piece at the Bridge screen, the helicopter would only rarely remove it.
  2. The helicopter seems to move pieces from their starting screen much sooner, as well.

I like both of these differences; they make the game more challenging, and I think, more fun. You really feel like you need to race the helicopter to complete the bridge task. But I think it’s worth experimenting with the map to see if there’s a way to restore the original design intent, by reducing the number of paths into the Bridge screen. It occurs to me that an easy way to do this is to make the two screens above and below the Bridge screen connect to each other, rather than to the Bridge screen. So the Bridge will exit vertically to those screens, but reversing course will skip over the Bridge, but still place you near the Bridge; players would need to figure out that they are “around the corner” from the Bridge in this map, which is potentially disorienting, but should be less of a problem than the original map, which puts you clear across into the middle of the other end of the city.

I do think that this map has a few peculiarities that make it sub-optimal.

  1. Some of the subway entrances are right next to their exits. There’s little point in a subway trip that results in you re-emerging on the overworld map one screen over from where you started. For example, the Red subway entrance is one screen away from two of its exits, due to being on the top left corner of the grid, and the wrapping effect. The Blue and Yellow subway entrances are about optimally located relative to their exit screens, and the Green subway entrance is directly above one of its exit screens.

It’s possible to remedy this by moving the subway entrances around, or by changing their exits to more useful screens for this map layout. I was reluctant to try this, because I wanted to keep the changes that I am making to the maps minimal, but it seems that these changes are necessary for the good of the game.

Metropolis 21/7

Another thing that strikes me is that I didn’t need to remove one screen from the overworld in order to have even rows. 21 = 3 x 7, so I could have made an overworld map of 3 rows of 7 screens. This might make the subways more useful, since it would make it easier to place the subway exits such that they are 3-4 screens from their entrances.

A 7×3 grid will allow all 21 overworld screens to be included in the new map. Again, I went to an image editor and re-arranged the screens to make a layout, then visually reviewed and analyzed the map for playabiltiy concerns, and made tweaks.

My first iteration of this was to lay the screens out in the original map’s horizontal sequence, and see how that would play. That map looks like this:

First iteration

Without actually playing it, it’s easy to miss things, but I can see that this map has a few potential issues:

  1. The bridge pieces starting screens are all on the west end of the map, and are nearby the Bridge screen.
  2. The Phonebooth, Bridge, and Jail are all on the bottom row, which makes the bottom row feel too important, and the top row feel unimportant.
  3. The “critical path” relationships in the original map are broken in this map. This may not be a problem per se, but it will make the new map feel less familiar to experienced players.
Superman bridge piece routes
The original Metropolis map has a very tight spatial relationship between the most important screens on the map. The new map layout breaks this by moving the Jail screen far away from the rest of the screens.

Otherwise, I think the map looks pretty decent. I’m not sure how I feel about the potential issues I mention above.

I do think that the Bridge should be the center piece of the map, so I shifted rows and columns in order to make it so, but the rooms are still in the original order, using the horizontal progression from the original map.

It’s interesting how shifting things around can change perspectives on things. With this view, I’m able to notice different things:

  1. Now all the “important” screens (Jail, Bridge, Phonebooth, Daily Planet, and all but one of the bridge pieces) are on the west end of town.
  2. But balancing that, all the subway entrances are on the East end of town.
  3. Subway exits are somewhat evenly distributed, but there’s a few interesting things to point out: The Red subway exits all line up in a column at the far west edge of the map, while the Yellow subway exits are all distributed across the top row. The Green subway exits follow a diagonal from the northwest corner of the map, moving southeast. And the Blue subway exits are scattered about as far from each other as they could be.
  4. Shifting the screens changes the loopback point at the top right, and as a result the screen that normally is to the left of the Phonebooth screen no longer is. Which, despite what I thought when I first decided to shift the screens to put the bridge in the center of the map, does fundamentally change the map. Then I realize… I did it wrong!

I can’t just grab the top row and move it to the bottom, and then slice the right couple of columns and move it to the left. That will not preserve the horizontal order of the screens. To do that, I need to grab the top-right screen, move it to the bottom left, and then let all the other screens shift right by one, snaking around. This approach gives this result:

Overall, it’s actually very similar to the first two iterations. It’s literally the same horizontal sequence as the first iteration, but it’s not all that different from the second iteration, either; the “important” screens are still mostly to the west, the subway entrances are still mostly to the east. I think the subway exits are a bit better distributed than in iteration 2.

The vertical path is quite different. I think this map will run slower, due to the placement of the Jail in the corner of the map, and its distance from most of the subway entrances, and the Phonebooth/Bridge screens. There might yet be some quick paths that will become apparent through repeated play, but for now I feel that the map feels disorienting because the Jail isn’t north of the Yellow subway entrance screen any longer, and I struggle to locate it as a result.

Certainly there are many other possible arrangements for the overworld map, and I haven’t even begun to re-design the subway. But I think this is enough to satisfy my curiosity, at least for the time being. I may come back and revisit this further if I feel a need to after playing the maps I already created more extensively.

There’s much more to do in a hack of Superman, as well. I would like to figure out how to randomize the starting places of the bridge pieces, for example. I would also be interested in figuring out how to put up a hard barrier around the outer edge of the map, rather than having the map wrap around at the edges. But these projects, if I ever attempt them, will have to wait until I have a deeper understanding of 6502 assembly.

Download all of my Superman map romhacks here:

Superman (Atari 2600) alternate map Romhacks

So for the first alternative map, I will just make the Up screen the same as the Right screen, and the Down screen the same as the Left screen. This means that there will only be the Horizontal progression through the map, and that Up/Right will be “forward” and Down/Left will be “backward” through this progression.

You can download the modded rom below:

I playtested this, and found that it works exactly as intended. The map is far simpler to navigate, and getting lost is now virtually impossible. Fly up/right to go forward, down/left to go backward, and all overworld screens appear in order. The confusing one-way vertical borders on the Phonebooth and Bridge screens are eliminated.

The downside of this is that traversing the overworld map is slower, since there are no shortcuts to be gained by using cornering techniques. You still can rapidly advance two screens in the horizontal map sequence by going diagonal from near the corner, transitioning on both the vertical and horizontal edge transitions. But compared to the original, where a vertical transition would typically advance you between three and five screens in the horizontal sequence, it’s much slower, and offers no real opportunities for useful shortcuts.

The only real shortcuts possible are via the subway system, which I left unmodified. Despite playing this game over nearly four decades, I’ve never bothered to memorize the subway in its entirety — there’s little reason to. The only exits of real importance are the ones that go to the Jail and Daily Planet. But with this map, knowing the rest of the exits is potentially more valuable, because it can get you to the other side of the overworld in less time than any other method. It may be interesting to study the exits and try to figure out alternate layouts that might make the map more interesting by providing additional useful shortcuts.

I can reliably win Superman typically in 1:30, +/- 15 seconds, but this variant took me 3:04 to win on my first play. I’m sure faster times are possible. The gangsters seemed to be bunched up more, and rounding them up preoccupied me at first, leading to the helicopter moving bridge pieces away, which I think happened earlier than normal. But because the map is essentially a two-dimensional line, finding the helicopter was trivial, making any challenge increase by the bridge pieces moving around quite minimal.

My impression is that this alternative map might have made the game more playable for very young players, ages 3-5, and as an “easy” version for beginning players, much like Superman‘s sibling Adventure offered players Game 1 with a simplified map. But overall, the simpler map makes the game less interesting and less challenging to play. But if you’re interested in the game’s design, playing this variant to see why it’s less interesting is… well, an interesting exercise. I invite you to download it and play it for yourself and make up your own mind. If you do, please drop a comment and let me know what you think.

My next Superman romhack will present the overworld map as a grid.

Hacking Alternative Maps into Superman (1979, Atari 2600)

My research on Superman has lead me to a deep understanding of the map topography, and I have come to regard it as an inspired design. But whenever I hear people talk about Superman, I feel like I must be in the minority. People who like the game tend to agree with me, while people who don’t, don’t.

Often I’ll hear players who do not have the appreciation for the game that I have complain that the map is a weakness in the design. I always rebut this by saying that yes, it’s confusing at first but once you learn it, it’s actually a strength. I can point to all the shortcuts that are made possible by the map topology, its utility in weighting the randomness of the AI movement, and argue that it’s actually beneficial that the map is confusing, because it makes the overworld seem bigger than it really is, and adds to the challenge of the game.

But I think it would be even more convincing to demonstrate alternative maps, and let players experience them and decide for themselves.

It’s fairly likely that I’m the only one in the world who cares about this, and I’m almost certainly the only one who cares about it as much as I do. But what the hey.

I decided to see if I could could learn how to hack the ROM for Superman, and change the map navigation in order to rearrange the map screens. This would be preferable for authenticity, but it might also be limiting, in terms of what’s actually possible.

If that doesn’t work, or if I have ideas for expanding on Superman‘s design that aren’t feasible in a romhack, the other option would be to remake Superman in GameMaker, keeping it as faithful to the Atari version as possible, and experiment with the map that way.

Alternative Maps

The easiest Map design to implement would be to make the vertical and horizontal sequences identical, and to make up/right be “forward” and left/down be “backward”. The subway system could be left unchanged, up to go to the next station, and any other direction to exit back to the overworld, keeping the exit screens the same as in the original. At the end of the list of overworld, we can loop back to the beginning.

The biggest problem with this redesign idea is that there are no overworld shortcuts, other than to take the subway. To get to/from anywhere, it is always a straight line. This is slow, tedious, and to me, it seems like it would be boring. Subway travel helps somewhat to speed up travel, and becomes more important. But a bigger problem is that the gangsters can’t really spread out deep into the map by randomly moving in one of four possible directions. Their possibilities have been halved; they can only go forward or backward to the next screen, and so they will all be found in the first few screens, and rarely if ever would they make it to the end of the map.

But on the plus side, this map is extremely easy to navigate, much harder to get lost in. Gone are the one-way vertical transitions from the Phone Booth and Bridge screens, and the confusion they created. This might make it an ideal variation for a very young player, or for someone who is very inexperienced with Superman.

The other easy to understand map would be a cartesian grid. We have a problem in that 21 overworld screens do not map neatly to a regular grid of equal rows/columns. We can take a 5×4 grid to get 20 of the rooms in, with one room left over. We could truncate the overworld to simply remove this screen, which is the easiest solution. At the end of each row or column, we can either have a hard edge, where you cannot proceed beyond, or we can wrap around to the start of the row or column, or we can increment the row/column and move to the start of the next row or column. I’m not sure how to make a hard edge work, though. The easiest way would be to make these edges refer back to the same room, but doing it this way, Superman would still warp to the other side of the same room, which would be weird. Still, as a proof of concept, it’s quick and easy to do.

The advantage of this map is that it would be still be easier to understand and learn. The disadvantage is that, at least using the first two traversal approaches, you can no longer go through the entire overworld by going in one direction. When the world loops, it will only take you to the beginning of the the current row or column.

The ROM Hack

I looked into it and discovered that the ROM hack path would be much easier than I had anticipated. So much of the work had already been done for me by others.

  • I searched the web and found decompiled assembly source code for Superman, which had been nicely annotated.
  • I learned that sometime in the recent past, someone named chunkypixel had released a Visual Studio Code extension called Atari Dev Studio.

This saves me a ton of time. I don’t have to learn how to disassemble the rom myself, and I don’t have to learn 6502 Assembly well enough to be able to make sense of the disassembled code to figure out what’s going on.

So, literally, all I had to do to get started was:

  1. Install Visual Studio Code
  2. Install Atari Dev Studio plugin
  3. Open the decompiled superman.asm
  4. Edit it
  5. Compile it
  6. Test it in Stella

I’m astounded that it’s this easy. The annotated source code is documented well enough that I can tell where I need to make my edits, and what the changes I need to make are. Hats off to the homebrew community for developing these tools and making the information generally available!

First, I did a test compile to make sure that the decompiled assembly that I had was viable. It compiled right away without any problems. I fired up Stella and ran it, and it ran, and seemed to play exactly like Superman. Success!

To make the edits, I read through the source .asm file and tried to understand what I could. Fortunately, the file is reasonably well documented. Without actually knowing 6502 ASM, I can’t say I understand everything I’d like to, but I can see enough that I should be able to make edits by trial and error, and make progress.

The section I’m interested starts off like this:

Screen00: ;unused??
;Screen Info: 8 bytes per screen
;Offset 0 = GFX bitmap low byte
;Offset 1 = GFX bitmap high byte
;Offset 2 = Foreground color
;Offset 3 = Background color
;Offset 4 = screen above
;Offset 5 = screen right
;Offset 6 = screen below
;Offset 7 = screen left
    .word IF2AC ; $F000
IF PAL
    .byte $46 ;red $F002
    .byte $08 ;grey $F003
ELSE
    .byte $36 ;red $F002
    .byte $08 ;grey $F003
ENDIF
    .byte <Screen00 ;$F004
    .byte <Screen00 ;$F005
    .byte <Screen00 ;$F006
    .byte <Screen00 ;$F007

From reading through the code, I infer that the stuff after a semi-colon is a comment, so the different comments explaining the Offsets help me to understand that Offsets 4 through 7 have to do with the connections between the different screens in the map. All I should need to do is update them with different addresses, and the map will change! Easy!

In my next update, I’ll present my modded Superman maps and do a little analysis of them.

“Null Room” hidden in Superman (Atari, 1979)

Atari gamer Marc Gallo has found a secret hidden Null Room in the game Superman (Atari, 1979). Accessed via direct manipulation of memory addresses in emulation, the room does not appear to be accessible through normal gameplay.

I believe this “room” is really just a memory location intended to store objects when they are off-screen, which can be displayed as a “room” in the game, but isn’t meant to be.

It’s interesting to me since I spent considerable time playing this game, and wrote an article some time ago, about the central role that the map and movement plays in the design of the game.

Topology of Metropolis in Superman (Atari 2600)

One of my favorite games on the Atari 2600 is Superman (1979), designed by John Dunn, and based on the program code from Adventure by Warren Robinett. This game has stayed with me to this day as one of my favorite games. I started playing it again recently, and began thinking about the different aspects of it that make it such an enjoyable game to play again, even 35 years after its release.

While it might appear to be a very basic game to a modern eye, in its day Superman had many innovative features. I won’t give it a full review here, but the one that I find most interesting is the game map. The world of Superman is much larger than most contemporary games of the era, most of which took place on a single, non-scrolling screen. The way the Superman’s map is laid out is confusing and non-intuitive, making the game very difficult for a new player, but once you start to gain a sense of how the different screens that make up the city are variously interconnected, it becomes possible to navigate very quickly through a number of methods which can be memorized with some effort and repetition. First-time players can take 15, even 30 minutes and up to win, while an experienced player who is familiar with navigation can often beat the game in under 2 minutes.

(more…)

Pixel Art – Superman 16×16

Superman pixel art by Chris Sanyk, 16x16px enlarged to 512x512px

Process notes:

  1. I did this in about 15 minutes worth of work.
  2. Tools: Paint.NET, and a 16×16 canvas, displayed at max zoom (3200%). Pixels were input using the Pencil, using the trackpad of my laptop. Nothing fancy at all!
  3. After I felt satisfied with my work, I created an enlarged version at 512x512px, to make it a little easier to see.
  4. I used a total of five colors: Yellow, blue, red, pink, black.
  5. I started out just drawing a stick man in black. Once I had a basic figure, I started coloring in pants, picked blue for blue jeans, but then decided that the blue looked like a good Superman blue, so I decided to turn it into Superman.
  6. Originally the drawing was more symmetrical, and seemed to be facing you. I shifted the neck over to the left one pixel, and (later, when I got to it) drew the S-shield off-center. Because the body is only 3px wide, I found it was especially important to allow myself to not be constrained by symmetry. Right-facing Superman hints at a three-dimensional appearance, as though we’re viewing him in 3/4 profile. It’s a tiny, but crucial detail, and shows just how little is needed to suggest dimension.
  7. After deciding to turn the figure into Superman, I picked a red for the waist.
  8. I drew the cape last. Since it uses the same red as the waist, I had a little bit of a problem where the cape touched the waist, causing them to blend together and the shapes became lost. To fix this, I added hands at the end of the arms — the left hand provides separation between the cape and the waist. Originally I was just going to leave the arms all blue, and not worry about hands, but having them proved very, er, handy, and enabled me to solve this problem.
  9. Superman normally has red boots. I didn’t think they were necessary, and so didn’t bother to draw them. Just to test my guess, I tried making the bottom two pixels of each leg the same red as the cape and waist. I didn’t like it. I think keeping the legs a solid unit is more important than adding in the “detail” of the red boots.

Next steps:

  1. Use this basic figure as the basis of other superheroes and see how many I can pull off in the 16×16 format.
  2. Create animations for this figure, using as few frames as possible, to convey actions like: jumping, running, flight, fighting.

Inspiration

You might think that is as minimal as you can get and still have a recognizable superman, but in fact you’d be wrong. One of my favorite Atari 2600 games was an inspiration to the drawing above. Here’s a sprite of Superman in flight (enlarged) that I swiped from Google image search. This is also just 16x10px… but…

Superman Sprite (Atari 2600)

Just three colors: Pink, blue, red. No hair, no S-shield, yet still you can tell who it is. A masterpiece of minimalism.