From 36d5e0384ce7a651160a462fe9ad5d4bddf8c65c Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 6 Feb 2020 21:08:35 -0500 Subject: [PATCH] v0.8.0: improved several aspects of custom visuals in NewCityBossLevel --- .../main/assets/custom_tiles/city_boss.png | Bin 3169 -> 6270 bytes .../actors/mobs/DwarfKing.java | 9 +- .../levels/NewCityBossLevel.java | 147 +++++++++++------- .../tiles/TerrainFeaturesTilemap.java | 3 +- .../messages/levels/levels.properties | 5 + 5 files changed, 107 insertions(+), 57 deletions(-) diff --git a/core/src/main/assets/custom_tiles/city_boss.png b/core/src/main/assets/custom_tiles/city_boss.png index 733063d9f5a1434b61d1566557848e7dae8beb23..cf0abfd32aa574fdd2e335c0a0529caab6e2de06 100644 GIT binary patch literal 6270 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 UxM0ryUjaCC+VoVhz60gI06KfsApigX literal 3169 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 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DwarfKing.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DwarfKing.java index aa822eabc..b30fb06ce 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DwarfKing.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DwarfKing.java @@ -23,9 +23,16 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.sprites.KingSprite; //TODO currently just regular DK but with no summoning ability -public class DwarfKing extends King { +public class DwarfKing extends Mob { + + { + spriteClass = KingSprite.class; + + HP = HT = 1; + } protected boolean canTryToSummon() { return false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCityBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCityBossLevel.java index fc3062fc3..6277bd0b0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCityBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/NewCityBossLevel.java @@ -116,7 +116,7 @@ public class NewCityBossLevel extends Level { Painter.fillDiamond(this, arena, 1, Terrain.EMPTY); Painter.fill(this, arena, 5, Terrain.EMPTY_SP); - Painter.fill(this, arena, 6, Terrain.STATUE_SP); + Painter.fill(this, arena, 6, Terrain.SIGN); c = arena.center(); Painter.set(this, c.x-3, c.y, Terrain.STATUE); @@ -134,8 +134,8 @@ public class NewCityBossLevel extends Level { //exit hallway Painter.fill(this, end, Terrain.CHASM); Painter.fill(this, end.left+4, end.top+5, 7, 18, Terrain.EMPTY); - Painter.fill(this, end.left+4, end.top+5, 7, 3, Terrain.EXIT); - exit = end.left+7 + (end.top+7)*width(); + Painter.fill(this, end.left+4, end.top+5, 7, 2, Terrain.EXIT); + exit = end.left+7 + (end.top+6)*width(); impShop = new ImpShopRoom(); impShop.set(end.left+3, end.top+12, end.left+11, end.top+20); @@ -313,7 +313,7 @@ public class NewCityBossLevel extends Level { tileH = 48; } - private static final int STAIR_ROWS = 8; + private static final int STAIR_ROWS = 7; @Override public Tilemap create() { @@ -328,7 +328,7 @@ public class NewCityBossLevel extends Level { for (int i = tileW; i < tileW*22; i++){ if (map[i] == Terrain.EXIT && stairsTop == -1){ - stairsTop = i - tileW; + stairsTop = i; } //pillars @@ -342,15 +342,15 @@ public class NewCityBossLevel extends Level { data[i] = 15*8 + 6; data[++i] = 15*8 + 7; - //imp's pedestal + //imp's pedestal } else if (map[i] == Terrain.PEDESTAL) { - data[i] = 12*8 + 5; - - //skull piles - } else if (map[i] == Terrain.STATUE) { data[i] = 13*8 + 5; - //ground tiles + //skull piles + } else if (map[i] == Terrain.STATUE) { + data[i] = 15*8 + 5; + + //ground tiles } else if (map[i] == Terrain.EMPTY || map[i] == Terrain.EMPTY_DECO){ //final ground stiching with city tiles @@ -383,21 +383,9 @@ public class NewCityBossLevel extends Level { } //custom for stairs - int[] rowData = null; for (int i = 0; i < STAIR_ROWS; i++){ - if (i == 0){ - rowData = new int[]{-1, -1, 7*8+2, 7*8+3, 7*8+4, -1, -1}; - } else if (i == 1){ - rowData = new int[]{8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6}; - } else if (i < STAIR_ROWS-2){ - rowData = new int[]{9*8+0, 8*8+3, 8*8+3, 8*8+3, 8*8+3, 8*8+3, 9*8+6}; - } else if (i == STAIR_ROWS-2){ - rowData = new int[]{9*8+0, 9*8+1, 9*8+2, 9*8+3, 9*8+4, 9*8+5, 9*8+6}; - } else { - rowData = new int[]{10*8+0, 10*8+1, 10*8+2, 10*8+3, 10*8+4, 10*8+5, 10*8+6}; - } - for (int j = 0; j < rowData.length; j++){ - data[stairsTop+j] = rowData[j]; + for (int j = 0; j < 7; j++){ + data[stairsTop+j] = (i+4)*8 + j; } stairsTop += tileW; } @@ -409,11 +397,11 @@ public class NewCityBossLevel extends Level { if (map[i] == Terrain.PEDESTAL){ data[i] = 13*8 + 4; - //statues that should face left instead of right + //statues that should face left instead of right } else if (map[i] == Terrain.STATUE && i%tileW > 7) { data[i] = 15 * 8 + 4; - //carpet tiles + //carpet tiles } else if (map[i] == Terrain.EMPTY_SP) { //top row of DK's throne if (map[i + 1] == Terrain.EMPTY_SP && map[i + tileW] == Terrain.EMPTY_SP) { @@ -422,9 +410,9 @@ public class NewCityBossLevel extends Level { data[++i] = 13 * 8 + 3; //mid row of DK's throne - }else if (map[i + 1] == Terrain.STATUE_SP) { + }else if (map[i + 1] == Terrain.SIGN) { data[i] = 14 * 8 + 1; - data[++i] = 15 * 8 + 5; + data[++i] = 14 * 8 + 2; //TODO finalize throne visuals data[++i] = 14 * 8 + 3; //bottom row of DK's throne @@ -433,7 +421,7 @@ public class NewCityBossLevel extends Level { data[++i] = 15*8 + 2; data[++i] = 15*8 + 3; - //otherwise entrance carpet + //otherwise entrance carpet } else if (map[i-tileW] != Terrain.EMPTY_SP){ data[i] = 13*8 + 0; } else if (map[i+tileW] != Terrain.EMPTY_SP){ @@ -451,6 +439,54 @@ public class NewCityBossLevel extends Level { v.map( data, tileW ); return v; } + + @Override + public String name(int tileX, int tileY) { + int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW; + + //demon halls tiles + if (cell < Dungeon.level.width*22){ + if (Dungeon.level.map[cell] == Terrain.STATUE){ + return Messages.get(HallsLevel.class, "statue_name"); + } + + //DK arena tiles + } else { + if (Dungeon.level.map[cell] == Terrain.SIGN){ + return Messages.get(NewCityBossLevel.class, "throne_name"); + } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){ + return Messages.get(NewCityBossLevel.class, "summoning_name"); + } + } + + return super.name(tileX, tileY); + } + + @Override + public String desc(int tileX, int tileY) { + int cell = (this.tileX + tileX) + (this.tileY + tileY)*tileW; + + //demon halls tiles + if (cell < Dungeon.level.width*22){ + if (Dungeon.level.map[cell] == Terrain.EXIT){ + return Messages.get(HallsLevel.class, "exit_desc"); + } else if (Dungeon.level.map[cell] == Terrain.STATUE){ + return Messages.get(HallsLevel.class, "statue_desc"); + } else if (Dungeon.level.map[cell] == Terrain.EMPTY_DECO){ + return ""; + } + + //DK arena tiles + } else { + if (Dungeon.level.map[cell] == Terrain.SIGN){ + return Messages.get(NewCityBossLevel.class, "throne_desc"); + } else if (Dungeon.level.map[cell] == Terrain.PEDESTAL){ + return Messages.get(NewCityBossLevel.class, "summoning_desc"); + } + } + + return super.desc(tileX, tileY); + } } public static class CustomWallVisuals extends CustomTilemap { @@ -467,13 +503,13 @@ public class NewCityBossLevel extends Level { int[] map = Dungeon.level.map; - int stairsTop = -1; + int shadowTop = -1; //upper part of the level, mostly demon halls tiles for (int i = tileW; i < tileW*21; i++) { - if (map[i] == Terrain.EXIT && stairsTop == -1){ - stairsTop = i - tileW; + if (map[i] == Terrain.EXIT && shadowTop == -1){ + shadowTop = i - tileW*4; } //pillars @@ -481,41 +517,42 @@ public class NewCityBossLevel extends Level { data[i] = 12*8 + 6; data[++i] = 12*8 + 7; } else if (map[i] == Terrain.WALL && map[i-tileW] == Terrain.CHASM) { - data[i] = 13*8 + 6; - data[++i] = 13*8 + 7; + data[i] = 13 * 8 + 6; + data[++i] = 13 * 8 + 7; - //otherwise no tile here + //skull tops + } else if (map[i+tileW] == Terrain.STATUE) { + data[i] = 14*8 + 5; + + //otherwise no tile here } else { data[i] = -1; } } - //custom shadow (and skull tops) for stairs - //TODO this doesn't look so great. Should try baking some of the shadow into the stairs themselves - for (int i = 0; i < CustomGroundVisuals.STAIR_ROWS; i++){ - if (i == CustomGroundVisuals.STAIR_ROWS-1){ - data[stairsTop] = i*8 + 0; - data[stairsTop+1] = i*8 + 1; - data[stairsTop+2] = data[stairsTop+3] = data[stairsTop+4] = -1; - data[stairsTop+5] = i*8 + 5; - data[stairsTop+6] = i*8 + 6; + //custom shadow for stairs + for (int i = 0; i < 8; i++){ + if (i < 4){ + data[shadowTop] = i*8 + 0; + data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] = + data[shadowTop+5] = data[shadowTop+6] = i*8 + 1; + data[shadowTop+7] = i*8 + 2; } else { - for (int j = 0; j < 7; j++) { - data[stairsTop + j] = i*8 + j; - } + int j = i - 4; + data[shadowTop] = j*8 + 3; + data[shadowTop+1] = data[shadowTop+2] = data[shadowTop+3] = data[shadowTop+4] = + data[shadowTop+5] = data[shadowTop+6] = j*8 + 4; + data[shadowTop+7] = j*8 + 5; } - stairsTop += tileW; + + shadowTop += tileW; } //lower part. Just need to handle statue tiles here for (int i = tileW*21; i < tileW * tileH; i++){ - //DK's throne - if (map[i] == Terrain.STATUE_SP){ - data[i-tileW] = 14*8 + 5; - - //Statues that need to face left instead of right - } else if (map[i] == Terrain.STATUE && i%tileW > 7){ + //Statues that need to face left instead of right + if (map[i] == Terrain.STATUE && i%tileW > 7){ data[i-tileW] = 14*8 + 4; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/TerrainFeaturesTilemap.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/TerrainFeaturesTilemap.java index 4b71a2152..fc506df2e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/TerrainFeaturesTilemap.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/tiles/TerrainFeaturesTilemap.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.tiles; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.levels.LastShopLevel; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; @@ -65,7 +66,7 @@ public class TerrainFeaturesTilemap extends DungeonTilemap { } int stage = (Dungeon.depth-1)/5; - if (Dungeon.depth == 21) stage--; + if (Dungeon.depth == 21 && Dungeon.level instanceof LastShopLevel) stage--; if (tile == Terrain.HIGH_GRASS){ return 9 + 16*stage + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0); } else if (tile == Terrain.FURROWED_GRASS){ diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties index d1bb8c6f9..8b8be2544 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/levels/levels.properties @@ -136,6 +136,11 @@ levels.newcavesbosslevel.gate_desc=A large metal gate that blocks the path into levels.newcavesbosslevel.gate_desc_broken=The gate must have been connected to DM-300 in some way, as it exploded when DM-300 was defeated. Now only broken pieces remain. levels.newcavesbosslevel.water_desc=With all the electricity around here water might not always be safe... +levels.newcitybosslevel.throne_name=Throne +levels.newcitybosslevel.throne_desc=TODO +levels.newcitybosslevel.summoning_name=Summoning pedestal +levels.newcitybosslevel.pedestal_desc=TODO + levels.caveslevel.grass_name=Fluorescent moss levels.caveslevel.high_grass_name=Fluorescent mushrooms levels.caveslevel.water_name=Freezing cold water