OITOFELIX

MININIM

MININIM logo

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

MININIM multi-room features

Notice that animations, physics, level editor, multi-room support and other features have been further improved since this video was recorded.

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.

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
  • CTRL+A: restart level
  • CTRL+G: save game
  • CTRL+Q: quit game
  • CTRL+V: show MININIM version
  • CTRL+S: enable/disable sound
  • CTRL+J: joystick mode/calibrate joystick
  • CTRL+K: keyboard mode
  • CTRL+L: load configuration
  • CTRL+P: save picture
  • F7: load replay
  • ALT+F7: record replay
  • F9: change hue palette
  • F10: change guard mode
  • F11: change environment mode
  • F12: change video mdoe
  • D: change display mode
  • F/ALT+ENTER: enable/disable fullscreen (desktop mode)
  • SHIFT+I: flip screen
  • SHIFT+K: flip gamepad
  • SHIFT+B: enable/disable room drawing
  • ESC: pause game
  • SPACE: display remaining time
  • +/=: increase time limit
  • -/_: decrease time limit
  • (: decrease time frequency
  • ): increase time frequency
  • R: resurrect kid
  • A: alternate between kid and its shadows
  • K: kill current enemy
  • I: enable/disable immortal mode
  • SHIFT+S: increase kid’s current lives
  • SHIFT+T: increase kid’s total lives
  • SHIFT+W: float kid
  • TAB: display skill
  • CTRL+=: increase counter attack skill
  • CTRL+-: decrease counter attack skill
  • ALT+=: increase counter defense skill
  • ALT+-: decrease counter defense skill
  • F8: enable/disable level editor
  • CTRL+Z: undo level modification
  • CTRL+Y: redo level modification
  • SHIFT+L: warp to next level
  • SHIFT+M: warp to previous level
  • C: show direct coordinates
  • SHIFT+C: show indirect coordinates
  • HOME: focus multi-room view on kid
  • SHIFT+HOME: center multi-room view
  • M: change multi-room fit mode
  • [: decrease multi-room resolution
  • ]: increase multi-room resolution
  • CTRL+[: decrease multi-room width resolution
  • CTRL+]: increase multi-room width resolution
  • ALT+[: decrease multi-room height resolution
  • ALT+]: increase multi-room height resolution
  • H: select room at left (right if flipped horizontally)
  • J: select room at right (left if flipped horizontally)
  • U: select room above (below if flipped vertically)
  • N: select room below (above if flipped vertically)
  • SHIFT+H: 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)
  • SHIFT+U: move multi-room view one cell above (below if flipped vertically)
  • SHIFT+N: 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)
  • ALT+J: 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)
  • 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.

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.

2 Of course, none of this is reason enough to name a game engine “MININIM”, if not by the fact that it’s a really cool palindrome!