From dc4232de2a92d48d2cb49e1a6fb98058d342d4ee Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Wed, 5 Nov 2014 16:50:08 -0500 Subject: [PATCH] v0.2.2a: refactored and tweaked placement of key items in rooms. --- .../shatteredpixeldungeon/levels/Level.java | 31 ++++++++----- .../levels/painters/LaboratoryPainter.java | 15 +++---- .../levels/painters/LibraryPainter.java | 11 ++--- .../levels/painters/PitPainter.java | 9 ++-- .../levels/painters/PoolPainter.java | 45 ++++++++++--------- .../levels/painters/StoragePainter.java | 11 ++--- .../levels/painters/TrapsPainter.java | 13 +++--- 7 files changed, 74 insertions(+), 61 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index 0ba572cc1..68de2792b 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -447,16 +447,27 @@ public abstract class Level implements Bundlable { } } - //TODO: this results in lots of empty rooms that could otherwise have a prize, should rework, also fix typo. - public Item itemToSpanAsPrize() { - if (Random.Int( itemsToSpawn.size() + 1 ) > 0) { - Item item = Random.element( itemsToSpawn ); - itemsToSpawn.remove( item ); - return item; - } else { - return null; - } - } + public Item findPrizeItem(){ return findPrizeItem(null); } + + public Item findPrizeItem(Class match){ + if (itemsToSpawn.size() == 0) + return null; + + if (match == null){ + Item item = Random.element(itemsToSpawn); + itemsToSpawn.remove(item); + return item; + } + + for (Item item : itemsToSpawn){ + if (match.isInstance(item)){ + itemsToSpawn.remove( item ); + return item; + } + } + + return null; + } private void buildFlagMaps() { diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LaboratoryPainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LaboratoryPainter.java index 51d1f19bd..e9d5c9e78 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LaboratoryPainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LaboratoryPainter.java @@ -70,14 +70,11 @@ public class LaboratoryPainter extends Painter { } private static Item prize( Level level ) { - - Item prize = level.itemToSpanAsPrize(); - if (prize instanceof Potion) { - return prize; - } else if (prize != null) { - level.addItemToSpawn( prize ); - } - - return Generator.random( Generator.Category.POTION ); + + Item prize = level.findPrizeItem( Potion.class ); + if (prize == null) + prize = Generator.random( Generator.Category.POTION ); + + return prize; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LibraryPainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LibraryPainter.java index 5ccedba2e..6df5ebcd4 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LibraryPainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/LibraryPainter.java @@ -78,13 +78,10 @@ public class LibraryPainter extends Painter { private static Item prize( Level level ) { - Item prize = level.itemToSpanAsPrize(); - if (prize instanceof Scroll) { - return prize; - } else if (prize != null) { - level.addItemToSpawn( prize ); - } + Item prize = level.findPrizeItem( Scroll.class ); + if (prize == null) + prize = Generator.random( Generator.Category.SCROLL ); - return Generator.random( Generator.Category.SCROLL ); + return prize; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PitPainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PitPainter.java index 86cf268e6..122443235 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PitPainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PitPainter.java @@ -76,10 +76,11 @@ public class PitPainter extends Painter { private static Item prize( Level level ) { - Item prize = level.itemToSpanAsPrize(); - if (prize != null) { - return prize; - } + if (Random.Int(2) != 0){ + Item prize = level.findPrizeItem(); + if (prize != null) + return prize; + } return Generator.random( Random.oneOf( Generator.Category.POTION, diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PoolPainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PoolPainter.java index 00f7929de..b54c4c969 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PoolPainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/PoolPainter.java @@ -82,27 +82,30 @@ public class PoolPainter extends Painter { } private static Item prize( Level level ) { - - Item prize = level.itemToSpanAsPrize(); - if (prize != null) { - return prize; - } - - prize = Generator.random( Random.oneOf( - Generator.Category.WEAPON, - Generator.Category.ARMOR - ) ); - for (int i=0; i < 4; i++) { - Item another = Generator.random( Random.oneOf( - Generator.Category.WEAPON, - Generator.Category.ARMOR - ) ); - if (another.level > prize.level) { - prize = another; - } - } - - return prize; + Item prize; + + if (Random.Int(3) != 0){ + prize = level.findPrizeItem(); + if (prize != null) + return prize; + } + + prize = Generator.random( Random.oneOf( + Generator.Category.WEAPON, + Generator.Category.ARMOR + ) ); + + for (int i=0; i < 4; i++) { + Item another = Generator.random( Random.oneOf( + Generator.Category.WEAPON, + Generator.Category.ARMOR + ) ); + if (another.level > prize.level) { + prize = another; + } + } + + return prize; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/StoragePainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/StoragePainter.java index 034c08c11..00edbb314 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/StoragePainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/StoragePainter.java @@ -48,11 +48,12 @@ public class StoragePainter extends Painter { } private static Item prize( Level level ) { - - Item prize = level.itemToSpanAsPrize(); - if (prize != null) { - return prize; - } + + if (Random.Int(2) != 0){ + Item prize = level.findPrizeItem(); + if (prize != null) + return prize; + } return Generator.random( Random.oneOf( Generator.Category.POTION, diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/TrapsPainter.java b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/TrapsPainter.java index 2d013ddfd..54da5fd85 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/TrapsPainter.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/levels/painters/TrapsPainter.java @@ -78,11 +78,14 @@ public class TrapsPainter extends Painter { } private static Item prize( Level level ) { - - Item prize = level.itemToSpanAsPrize(); - if (prize != null) { - return prize; - } + + Item prize; + + if (Random.Int(4) != 0){ + prize = level.findPrizeItem(); + if (prize != null) + return prize; + } prize = Generator.random( Random.oneOf( Generator.Category.WEAPON,