v0.4.3: removed visual-only tile types

This commit is contained in:
Evan Debenham 2016-09-26 01:40:30 -04:00
parent 1565030825
commit 2a73678529
5 changed files with 34 additions and 78 deletions

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shatteredpixel.shatteredpixeldungeon" package="com.shatteredpixel.shatteredpixeldungeon"
android:versionCode="129" android:versionCode="130"
android:versionName="0.4.2b" android:versionName="0.4.3-INDEV"
android:installLocation="auto"> android:installLocation="auto">
<uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.VIBRATE"/>

View File

@ -334,6 +334,11 @@ public abstract class Level implements Bundlable {
map = Terrain.convertTrapsFrom43( map, traps ); map = Terrain.convertTrapsFrom43( map, traps );
} }
//for pre-0.4.3 saves
if (version < 130){
map = Terrain.convertTilesFrom129( map );
}
Collection<Bundlable> collection = bundle.getCollection( HEAPS ); Collection<Bundlable> collection = bundle.getCollection( HEAPS );
for (Bundlable h : collection) { for (Bundlable h : collection) {
Heap heap = (Heap)h; Heap heap = (Heap)h;
@ -587,41 +592,6 @@ public abstract class Level implements Bundlable {
passable[i] = avoid[i] = false; passable[i] = avoid[i] = false;
passable[i + width()-1] = avoid[i + width()-1] = false; passable[i + width()-1] = avoid[i + width()-1] = false;
} }
for (int i=width(); i < length() - width(); i++) {
if (water[i]) {
map[i] = getWaterTile( i );
}
if (pit[i]) {
if (!pit[i - width()]) {
int c = map[i - width()];
if (c == Terrain.EMPTY_SP || c == Terrain.STATUE_SP) {
map[i] = Terrain.CHASM_FLOOR_SP;
} else if (water[i - width()]) {
map[i] = Terrain.CHASM_WATER;
} else if ((Terrain.flags[c] & Terrain.UNSTITCHABLE) != 0) {
map[i] = Terrain.CHASM_WALL;
} else {
map[i] = Terrain.CHASM_FLOOR;
}
}
}
}
}
//FIXME this is a temporary fix here to avoid changing the tiles texture
//This logic will be changed in 0.4.3 anyway
private static int[] N4Indicies = new int[]{0, 2, 3, 1};
private int getWaterTile( int pos ) {
int t = Terrain.WATER_TILES;
for (int j=0; j < PathFinder.NEIGHBOURS4.length; j++) {
if ((Terrain.flags[map[pos + PathFinder.NEIGHBOURS4[N4Indicies[j]]]] & Terrain.UNSTITCHABLE) != 0) {
t += 1 << j;
}
}
return t;
} }
public void destroy( int pos ) { public void destroy( int pos ) {
@ -638,7 +608,7 @@ public abstract class Level implements Bundlable {
} }
} }
if (flood) { if (flood) {
set( pos, getWaterTile( pos ) ); set( pos, Terrain.WATER );
} else { } else {
set( pos, Terrain.EMBERS ); set( pos, Terrain.EMBERS );
} }
@ -691,7 +661,7 @@ public abstract class Level implements Bundlable {
solid[cell] = (flags & Terrain.SOLID) != 0; solid[cell] = (flags & Terrain.SOLID) != 0;
avoid[cell] = (flags & Terrain.AVOID) != 0; avoid[cell] = (flags & Terrain.AVOID) != 0;
pit[cell] = (flags & Terrain.PIT) != 0; pit[cell] = (flags & Terrain.PIT) != 0;
water[cell] = terrain == Terrain.WATER || terrain >= Terrain.WATER_TILES; water[cell] = terrain == Terrain.WATER;
} }
public Heap drop( Item item, int cell ) { public Heap drop( Item item, int cell ) {
@ -1021,14 +991,6 @@ public abstract class Level implements Bundlable {
public String tileName( int tile ) { public String tileName( int tile ) {
if (tile >= Terrain.WATER_TILES) {
return tileName( Terrain.WATER );
}
if (tile != Terrain.CHASM && (Terrain.flags[tile] & Terrain.PIT) != 0) {
return tileName( Terrain.CHASM );
}
switch (tile) { switch (tile) {
case Terrain.CHASM: case Terrain.CHASM:
return Messages.get(Level.class, "chasm_name"); return Messages.get(Level.class, "chasm_name");
@ -1121,12 +1083,6 @@ public abstract class Level implements Bundlable {
case Terrain.EMPTY_WELL: case Terrain.EMPTY_WELL:
return Messages.get(Level.class, "empty_well_desc"); return Messages.get(Level.class, "empty_well_desc");
default: default:
if (tile >= Terrain.WATER_TILES) {
return tileDesc( Terrain.WATER );
}
if ((Terrain.flags[tile] & Terrain.PIT) != 0) {
return tileDesc( Terrain.CHASM );
}
return Messages.get(Level.class, "default_desc"); return Messages.get(Level.class, "default_desc");
} }
} }

View File

@ -249,7 +249,7 @@ public class SewerBossLevel extends RegularLevel {
super.seal(); super.seal();
set( entrance, Terrain.WATER_TILES ); set( entrance, Terrain.WATER );
GameScene.updateMap( entrance ); GameScene.updateMap( entrance );
GameScene.ripple( entrance ); GameScene.ripple( entrance );

View File

@ -65,13 +65,7 @@ public class Terrain {
public static final int BOOKSHELF = 27; public static final int BOOKSHELF = 27;
public static final int ALCHEMY = 28; public static final int ALCHEMY = 28;
public static final int CHASM_FLOOR = 29; public static final int WATER = 29;
public static final int CHASM_FLOOR_SP = 30;
public static final int CHASM_WALL = 31;
public static final int CHASM_WATER = 32;
public static final int WATER_TILES = 48;
public static final int WATER = 63;
public static final int PASSABLE = 0x01; public static final int PASSABLE = 0x01;
public static final int LOS_BLOCKING = 0x02; public static final int LOS_BLOCKING = 0x02;
@ -119,14 +113,6 @@ public class Terrain {
flags[BOOKSHELF] = flags[BARRICADE] | UNSTITCHABLE; flags[BOOKSHELF] = flags[BARRICADE] | UNSTITCHABLE;
flags[ALCHEMY] = PASSABLE; flags[ALCHEMY] = PASSABLE;
flags[CHASM_WALL] = flags[CHASM];
flags[CHASM_FLOOR] = flags[CHASM];
flags[CHASM_FLOOR_SP] = flags[CHASM];
flags[CHASM_WATER] = flags[CHASM];
for (int i=WATER_TILES; i < WATER_TILES + 16; i++) {
flags[i] = flags[WATER];
}
}; };
public static int discover( int terr ) { public static int discover( int terr ) {
@ -140,6 +126,27 @@ public class Terrain {
} }
} }
//converts terrain values from pre versioncode 120 (0.4.3) saves
//TODO: remove when no longer supporting saves from 0.4.2b and under
public static int[] convertTilesFrom129(int[] map){
for (int i = 0; i < map.length; i++){
int c = map[i];
if (c >= 29){
if (c <= 32){
c = 0; //chasm tiles
} else {
c = 29; //water tiles
}
}
map[i] = c;
}
return map;
}
//converts terrain values from pre versioncode 44 (0.3.0c) saves //converts terrain values from pre versioncode 44 (0.3.0c) saves
//TODO: remove when no longer supporting saves from 0.3.0b and under //TODO: remove when no longer supporting saves from 0.3.0b and under
public static int[] convertTrapsFrom43( int[] map, SparseArray<Trap> traps){ public static int[] convertTrapsFrom43( int[] map, SparseArray<Trap> traps){

View File

@ -70,14 +70,7 @@ public class PitfallTrap extends Trap {
if (!(Dungeon.level.solid[pos - Dungeon.level.width()] && Dungeon.level.solid[pos + Dungeon.level.width()]) if (!(Dungeon.level.solid[pos - Dungeon.level.width()] && Dungeon.level.solid[pos + Dungeon.level.width()])
&& !(Dungeon.level.solid[pos - 1]&& Dungeon.level.solid[pos + 1])){ && !(Dungeon.level.solid[pos - 1]&& Dungeon.level.solid[pos + 1])){
int c = Dungeon.level.map[pos - Dungeon.level.width()]; Level.set(pos, Terrain.CHASM);
if (c == Terrain.WALL || c == Terrain.WALL_DECO) {
Level.set(pos, Terrain.CHASM_WALL);
} else {
Level.set( pos, Terrain.CHASM_FLOOR );
}
sprite.parent.add(new WindParticle.Wind(pos)); sprite.parent.add(new WindParticle.Wind(pos));
sprite.kill(); sprite.kill();
GameScene.updateMap( pos ); GameScene.updateMap( pos );