Traditional roguelike game with pixel-art graphics and simple interface

Overview

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 ShatteredPixel.com.

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:

Comments
  • Save corruption on Android 12 Pixel devices

    Save corruption on Android 12 Pixel devices

    Twice now, I've had a save get corrupted on 1.1.1. One is my most recent game. Happy to supply a save file as soon as I figure out how to extract it from the game.

    Major Bug Fixed in BETA 
    opened by joshtriplett 22
  • [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!

    Thanks,
    Lars

    Quirk 
    opened by larssorenson 20
  • Unstable Spellbook fast-tap exploit

    Unstable Spellbook fast-tap exploit

    There is a case (which I encountered) where you can multi-tap an Unstable Spellbook from a quickslot with at least 2 charges and have the normal scroll activate for you while the exotic scroll dialog is still popped up. This way, even if the charge is consumed, you can still activate the exotic variety for free. Seems like a rare race condition.

    opened by fregkos 19
  • 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 in development 
    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!)

    Enhancement 
    opened by valerio-bozzolan 18
  • Projectiles disappear if you fast-tap to move

    Projectiles disappear if you fast-tap to move

    There is a rare bug that exists for a long time in the game and punishes for playing fast you. There are cases where you can queue a thrown weapon or a wand missile with a hero movement command while the projectile is travelling. When the projectile reaches the destination it has no effect, it just disappears. This happened to me at least 3 times with Wand of Magic Missile, but I believe it's not wand specific.

    Quirk Fixed in BETA 
    opened by fregkos 17
  • 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 in development 
    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.

    Quirk Fixed in development 
    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/Game.java

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

    to

        view = new GLSurfaceView(this);
        view.setEGLContextClientVersion(2);
        // view.setEGLConfigChooser( false );
        // changed to be able to run it on my android emulator
        view.setEGLConfigChooser(true);
        view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        view.setRenderer(this);
        view.setOnTouchListener(this);
        setContentView(view);
    
    Quirk Fixed in development 
    opened by Sarius997 16
  • Are Dead Adventure's Corpse common in Boss Level Dungeons?

    Are Dead Adventure's Corpse common in Boss Level Dungeons?

    I discovered a Corpse of Dead Adventure it summoned a warth... The loot was a longsword... I have never come across any loot in boss dungeons in past runs... 🤔 Screenshot_2021-11-16-22-10-43-96_6f3fe77889fbecf862f7061166760abf

    opened by Mellotic 15
  • Enhanced Rings Vs. Alchemist's Toolkit

    Enhanced Rings Vs. Alchemist's Toolkit

    Screenshot_20221224-091116

    The former doesn't proc, neither when the latter is used to brew an item nor energized. I can see how brewing could be exploitative when used in combo w/ Enhanced Rings but energizing would be capped @ only 10x. Energizing @ least should count as artifact use for this synergy.

    Minor Bug Fixed in development 
    opened by LeahLuong 0
  • Blue fire treasure room, PoLF and PoFr interaction bug

    Blue fire treasure room, PoLF and PoFr interaction bug

    In a treasure room with "blue fire"... Drinking a Potion of Liquid Flame while being adjacent to the blue fire, then drinking Potion of Frost immediately after does not cleanse the blue fire.

    However, simply drinking the Potion of Frost should suffice in any other scenario.

    I consider this is not an intentional behavior.

    Quirk Fixed in development 
    opened by fregkos 3
  • Gladiator can riposte while charmed

    Gladiator can riposte while charmed

    Gladiator's Parry circumvents the mélée exclusion when charmed by succubi. All other gladiator special attacks are prevented from initiation when charmed. I think blocking should function normally but there shouldn't be a possibility of counterattack while under the succubus' spell.

    I wonder if it's possible to do a leaping combo attack using Enhanced Combo while charmed. Other ranged attacks do work while charmed but I have a hunch leaping combo attacks don't count as ranged attacks even though they seem like them. I prob won't get around to testing this because I basically never put more than 1 point into the talent, if that; the reqs for Enhanced Combo are too steep, in my opinion (chasm kills are fun but I usually have more economical means of achieving them; anytime I've taken Enhanced Combo +2, I basically used it only once in the whole run during the DK fight; Enhanced Combo +3 blocked me 1 too many times w/ the Combo/3 req & I simply gave up on it when walking is generally just as good & practically always available for free).

    Minor Bug Fixed in development 
    opened by LeahLuong 0
  • Attacking succubus from out of FOV does not surprise it

    Attacking succubus from out of FOV does not surprise it

    I have a pic I'd like to post for this topic but can't due to the low mem warning. I don't think anything's changed on my end since posting pics here before. Have I hit some sort of github limit for posting??

    Anyway, I'd hit a succubus w/ a blinding dart & created some separation using Ally Warp w/ Sad Ghost. My next 2 darts were dodged by that succubus despite the separation & debuff remaining. The pic shows the succubus' description box w/ active blindness; off to the side, my mage is standing a tile away from the succubus w/ a dart @ her feet.

    I have a couple of hypotheses for what's going on here: either Ally Warp is fooling the game into thinking my mage is still adjacent to the succubus, or the succubus' status as a blessed champ is somehow throwing off the to-hit calc. I'm leaning more towards the former but the game did have a full player turn to update my hero's status before the 2nd standard dart missed.

    Quirk Fixed in development 
    opened by LeahLuong 2
  • Hold Fast can be preserved via time freezee

    Hold Fast can be preserved via time freezee

    1 can move during a time freeze & the warrior's Hold Fast bonus is preserved. This contradicts the talent's description. If this is intended behavior, I think the bonus should be preserved when relocated via golem yoink or other means.

    Quirk Fixed in development 
    opened by LeahLuong 3
Releases(v1.4.3)
Owner
Evan Debenham
Evan Debenham
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 6.4k Jan 4, 2023
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 http://www.thebuzzmedia.com/software/imgscalr-java-image-scaling-library/ Changelog --------- 4.2 * Added sup

Riyad Kalla 1.1k Jan 5, 2023
Roman Beskrovnyi 250 Jan 9, 2023
Anthos Edge Use Cases for bringing apps and computation closer to the location where the action is, to improve response times and save bandwidth.

Anthos Bare Metal Edge Use Cases Edge computing is a distributed computing paradigm that brings computation and data storage closer to the location wh

Google Cloud Platform 27 Dec 20, 2022
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 916 Jan 6, 2023
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.6k Jan 5, 2023
This project allows the exchange of files between your local disk and a D64 image (Commodore 64 image disk) . Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64).

DiskToolC64 Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64). Introduction Les fi

Eddy BRIERE 3 Oct 12, 2022
Pw0 Framewrok - magical android pentest app 🔮! Pixie Dust, Handshakes, Deauth, Nmap, Port scanner and more!

Pw0 Framework Pw0 Framewrok - magical android pentest app ?? ! Features: Pixie Dust Handshakes Deauth Nmap Port scanner and more! Version: 0.2 Beta Au

Huntmix 17 Sep 27, 2021
A well-designed local image and video selector for Android

Matisse Matisse is a well-designed local image and video selector for Android. You can Use it in Activity or Fragment Select images including JPEG, PN

Zhihu 12.4k Dec 29, 2022
Provide image storage and access services.

Provide image storage and access services.

shiyq 2 Jan 23, 2022
Million+ point universal gravity simulation using OpenGL and OpenCL

Universe Simulation on GPU A multi-million particle gravity simulation. The main program is org.davu.app.Space.main See each package.html for code det

David Uselmann 2 Jan 31, 2022
Evocation Sunburst is a pixel-art Java RPG about a raccon named Racc discovering a hidden world in a sewer system, while also becoming a wizard in the process.

Evocation Sunburst Evocation Sunburst is a pixel-art Java RPG about a raccon named Racc discovering a hidden world in a sewer system, while also becom

Yaqub 3 May 10, 2022
ASCII Roguelike with Euro Strategy Board Game Influences

EuroRogue ASCII Roguelike with Euro Strategy Board Game Influences --Run the RunEuroRogue.bat file in the bin folder. Requires Java - https://www.java

null 4 Feb 1, 2022
An arcade game project which made using java and swing for graphics

Arcade_Game_Development This is an arcade game project which made using java and swing for graphics. Meteor Dodge Here you have to dodge the meteor an

Md. Shakib Shahariar Junayed 1 May 25, 2022
Hate, hate, hate, for Google and its crashtastic Pixel 6 Pro.

OpenCamera hack for Pixel 6 Pro The Pixel 6 Pro is an expensive phone. There seem to be a significant number of people whose P6Ps crash -- hard -- try

Cameron Kaiser 35 Nov 11, 2022
LWJGL is a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL, Vulkan), audio (OpenAL), parallel computing (OpenCL, CUDA) and XR (OpenVR, LibOVR) applications.

LWJGL - Lightweight Java Game Library 3 LWJGL (https://www.lwjgl.org) is a Java library that enables cross-platform access to popular native APIs usef

Lightweight Java Game Library 4k Dec 29, 2022
LWJGL is a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL, Vulkan), audio (OpenAL), parallel computing (OpenCL, CUDA) and XR (OpenVR, LibOVR) applications.

LWJGL - Lightweight Java Game Library 3 LWJGL (https://www.lwjgl.org) is a Java library that enables cross-platform access to popular native APIs usef

Lightweight Java Game Library 4k Dec 29, 2022
The Apache Software Foundation 605 Dec 30, 2022