From 72eb5fe090147731463c8f5274d76c66bb0b3beb Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 14 Oct 2017 20:56:54 -0400 Subject: [PATCH] v0.6.2: implemented crystal keys, adjusted vault room, and added gold chests to regular drops --- core/src/main/assets/items.png | Bin 15042 -> 15083 bytes .../actors/hero/Hero.java | 9 ++-- .../items/keys/CrystalKey.java | 41 ++++++++++++++++++ .../levels/RegularLevel.java | 13 +++++- .../levels/rooms/special/VaultRoom.java | 33 ++++---------- .../sprites/ItemSpriteSheet.java | 10 +++-- .../messages/items/items.properties | 9 ++-- 7 files changed, 80 insertions(+), 35 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/keys/CrystalKey.java diff --git a/core/src/main/assets/items.png b/core/src/main/assets/items.png index 1c6ace0943d3589667f97c95077c5206b7d1acd9..ed22377bb0a17a4c6fc778dde1e87bf5e4d3068c 100644 GIT binary patch literal 15083 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 literal 15042 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 + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.keys; + +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class CrystalKey extends Key { + + { + image = ItemSpriteSheet.CRYSTAL_KEY; + } + + public CrystalKey() { + this( 0 ); + } + + public CrystalKey( int depth ) { + super(); + this.depth = depth; + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 25a785d97..d811f2cc5 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -30,7 +30,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; import com.shatteredpixel.shatteredpixeldungeon.items.journal.GuidePage; +import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.journal.Document; @@ -318,7 +320,16 @@ public abstract class RegularLevel extends Level { map[cell] = Terrain.GRASS; losBlocking[cell] = false; } - drop( Generator.random(), cell ).type = type; + + Item toDrop = Generator.random(); + if ((toDrop instanceof Artifact && Random.Int(2) > 0) || + (toDrop.isUpgradable() && Random.Int(2 + toDrop.level()) > 0)){ + drop( toDrop, cell ).type = Heap.Type.LOCKED_CHEST; + addItemToSpawn(new GoldenKey(Dungeon.depth)); + } else { + drop( toDrop, cell ).type = type; + } + } for (Item item : itemsToSpawn) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/VaultRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/VaultRoom.java index 1e7ba207e..d2892f106 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/VaultRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/special/VaultRoom.java @@ -25,7 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Item; -import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey; +import com.shatteredpixel.shatteredpixeldungeon.items.keys.CrystalKey; import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; @@ -50,29 +50,14 @@ public class VaultRoom extends SpecialRoom { Random.shuffle(prizeClasses); - switch (Random.Int( 3 )) { - - case 0: - level.drop( prize( level ), c ).type = Heap.Type.LOCKED_CHEST; - level.addItemToSpawn( new GoldenKey( Dungeon.depth ) ); - break; - - case 1: - Item i1, i2; - do { - i1 = prize( level ); - i2 = prize( level ); - } while (i1.getClass() == i2.getClass()); - level.drop( i1, c ).type = Heap.Type.CRYSTAL_CHEST; - level.drop( i2, c + PathFinder.NEIGHBOURS8[Random.Int( 8 )]).type = Heap.Type.CRYSTAL_CHEST; - level.addItemToSpawn( new GoldenKey( Dungeon.depth ) ); - break; - - case 2: - level.drop( prize( level ), c ); - Painter.set( level, c, Terrain.PEDESTAL ); - break; - } + Item i1, i2; + do { + i1 = prize( level ); + i2 = prize( level ); + } while (i1.getClass() == i2.getClass()); + level.drop( i1, c ).type = Heap.Type.CRYSTAL_CHEST; + level.drop( i2, c + PathFinder.NEIGHBOURS8[Random.Int( 8 )]).type = Heap.Type.CRYSTAL_CHEST; + level.addItemToSpawn( new CrystalKey( Dungeon.depth ) ); entrance().set( Door.Type.LOCKED ); level.addItemToSpawn( new IronKey( Dungeon.depth ) ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index da2e4a366..092dd1bd8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -106,10 +106,11 @@ public class ItemSpriteSheet { public static final int SHATTPOT = SINGLE_USE+8; public static final int IRON_KEY = SINGLE_USE+9; public static final int GOLDEN_KEY = SINGLE_USE+10; - public static final int SKELETON_KEY = SINGLE_USE+11; - public static final int MASTERY = SINGLE_USE+12; - public static final int KIT = SINGLE_USE+13; - public static final int AMULET = SINGLE_USE+14; + public static final int CRYSTAL_KEY = SINGLE_USE+11; + public static final int SKELETON_KEY = SINGLE_USE+13; + public static final int MASTERY = SINGLE_USE+14; + public static final int KIT = SINGLE_USE+15; + public static final int AMULET = SINGLE_USE+16; static{ assignItemRect(ANKH, 10, 16); assignItemRect(STYLUS, 12, 13); @@ -122,6 +123,7 @@ public class ItemSpriteSheet { assignItemRect(SHATTPOT, 14, 12); assignItemRect(IRON_KEY, 8, 14); assignItemRect(GOLDEN_KEY, 8, 14); + assignItemRect(CRYSTAL_KEY, 8, 14); assignItemRect(SKELETON_KEY, 8, 14); assignItemRect(MASTERY, 13, 16); assignItemRect(KIT, 16, 15); diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index d8f2ab5c3..b18851e0f 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -401,7 +401,10 @@ items.journal.guidepage.desc=A torn page from an adventuring guidebook.\n\nMost ###keys items.keys.goldenkey.name=golden key -items.keys.goldenkey.desc=The notches on this golden key are tiny and intricate. Maybe it can open some chest lock? +items.keys.goldenkey.desc=The notches on this golden key are tiny and intricate. Perhaps it will open a locked chest? + +items.keys.crystalkey.name=Crystal key +items.keys.crystalkey.desc=The cut surfaces of this crystalline key shimmer in the darkness. Perhaps it will open a crystal chest? items.keys.ironkey.name=iron key items.keys.ironkey.desc=The notches on this ancient iron key are well worn; its leather lanyard is battered by age. What door might it open? @@ -1017,9 +1020,9 @@ items.gold.desc=A pile of gold coins. Collect gold coins to spend them later in items.heap.chest=Chest items.heap.chest_desc=You won't know what's inside until you open it! items.heap.locked_chest=Locked chest -items.heap.locked_chest_desc=You won't know what's inside until you open it! But to open it you need a golden key. +items.heap.locked_chest_desc=You won't know what's inside until you open it! But to open it you need a golden key. items.heap.crystal_chest=Crystal chest -items.heap.crystal_chest_desc=You can see %s inside, but to open the chest you need a golden key. +items.heap.crystal_chest_desc=You can see _%s_ inside, but to open the chest you need a crystal key. items.heap.artifact=an artifact items.heap.wand=a wand items.heap.ring=a ring