v3.1.0: implemented new terrain types with very WIP visuals

This commit is contained in:
Evan Debenham
2025-04-16 16:34:15 -04:00
parent 809aef5f4d
commit 46861ccef4
18 changed files with 144 additions and 0 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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.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.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.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.water_name=Suspiciously colored water
levels.citylevel.high_grass_name=High blooming flowers 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.sp_desc=Thick carpet covers the floor.
levels.citylevel.statue_desc=The statue depicts some dwarf standing in a heroic stance. 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.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.water_name=Cold lava
levels.hallslevel.grass_name=Embermoss 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.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.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.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.hidden_trap=A hidden %s activates!
levels.level.chasm_name=Chasm 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.water_name=Dark cold water
levels.prisonlevel.empty_deco_desc=There are old blood stains on the floor. 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.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.water_name=Murky water
levels.sewerlevel.empty_deco_desc=Wet yellowish moss covers the floor. 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.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.

View File

@@ -431,6 +431,9 @@ public class CavesBossLevel extends Level {
case Terrain.STATUE: case Terrain.STATUE:
//city statues are used //city statues are used
return Messages.get(CityLevel.class, "statue_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -456,6 +459,9 @@ public class CavesBossLevel extends Level {
//city statues are used //city statues are used
case Terrain.STATUE: case Terrain.STATUE:
return Messages.get(CityLevel.class, "statue_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -199,6 +199,9 @@ public class CavesLevel extends RegularLevel {
return Messages.get(CavesLevel.class, "high_grass_name"); return Messages.get(CavesLevel.class, "high_grass_name");
case Terrain.WATER: case Terrain.WATER:
return Messages.get(CavesLevel.class, "water_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -218,6 +221,9 @@ public class CavesLevel extends RegularLevel {
return Messages.get(CavesLevel.class, "wall_deco_desc"); return Messages.get(CavesLevel.class, "wall_deco_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(CavesLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -388,6 +388,9 @@ public class CityBossLevel extends Level {
return Messages.get(CityLevel.class, "water_name"); return Messages.get(CityLevel.class, "water_name");
case Terrain.HIGH_GRASS: case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -411,6 +414,9 @@ public class CityBossLevel extends Level {
return Messages.get(CityLevel.class, "statue_desc"); return Messages.get(CityLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }
@@ -423,6 +429,13 @@ public class CityBossLevel extends Level {
return visuals; return visuals;
} }
@Override
public Group addWallVisuals() {
super.addWallVisuals();
CityLevel.addCityWallVisuals( this, wallVisuals );
return wallVisuals;
}
public static class CustomGroundVisuals extends CustomTilemap { public static class CustomGroundVisuals extends CustomTilemap {
{ {

View File

@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Imp; 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.CityPainter;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.BlazingTrap;
@@ -136,6 +137,9 @@ public class CityLevel extends RegularLevel {
return Messages.get(CityLevel.class, "water_name"); return Messages.get(CityLevel.class, "water_name");
case Terrain.HIGH_GRASS: case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -159,6 +163,9 @@ public class CityLevel extends RegularLevel {
return Messages.get(CityLevel.class, "statue_desc"); return Messages.get(CityLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); 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 { public static class Smoke extends Emitter {

View File

@@ -367,6 +367,9 @@ public class HallsBossLevel extends Level {
case Terrain.STATUE: case Terrain.STATUE:
case Terrain.STATUE_SP: case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -382,6 +385,9 @@ public class HallsBossLevel extends Level {
return Messages.get(HallsLevel.class, "statue_desc"); return Messages.get(HallsLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -160,6 +160,9 @@ public class HallsLevel extends RegularLevel {
case Terrain.STATUE: case Terrain.STATUE:
case Terrain.STATUE_SP: case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -175,6 +178,9 @@ public class HallsLevel extends RegularLevel {
return Messages.get(HallsLevel.class, "statue_desc"); return Messages.get(HallsLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -200,6 +200,9 @@ public class LastLevel extends Level {
case Terrain.STATUE: case Terrain.STATUE:
case Terrain.STATUE_SP: case Terrain.STATUE_SP:
return Messages.get(HallsLevel.class, "statue_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -215,6 +218,9 @@ public class LastLevel extends Level {
return Messages.get(HallsLevel.class, "statue_desc"); return Messages.get(HallsLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(HallsLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -158,6 +158,9 @@ public class LastShopLevel extends RegularLevel {
return Messages.get(CityLevel.class, "water_name"); return Messages.get(CityLevel.class, "water_name");
case Terrain.HIGH_GRASS: case Terrain.HIGH_GRASS:
return Messages.get(CityLevel.class, "high_grass_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -181,6 +184,9 @@ public class LastShopLevel extends RegularLevel {
return Messages.get(CityLevel.class, "statue_desc"); return Messages.get(CityLevel.class, "statue_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(CityLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }
@@ -192,4 +198,12 @@ public class LastShopLevel extends RegularLevel {
CityLevel.addCityVisuals(this, visuals); CityLevel.addCityVisuals(this, visuals);
return visuals; return visuals;
} }
@Override
public Group addWallVisuals() {
super.addWallVisuals();
CityLevel.addCityWallVisuals( this, wallVisuals );
return wallVisuals;
}
} }

View File

@@ -722,6 +722,9 @@ public class PrisonBossLevel extends Level {
switch (tile) { switch (tile) {
case Terrain.WATER: case Terrain.WATER:
return Messages.get(PrisonLevel.class, "water_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -734,6 +737,9 @@ public class PrisonBossLevel extends Level {
return Messages.get(PrisonLevel.class, "empty_deco_desc"); return Messages.get(PrisonLevel.class, "empty_deco_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(PrisonLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -177,6 +177,9 @@ public class PrisonLevel extends RegularLevel {
switch (tile) { switch (tile) {
case Terrain.WATER: case Terrain.WATER:
return Messages.get(PrisonLevel.class, "water_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -189,6 +192,9 @@ public class PrisonLevel extends RegularLevel {
return Messages.get(PrisonLevel.class, "empty_deco_desc"); return Messages.get(PrisonLevel.class, "empty_deco_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(PrisonLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }

View File

@@ -195,6 +195,9 @@ public class SewerLevel extends RegularLevel {
switch (tile) { switch (tile) {
case Terrain.WATER: case Terrain.WATER:
return Messages.get(SewerLevel.class, "water_name"); 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: default:
return super.tileName( tile ); return super.tileName( tile );
} }
@@ -207,6 +210,9 @@ public class SewerLevel extends RegularLevel {
return Messages.get(SewerLevel.class, "empty_deco_desc"); return Messages.get(SewerLevel.class, "empty_deco_desc");
case Terrain.BOOKSHELF: case Terrain.BOOKSHELF:
return Messages.get(SewerLevel.class, "bookshelf_desc"); 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: default:
return super.tileDesc( tile ); return super.tileDesc( tile );
} }