v3.1.0: adjusted new region deco, 2nd version is not always SP floor

This commit is contained in:
Evan Debenham
2025-04-30 16:45:17 -04:00
parent f055e5bb36
commit 7b4e39da84
27 changed files with 72 additions and 45 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -271,6 +271,8 @@ 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.prisonlevel.region_deco_alt_name=Hanging cage
levels.prisonlevel.region_deco_alt_desc=A metal cage just large enough to hold a person. It's hanging over a deep chasm, suspended by a chain.
levels.sewerlevel.water_name=Murky water
levels.sewerlevel.empty_deco_desc=Wet yellowish moss covers the floor.

View File

@@ -432,7 +432,7 @@ public class CavesBossLevel extends Level {
//city statues are used
return Messages.get(CityLevel.class, "statue_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CavesLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -460,7 +460,7 @@ public class CavesBossLevel extends Level {
case Terrain.STATUE:
return Messages.get(CityLevel.class, "statue_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CavesLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -200,7 +200,7 @@ public class CavesLevel extends RegularLevel {
case Terrain.WATER:
return Messages.get(CavesLevel.class, "water_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CavesLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -222,7 +222,7 @@ public class CavesLevel extends RegularLevel {
case Terrain.BOOKSHELF:
return Messages.get(CavesLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CavesLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -389,7 +389,7 @@ public class CityBossLevel extends Level {
case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -415,7 +415,7 @@ public class CityBossLevel extends Level {
case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -138,7 +138,7 @@ public class CityLevel extends RegularLevel {
case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -164,7 +164,7 @@ public class CityLevel extends RegularLevel {
case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );
@@ -195,7 +195,7 @@ public class CityLevel extends RegularLevel {
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) {
if (level.map[i] == Terrain.REGION_DECO || level.map[i] == Terrain.REGION_DECO_ALT) {
group.add( new GreenFlame( i ) );
}
}

View File

@@ -368,7 +368,7 @@ public class HallsBossLevel extends Level {
case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -386,7 +386,7 @@ public class HallsBossLevel extends Level {
case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -161,7 +161,7 @@ public class HallsLevel extends RegularLevel {
case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -179,7 +179,7 @@ public class HallsLevel extends RegularLevel {
case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -201,7 +201,7 @@ public class LastLevel extends Level {
case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -219,7 +219,7 @@ public class LastLevel extends Level {
case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(HallsLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -159,7 +159,7 @@ public class LastShopLevel extends RegularLevel {
case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -185,7 +185,7 @@ public class LastShopLevel extends RegularLevel {
case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(CityLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -723,7 +723,7 @@ public class PrisonBossLevel extends Level {
case Terrain.WATER:
return Messages.get(PrisonLevel.class, "water_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(PrisonLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -738,7 +738,7 @@ public class PrisonBossLevel extends Level {
case Terrain.BOOKSHELF:
return Messages.get(PrisonLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(PrisonLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.WindParticle;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.PrisonPainter;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
@@ -178,8 +179,9 @@ public class PrisonLevel extends RegularLevel {
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");
case Terrain.REGION_DECO_ALT:
return Messages.get(PrisonLevel.class, "region_deco_alt_name");
default:
return super.tileName( tile );
}
@@ -193,8 +195,9 @@ public class PrisonLevel extends RegularLevel {
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");
case Terrain.REGION_DECO_ALT:
return Messages.get(PrisonLevel.class, "region_deco_alt_desc");
default:
return super.tileDesc( tile );
}
@@ -212,6 +215,10 @@ public class PrisonLevel extends RegularLevel {
if (level.map[i] == Terrain.WALL_DECO) {
group.add( new Torch( i ) );
}
//alt deco is a chasm visual in the prison
if (level.map[i] == Terrain.REGION_DECO_ALT) {
group.add( new WindParticle.Wind( i ) );
}
}
}

View File

@@ -196,7 +196,7 @@ public class SewerLevel extends RegularLevel {
case Terrain.WATER:
return Messages.get(SewerLevel.class, "water_name");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(SewerLevel.class, "region_deco_name");
default:
return super.tileName( tile );
@@ -211,7 +211,7 @@ public class SewerLevel extends RegularLevel {
case Terrain.BOOKSHELF:
return Messages.get(SewerLevel.class, "bookshelf_desc");
case Terrain.REGION_DECO:
case Terrain.REGION_DECO_SP:
case Terrain.REGION_DECO_ALT:
return Messages.get(SewerLevel.class, "region_deco_desc");
default:
return super.tileDesc( tile );

View File

@@ -62,7 +62,7 @@ public class Terrain {
public static final int STATUE_SP = 26;
//These decorations are environment-specific
public static final int REGION_DECO = 33;
public static final int REGION_DECO_SP = 34;
public static final int REGION_DECO_ALT = 34; //alt visual for region deco, sometimes SP, sometimes other
public static final int MINE_CRYSTAL = 35;
public static final int MINE_BOULDER = 36;
@@ -118,7 +118,7 @@ public class Terrain {
flags[STATUE_SP] = flags[STATUE];
flags[REGION_DECO] = flags[STATUE];
flags[REGION_DECO_SP] = flags[STATUE_SP];
flags[REGION_DECO_ALT] = flags[STATUE_SP];
flags[MINE_CRYSTAL] = SOLID;
flags[MINE_BOULDER] = SOLID;

View File

@@ -59,6 +59,8 @@ public class HallsPainter extends RegularPainter {
map[i] = Terrain.WALL_DECO;
} else if (map[i] == Terrain.REGION_DECO && Random.Int(2) == 0){
map[i] = Terrain.REGION_DECO_ALT;
}
}

View File

@@ -93,7 +93,7 @@ public class CirclePitRoom extends StandardRoom {
}
if (valid) {
Painter.drawLine(level, edge, center, Terrain.REGION_DECO_SP);
Painter.drawLine(level, edge, center, Terrain.REGION_DECO_ALT);
Painter.drawInside(level, this, edge, 1, Terrain.EMPTY_SP);
Painter.set(level, edge, Terrain.WALL);

View File

@@ -36,7 +36,7 @@ public class CustomDecoBridgeRoom extends StandardBridgeRoom {
}
protected int spaceTile(){
return Terrain.REGION_DECO_SP;
return Terrain.REGION_DECO_ALT;
}
@Override

View File

@@ -76,6 +76,7 @@ public class FissureRoom extends StandardRoom {
}
}
}
Painter.fill(level, this, 5, Terrain.REGION_DECO_ALT);
}
}

View File

@@ -106,7 +106,7 @@ public class HallwayRoom extends StandardRoom {
if (Random.Int(2) == 0) {
Painter.fill(level, c.left + 1, c.top + 1, 1, 1, Terrain.STATUE_SP);
} else {
Painter.fill(level, c.left + 1, c.top + 1, 1, 1, Terrain.REGION_DECO_SP);
Painter.fill(level, c.left + 1, c.top + 1, 1, 1, Terrain.REGION_DECO_ALT);
}
for (Door door : connected.values()) {

View File

@@ -82,7 +82,7 @@ public class RingRoom extends StandardRoom {
}
protected int centerDecoTiles(){
return Terrain.REGION_DECO_SP;
return Terrain.REGION_DECO_ALT;
}
protected void placeCenterDetail(Level level, int pos){

View File

@@ -84,7 +84,7 @@ public class StatuesRoom extends StandardRoom {
if (h % 2 == 0 && Random.Int(2) == 0){
cy--;
}
Painter.set(level, cx, cy, Terrain.REGION_DECO_SP);
Painter.set(level, cx, cy, Terrain.REGION_DECO_ALT);
}
}
}

View File

@@ -42,7 +42,7 @@ public class HallwayEntranceRoom extends HallwayRoom {
int entrance = -1;
for ( Point p : getPoints()){
if (level.map[level.pointToCell(p)] == Terrain.STATUE_SP
|| level.map[level.pointToCell(p)] == Terrain.REGION_DECO_SP){
|| level.map[level.pointToCell(p)] == Terrain.REGION_DECO_ALT){
entrance = level.pointToCell(p);
break;
}

View File

@@ -42,7 +42,7 @@ public class HallwayExitRoom extends HallwayRoom {
int exit = -1;
for ( Point p : getPoints()){
if (level.map[level.pointToCell(p)] == Terrain.STATUE_SP
|| level.map[level.pointToCell(p)] == Terrain.REGION_DECO_SP){
|| level.map[level.pointToCell(p)] == Terrain.REGION_DECO_ALT){
exit = level.pointToCell(p);
break;
}

View File

@@ -72,8 +72,8 @@ public class DungeonTerrainTilemap extends DungeonTilemap {
return DungeonTileSheet.RAISED_STATUE_SP;
} else if (tile == Terrain.REGION_DECO) {
return DungeonTileSheet.RAISED_REGION_DECO;
} else if (tile == Terrain.REGION_DECO_SP) {
return DungeonTileSheet.RAISED_REGION_DECO_SP;
} else if (tile == Terrain.REGION_DECO_ALT) {
return DungeonTileSheet.RAISED_REGION_DECO_ALT;
} else if (tile == Terrain.MINE_CRYSTAL) {
return DungeonTileSheet.getVisualWithAlts(
DungeonTileSheet.RAISED_MINE_CRYSTAL,

View File

@@ -106,7 +106,6 @@ public class DungeonTileSheet {
//special floor
chasmStitcheable.put( Terrain.EMPTY_SP, CHASM_FLOOR_SP );
chasmStitcheable.put( Terrain.STATUE_SP, CHASM_FLOOR_SP );
chasmStitcheable.put( Terrain.REGION_DECO_SP,CHASM_FLOOR_SP );
//wall
chasmStitcheable.put( Terrain.WALL, CHASM_WALL );
@@ -121,6 +120,13 @@ public class DungeonTileSheet {
}
public static int stitchChasmTile(int above){
//alt region deco has different visuals per region, but most commonly FLOOR_SP
if (above == Terrain.REGION_DECO_ALT){
if (Dungeon.depth <= 5) return CHASM_FLOOR_SP;
if (Dungeon.depth <= 10) return CHASM;
if (Dungeon.depth <= 20) return CHASM_FLOOR_SP;
else return CHASM_FLOOR;
}
return chasmStitcheable.get(above, CHASM);
}
@@ -143,13 +149,22 @@ public class DungeonTileSheet {
Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR, Terrain.CRYSTAL_DOOR
));
public static boolean waterStitcheable(int tile){
//alt region deco has different visuals per region, is stitcheable in demon halls
if (tile == Terrain.REGION_DECO_ALT){
if (Dungeon.depth <= 20) return false;
else return true;
}
return waterStitcheable.contains(tile);
}
//+1 for ground above, +2 for ground right, +4 for ground below, +8 for ground left.
public static int stitchWaterTile(int top, int right, int bottom, int left){
int result = WATER;
if (waterStitcheable.contains(top)) result += 1;
if (waterStitcheable.contains(right)) result += 2;
if (waterStitcheable.contains(bottom)) result += 4;
if (waterStitcheable.contains(left)) result += 8;
if (waterStitcheable(top)) result += 1;
if (waterStitcheable(right)) result += 2;
if (waterStitcheable(bottom)) result += 4;
if (waterStitcheable(left)) result += 8;
return result;
}
@@ -190,7 +205,7 @@ public class DungeonTileSheet {
public static final int FLAT_STATUE = FLAT_OTHER+8;
public static final int FLAT_STATUE_SP = FLAT_OTHER+9;
public static final int FLAT_REGION_DECO = FLAT_OTHER+10;
public static final int FLAT_REGION_DECO_SP = FLAT_OTHER+11;
public static final int FLAT_REGION_DECO_ALT= FLAT_OTHER+11;
public static final int FLAT_MINE_CRYSTAL = FLAT_OTHER+12;
public static final int FLAT_MINE_CRYSTAL_ALT = FLAT_OTHER+13;
@@ -289,7 +304,7 @@ public class DungeonTileSheet {
public static final int RAISED_STATUE = RAISED_OTHER+8;
public static final int RAISED_STATUE_SP = RAISED_OTHER+9;
public static final int RAISED_REGION_DECO = RAISED_OTHER+10;
public static final int RAISED_REGION_DECO_SP = RAISED_OTHER+11;
public static final int RAISED_REGION_DECO_ALT = RAISED_OTHER+11;
public static final int RAISED_MINE_CRYSTAL = RAISED_OTHER+12;
public static final int RAISED_MINE_CRYSTAL_ALT = RAISED_OTHER+13;
@@ -374,7 +389,7 @@ public class DungeonTileSheet {
public static final int STATUE_OVERHANG = OTHER_OVERHANG+8;
public static final int STATUE_SP_OVERHANG = OTHER_OVERHANG+9;
public static final int REGION_DECO_OVERHANG = OTHER_OVERHANG+10;
public static final int REGION_DECO_SP_OVERHANG = OTHER_OVERHANG+11;
public static final int REGION_DECO_ALT_OVERHANG = OTHER_OVERHANG+11;
public static final int MINE_CRYSTAL_OVERHANG = OTHER_OVERHANG+12;
public static final int MINE_CRYSTAL_OVERHANG_ALT = OTHER_OVERHANG+13;
@@ -437,7 +452,7 @@ public class DungeonTileSheet {
directFlatVisuals.put(Terrain.STATUE, FLAT_STATUE);
directFlatVisuals.put(Terrain.STATUE_SP, FLAT_STATUE_SP);
directFlatVisuals.put(Terrain.REGION_DECO, FLAT_REGION_DECO);
directFlatVisuals.put(Terrain.REGION_DECO_SP, FLAT_REGION_DECO_SP);
directFlatVisuals.put(Terrain.REGION_DECO_ALT, FLAT_REGION_DECO_ALT);
directFlatVisuals.put(Terrain.MINE_CRYSTAL, FLAT_MINE_CRYSTAL);
directFlatVisuals.put(Terrain.MINE_BOULDER, FLAT_MINE_BOULDER);

View File

@@ -94,8 +94,8 @@ public class DungeonWallsTilemap extends DungeonTilemap {
return DungeonTileSheet.STATUE_SP_OVERHANG;
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.REGION_DECO){
return DungeonTileSheet.REGION_DECO_OVERHANG;
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.REGION_DECO_SP){
return DungeonTileSheet.REGION_DECO_SP_OVERHANG;
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.REGION_DECO_ALT){
return DungeonTileSheet.REGION_DECO_ALT_OVERHANG;
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.MINE_CRYSTAL){
return DungeonTileSheet.getVisualWithAlts(DungeonTileSheet.MINE_CRYSTAL_OVERHANG, pos + mapWidth);
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.MINE_BOULDER){