OpenSupaplex

PS VITA / PS TV OpenSupaplex v7.1.2

tthousand

Moderator
OpenSupaplex
by sergiou87

opensupaplex-5-png.27815

  • Supaplex is a game made in the early nineties.

    Since then the source code has been lost. Some enthusiasts have disassembled the game, fixed many bugs, and added many features. Today the game and the so-called speed fix can be downloaded free from here. The source code for the speed fix is likewise, unavailable.

    OpenSupaplex is a 1:1 reimplementation of the original game in C and SDL, with just a few changes to make it easy to use with game controllers, and also easy to port to any platform.

  • Supaplex is a video game created by Philip Jespersen and Michael Stopp, two Swiss students, and published by Digital Integration in 1991.

    And after almost two months of work, I've reverse-engineered (almost) the whole game and reimplemented it in C. It's a 1:1 clone of the original game for PC, using the original data files, and it's completely open source and available under the GPLv3 license with the name OpenSupaplex from my GitHub repository: https://github.com/sergiou87/open-supaplex

    If you're interested about this reverse-engineering process, I talked about it in this thread: https://twitter.com/sergiou87/status/1254364851419447298

    Description

    Supaplex
    is an extended clone of Boulder Dash, but it introduces a number of new elements that were not present in Boulder Dash, including bugs, pieces of base that randomly cause a life-threatening electrostatic discharges, Ports, which limit Murphy's movement to specific directions, and terminals, which set off yellow Utility Disks. Utility Disks are explosive floppy disks and come in three different colors: Orange Disks work like Zonks, but explode when hit or when falling. Yellow Disks do not fall yet may be pushed in any direction, but not pulled (which allows creating Sokoban-like puzzles), and explode when the Terminal is used. Red Disks can be carried and dropped when convenient, exploding seconds after.

    Supaplex is the first Boulder Dash-like game that is not fully grid-based: while the playing field is an obvious grid, the objects do not 'snap' from one grid position to another, but can be halfway or 'in between' grid positions while moving or falling. This behavior has led to a number of well-known bugs that can be turned to the player's advantage, many of which need to be exploited to complete fan-made levels. For instance, by turning around quickly, the player can cause an enemy or rock to 'bounce' off Murphy.

    The game also applies 'gravity' on some levels, which means that Murphy will fall down empty spaces and will be unable to go back up, unless he climbs up by using bases. Gravity is not actually designated - the player can only notice via trial-and-error.

  • - Up/Down/Left/Right: left joystick or directional pad
    - Removing bases/infotrons next to Murphy: Square button + direction
    - Detonate red disk: hold Square button
    - Show/hide bottom game panel: Triangle button
    - Show number of red disks: Circle button
    - Change game speed: L and R buttons
    - Exit/back: Select button
    - Pause: Start button

  • If you want to build the original game from its disassembled source code, please refer to the instructions in cilliemalan's repo.

    Other than that, OpenSupaplex can be built for any of the following platforms:

    • macOS
    • Windows
    • Linux
    • PSP
    • PS Vita
    • PlayStation 3
    • Nintendo 3DS (one build for Old 3DS, and another one for New 3DS)
    • Nintendo Wii
    • Nintendo Wii U
    • Nintendo Switch
    More platforms (like Android, iOS and tvOS) to come Soon™.


    Prerequisites


    Depending on the platform, you need to install a different toolchain to build the game for that platform. You will also need to install the libraries needed to make it work. Those are basically SDL and SDL_mixer, and their dependencies. All ports use SDL 2, except for PSP, Nintendo 3DS and Nintendo Wii, which use SDL 1.2.

    All platforms supported are built from CI using GitHub Actions. You can check those workflows and the CI scripts used in them for more info about how to prepare the dev environment.


    Building


    Once the development environment is set up, building the game is usually as easy as:
    Code:
    $ make

    On macOS, just opening the Xcode project and running it is enough.

  • If you like this project, there are several ways you can contribute to it:

    • Reporting bugs: just file an issue in this repo, detailing the bug and how to reproduce it as much as you can. It's even better if you can record a demo of the bug using the demo feature of the game and upload the file.
    • Requesting features or ports: again, filing an issue in this repo is the way to go, detailing what you need as much as you can.
    • Submitting Pull Requests: you can also contribute with your own code. Just, please, be mindful of the code style and project structure used already.


    Contributing with new features


    New features are more than welcome. However, the main goal of OpenSupaplex is having a 1:1 clone of the original Supaplex game, in every possible aspect, and only making exceptions wherever is reasonable to do so.

    New features must NOT change how the game works or looks in a way that CANNOT be avoided. For those kind of features, adding some kind of setting so users can opt-in is the way to go.


    Contributing with ports to new platforms


    The whole reason for OpenSupaplex to exist is to make the experience of the original game available natively to as many platforms as possible. If you want to bring OpenSupaplex to a new platform, please go for it!

    But please be mindful of how ports are structured already in the repo:

    • Create a subfolder in the root of the repo with the (lowercase) name that represents the new platform. That folder should contain everything needed to build and bundle the game for distribution.
    • If needed, inside the src folder you can create also a folder with the (lowercase) name of the platform and add specific implementation files there.
    • If you can, avoid plaguing the code with #if statements for the new platform.
    • If you find a bug that only happens in the new platform, and presumably is a bug in either SDL, SDL_mixer or any of their dependencies, please, fix the root of the problem and don't write workarounds in the game's codebase. Not only you won't pollute OpenSupaplex with hacks that belong elsewhere, but you will also be contributing and helping people using SDL and SDL_mixer in that platform. I have done that many many times while working on the different ports, and it's a great experience.
    • It'd be very helpful if you also got some CI scripts to allow me building the new port from the GitHub Actions.


    Contributing with feedback


    I'm also very open to suggestions about how to make things better. Constructive feedback on my code, how to structure the project to make it easier to handle all the ports… just file an issue and we can discuss it there.


    Hint for packagers for Linux distros


    By default OpenSupaplex on Linux reads and writes files in current working directory. To make it more package-friendly, provide the following in CFLAGS: -DFILE_FHS_XDG_DIRS -DFILE_DATA_PATH=/usr/share/OpenSupaplex

  • As expressed in cilliemalan's repo, the disassembled assembly source code of the game is released under the MIT license.

    This repository also includes the resources from the original game, now distributed as freeware, that belong to their original authors.

    On the other hand, I release the reimplementation in C under the GPLv3 license.

    If you have a problem with this please don't hesitate to contact me.

  • v7.1.2:

    NEW:


    FIXED:

    • The Nintendo Switch port can now be played in Applet Mode. Virtual keyboard support has been disabled (thanks @rjimenezda).


    v7.1.1:


    FIXED:
    • LB/L1/L and RB/R1/R buttons won't change the game speed anymore when used in the main menu.
    • Wii and Wii U ports had the wrong title in the Homebrew Channel.
    • Fixed game panel behavior when you restart a level with it hidden. Now it will be shown when you restart a level.


    v7.1:

    NEW:

    • Added support for PSP, Nintendo 3DS, Windows 64bit, macOS, PS3, Wii and Wii U.
    • Added Music and Sound Effects.
    • Added support for saving and loading game states.
    • Bumped the default game speed from 5 to 10 (maximum).
    • Added different scaling modes.
    • Improved gamepad controls:
      • LB/L1/L and RB/R1/R buttons can be used in the main menu to select a different level set.
      • LB/L1/L and RB/R1/R buttons can be used in during the game to change the game speed.
      • Y/Triangle button (X on Nintendo consoles) shows/hides the bottom panel during the game.
      • B/Circle button (A on Nintendo consoles) displays, for a few seconds, the number of red disks you have.
      • Back/Select/Minus during a game will exit the level immediately.
      • Start/Plus during a game will pause the game.
    • Added advanced menu giving access to many options that were only available with a keyboard before, or not available at all:
      • Restart the level.
      • Sound and music volume.
      • Change the scaling mode.
      • Game speed.
      • Play/record demos.
      • Debug options (show FPS, load/save state, remove Zonks/Snik Snaks…). If you use these, your progress won't count!!
      • And more things!
    • Added command line options in platforms that support this. Just run the game with --help for more info.
    FIXED:
    • Fixed many MANY bugs. Now the game should behave exactly as the original, validated by almost 7000 pre-recorded demos.


    v7.0:

    This is the initial version for Nintendo Switch and PS Vita. I chose version 7.0 because the original game and its subsequent updates went up to 6.3.

  • o1-png.27816

    o2-png.27817

    o3-png.27818

    o4-png.27819




NEWS COVERAGE:
https://www.psx-place.com/threads/o...remake-of-supaplex-a-game-from-the-90s.30292/

SOURCE:

https://gbatemp.net/threads/opensupaplex-for-ps-vita.564446/
 

Similar threads

Back
Top