PORTCLUB
Cabecera de Solomon's Key 2 (OpenDana)
Port nativo

Solomon's Key 2 (OpenDana)

Port nativo de Solomon's Key 2 (OpenDana) para PC.

Solomon's Key 2 (OpenDana)

Port nativo basado en su ficha de origen.

README del repositorio

OpenDana

OpenDana is a native, moddable reimplementation of Solomon's Key 2, the NES puzzle game also released as Fire 'n Ice. It is written in C11 with a deterministic core, runs on Linux, Windows and macOS, and adds a built-in level editor, save states, gamepad support and a mod system.

OpenDana does not include any of the original game's content. To play, you need your own copy of the European ROM (see Requirements / legal). On first start, OpenDana reads it once to extract the game's data (levels, graphics, text, music and sound effects) into a local folder. It never runs code from the ROM, does not emulate the console, does not copy or upload the ROM, and does not need it again afterwards.

Features

  • A deterministic C11 core with no SDL dependency; the SDL2 front end is a thin layer on top.
  • A level editor and a level catalogue, both driven with the mouse.
  • Save states in numbered slots, a mute key, fullscreen and gamepad support.
  • Mods: a content package of JSON and PNG files that you can replace or overlay, with schemas and a validator.
  • A command-line API for external tools: validate, play and render a level file.

Requirements / legal

OpenDana is an independent, unofficial project. It is not affiliated with or endorsed by the owners of the original game, and it contains no ROM, no graphics, no text, no music, no sound effects and no level data of that game. The names and trademarks of the original belong to their owners (see NOTICE).

To play you need a legally obtained copy of the ROM of the European release of Solomon's Key 2 / Fire 'n Ice. OpenDana accepts only the file whose SHA-256 is:

853646c50889dfb7a74c2acf7cf3b76f42d044745433f706dca33f47d826cd1d

Check yours with sha256sum FILE (Linux), shasum -a 256 FILE (macOS) or certutil -hashfile FILE SHA256 (Windows). Any other file is refused without changing anything.

Install

Download a release and pick one:

PackageHow to start
Linux TAR (opendana-X.Y.Z-Linux-x86_64.tar.gz)unpack it anywhere and run bin/opendana; keep bin/ and lib/ together
Linux AppImagechmod +x the file and run it
Windows ZIP (opendana-X.Y.Z-Windows-x86_64.zip)unpack it anywhere and run bin\opendana.exe; keep SDL2.dll next to it
macOS DMG (opendana-X.Y.Z-macOS-universal.dmg)open it and drag OpenDana.app to Applications; the first time, right click it and choose Open, because the app is signed ad hoc and is not notarized by Apple

The Linux and Windows packages are for 64-bit x86. The macOS disk image is universal: the app holds an x86_64 and an arm64 build. The arm64 half is compiled but has not been run on Apple Silicon, so it is untested. Each package carries the licence, the third-party notices and the corresponding source code. Verify a download with sha256sum -c SHA256SUMS (on macOS, shasum -a 256 -c SHA256SUMS). opendana --version prints the version and the commit it was built from.

First run: import your ROM

The first start shows an import screen. Press Choose ROM... and pick your file, or drag the ROM onto the window. If your system has no file chooser, or as soon as you start typing, the screen shows a field for the path. You can also import from a terminal:

opendana --import-rom /path/to/your-rom.nes
opendana /path/to/your-rom.nes      # import, then start

The import is deterministic and all-or-nothing: if it fails, nothing is left half written. It is checked against a manifest of file hashes built into the program. The ROM is read once and never copied; afterwards you do not need it. If a later version of OpenDana needs different content, the game tells you and asks you to import again.

Where things are stored:

LinuxWindowsmacOS
imported content$XDG_DATA_HOME/opendana/content/base (default ~/.local/share/opendana/...)%LOCALAPPDATA%\opendana\content\base~/Library/Application Support/opendana/content/base
saves, states, screenshots$XDG_DATA_HOME/opendana/%LOCALAPPDATA%\opendana\~/Library/Application Support/opendana/
settings (settings.ini)$XDG_CONFIG_HOME/opendana/ (default ~/.config/...)%APPDATA%\opendana\~/Library/Application Support/opendana/

--content DIR, --save FILE and --settings FILE use other locations.

Controls

Keyboard to NES pad:

KeyPad
ArrowsD-pad
Z or SpaceA
XB
EnterSTART
Right ShiftSELECT

Interface keys (they never reach the simulation):

KeyAction
Escmenu
F1controls screen
F2console RESET
F5 / F9save / load a state in the current slot
F6 / F7previous / next slot
Mmute
F11fullscreen
F12screenshot

Gamepads work through SDL's game controller mapping. opendana --help lists every option.

Level editor

opendana --editor (or Levels in the menu) opens the editor: a toolbar, a palette of materials, mouse painting (left click paints, right click erases, middle click picks, the wheel changes material), undo and redo (Ctrl+Z, Ctrl+Y), Ctrl+S to save and F5 to test the level in the same window. The catalogue stores each level as a JSON file and lets you play, edit, duplicate, delete, import and export levels.

Mods

Everything the game shows comes from a content package of JSON and PNG files (schemas in schema/). A mod is a directory with a mod.json that adds or replaces some of those files; mods are layered on top of the package and the last one wins.

opendana --mod example                     # the example mod, mods/example
opendana --mod /path/to/my-mod             # any directory with a mod.json
opendana --validate /path/to/my-mod        # check a package, a mod or a level file
opendana --play-level my-level.json --round 3
opendana --render-level my-level.json --out level.png

A mod never needs to contain anything of the original game, and yours must not. Read the guide: docs/MODDING.md.

Building from source

You need a C11 compiler, CMake 3.16 or later and the SDL2 development files (for example libsdl2-dev). Nothing is downloaded during the build.

bash build.sh                       # build/opendana
SDL2_DIR=/path/to/sdl2 bash build.sh   # use an SDL2 installed elsewhere

This is the same on Linux and macOS (on macOS, point SDL2_DIR at an installed SDL2 prefix, or configure with CMake and pass -DOD_SDL2_FRAMEWORK=/path/to/SDL2.framework to link a framework). On Windows the packages are cross-compiled with MinGW-w64.

This also builds build/libopendana_core.a (the core, no SDL) and the unit test runner. To check your clone:

build/opendana_tests_public --category unit

See CONTRIBUTING.md for the rest of the tests and the rules for contributions, and docs/RELEASE.md for how the packages are built.

Repository layout

include/opendana/   public headers of the core
src/core/           deterministic C11 core: game, scenes, flow, audio, content
src/ext/            extension layer without SDL: editor, catalogue, states, settings
src/import/         importer of the user's ROM
src/platform/       portable paths
src/render/         presentation and PNG writer
src/app/            SDL2 layer: window, input, audio, interface
schema/             JSON schemas of the content package and of mods
mods/example/       example mod
packaging/          package scripts, icon, notices
tests/, tools/      tests and tools
external/           vendored libraries with their licences

Licence

The code is free software under the GNU General Public License, version 3 or later: see LICENSE. Third-party components and their licences are in NOTICE. The imported game content is yours, for personal use, and is never part of this project.

Comentarios (0)

Inicia sesión para dejar un comentario.

Sé el primero en comentar sobre este juego.