diff --git a/core/src/main/assets/environment/tiles_caves.png b/core/src/main/assets/environment/tiles_caves.png index 726ef8558..b493b6292 100644 Binary files a/core/src/main/assets/environment/tiles_caves.png and b/core/src/main/assets/environment/tiles_caves.png differ diff --git a/core/src/main/assets/environment/tiles_caves_crystal.png b/core/src/main/assets/environment/tiles_caves_crystal.png index 1fd03fe8b..ce0fbe4fd 100644 Binary files a/core/src/main/assets/environment/tiles_caves_crystal.png and b/core/src/main/assets/environment/tiles_caves_crystal.png differ diff --git a/core/src/main/assets/environment/tiles_caves_gnoll.png b/core/src/main/assets/environment/tiles_caves_gnoll.png index 0ae42f910..9acb3f5e7 100644 Binary files a/core/src/main/assets/environment/tiles_caves_gnoll.png and b/core/src/main/assets/environment/tiles_caves_gnoll.png differ diff --git a/core/src/main/assets/environment/tiles_city.png b/core/src/main/assets/environment/tiles_city.png index c82d66a1a..57f04e1bb 100644 Binary files a/core/src/main/assets/environment/tiles_city.png and b/core/src/main/assets/environment/tiles_city.png differ diff --git a/core/src/main/assets/environment/tiles_halls.png b/core/src/main/assets/environment/tiles_halls.png index 8f288cf35..cf4c5155f 100644 Binary files a/core/src/main/assets/environment/tiles_halls.png and b/core/src/main/assets/environment/tiles_halls.png differ diff --git a/core/src/main/assets/environment/tiles_prison.png b/core/src/main/assets/environment/tiles_prison.png index 668902af9..4ea44f038 100644 Binary files a/core/src/main/assets/environment/tiles_prison.png and b/core/src/main/assets/environment/tiles_prison.png differ diff --git a/core/src/main/assets/messages/levels/levels.properties b/core/src/main/assets/messages/levels/levels.properties index a1dc04f7f..faebb05eb 100644 --- a/core/src/main/assets/messages/levels/levels.properties +++ b/core/src/main/assets/messages/levels/levels.properties @@ -177,6 +177,8 @@ levels.caveslevel.exit_desc=The ladder leads down to the lower depth. levels.caveslevel.high_grass_desc=Huge mushrooms block the view. levels.caveslevel.wall_deco_desc=A vein of some ore is visible on the wall. Gold? levels.caveslevel.bookshelf_desc=Who would need a bookshelf in a cave? +levels.caveslevel.region_deco_name=Metal structure +levels.caveslevel.region_deco_desc=A large all-metal structure, probably built by the dwarves when they used to mine this place. You think you can see long-unused minecart tracks running along the top. levels.citylevel.water_name=Suspiciously colored water levels.citylevel.high_grass_name=High blooming flowers @@ -186,6 +188,8 @@ levels.citylevel.deco_desc=Several tiles are missing here. levels.citylevel.sp_desc=Thick carpet covers the floor. levels.citylevel.statue_desc=The statue depicts some dwarf standing in a heroic stance. levels.citylevel.bookshelf_desc=The rows of books on different disciplines fill the bookshelf. +levels.citylevel.region_deco_name=Flaming pedestal +levels.citylevel.region_deco_desc=A raised pedestal with a bright green magical flame atop. The flame is so dense it might as well be solid. levels.hallslevel.water_name=Cold lava levels.hallslevel.grass_name=Embermoss @@ -194,6 +198,9 @@ levels.hallslevel.statue_name=Pillar levels.hallslevel.water_desc=It looks like lava, but it's cold and probably safe to touch. levels.hallslevel.statue_desc=The pillar is made of real humanoid skulls. Awesome. levels.hallslevel.bookshelf_desc=Books in ancient languages smoulder in the bookshelf. +levels.hallslevel.region_deco_name=Chunk of rubble +levels.hallslevel.region_deco_desc=A huge piece of stone that seems to have broken off from the ceiling or a nearby wall. + levels.level.hidden_trap=A hidden %s activates! levels.level.chasm_name=Chasm @@ -262,7 +269,11 @@ levels.mininglevel.barricade_desc=The wooden barricade is firmly set and acts as levels.prisonlevel.water_name=Dark cold water levels.prisonlevel.empty_deco_desc=There are old blood stains on the floor. levels.prisonlevel.bookshelf_desc=This is probably a vestige of a prison library. Might it burn? +levels.prisonlevel.region_deco_name=Prison cage +levels.prisonlevel.region_deco_desc=A metal cage just large enough to hold a person. It seems to be locked to the ground in some way, you can't move it. levels.sewerlevel.water_name=Murky water levels.sewerlevel.empty_deco_desc=Wet yellowish moss covers the floor. levels.sewerlevel.bookshelf_desc=The bookshelf is packed with cheap useless books. Might it burn? +levels.sewerlevel.region_deco_name=Storage barrel +levels.sewerlevel.region_deco_desc=A stout barrel that's almost as big as you are. It must be full of something or another, it's too heavy to move. diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java index 9eac1c9c2..0f4c9a9a2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesBossLevel.java @@ -431,6 +431,9 @@ public class CavesBossLevel extends Level { case Terrain.STATUE: //city statues are used return Messages.get(CityLevel.class, "statue_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CavesLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -456,6 +459,9 @@ public class CavesBossLevel extends Level { //city statues are used case Terrain.STATUE: return Messages.get(CityLevel.class, "statue_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CavesLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java index db732670e..482e30ac8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CavesLevel.java @@ -199,6 +199,9 @@ public class CavesLevel extends RegularLevel { return Messages.get(CavesLevel.class, "high_grass_name"); case Terrain.WATER: return Messages.get(CavesLevel.class, "water_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CavesLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -218,6 +221,9 @@ public class CavesLevel extends RegularLevel { return Messages.get(CavesLevel.class, "wall_deco_desc"); case Terrain.BOOKSHELF: return Messages.get(CavesLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CavesLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java index 65a5d7838..4a17dca16 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityBossLevel.java @@ -388,6 +388,9 @@ public class CityBossLevel extends Level { return Messages.get(CityLevel.class, "water_name"); case Terrain.HIGH_GRASS: return Messages.get(CityLevel.class, "high_grass_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -411,6 +414,9 @@ public class CityBossLevel extends Level { return Messages.get(CityLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(CityLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } @@ -423,6 +429,13 @@ public class CityBossLevel extends Level { return visuals; } + @Override + public Group addWallVisuals() { + super.addWallVisuals(); + CityLevel.addCityWallVisuals( this, wallVisuals ); + return wallVisuals; + } + public static class CustomGroundVisuals extends CustomTilemap { { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java index 1022748b7..4e68f8279 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/CityLevel.java @@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.CityPainter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap; @@ -136,6 +137,9 @@ public class CityLevel extends RegularLevel { return Messages.get(CityLevel.class, "water_name"); case Terrain.HIGH_GRASS: return Messages.get(CityLevel.class, "high_grass_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -159,6 +163,9 @@ public class CityLevel extends RegularLevel { return Messages.get(CityLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(CityLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } @@ -178,6 +185,57 @@ public class CityLevel extends RegularLevel { } } } + + @Override + public Group addWallVisuals() { + super.addWallVisuals(); + addCityWallVisuals( this, wallVisuals ); + return wallVisuals; + } + + public static void addCityWallVisuals( Level level, Group group ) { + for (int i=0; i < level.length(); i++) { + if (level.map[i] == Terrain.REGION_DECO || level.map[i] == Terrain.REGION_DECO_SP) { + group.add( new GreenFlame( i ) ); + } + } + } + + public static class GreenFlame extends Emitter { + + private int pos; + + public static final Emitter.Factory factory = new Factory() { + @Override + public void emit( Emitter emitter, int index, float x, float y ) { + ElmoParticle p = (ElmoParticle)emitter.recycle( ElmoParticle.class ); + p.reset( x, y ); + } + @Override + public boolean lightMode() { + return true; + } + }; + + public GreenFlame( int pos ) { + super(); + + this.pos = pos; + + PointF p = DungeonTilemap.raisedTileCenterToWorld( pos ); + pos( p.x - 3, p.y - 6, 6, 6 ); + + pour( factory, 0.05f ); + } + + @Override + public void update() { + if (visible = (pos < Dungeon.level.heroFOV.length && Dungeon.level.heroFOV[pos])) { + super.update(); + } + } + + } public static class Smoke extends Emitter { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java index 8c0b851c0..d8059afc1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsBossLevel.java @@ -367,6 +367,9 @@ public class HallsBossLevel extends Level { case Terrain.STATUE: case Terrain.STATUE_SP: return Messages.get(HallsLevel.class, "statue_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -382,6 +385,9 @@ public class HallsBossLevel extends Level { return Messages.get(HallsLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(HallsLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java index ceb70d0e2..8b597ad0a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/HallsLevel.java @@ -160,6 +160,9 @@ public class HallsLevel extends RegularLevel { case Terrain.STATUE: case Terrain.STATUE_SP: return Messages.get(HallsLevel.class, "statue_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -175,6 +178,9 @@ public class HallsLevel extends RegularLevel { return Messages.get(HallsLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(HallsLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java index 08dcffbec..679673552 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastLevel.java @@ -200,6 +200,9 @@ public class LastLevel extends Level { case Terrain.STATUE: case Terrain.STATUE_SP: return Messages.get(HallsLevel.class, "statue_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -215,6 +218,9 @@ public class LastLevel extends Level { return Messages.get(HallsLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(HallsLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(HallsLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java index e46e94f7e..a634c3a65 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/LastShopLevel.java @@ -158,6 +158,9 @@ public class LastShopLevel extends RegularLevel { return Messages.get(CityLevel.class, "water_name"); case Terrain.HIGH_GRASS: return Messages.get(CityLevel.class, "high_grass_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -181,6 +184,9 @@ public class LastShopLevel extends RegularLevel { return Messages.get(CityLevel.class, "statue_desc"); case Terrain.BOOKSHELF: return Messages.get(CityLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(CityLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } @@ -192,4 +198,12 @@ public class LastShopLevel extends RegularLevel { CityLevel.addCityVisuals(this, visuals); return visuals; } + + @Override + public Group addWallVisuals() { + super.addWallVisuals(); + CityLevel.addCityWallVisuals( this, wallVisuals ); + return wallVisuals; + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java index af4563a4d..f14070cb3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java @@ -722,6 +722,9 @@ public class PrisonBossLevel extends Level { switch (tile) { case Terrain.WATER: return Messages.get(PrisonLevel.class, "water_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(PrisonLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -734,6 +737,9 @@ public class PrisonBossLevel extends Level { return Messages.get(PrisonLevel.class, "empty_deco_desc"); case Terrain.BOOKSHELF: return Messages.get(PrisonLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(PrisonLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java index f61ca8c3e..30b8ad23a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonLevel.java @@ -177,6 +177,9 @@ public class PrisonLevel extends RegularLevel { switch (tile) { case Terrain.WATER: return Messages.get(PrisonLevel.class, "water_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(PrisonLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -189,6 +192,9 @@ public class PrisonLevel extends RegularLevel { return Messages.get(PrisonLevel.class, "empty_deco_desc"); case Terrain.BOOKSHELF: return Messages.get(PrisonLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(PrisonLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java index 77f85cad5..fafae0c54 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/SewerLevel.java @@ -195,6 +195,9 @@ public class SewerLevel extends RegularLevel { switch (tile) { case Terrain.WATER: return Messages.get(SewerLevel.class, "water_name"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(SewerLevel.class, "region_deco_name"); default: return super.tileName( tile ); } @@ -207,6 +210,9 @@ public class SewerLevel extends RegularLevel { return Messages.get(SewerLevel.class, "empty_deco_desc"); case Terrain.BOOKSHELF: return Messages.get(SewerLevel.class, "bookshelf_desc"); + case Terrain.REGION_DECO: + case Terrain.REGION_DECO_SP: + return Messages.get(SewerLevel.class, "region_deco_desc"); default: return super.tileDesc( tile ); }