Traditional roguelike game with pixel-art graphics and simple interface


Shattered Pixel Dungeon

A Roguelike RPG, with randomly generated levels, items, enemies, and traps! Based on the source code of Pixel Dungeon, by Watabou.

Shattered Pixel Dungeon currently compiles for Android and desktop platforms. It is available from GitHub, Google Play, Amazon, and F-Droid.

If you like this game, please consider supporting me on Patreon!

There is an official blog for this project at

The game also has a translation project hosted on Transifex.

Note that this repository does not accept pull requests! The code here is provided in hopes that others may find it useful for their own projects, not to allow community contribution. Issue reports of all kinds (bug reports, feature requests, etc.) are welcome.

If you'd like to work with the code, you can find the following guides in /docs:

  • [Bug/Feature] Pathing Quirks

    [Bug/Feature] Pathing Quirks

    Hello again,

    While exploring the dungeon, there are a few situations that cause the player to path ridiculously and sprint across the dungeon inefficiently. One such case is when the ghost suddenly appears in your path, blocking it. This will cause your player to suddenly reverse direction and go in a roundabout path to get to the original destination. Mirror images will also produce a similar result. Intuitively, I would expect this to result in the auto-pathing to pause not unlike when an enemy enters the field of view.

    Another pathing quirk has to do with plants, specifically sungrass. If you click on a tile on the opposite side of the plant, given the right setup, the pathing will cause you to run onto and off the plant, immediately wasting it. It would be nice if the pathing would avoid the plant, not unlike a trap.

    Similarly, when in a room such as the garden with long strings of high grass and weird visibility/fog of war, it's possible to click on an explored tile on the opposite side of a tile covered by FoW. The player will begin to run along the optimal route, get to the tile that had FoW but is now visible, step to the side of it and step back before continuing along the route. Ideally, the player should run along the visible route, the new tile is then visible and determined to be safe to run along (in the case of it just being High Grass). The route should then effectively be a straight line, instead of an almost straight line with a 1 tile kink.

    The pause/resuming behaviour of the auto-pathing is a little counter-intuitive. There are some cases where the auto-pathing pauses, you can do things like fight a monster, then resume the pathing. There are other cases where the auto-pathing hard-stops, but you would think "why can't I resume from here?". Unfortunately I don't have any hard details/steps to reproduce these conditions, but I'm aware of them existing through casual play through. I'll try to keep my eye open for particular examples.

    Once again, thanks for your hard work on the game! I look forward to your thoughts on these pathing quirks!


    opened by larssorenson 20
  • How about PC version

    How about PC version

    opened by KOLANICH 20
  • No music on Oneplus5T/LineageOS

    No music on Oneplus5T/LineageOS

    Got a Oneplus5T with LineageOS as a new phone, and noticed that Shattered Pixel Dungeon doesn't play any music, despite it being unmuted.

    I wonder if it's me who messed up somehow, if I found a really obscure bug, or if it's a know issue. I restored the app from backup using TitaniumBackup, I guess something weird might have happened there. It confuses me even further, that I seemingly can uninstall the game, reinstall it from F-Droid, and my save is still there. It does get deleted if I delete the data using Android's "delete data" feature.

    This doesn't happen with the "normal" pixel dungeon.

    The device is rooted, and I have access to ADB, so I could definitely provide additional infos/try additional things. However, I'm not that experienced with actually debugging android apps...

    opened by praecipitator 19
  • Feature Request: Long-press to move

    Feature Request: Long-press to move

    For the most part, (Shattered) Pixel Dungeon has a very good interface. But one of its few shortcomings is that there's no way to move to a space without interacting with it (e.g. picking up an item, entering a staircase), unless that space is next to a wall. I propose that this could be accomplished with a long press.

    Enhancement Fixed Indev 
    opened by ManaUser 18
  • I18n support

    I18n support

    Please start changing hard set private static final String values, to R.string costants :)

    In order to allow users to submit custom value-*/strings.xml.

    It will probably be a rather long operation.

    (In a few weeks maybe I'll have time to help out!)

    opened by valerio-bozzolan 18
  • Avoid wasting dewdrops

    Avoid wasting dewdrops

    Stepping on a dewdrop when at full health and a full (or not yet found) dew vial wastes the drop. Rather than that, what about just not picking it up? (Dewdrops can always go to the bottom of any pile of items on the floor, to not block picking up other items.)

    Enhancement Fixed Indev 
    opened by joshtriplett 17
  • Ranged weapon targeting should be more user-friendly

    Ranged weapon targeting should be more user-friendly

    Right now, targeting a ranged weapon or wand has a lot of problems.

    If you aim for an enemy around a corner, you have to work out whether the number of squares between you, the corner, and the enemy will allow the weapon to pass the corner or hit the wall.

    However, under some circumstances you can actually hit an enemy around a sharp corner by aiming for a point past that enemy instead. (Particularly noticeable if you aim for an enemy further down and hit the closer one instead; that often happens with pirahnas.)

    If you aim for an enemy down a straight corridor, and unintentionally touch the wall instead of the enemy, your weapon will hit a wall between you and the enemy and stop. Particularly deadly if it's your boomerang and you're also using it as your primary melee weapon.

    And worst of all, if you misjudge the ability to hit an enemy with a wand, and hit the wall instead, you'll typically hurt yourself with it.

    I don't think it makes sense to introduce artificial difficulty through a difficult-to-use interface that makes it easy to shoot yourself in the foot.

    A few possible improvements:

    One possibility would be to say that you can always hit anything you have line-of-sight to. At a minimum, if it's possible to hit an enemy at all, targeting that enemy directly should work, rather than aiming for a point past them.

    Alternatively, if it remains possible to see something but not hit it, then if you attempt to throw something at a location, or fire a wand at a location, and your shot won't actually hit that location, don't do it; instead, produce a message "You can't hit (that location | the $enemy) from here.". To hit a spot, you should actually aim at that spot, and if you can't hit it, the game should prevent you from trying.

    Related to that, you should only be able to target yourself if you touch the actual square you're on. And doing so should produce a warning message, similar to the one for attempting to throw a beneficial potion.

    Finally, you might consider adding a "targeting" mode when aiming a weapon or wand, which dims squares you can't hit and puts a targeting reticle over enemies.

    Fixed Indev Quirk 
    opened by joshtriplett 17
  • opengl config

    opengl config

    I don't know if you @00-Evan wanna make it possible to run shattered on an android emulator (which comes with android sdk), but if you want so, you should change the following code in PD-classes/com/watabou/noosa/

        view = new GLSurfaceView( this );
        view.setEGLContextClientVersion( 2 );
        view.setEGLConfigChooser( false );
        view.setRenderer( this );
        view.setOnTouchListener( this );
        setContentView( view );


        view = new GLSurfaceView(this);
        // view.setEGLConfigChooser( false );
        // changed to be able to run it on my android emulator
        view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
    Fixed Indev Quirk 
    opened by Sarius997 16
  • music keeps playing after the game has been exited

    music keeps playing after the game has been exited

    I experience the following phenomenon:

    • after exiting the game (not swiping it away, just hitting the home button), the music will stop. So far this is the expected behaviour.
    • after an undefined amount of time, the music will start playing again, although the game is still in the background.
    • today, I found out this could even happen when the game was not among the list of open windows.
    • the only way to stop the music is then to reopen the game and close it through swiping it away.

    Phone is a OnePlus 5 on android 9.0.8

    Fixed Indev Quirk 
    opened by yepyepyep4711 13
  • Headset button doesn't work

    Headset button doesn't work

    Device: Sony Xperia Z2

    Android version: 5.1.1

    Headset button utilizing app: Spotify

    Headset button doesn't work when I'm in your app. In other apps it works fine.

    Fixed Indev Minor 
    opened by Cysioland 13
  • Well of Healing doesn't fully heal players wearing cursed rings of strength

    Well of Healing doesn't fully heal players wearing cursed rings of strength

    If you have a Cursed Ring of Strength equipped, and you step into a Well of Healing, you will be left with only 90% hitpoints or so (depending on the level of the ring).

    For example, I was left on 48/54 HP after stepping into this one, and had a Ring of Strength +1 (after removing the curse).


    Fixed Indev Quirk 
    opened by AddisonG 1
  • Message

    Message "Badge endorsed: X potions cooked" doesn't appear

    Normally, when I obtain a badge during a run, a message "Badge endorsed: BADGE" pops up. However after brewing potions and exiting alchemy UI I have never seen "Badge endorsed: X potions cooked" message show up, even though I got the badge normally at the end of the run. It seems like when the alchemy UI is opened, the message isn't generated.

    opened by Block-Vader 0
  • upgrading item didn't increase count in quick slot

    upgrading item didn't increase count in quick slot

    I had two +2 boomerangs in my quick slot. I upgraded another +1 boomerang. The quick slot still shows two +2 boomerangs, even though inventory now has three +2 boomerangs. Screenshot_20210424-212356

    Fixed Indev Quirk 
    opened by protective1 0
  • Sped up animations after using Freezing Potion, Scroll of Drowsiness and Swiftwhistle seed

    Sped up animations after using Freezing Potion, Scroll of Drowsiness and Swiftwhistle seed

    I was trapped and was low on health, so I needed to do something

    1. Used unidentified potion, it happened to be Freezing potion
    2. Used unidentified scroll, it was a Scroll.of Drowsiness
    3. Threw a Swiftwhistle seed and stepped on a plant
    4. Ate small ration

    Animations appear to be sped up after these actions


    Fixed Indev Quirk 
    opened by LyraLover 1
  • crash when tapping on mirror image

    crash when tapping on mirror image

    I just came up the stairs - on my way up to win the game. If I click on the mirror image (which was there when I came up the stairs), the game crashes. I started the game and repeated the tap and the game crashed again. Then Android popped up a dialog saying that the app keeps crashing. This is on Android 11, Build number RQ2A.210305.006. Screenshot_20210412-210540 Screenshot_20210412-210941 Screenshot_20210412-210959

    Fixed Indev Minor 
    opened by protective1 2
  • Small improvement to desktop build readme

    Small improvement to desktop build readme

    So I cloned the repository and had some small issues getting the project to compile using JDK 16 but it worked perfectly fine for version 8. I was going to create a pull request with a small troubleshooting section added to the Quick setup part of the readme but noticed you do not want PRs. Love the work you do, simply superb game. Congrats!


    If you downloaded the latest JDK and you're getting compilation errors such as Could not find tools.jar or module 'x' does not export 'y' to unnamed... try uninstalling the JDK and installing Version 8.

    Enhancement Fixed Indev Quirk 
    opened by Khalarii 1
  • Tiles wrongly stay visible after blinking

    Tiles wrongly stay visible after blinking

    1. Stand in the middle of a large room.
    2. Blink a fair distance towards an enemy.
    3. Watch as the tiles behind you stay visible when they should be outside of the vision range.

    Version: 0.9.2a

    Fixed Indev Quirk 
    opened by MiroslavR 6
  • Enhancement: view (sub)class abilities

    Enhancement: view (sub)class abilities

    After choosing a class or a subclass, there isn't a way to see what abilities are associated with that choice. This is useful to get the nuances of the abilities, or when playing as less familiar classes. Some of these abilities can be seen in detail through the applied buffs, but not all of them. My best guess is a new tab on the stats/talents/buffs dialog is the best place to put it.

    Enhancement Fixed Indev 
    opened by JumperPunk 1
  • Dualshock/Gamepad feature

    Dualshock/Gamepad feature

    As I installed the game from my linux-based pc (1), that great idea came to mind!

    What if I could use my ps4 controler instead of keyboard?

    Is this possible? Is it easy?


    Deferred Enhancement 
    opened by toumbo 2
  • Enhancement: Alchemy pots report how much energy they have left

    Enhancement: Alchemy pots report how much energy they have left

    Sometimes you come back to level for the Alchemy pot. However, I hate committing to travelling all the way back to the pot only to discover that it does not have enough energy to perform the action I want. I think it would be nice if when you "search" the pot (from a distance), it would report how much it energy it still has.

    Deferred Enhancement 
    opened by langdon 4
Roman Beskrovnyi 145 Mar 6, 2021
TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO

About TwelveMonkeys ImageIO is a collection of plugins and extensions for Java's ImageIO. These plugins extend the number of image file formats suppor

Harald Kuhr 1.2k Mar 12, 2021
Thumbnailator - a thumbnail generation library for Java

March 11, 2021: Thumbnailator 0.4.14 has been released! See Changes for details. Thumbnailator is now available through Maven! What is Thumbnailator?

Chris Kroells 3.5k Mar 13, 2021
Java interface to OpenCV, FFmpeg, and more

JavaCV Commercial support: Introduction JavaCV uses wrappers from the JavaCPP Presets of commonly used libraries by researchers in the field of comput

Bytedeco 4.9k Mar 12, 2021
Simple Java image-scaling library implementing Chris Campbell's incremental scaling algorithm as well as Java2D's "best-practices" image-scaling techniques.

imgscalr - Java Image-Scaling Library Changelog --------- 4.2 * Added sup

Riyad Kalla 1.1k Mar 11, 2021
Diagrams as code is a term used for storing the source of a diagram image as a text file.

Diagrams as code Diagrams as code is a term used for storing the source of a diagram image as a text file. Examples are architecture diagrams, or diag

null 14 May 7, 2021
Open source Picture to text, text to Picture app

Pic SMS App Pic SMS is a free open source app. With Pic SMS, you can: convert pictures into text parts and send as SMS convert text parts into a pictu

Kaung Khant Kyaw 11 Apr 3, 2021
Fast computer vision library for SFM, calibration, fiducials, tracking, image processing, and more.

Table of Contents Introduction Cloning Repository Quick Start Gradle and Maven Building from Source Dependencies Help/Contact Introduction BoofCV is a

Peter Abeles 705 Mar 11, 2021
Java JNA wrapper for Tesseract OCR API

Tess4J A Java JNA wrapper for Tesseract OCR API. Tess4J is released and distributed under the Apache License, v2.0. Features The library provides opti

Quan Nguyen 973 Mar 9, 2021
ZXing ("Zebra Crossing") barcode scanning library for Java, Android

Project in Maintenance Mode Only The project is in maintenance mode, meaning, changes are driven by contributed patches. Only bug fixes and minor enha

ZXing Project 27.3k Mar 13, 2021