Skip to content

Prince of Persia reimplementation written in HTML5 / JavaScript


Notifications You must be signed in to change notification settings



Repository files navigation

Prince of Persia (JS) -

Prince of Persia reimplementation written in HTML5 / JavaScript (MS-DOS version)

Play Online

  • Browser:
  • Keyboard
    • Cursor keys: Movement
      • Left / Right key: Move Left/Right, Advance/Retreat
      • Up key: Jump, Climb Up, Block Attack
      • Down key: Crouch, Crawl, Climb Down, Sheathe Sword
    • SHIFT: Drink Potion, Grab Edge, Sword Strike
    • SPACE: Show Remaining Time
    • ENTER: Continue Game
  • Mouse
    • See Touch Controls for Mobile
  • Game Controller
    • Left / Right Stick, DPad: Movement
      • Left / Right: Move Left/Right, Advance/Retreat
      • Up: Jump, Climb Up, Block Attack
      • Down: Crouch, Crawl, Climb Down, Sheathe Sword
    • A / R / ZR Button: Jump, Climb Up, Block Attack
    • B / Y / L / ZL Button: Drink Potion, Grab Edge, Sword Strike
    • X: (1x) Show Remaining Time, (2x) Restart Level
    • Minus Button: Previous Level
    • Plus Button: Next Level
    • Any: Continue Game

Play Mobile

  • Browser:

    • Use Landscape Mode
    • Single Tab
    • Disable Landscape Tab Bar in Browser Settings
  • Add to Home Screen to start as Fullscreen App

  • Reduced difficulty (50%):

  • Touch Controls (tap/drag area on screen, fight mode in brackets):


    • Dragging can be used to trigger continuous move sequences, e.g.
      • Run Jump: Tap Left or Right -> Hold -> Drag in Left or Right corner
      • Jump Grab: (Run) Jump -> Hold -> Drag to Center (Shift)
    • Fight
      • Left/Right: Advance/Retreat
      • Shift: Sword Strike
      • Up: Block Attack
      • Down: Sheathe Sword

Play on Apple Watch

  • Mail/Message
    • Send mail or message to yourself with body:
    • On Apple Watch open Mail or Message app
    • Click included link to open Browser
  • Siri
    • Tell Siri '' on Apple Watch
    • Watch out for correct localized pronunciation
  • Play using Touch Controls as on Mobile

Play GitHub Version

Play Locally

  • Install Node.js
  • Clone:
  • Terminal:
    • npm install
    • npm start
  • Browser: localhost:8080


Url parameters are leveraged to save game state automatically (shortcut in brackets)

  • level (l): Current Level (1-14, default: 1)
  • health (h): Max Health (3-10, default: 3)
  • time (t): Remaining Minutes (1-60, default: 60)
  • strength (s): Guard Strength in "%" (0-100, default: 100)
  • width (w): Game Width in "px" (default: 0 (fit to screen))
  • shortcut (_): Write url in shortcut version (default: false)

Default url looks as follows:

Default shortcut url looks as follows:

Manual adjustments of url parameters is possible as preset options.

Custom Levels

Apoplexy ( can be used to build custom levels. Custom levels can be played performing the following steps.

Single Conversion

  • Save level as XML file in Apoplexy, e.g. ./xml/level1.xml
  • Call convert script, e.g. npm run convert .../xml/level1.xml
    • A JSON file is placed at /assets/maps/, e.g. /assets/maps/level101.json
  • Custom level ids starts beyond 100, e.g. level1.xml gets id 101, etc.
    • An optional second parameter can be used to control level offset
    • e.g. npm run convert .../xml/level1.xml 200 generates /assets/maps/level201.json
  • Start game locally with npm start and open game in browser
  • Change Url and set parameter level to the respective id, e.g. level=101
  • Note: No special events are supported

Batch Conversion

  • Place level files into folder /converter/<xxx>, where <xxx> stands for the offset (default: 100)
    • e.g. /converter/100: place all levels starting with 100 offset
  • Execute npm run convert
  • Corresponding JSON files are placed at /assets/maps/

Level Numbers

Converted levels from

Level Walkthrough

Level 99 - Chamber Play

Level 100 - Tower of Revenge



Prince of Persia reimplementation written in HTML5 / JavaScript








No packages published


  • JavaScript 99.9%
  • Other 0.1%