MININIM

Menininho is the Brazilian Portuguese word for male kid, and mininim is how it’s informally pronounced throughout the country. Kid is the term used by Jordan Mechner1 when referring to the main character of his most famous game — Prince of Persia — in its source code and documentation, because the character’s movements were derived from rotoscoping footage of Mechner’s little brother. MININIM is the Advanced Prince of Persia Engine, written from scratch by computer programmer and free software activist Bruno Félix Rezende Ribeiro ( oitofelix ). Bruno had a childhood dream of deciphering the secrets of his favorite game that introduced him to computing — a dream dreamt when he was just a kid, a dream realized now that he’s still a mininim deep in his heart.2

MININIM is the Advanced Prince of Persia Engine — a childhood dream, the free software implementation of Jordan Mechner’s masterpiece game, developed from scratch by Bruno Félix Rezende Ribeiro ( oitofelix ). MININIM is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

In addition to being already a complete replacement for the original game with several improvements, MININIM aims to have detailed documentation on all matters concerning the original Prince of Persia world, ranging from its design concepts to the engine’s practical use and development. MININIM documentation is free; you can redistribute it and/or modify it under the terms of the GNU FDL (Free Documentation Licence) as published by the FSF — with no Invariant Sections; either version 1.3, or (at your option) any later version.

MININIM features various improvements over the original game, too many to make an exhaustive list here. Some of its noteworthy features currently implemented are:

Portable to modern operating systems

Generalized multi-room support

Video, environment, hue and guard modes may be selected on-the-fly

Screen mirroring mode (inverts screen and gamepad axis horizontally)

Level mirroring mode (completely inverts level constructions horizontally on-the-fly)

Joystick mapping and threshold configuration

Haptics fully integrated into game mechanics

Improved battle system based on upgradable skills, arbitrary number of simultaneous fighters and smarter enemy AI

Any type of guard per level, styles applicable to any guard type and guard skills fine-tuned per guard

Sword can be drawn at will, but it is drawn and kept automatically when appropriate

Real-time responsiveness, higher world interaction accuracy, more stable animations, smoother collision and robust physics

New useful movements: normal jump hang, normal jump turn, running jump hang, running jump turn, hanging fall, hanging turn, falling turn, take sword anywhere

Complete level editor based on non-intrusive mode-line menus and mouse selection

Unlimited undo/redo for level changes

Integrated configuration system using multiple back-ends

Native (fully expressive) level format

Capability of loading level files in multiple formats: native, legacy, PLV and DAT

Consistency level generator module

Arbitrary combinations of foreground and background for constructions

Generalized fake constructions

Rich set of itemmizable constructions and items

Supports triggering of any tile

Screenshot capturing

Replay recording, playing and chain validation.

In MININIM, everybody screams!

The following additional features are planned to be implemented soon.

Legacy semantics (in progress)

Full compliance with the Standard Item Specification

Save state

Dynamic number of levels, rooms, guards and events

Guile scripting

Network play

Rewind time

Arbitrary resolution graphics set support

On-the-fly multiple sound set support

Level generator

Android, iOS, Mac OS X ports

Media

The following videos demonstrate features that are already implemented and will come up in the next release. If you like MININIM and want to show your appreciation or enable oitofelix to spend more time on its development (so these features come out faster and better), PLEASE, CONSIDER SUPPORTING MININIM DEVELOPMENT!

PODebug has a podcast episode from august 2016 titled Recriando Prince of Persia: Dois Projetos Brasileiros (Recreating Prince of Persia: Two Brazilian Projects) for which Bruno Félix (oitofelix) was invited to talk about MININIM. Here’s a MP3 for download (Portuguese).

A Youtube playlist of a full walkthrough of the standard Prince of Persia legacy level set, using MININIM’s replay capabilities is also available at oitofelix’s channel.

MININIM has been included in Jordan Mechner’s 30th anniversary edition of “The Making of Price of Persia”. It appears in section “Legacy”, on page 321. Jordan sent a signed copy of the book to oitofelix, which you can see below.

It reads:

Bruno Félix “oitofelix” Rezende Ribeiro Brazil Attached is a screenshot of MININIM, the free software Advanced Prince of Persia Engine I wrote from scratch in C and Lua, using the Allegro low-level game library and the IUP widget tool kit. Its features include Macintosh video mode (DOS VGA/EGA/CGA also availale) multiroom dsplay, real-time level editor GUI, and Lua REPL for on-the-fly scripting.

Download

MININIM is under constant and fast development. It uses a rolling release scheme, meaning that updated versions are often released as soon as new features have been implemented or bugs have been fixed. This way the latest developments are always available to an wider audience. Notice that its version number reflects the date of release.

Its user’s manual (in PDF format) is bundled in the hope that it might be useful, but keep in mind that it lags far behind the current development stage of MININIM and thus doesn’t describe several features thereof accurately or at all. The author plans to update MININIM’s documentation in a definitive manner when MININIM reaches reasonable feature-set stability. In case you’d like to help in speeding up this process by maintaining its documentation, you’re very welcome! Please, contact the MININIM community at its forum.

Windows

If you are under Microsoft Windows a MinGW build is readily available. No installation is required, just extract the zip archive and run ‘mininim.exe’.

mininim-201701122309-win32.zip

GNU/Linux

If you use GNU/Linux, you have to clone its VCS repository and build it yourself. It should be quite straightforward — just follow the advice given at its GitHub page. If you are planning to build Allegro from source consider using oitofelix’s fork for best results. It may have improvements brought to the library through MININIM.

Using MININIM

This briefly describes how to access most currently implemented MININIM features. You can have access to other features using the command-line. Use mininim --help for a complete list of the available options. In case you have any question about MININIM, the best place to obtain help is at its forum.

Key bindings

CTRL+R : restart game

: restart game CTRL+A : restart level

: restart level CTRL+G : save game

: save game CTRL+Q : quit game

: quit game CTRL+V : show MININIM version

: show MININIM version CTRL+S : enable/disable sound

: enable/disable sound CTRL+J : joystick mode/calibrate joystick

: joystick mode/calibrate joystick CTRL+K : keyboard mode

: keyboard mode CTRL+L : load configuration

: load configuration CTRL+P : save picture

: save picture F7 : load replay

: load replay ALT+F7 : record replay

: record replay F9 : change hue palette

: change hue palette F10 : change guard mode

: change guard mode F11 : change environment mode

: change environment mode F12 : change video mdoe

: change video mdoe D : change display mode

: change display mode F / ALT+ENTER : enable/disable fullscreen (desktop mode)

/ : enable/disable fullscreen (desktop mode) SHIFT+I : flip screen

: flip screen SHIFT+K : flip gamepad

: flip gamepad SHIFT+B : enable/disable room drawing

: enable/disable room drawing ESC : pause game

: pause game SPACE : display remaining time

: display remaining time + / = : increase time limit

/ : increase time limit - / _ : decrease time limit

/ : decrease time limit ( : decrease time frequency

: decrease time frequency ) : increase time frequency

: increase time frequency R : resurrect kid

: resurrect kid A : alternate between kid and its shadows

: alternate between kid and its shadows K : kill current enemy

: kill current enemy I : enable/disable immortal mode

: enable/disable immortal mode SHIFT+S : increase kid’s current lives

: increase kid’s current lives SHIFT+T : increase kid’s total lives

: increase kid’s total lives SHIFT+W : float kid

: float kid TAB : display skill

: display skill CTRL+= : increase counter attack skill

: increase counter attack skill CTRL+- : decrease counter attack skill

: decrease counter attack skill ALT+= : increase counter defense skill

: increase counter defense skill ALT+- : decrease counter defense skill

: decrease counter defense skill F8 : enable/disable level editor

: enable/disable level editor CTRL+Z : undo level modification

: undo level modification CTRL+Y : redo level modification

: redo level modification SHIFT+L : warp to next level

: warp to next level SHIFT+M : warp to previous level

: warp to previous level C : show direct coordinates

: show direct coordinates SHIFT+C : show indirect coordinates

: show indirect coordinates HOME : focus multi-room view on kid

: focus multi-room view on kid SHIFT+HOME : center multi-room view

: center multi-room view M : change multi-room fit mode

: change multi-room fit mode [ : decrease multi-room resolution

: decrease multi-room resolution ] : increase multi-room resolution

: increase multi-room resolution CTRL+[ : decrease multi-room width resolution

: decrease multi-room width resolution CTRL+] : increase multi-room width resolution

: increase multi-room width resolution ALT+[ : decrease multi-room height resolution

: decrease multi-room height resolution ALT+] : increase multi-room height resolution

: increase multi-room height resolution H : select room at left (right if flipped horizontally)

: select room at left (right if flipped horizontally) J : select room at right (left if flipped horizontally)

: select room at right (left if flipped horizontally) U : select room above (below if flipped vertically)

: select room above (below if flipped vertically) N : select room below (above if flipped vertically)

: select room below (above if flipped vertically) SHIFT+H : move multi-room view one cell to left (right if flipped horizontally)

: move multi-room view one cell to left (right if flipped horizontally) SHIFT+J : move multi-room view one cell to right (left if flipped horizontally)

: move multi-room view one cell to right (left if flipped horizontally) SHIFT+U : move multi-room view one cell above (below if flipped vertically)

: move multi-room view one cell above (below if flipped vertically) SHIFT+N : move multi-room view one cell below (above if flipped vertically)

: move multi-room view one cell below (above if flipped vertically) ALT+H : move multi-room view one page to left (right if flipped horizontally)

: move multi-room view one page to left (right if flipped horizontally) ALT+J : move multi-room view one page to right (left if flipped horizontally)

: move multi-room view one page to right (left if flipped horizontally) ALT+U : move multi-room view one page above (below if flipped vertically)

: move multi-room view one page above (below if flipped vertically) ALT+N : move multi-room view one page below (above if flipped vertically)

Level Editor Chart

The following schematic chart documents MININIM’s level editor functionality.

Thanks to Gutxi Haitz Céspedes who designed and released it freely under the CC BY-SA 4.0 and GNU FDL v1.3+ licenses.

Support MININIM development

MININIM development is voluntary. If you like this game and want to thank the author for the work he has done so far, or want to enable him to spend more time improving it, please make a donation! For values equal or greater than 50 US$ or 0.12 BTC your name will be acknowledged in the “Donors” section of the manual and in the donors page. If you decide to make recurrent donations, the total amount of your donations will be updated every month for all records. Thank you for your support.

PLEASE, SUPPORT MININIM DEVELOPMENT!

1 Jordan Mechner (born June 4, 1964) is an American video game designer, author, screenwriter, and filmmaker, best known for creating the Prince of Persia video game franchise and the 8-bit computer game Karateka.