Norbert wrote:maybe [Google] would support the creation of an HTML5 version of PoP1 that uses the DOS DAT files
So, I never contacted Google about this.
The reason is that I used to be excited about (the <canvas> element of) HTML5, but the excitement subsided.
Of course, everyone is free to contact Google or Mechner about this.
Anyways...
I'm looking for feedback on the following.
I've been thinking about bringing PoP1 for DOS natively to modern platforms. Several people have started working on such ports, but nobody has gotten very far. David's room-drawing code is impressive, but I think a modern port would move away from using the old DAT files. I think several ports that have been in the works were too Windows-centric. A modern port would be cross-platform. It would probably use a gaming engine or multimedia library. We would like it to be open source and free software, although the question is how Ubisoft would react. I don't think the situation would be very different if only custom tile graphics would be used. Could it be zlib licensed or GPL'ed (2 or 3). It would be more of an "enhanced port" than a regular "port", given the extra features that could and probably would be added. Should it be named FreePrince. Would it be wise to put it up on GitHub, from the start or at some point. How about the old tricks (glitches), should they still be present; would be lots of work to implement. Will Mechner release a remake or port in three months, when it's PoP's 25-year anniversary.
I could use the SDL library. I could use C. C++ isn't necessary and would only make things unreadable for me. Would it be a collaborative project and, if so, who would be interested to partake. How would people work together, who could do what. In theory I could do the whole thing myself. I may not be able to get the fighting with guards exactly right; might be tricky. Why work on this; it could be a fun process and it would be possible to add multiplayer support (vaguely see the other player's tiles if they are different, like a fallen loose tile). Why not work on this; it would be lots of work and DOSBox works fine on many platforms.
On the Princed Forum, the "FreePrince" sub-board could be renamed to "PoP1 for DOS Remakes" or something. The threads about other remakes could then be moved there (PoP Unity, Arabian Nights 2D, PoP Dot Net, Prince of Persia 2D). The word "FreePrince" could be added to some of the threads about FreePrince, so it's clear what they are about.
What about the tile sizes. The original game was 320x200, with a 320x8 black bar (hitpoints, level number) at the bottom and 320x3 of the upper room at the top. This leaves 320x189 for 10x3 tiles, which is 32x63 per tile. However, both horizontally and vertically tiles are (partially) placed on top of each other. The maximum tile size appears to be 64x83, for the palace balcony. We'd want to double size everything, to give modders more to work with. This means that all tiles would be equally sized at 128x166, regardless their content. Their backgrounds transparent. Each with one foreground and one background layer, to allow objects (like the prince) to pass through them. This means (72 x 4 =) 288 images, with full-color palettes. No reason to separately implement CGA (Color Graphics Adapter) and EGA (Enhanced Graphics Adapter) graphics. I would later change apoplexy to use two-layered tiles, plus when using the default images it would add a third, toggle-able, layer with the green outlines and markings (loose tile, stuck chompers, and so on). Then the enhanced port and apoplexy could share (custom) graphics.
Audio: basically change everything to an easier format. OGG (or MP3, FLAC) instead of MID, maybe also instead of WAV. Or stick with WAV for sound effects, but standardize all those to 44100Hz, 16bit, stereo.
What would be difficult, what easy. Properly displaying the tiles would be easy. Getting the thing to run at 12fps with working (flame, potion, whatever) animations, also easy. It could work with the XML level files in the same format that apoplexy exports, which would be easy to open, read, change, save. Playing music and sound effects is easy. Getting the prince to move around isn't all that difficult either. Per movement set (like climbing a ledge, crouching, dying, drinking, hanging, falling, running, jumping (up, side, while running), climbing up level door steps, turning (slow, quick), stepping forward) it would use the same size rectangles. Maybe even the same size for all those. The x-axis and y-axis movement of that content can be figured out by playing the original game using DOSBox, making screenshots while using ESC to advance frame-by-frame. Keeping track of the prince's coordinates would not be difficult.
Getting the same wall randomization as the original game, I don't know how I would do that. Maybe extract the algorithm from the original game. The spikes that go in and out, that's just a matter of checking the prince and guard coordinates. Opening gates and level doors, also easy. Checking whether the prince reaches gates in time is also easy, since gates are always at the same tile locations and we can keep track of which animation frame those and the prince are at. Keeping track of the frames is also used for determining whether the prince can/should quickly turn and whatnot. Opening and closing stuff when using buttons - working with events - isn't difficult. Loose tiles wouldn't be difficult to implement. Chompers; their movement and how they kill, not difficult. Picking up the sword, also easy. Death animations, not a problem.
Keeping track of hitpoints is very easy. Fighting would be difficult; probably the most difficult thing to implement. Showing the (regular, fat, shadow, skeleton, Jaffar) guard graphics wouldn't be hard but it would be lots of work, just like getting the parring and such exactly right. Jumping through the mirror, not difficult. The potions level, would it be necessary. How about the demo level. The intro sequence would be easy to add. Saving and loading progress is not difficult. Highscores, allowing the user to enter text would not be difficult but takes time to implement. Keeping track of the playing time shouldn't be too difficult. The cutscenes are not difficult to add. Pausing the game (ESC): easy. Also easy are displaying the remaining time, allowing the player to quit, to restart the level or game, to toggle music/sound effects on and off.
Special events are doable (level 1: falling entry (= level design), tile activation; level 3: checkpoint, skeleton raises; level 4: mirror placed, jump through mirror; level 5: shadow drinks potion; level 6: shadow closes gate; level 7: falling entry (= level design); level 8: mouse opens gate; level 12: tile change, shadow appears, tiles appear, falling tiles, Jaffar takes a fighting pose, flashes when Jaffar dies).
Allowing the player to enable cheats, which includes being able to start in any level. Kill enemy (k): easy; resurrect (r): easy; increase or decrease time left (+/-): easy. Showing coordinates wouldn't be difficult. Allowing the player to look to nearby rooms with the n/u/h/j-keys isn't difficult. There's no real need to implement Shift+b (blocking non-animated objects). Floating is just a matter of showing the animation and keeping track of (and updating) coordinates. Healing a life, getting an extra hitpoint, warping to the next level; all easy. Inverting the screen, that could be tricky. Doable though, since SDL has functions for that. (Just like I'm scaling in apoplexy for zooming, it's possible to rotate/flip images.)
Again, feedback is most welcome.