diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index bfe593be3..59b4b3382 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -159,7 +159,7 @@ public class CavesLevel extends RegularLevel { for (Room r : rooms) { if (r.type == Type.STANDARD) { for (Room n : r.neigbours) { - if (n.type == Type.STANDARD && !r.connected.containsKey( n )/* && Random.Int( 2 ) == 0*/) { + if (n.type == Type.STANDARD && !r.connected.containsKey( n )) { Rect w = r.intersect( n ); if (w.left == w.right && w.bottom - w.top >= 5) { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java index 2a714796a..ca81d9fe2 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java @@ -18,6 +18,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels; import com.watabou.noosa.Scene; +import com.watabou.noosa.tweeners.AlphaTweener; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Bones; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; @@ -180,14 +181,21 @@ public class CityBossLevel extends Level { Mob boss = Bestiary.mob( Dungeon.depth ); boss.state = boss.HUNTING; + int count = 0; do { boss.pos = Random.Int( LENGTH ); } while ( !passable[boss.pos] || !outsideEntraceRoom( boss.pos ) || - Dungeon.visible[boss.pos]); + (Dungeon.visible[boss.pos] && count++ < 20)); GameScene.add( boss ); - + + if (Dungeon.visible[boss.pos]) { + boss.notice(); + boss.sprite.alpha( 0 ); + boss.sprite.parent.add( new AlphaTweener( boss.sprite, 1, 0.1f ) ); + } + set( arenaDoor, Terrain.LOCKED_DOOR ); GameScene.updateMap( arenaDoor ); Dungeon.observe(); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java index 96a70482f..456359715 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java @@ -85,19 +85,12 @@ public class HallsLevel extends RegularLevel { } } else - if (map[i] == Terrain.WALL) { - - int count = 0; - for (int j=0; j < NEIGHBOURS4.length; j++) { - if (map[i + NEIGHBOURS4[j]] == Terrain.WATER) { - count++; - } - } - - if (Random.Int( 4 ) < count) { - map[i] = Terrain.WALL_DECO; - } - + if (map[i] == Terrain.WALL && + map[i-1] != Terrain.WALL_DECO && map[i-WIDTH] != Terrain.WALL_DECO && + Random.Int( 20 ) == 0) { + + map[i] = Terrain.WALL_DECO; + } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index de8492fbe..811739cc9 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -47,6 +47,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; +import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder; +import com.shatteredpixel.shatteredpixeldungeon.items.bags.SeedPouch; import com.shatteredpixel.shatteredpixeldungeon.items.food.Blandfruit; import com.shatteredpixel.shatteredpixeldungeon.items.food.Food; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; @@ -54,6 +56,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfWealth; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfWeaponUpgrade; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Chasm; @@ -116,8 +119,6 @@ public abstract class Level implements Bundlable { private static final String TXT_HIDDEN_PLATE_CLICKS = "A hidden pressure plate clicks!"; public static boolean resizingNeeded; - // This one can be different from resizingNeeded if the level - // was created in the older version of the game public static int loadedMapSize; public int[] map; @@ -197,7 +198,7 @@ public abstract class Level implements Bundlable { addItemToSpawn( new PotionOfStrength() ); Dungeon.limitedDrops.strengthPotions.count++; } - if (Dungeon.soeNeeded()) { + if (Dungeon.souNeeded()) { addItemToSpawn( new ScrollOfUpgrade() ); Dungeon.limitedDrops.upgradeScrolls.count++; } @@ -369,7 +370,8 @@ public abstract class Level implements Bundlable { } private void adjustMapSize() { - // For levels from older saves + // For levels saved before 1.6.3 + // Seeing as shattered started on 1.7.1 this is never used, but the code may be resused in future. if (map.length < LENGTH) { resizingNeeded = true; @@ -414,10 +416,13 @@ public abstract class Level implements Bundlable { } abstract protected boolean build(); + abstract protected void decorate(); + abstract protected void createMobs(); + abstract protected void createItems(); - + public void addVisuals( Scene scene ) { for (int i=0; i < LENGTH; i++) { if (pit[i]) { @@ -597,11 +602,13 @@ public abstract class Level implements Bundlable { public Heap drop( Item item, int cell ) { + //This messy if statement deals will items which should not drop in challenges primarily. if ((Dungeon.isChallenged( Challenges.NO_FOOD ) && (item instanceof Food || item instanceof BlandfruitBush.Seed)) || (Dungeon.isChallenged( Challenges.NO_ARMOR ) && item instanceof Armor) || (Dungeon.isChallenged( Challenges.NO_HEALING ) && item instanceof PotionOfHealing) || - (Dungeon.isChallenged( Challenges.NO_HERBALISM ) && (item instanceof Plant.Seed || item instanceof Dewdrop)) || - item == null) { + (Dungeon.isChallenged( Challenges.NO_HERBALISM ) && (item instanceof Plant.Seed || item instanceof Dewdrop || item instanceof SeedPouch)) || + (Dungeon.isChallenged( Challenges.NO_SCROLLS ) && ((item instanceof Scroll && !(item instanceof ScrollOfUpgrade)) || item instanceof ScrollHolder)) || + item == null) { Heap heap = new Heap(); GameScene.add( heap ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index edac2a734..c1691e9e1 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -627,6 +627,9 @@ public abstract class RegularLevel extends Level { case 4: type = Heap.Type.CHEST; break; + case 5: + type = Dungeon.depth > 1 ? Heap.Type.MIMIC : Heap.Type.CHEST; + break; default: type = Heap.Type.HEAP; } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Room.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Room.java index f5ce5ad2e..363f2ad30 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Room.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Room.java @@ -238,18 +238,4 @@ public class Room extends Rect implements Graph.Node, Bundlable { } } } -} - - - - - - - - - - - - - - +} \ No newline at end of file