Hi all. I’ve gotten the ‘bug’ to make a game. I’d love to make a faithful port of Prince of Persia. I just started playing around yesterday, to get a sense of whether or not it could work at such a small resolution, and I think it’ll look OK, based on a couple of images I quickly resampled and loaded into a basic game shell for a test (I will redraw them based on the original B&W Apple 2 assets if I go forward with this).
The characters will be pretty minimally detailed, but as long as the motion is fluid, I think it would work.
I’ve also played with some 3-color variants, and they look MUCH better, especially the characters at this size. I thought about using the ‘flash between 2 images’ technique to get the mid-tone grey, but I’m going to struggle with space as it is, and that would basically double the space needed for the sprites, if I understand the technique correctly. I could just do the characters, though, since the level tiles will look fine at 1-bit color. The characters sprites are only about 14 pixels tall, so the space needed for each is tiny, but the hallmark of this game is it’s fluid movement animation, so I’d probable favour keeping as many frames in as possible over having better graphics.
The problem is going to be space. There’s a fair bit of game logic to code, on top of there being far more sprites than I was imagining for the dungeons, palace, traps, cutscenes, guards of varying types, etc.
The original creator, Jordan Mechner, breaks down the memory usage on the Apple 2 version like this:
Obviously, the Arduboy has far less everything available to it. My hope is that there’s a way for me to do it via the new FX functionality, but I don’t know if it’s feasible. Is it?
My thoughts are to store as much as possible on the flash memory, and only pull it down as needed:
- Images would only be pulled as needed. For instance, all cutscene background and character sprites only on the AB while the scene is active. Same for dungeon levels, palace levels. Same for enemy types. I don’t know if any levels have more than 1 type (and if so, this is a concession I’d be willing to make to make this work)
- Music, if possible, would only be required on the title screen, and perhaps cutscenes, so I’d like to have that live primarily on the flash as well.
- All level map definitions should be fine to store there and pull down.
I’m assuming all the above is possible. There may be other ways to save space. This is where my questions come in:
Is there a way that I could store certain game logic routines on flash, and only pull them down as needed?
Seeing as Jordan used 48K just for code, this is where my biggest worry lies. My hope is that certain “one-off” sequences can be moved to flash, and only loaded in when you enter the pertinent “room” (this game doesn’t scroll - it’s room by room, and if some rooms take a moment or 2 longer to load, it should be fine).
Some examples of “one-off” sequences would be where you find and pick up a sword, a special mirror that you jump through and it creates a “shadow” version of yourself (who also shows up in a few rooms in that level afterwards). It’s been many years since I played through the entire game, but I think there will be a couple more.
Only some rooms have traps, like falling floor tiles, sliding blades or floor spikes that pop out. Only some have pressure pad tiles that you step on to activate doors.
An even bigger win would be to be able to swap the combat logic in and out depending on the screen. There really aren’t a whole lot of combat scenes. Even if it turns out to be possible on a technical level, I’m not sure that I’d save much space, since I think there are rooms that have an enemy + other elements like traps. I could, though, make some changes to the level designs to help here.
So… is it possible to store expanded game logic on the FX chip, or is that idea dead in the water? My guess is that I’ll need all the game logic loaded into the onboard memory, but thought I’d ask.
Any other ideas of things I could do to make a faithful, full port possible?