Skip to content

Commit

Permalink
Version 0.3.0
Browse files Browse the repository at this point in the history
- all classes are unlocked by default now
- added in-game tutorial, it is available from the game menu
- added in-game changelog, it is available from the title screen
- added third quickslot, improved quickslot selection by pressing on item in inventory
- you can read potion/scroll/ring/wand descriptions from the journal
- had to remove "Rankings" button from game menu when dead
- the "examine" button now searches on a single tap and examines on a long press

- respawn time is now increased on every mob respawned instead of every mob killed
- base respawn time was increased from 30/35/40/45/50 to 40/45/50/55/60 turns
- hearing other mobs will not reveal their location anymore
- evil eyes now will stop running away when not on full health
- succubi now will charm you only for 3-6 turns instead of 5-10 turns
- Goo now will not regenerate health from standing on the water while enraged
- spawns of Goo now have random amounts of health, depending on difficulty
- while frozen, Goo is now more susceptible only to physical damage
- Goo is now more susceptible to shock and energy damage

- decreased chance to succesfully block
- counter attacks now deal bonus 50% damage
- "blocked" now means that the attack was blocked
- "parried" now means that the attack was blocked and you can counterattack
- accuracy is now decreased by 12.5% for every tile of distance except first one
- dexterity is now decreased by 6.25% for every occupied/impassable adjacent tile instead of 10%
- combo attacks now apply their bonus damage before it will be decreased by armor class
- combo attacks now increase damage by 12.5% per stack after first two
- attacks on targets which are out of field of view are automatic misses
- decreased weight penalties reduction from excessive strength to 2.5% per point of strength
- decreased proc chance of Revival enchantment from 10% per level to 6.25% per level
- explosions and thunderstorms now deal only half damage to the player character

- reworked item generation algorithm, now it will spawn less cursed items for expected items
- there are now at least one guaranteed spawn of ammunition/explosives in every chapter
- items which are known to be not cursed are now sold for appropriate price
- items which are known to be enchanted are now sold for appropriate price
- added chance to prevent cursed item from being equipped which depends on your detection
- upgrade level of ambitious imp reward now depends on amount of completed quests
- removed ring of Haste from the game, it was overpowered and unbalanceable
- added ring of Durability, which makes your equipment and ammunition last longer

- scrolls of Enchantment now dispel 1-3 negative levels from cursed item and keep item enchantment
- scrolls of Banishment now do not dispel enchantments on cursed items if item is still cursed
- scrolls of Transmutation will not work on cursed items anymore
- scrolls of Transmutation now can work on ranged/flintlock weapons
- potions of Blessing now dispel only 1-3 negative levels when thrown
- potions of Blessing now affect all of your inventory when thrown

- bridge rooms now will always have basic doors
- burned rooms now will have increased chance of having secret doors
- garden rooms will not have their doors to be secret when generated on the first depth
- items from behind the storage rooms now will always spawn in one heaps

- increased travelling speed of missiles
- added visual clue that item is revealed to be non-cursed
- added messages when spawns of Goo become entranced or absorbed
- added some text, visual and audio clues to blocking/parrying and sneak/counter attacks
- DM-300 now causes screen to shake when moves while enraged

- fixed shopkeepers being visible from anywhere
- fixed succubi teleporting to occupied tiles
- fixed closed doors being shown as opened
- fixed Goo's damage being slightly lower than it should have been
- equipped light one-handed weapons will be now become unequipped if transmuted into something else
  • Loading branch information
ConsideredHamster committed Dec 25, 2016
1 parent bcc9e36 commit 0274697
Show file tree
Hide file tree
Showing 85 changed files with 1,921 additions and 1,102 deletions.
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ A mobile roguelike RPG, based on the source code of Pixel Dungeon, by Watabou. M

Yet Another Pixel Dungeon uses gradle and is most easily compiled/edited using Android Studio.

Yet Another Pixel Dungeon is not yet available on Google Play, Amazon or F-Droid.
You can download it on Google Play:
https://play.google.com/store/apps/details?id=com.consideredhamster.yetanotherpixeldungeon

Contact e-mail:
consideredhamster@gmail.com
Source code of original Pixel Dungeon:
https://github.com/watabou/pixel-dungeon

Reddit's page:
https://www.reddit.com/user/ConsideredHamster/

Source code of original Pixel Dungeon:
https://github.com/watabou/pixel-dungeon
Contact e-mail:
consideredhamster@gmail.com
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ android {
applicationId "com.consideredhamster.yetanotherpixeldungeon"
minSdkVersion 9
targetSdkVersion 21
versionCode 298
versionName '0.2.9h'
versionCode 300
versionName '0.3.0'
archivesBaseName = "yapd-$versionName"
}

Expand Down
Binary file added app/src/main/assets/help.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed app/src/main/assets/mob_slime.png
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,11 @@ public class Assets {
public static final String BEE = "npc_bee.png";
public static final String SHEEP = "npc_sheep.png";
public static final String RATKING = "npc_ratking.png";
public static final String MRSKELTAL= "mob_mrskeltal.png";

public static final String ITEMS = "items.png";
public static final String PLANTS = "plants.png";

public static final String HELP = "help.png";
public static final String ITEMS = "items.png";
public static final String PLANTS = "plants.png";

public static final String TILES_SEWERS = "tiles0.png";
public static final String TILES_PRISON = "tiles1.png";
public static final String TILES_CAVES = "tiles2.png";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,17 @@ public class Difficulties {

"- Enemies deal normal damage\n" +
"- Mob's health is randomized\n" +
"- Bosses have 100% health\n" +
"- Allows unlocking new classes!",
"- Bosses have 100% health\n"+
"- Unlocks Hardcore difficulty!\n",

"- Enemies deal more damage\n" +
"- Mob's health is maximized\n" +
"- Bosses have 120% health\n"+
"- Complete the game on Normal difficulty to unlock!",
"- Unlocks Impossible difficulty!\n",

"- All Hardcore features apply\n" +
"- Mobs spawn twice as often\n" +
"- Bosses have 150% health\n" +
"- Complete the game on Hardcore difficulty to unlock!",
"- Bosses have 150% health\n"+
"- Are you really sure?\n",
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ public class Dungeon {
// public static int vials;
public static int wands;
public static int rings;
public static int torches;
public static int ammos;
public static int torches;
// public static boolean dewVial; // true if the dew vial can be spawned
public static int transmutation; // depth number for a well of transmutation

Expand Down Expand Up @@ -138,6 +139,7 @@ public static void init() {
// vials = 0;
wands = 0;
rings = 0;
ammos = 0;
torches = 0;
// dewVial = true;
// transmutation = Random.IntRange( 6, 14 );
Expand All @@ -153,7 +155,8 @@ public static void init() {

QuickSlot.quickslotValue_1 = null;
QuickSlot.quickslotValue_2 = null;

QuickSlot.quickslotValue_3 = null;

hero = new Hero();
hero.live();
hero.buff( Hunger.class ).satisfy( 0, true );
Expand All @@ -173,13 +176,6 @@ public static Level newLevel() {
Actor.clear();

depth++;
// depth = 6;
// depth = 12;
// depth = 18;
// depth = 24;
// depth = 25;
// depth = 30;
// depth = 31;

if (depth > Statistics.deepestFloor) {
Statistics.deepestFloor = depth;
Expand Down Expand Up @@ -383,6 +379,12 @@ public static boolean ringsNeeded() {
return chance( quota, rings );
}

public static boolean ammosNeeded() {
int[] quota = {1, 0, 5, 1, 11, 2, 17, 3, 23, 4, 29, 5};

return chance( quota, ammos);
}

public static boolean torchesNeeded() {
int[] quota = {5, 0, 11, 1, 17, 3, 23, 6, 29, 10};

Expand Down Expand Up @@ -430,6 +432,7 @@ private static boolean chance( int[] quota, int number ) {
private static final String VIALS = "vials";
private static final String WANDS = "wands";
private static final String RINGS = "rings";
private static final String AMMOS = "ammos";
private static final String TORCHES = "torches";
private static final String WT = "transmutation";
private static final String CHAPTERS = "chapters";
Expand Down Expand Up @@ -487,6 +490,7 @@ public static void saveGame( String fileName ) throws IOException {
// bundle.put( VIALS, vials );
bundle.put( WANDS, wands );
bundle.put( RINGS, rings );
bundle.put( AMMOS, ammos);
bundle.put( TORCHES, torches );

int count = 0;
Expand Down Expand Up @@ -596,6 +600,7 @@ public static void loadGame( String fileName, boolean fullLoad ) throws IOExcept
// vials = bundle.getInt( VIALS );
wands = bundle.getInt( WANDS );
rings = bundle.getInt( RINGS );
ammos = bundle.getInt( AMMOS );
torches = bundle.getInt(TORCHES);

if (fullLoad) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ enum Preferences {
public static final String KEY_DONATED = "donated";
public static final String KEY_INTRO = "intro";
public static final String KEY_BRIGHTNESS = "brightness";
public static final String KEY_LOADING_TIPS = "loading_tips";
public static final String KEY_LOADING_TIPS = "tips_delay";
public static final String KEY_LAST_VERSION = "last_version";

private SharedPreferences prefs;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ public class YetAnotherPixelDungeon extends Game {

public YetAnotherPixelDungeon() {
super( TitleScene.class );
com.watabou.utils.Bundle.addAlias(
com.consideredhamster.yetanotherpixeldungeon.items.scrolls.ScrollOfClairvoyance.class,
"com.consideredhamster.yetanotherpixeldungeon.items.scrolls.ScrollOfMagicMapping" );

com.watabou.utils.Bundle.addAlias(
com.consideredhamster.yetanotherpixeldungeon.items.rings.RingOfDurability.class,
"com.consideredhamster.yetanotherpixeldungeon.items.rings.RingOfHaste" );

}

Expand Down Expand Up @@ -251,12 +251,12 @@ public static boolean brightness() {
return Preferences.INSTANCE.getBoolean( Preferences.KEY_BRIGHTNESS, false );
}

public static void loadingTips(boolean value) {
public static void loadingTips( int value ) {
Preferences.INSTANCE.put( Preferences.KEY_LOADING_TIPS, value );
}

public static boolean loadingTips() {
return Preferences.INSTANCE.getBoolean( Preferences.KEY_LOADING_TIPS, true );
public static int loadingTips() {
return Preferences.INSTANCE.getInt( Preferences.KEY_LOADING_TIPS, 3 );
}

public static void donated( String value ) {
Expand All @@ -282,6 +282,14 @@ public static void lastDifficulty( int value ) {
public static int lastDifficulty() {
return Preferences.INSTANCE.getInt( Preferences.KEY_DIFFICULTY, 0 );
}

public static void lastVersion( int value ) {
Preferences.INSTANCE.put( Preferences.KEY_LAST_VERSION, value );
}

public static int lastVersion() {
return Preferences.INSTANCE.getInt( Preferences.KEY_LAST_VERSION, 0 );
}

public static void challenges( int value ) {
Preferences.INSTANCE.put( Preferences.KEY_CHALLENGES, value );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ public abstract class Char extends Actor {
protected static final String TXT_BLOCKED = "blocked";
protected static final String TXT_PARRIED = "parried";

protected static final String TXT_GUARD = "guard";
protected static final String TXT_AMBUSH = "sneak attack!";
protected static final String TXT_COUNTER = "counter attack!";

// private static final String TXT_YOU_MISSED = "%s %s your attack";
// private static final String TXT_SMB_MISSED = "%s %s %s's attack";

Expand Down Expand Up @@ -183,7 +187,7 @@ public boolean attack( Char enemy ) {

int damageRoll = damageRoll();

if( guardEffectiveness == 0 || !guard( damageRoll, guardEffectiveness * 3 ) ) {
if( guardEffectiveness == 0 || !guard( damageRoll, guardEffectiveness * 2 ) ) {

// FIXME
int dr = damageType() == null && !ignoresAC() ? Random.NormalIntRange(0, enemy.armorClass()) : 0;
Expand Down Expand Up @@ -255,13 +259,6 @@ public boolean attack( Char enemy ) {

enemy.defenseProc(this, damageRoll, true);

if (visibleFight) {

enemy.sprite.showStatus( CharSprite.NEUTRAL, enemy.guardedVerb() );
Sample.INSTANCE.play(Assets.SND_HIT, 1, 1, 0.5f);

}

return true;
}

Expand All @@ -281,33 +278,38 @@ public boolean attack( Char enemy ) {

public static boolean hit( Char attacker, Char defender, boolean ranged, boolean magic ) {

if( !Dungeon.level.fieldOfView[ defender.pos] )
return false;

if( defender.isOpenedTo(attacker) )
return true;

if( defender.isCharmedBy(attacker) )
return true;

int acuRoll = ( magic ? attacker.magicSkill() : attacker.accuracy() ) * 2;
int attRoll = ( magic ? attacker.magicSkill() : attacker.accuracy() ) * 2;

if( ranged ) {
int distance = Math.min(8, Level.distance(attacker.pos, defender.pos));

acuRoll = acuRoll * (10 - distance) / 10;
int distance = Math.min( 9, Level.distance(attacker.pos, defender.pos) );

if( distance > 1 ) {
attRoll = attRoll * (9 - distance);
}
}

int geoEff = 2;
int defRoll = defender.dexterity();
int impassable = 16;

for (int n : Level.NEIGHBOURS8) {
if( Actor.findChar( defender.pos + n ) == null && !Level.solid[defender.pos + n] && (!Level.chasm[defender.pos + n] || defender.flying ) ) {
geoEff++;
if( Actor.findChar( defender.pos + n ) != null || Level.solid[defender.pos + n] || Level.chasm[defender.pos + n] && !defender.flying ) {
impassable--;
}
}

int defRoll = defender.dexterity() * geoEff / 10;
defRoll = defRoll * impassable / 16;

// GLog.i( acuRoll + " vs " + defRoll + " = " + Math.round((float)acuRoll/(acuRoll + defRoll)*100) + "%" );

return acuRoll > Random.Int( acuRoll + defRoll );
return attRoll > Random.Int( attRoll + defRoll );
}

public static int absorb( int damage, int armorClass ) {
Expand Down Expand Up @@ -346,10 +348,6 @@ public String defenseVerb() {
return dexterity() > 0 ? TXT_DODGED : TXT_MISSED ;
}

public String guardedVerb() {
return shieldAC() > 0 ? TXT_BLOCKED : TXT_PARRIED ;
}

public int armourAC() {
return 0;
}
Expand Down Expand Up @@ -401,18 +399,31 @@ public int attackProc( Char enemy, int damage ) {

public int defenseProc( Char enemy, int damage, boolean blocked ) {

if( blocked && Level.adjacent( pos, enemy.pos ) && hit( this, enemy, false, false ) ) {
if( blocked ) {

guarded = false;
enemy.counter = true;
if( Level.adjacent( pos, enemy.pos ) && hit( this, enemy, false, false ) ) {

// Riposte buff = Buff.affect(enemy, Riposte.class, 1f );
//
// if( buff != null ) {
// buff.object = this.id();
//
//// enemy.sprite.showStatus( CharSprite.DEFAULT, "riposte!" );
// }
enemy.counter = true;

if (sprite.visible) {

sprite.showStatus( CharSprite.NEUTRAL, TXT_PARRIED );
Sample.INSTANCE.play(Assets.SND_EVOKE, 0.5f, 0.75f, 0.75f);

if( Dungeon.hero == this )
Camera.main.shake( 1, 0.1f );
}

} else {

if (sprite.visible) {
sprite.showStatus(CharSprite.NEUTRAL, TXT_BLOCKED);
Sample.INSTANCE.play(Assets.SND_HIT, 1, 1, 0.5f);
}

if( Dungeon.hero == this )
Camera.main.shake( 2, 0.1f );
}
}

return damage;
Expand Down Expand Up @@ -584,7 +595,7 @@ public boolean isDamagedOverTime() {
}

@Override
protected void spend( float time ) {
public void spend( float time ) {

float timeScale = 1f;
if (buff( Slow.class ) != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/
package com.consideredhamster.yetanotherpixeldungeon.actors.blobs;

import com.consideredhamster.yetanotherpixeldungeon.actors.hero.Hero;
import com.watabou.utils.Random;
import com.consideredhamster.yetanotherpixeldungeon.Dungeon;
import com.consideredhamster.yetanotherpixeldungeon.actors.Actor;
Expand Down Expand Up @@ -60,6 +61,8 @@ public static boolean affect( int c, int r, int radius, int damage, Object sourc

if (Bestiary.isBoss(ch)) {
dmg /= 4;
} else if ( ch instanceof Hero) {
dmg /= 2;
}

if (dmg > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/
package com.consideredhamster.yetanotherpixeldungeon.actors.blobs;

import com.consideredhamster.yetanotherpixeldungeon.actors.hero.Hero;
import com.watabou.noosa.Camera;
import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
Expand Down Expand Up @@ -200,8 +201,11 @@ public static void thunderstrike( int cell, Blob blob ) {

if( Bestiary.isBoss(ch) ) {
power = power / 4;
} else if ( ch instanceof Hero ) {
power = power / 2;
}


ch.damage(n == 0 ? power : power / 2, blob, DamageType.SHOCK);

}
Expand Down
Loading

0 comments on commit 0274697

Please sign in to comment.