v0.7.1: implemented new furrowed grass mechanic for huntress
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 19 KiB |
|
@ -44,7 +44,8 @@ public class StormCloud extends Blob {
|
|||
int terr = Dungeon.level.map[cell];
|
||||
if (terr == Terrain.EMPTY || terr == Terrain.GRASS ||
|
||||
terr == Terrain.EMBERS || terr == Terrain.EMPTY_SP ||
|
||||
terr == Terrain.HIGH_GRASS || terr == Terrain.EMPTY_DECO) {
|
||||
terr == Terrain.HIGH_GRASS || terr == Terrain.FURROWED_GRASS
|
||||
|| terr == Terrain.EMPTY_DECO) {
|
||||
Level.set(cell, Terrain.WATER);
|
||||
GameScene.updateMap(cell);
|
||||
} else if (terr == Terrain.SECRET_TRAP || terr == Terrain.TRAP || terr == Terrain.INACTIVE_TRAP) {
|
||||
|
|
|
@ -78,7 +78,8 @@ public class RegrowthBomb extends Bomb {
|
|||
Dungeon.level.map[i] == Terrain.EMBERS ||
|
||||
Dungeon.level.map[i] == Terrain.EMPTY_DECO ||
|
||||
Dungeon.level.map[i] == Terrain.GRASS ||
|
||||
Dungeon.level.map[i] == Terrain.HIGH_GRASS){
|
||||
Dungeon.level.map[i] == Terrain.HIGH_GRASS ||
|
||||
Dungeon.level.map[i] == Terrain.FURROWED_GRASS){
|
||||
|
||||
plantCandidates.add(i);
|
||||
}
|
||||
|
|
|
@ -55,7 +55,8 @@ public class AquaBlast extends TargetedSpell {
|
|||
int terr = Dungeon.level.map[cell + i];
|
||||
if (terr == Terrain.EMPTY || terr == Terrain.GRASS ||
|
||||
terr == Terrain.EMBERS || terr == Terrain.EMPTY_SP ||
|
||||
terr == Terrain.HIGH_GRASS || terr == Terrain.EMPTY_DECO) {
|
||||
terr == Terrain.HIGH_GRASS || terr == Terrain.FURROWED_GRASS ||
|
||||
terr == Terrain.EMPTY_DECO) {
|
||||
Level.set(cell + i, Terrain.WATER);
|
||||
GameScene.updateMap(cell + i);
|
||||
}
|
||||
|
|
|
@ -128,14 +128,7 @@ public class CursedWand {
|
|||
case 1:
|
||||
cursedFX(user, bolt, new Callback() {
|
||||
public void call() {
|
||||
int c = Dungeon.level.map[bolt.collisionPos];
|
||||
if (c == Terrain.EMPTY ||
|
||||
c == Terrain.EMBERS ||
|
||||
c == Terrain.EMPTY_DECO ||
|
||||
c == Terrain.GRASS ||
|
||||
c == Terrain.HIGH_GRASS) {
|
||||
GameScene.add( Blob.seed(bolt.collisionPos, 30, Regrowth.class));
|
||||
}
|
||||
wand.wandUsed();
|
||||
}
|
||||
});
|
||||
|
@ -220,7 +213,8 @@ public class CursedWand {
|
|||
pos == Terrain.EMBERS ||
|
||||
pos == Terrain.EMPTY_DECO ||
|
||||
pos == Terrain.GRASS ||
|
||||
pos == Terrain.HIGH_GRASS) {
|
||||
pos == Terrain.HIGH_GRASS ||
|
||||
pos == Terrain.FURROWED_GRASS) {
|
||||
Dungeon.level.plant((Plant.Seed) Generator.random(Generator.Category.SEED), pos);
|
||||
}
|
||||
wand.wandUsed();
|
||||
|
@ -358,15 +352,8 @@ public class CursedWand {
|
|||
//great forest fire!
|
||||
case 0:
|
||||
for (int i = 0; i < Dungeon.level.length(); i++){
|
||||
int c = Dungeon.level.map[i];
|
||||
if (c == Terrain.EMPTY ||
|
||||
c == Terrain.EMBERS ||
|
||||
c == Terrain.EMPTY_DECO ||
|
||||
c == Terrain.GRASS ||
|
||||
c == Terrain.HIGH_GRASS) {
|
||||
GameScene.add( Blob.seed(i, 15, Regrowth.class));
|
||||
}
|
||||
}
|
||||
do {
|
||||
GameScene.add(Blob.seed(Dungeon.level.randomDestination(), 10, Fire.class));
|
||||
} while (Random.Int(5) != 0);
|
||||
|
|
|
@ -78,7 +78,8 @@ public class WandOfRegrowth extends Wand {
|
|||
c == Terrain.EMBERS ||
|
||||
c == Terrain.EMPTY_DECO ||
|
||||
c == Terrain.GRASS ||
|
||||
c == Terrain.HIGH_GRASS)) {
|
||||
c == Terrain.HIGH_GRASS ||
|
||||
c == Terrain.FURROWED_GRASS)) {
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -711,6 +711,7 @@ public abstract class Level implements Bundlable {
|
|||
}
|
||||
|
||||
if (map[pos] == Terrain.HIGH_GRASS ||
|
||||
map[pos] == Terrain.FURROWED_GRASS ||
|
||||
map[pos] == Terrain.EMPTY ||
|
||||
map[pos] == Terrain.EMBERS ||
|
||||
map[pos] == Terrain.EMPTY_DECO) {
|
||||
|
@ -800,6 +801,7 @@ public abstract class Level implements Bundlable {
|
|||
break;
|
||||
|
||||
case Terrain.HIGH_GRASS:
|
||||
case Terrain.FURROWED_GRASS:
|
||||
HighGrass.trample( this, cell, ch );
|
||||
break;
|
||||
|
||||
|
@ -1002,6 +1004,8 @@ public abstract class Level implements Bundlable {
|
|||
return Messages.get(Level.class, "exit_name");
|
||||
case Terrain.EMBERS:
|
||||
return Messages.get(Level.class, "embers_name");
|
||||
case Terrain.FURROWED_GRASS:
|
||||
return Messages.get(Level.class, "furrowed_grass_name");
|
||||
case Terrain.LOCKED_DOOR:
|
||||
return Messages.get(Level.class, "locked_door_name");
|
||||
case Terrain.PEDESTAL:
|
||||
|
@ -1049,6 +1053,7 @@ public abstract class Level implements Bundlable {
|
|||
case Terrain.EMBERS:
|
||||
return Messages.get(Level.class, "embers_desc");
|
||||
case Terrain.HIGH_GRASS:
|
||||
case Terrain.FURROWED_GRASS:
|
||||
return Messages.get(Level.class, "high_grass_desc");
|
||||
case Terrain.LOCKED_DOOR:
|
||||
return Messages.get(Level.class, "locked_door_desc");
|
||||
|
|
|
@ -237,7 +237,7 @@ public abstract class RegularLevel extends Level {
|
|||
}
|
||||
|
||||
for (Mob m : mobs){
|
||||
if (map[m.pos] == Terrain.HIGH_GRASS) {
|
||||
if (map[m.pos] == Terrain.HIGH_GRASS || map[m.pos] == Terrain.FURROWED_GRASS) {
|
||||
map[m.pos] = Terrain.GRASS;
|
||||
losBlocking[m.pos] = false;
|
||||
}
|
||||
|
@ -324,7 +324,7 @@ public abstract class RegularLevel extends Level {
|
|||
type = Heap.Type.HEAP;
|
||||
}
|
||||
int cell = randomDropCell();
|
||||
if (map[cell] == Terrain.HIGH_GRASS) {
|
||||
if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
|
||||
map[cell] = Terrain.GRASS;
|
||||
losBlocking[cell] = false;
|
||||
}
|
||||
|
@ -353,7 +353,7 @@ public abstract class RegularLevel extends Level {
|
|||
for (Item item : itemsToSpawn) {
|
||||
int cell = randomDropCell();
|
||||
drop( item, cell ).type = Heap.Type.HEAP;
|
||||
if (map[cell] == Terrain.HIGH_GRASS) {
|
||||
if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
|
||||
map[cell] = Terrain.GRASS;
|
||||
losBlocking[cell] = false;
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ public abstract class RegularLevel extends Level {
|
|||
Item item = Bones.get();
|
||||
if (item != null) {
|
||||
int cell = randomDropCell();
|
||||
if (map[cell] == Terrain.HIGH_GRASS) {
|
||||
if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
|
||||
map[cell] = Terrain.GRASS;
|
||||
losBlocking[cell] = false;
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ public abstract class RegularLevel extends Level {
|
|||
GuidePage p = new GuidePage();
|
||||
p.page(missingPages.get(0));
|
||||
int cell = randomDropCell();
|
||||
if (map[cell] == Terrain.HIGH_GRASS) {
|
||||
if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
|
||||
map[cell] = Terrain.GRASS;
|
||||
losBlocking[cell] = false;
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ public class Terrain {
|
|||
public static final int BARRICADE = 13;
|
||||
public static final int EMPTY_SP = 14;
|
||||
public static final int HIGH_GRASS = 15;
|
||||
public static final int FURROWED_GRASS = 30;
|
||||
|
||||
public static final int SECRET_DOOR = 16;
|
||||
public static final int SECRET_TRAP = 17;
|
||||
|
@ -85,6 +86,7 @@ public class Terrain {
|
|||
flags[BARRICADE] = FLAMABLE | SOLID | LOS_BLOCKING;
|
||||
flags[EMPTY_SP] = flags[EMPTY];
|
||||
flags[HIGH_GRASS] = PASSABLE | LOS_BLOCKING | FLAMABLE;
|
||||
flags[FURROWED_GRASS]= flags[HIGH_GRASS];
|
||||
|
||||
flags[SECRET_DOOR] = flags[WALL] | SECRET;
|
||||
flags[SECRET_TRAP] = flags[EMPTY] | SECRET;
|
||||
|
|
|
@ -43,15 +43,29 @@ import com.watabou.utils.Random;
|
|||
|
||||
public class HighGrass {
|
||||
|
||||
//prevents items dropped from grass, from trampling that same grass.
|
||||
//yes this is a bit ugly, oh well.
|
||||
private static boolean freezeTrample = false;
|
||||
|
||||
public static void trample( Level level, int pos, Char ch ) {
|
||||
|
||||
if (freezeTrample) return;
|
||||
|
||||
if (level.map[pos] == Terrain.FURROWED_GRASS){
|
||||
if (ch instanceof Hero && ((Hero) ch).heroClass == HeroClass.HUNTRESS){
|
||||
//Level.set(pos, Terrain.FURROWED_GRASS);
|
||||
Level.set(pos, Terrain.GRASS);
|
||||
//Do nothing
|
||||
freezeTrample = true;
|
||||
} else {
|
||||
Level.set(pos, Terrain.GRASS);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (ch instanceof Hero && ((Hero) ch).heroClass == HeroClass.HUNTRESS){
|
||||
Level.set(pos, Terrain.FURROWED_GRASS);
|
||||
freezeTrample = true;
|
||||
} else {
|
||||
Level.set(pos, Terrain.GRASS);
|
||||
}
|
||||
GameScene.updateMap( pos );
|
||||
|
||||
int naturalismLevel = 0;
|
||||
|
||||
|
@ -87,8 +101,13 @@ public class HighGrass {
|
|||
}
|
||||
}
|
||||
|
||||
int leaves = 4;
|
||||
}
|
||||
|
||||
freezeTrample = false;
|
||||
|
||||
GameScene.updateMap( pos );
|
||||
|
||||
int leaves = 4;
|
||||
|
||||
if (ch instanceof Hero) {
|
||||
Hero hero = (Hero)ch;
|
||||
|
|
|
@ -80,6 +80,10 @@ public class DungeonTerrainTilemap extends DungeonTilemap {
|
|||
return DungeonTileSheet.getVisualWithAlts(
|
||||
DungeonTileSheet.RAISED_HIGH_GRASS,
|
||||
pos);
|
||||
} else if (tile == Terrain.FURROWED_GRASS) {
|
||||
return DungeonTileSheet.getVisualWithAlts(
|
||||
DungeonTileSheet.RAISED_FURROWED_GRASS,
|
||||
pos);
|
||||
} else {
|
||||
return DungeonTileSheet.NULL_TILE;
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ public class DungeonTileSheet {
|
|||
public static HashSet<Integer> waterStitcheable = new HashSet<>(Arrays.asList(
|
||||
Terrain.EMPTY, Terrain.GRASS, Terrain.EMPTY_WELL,
|
||||
Terrain.ENTRANCE, Terrain.EXIT, Terrain.EMBERS,
|
||||
Terrain.BARRICADE, Terrain.HIGH_GRASS, Terrain.SECRET_TRAP,
|
||||
Terrain.BARRICADE, Terrain.HIGH_GRASS, Terrain.FURROWED_GRASS, Terrain.SECRET_TRAP,
|
||||
Terrain.TRAP, Terrain.INACTIVE_TRAP, Terrain.EMPTY_DECO,
|
||||
Terrain.SIGN, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY,
|
||||
Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR
|
||||
|
@ -123,6 +123,7 @@ public class DungeonTileSheet {
|
|||
chasmStitcheable.put( Terrain.EMBERS, CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.EMPTY_WELL, CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.HIGH_GRASS, CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.FURROWED_GRASS,CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.EMPTY_DECO, CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.SIGN, CHASM_FLOOR );
|
||||
chasmStitcheable.put( Terrain.EMPTY_WELL, CHASM_FLOOR );
|
||||
|
@ -182,8 +183,10 @@ public class DungeonTileSheet {
|
|||
public static final int FLAT_ALCHEMY_POT = FLAT_OTHER+3;
|
||||
public static final int FLAT_BARRICADE = FLAT_OTHER+4;
|
||||
public static final int FLAT_HIGH_GRASS = FLAT_OTHER+5;
|
||||
public static final int FLAT_FURROWED_GRASS = FLAT_OTHER+6;
|
||||
|
||||
public static final int FLAT_HIGH_GRASS_ALT = FLAT_OTHER+7;
|
||||
public static final int FLAT_HIGH_GRASS_ALT = FLAT_OTHER+8;
|
||||
public static final int FLAT_FURROWED_ALT = FLAT_OTHER+9;
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -269,8 +272,10 @@ public class DungeonTileSheet {
|
|||
public static final int RAISED_ALCHEMY_POT = RAISED_OTHER+3;
|
||||
public static final int RAISED_BARRICADE = RAISED_OTHER+4;
|
||||
public static final int RAISED_HIGH_GRASS = RAISED_OTHER+5;
|
||||
public static final int RAISED_FURROWED_GRASS = RAISED_OTHER+6;
|
||||
|
||||
public static final int RAISED_HIGH_GRASS_ALT = RAISED_OTHER+7;
|
||||
public static final int RAISED_HIGH_GRASS_ALT = RAISED_OTHER+9;
|
||||
public static final int RAISED_FURROWED_ALT = RAISED_OTHER+10;
|
||||
|
||||
|
||||
|
||||
|
@ -324,12 +329,14 @@ public class DungeonTileSheet {
|
|||
public static final int DOOR_SIDEWAYS = WALL_OVERHANG+23;
|
||||
public static final int DOOR_SIDEWAYS_LOCKED = WALL_OVERHANG+24;
|
||||
|
||||
public static final int STATUE_OVERHANG = WALL_OVERHANG+26;
|
||||
public static final int ALCHEMY_POT_OVERHANG = WALL_OVERHANG+27;
|
||||
public static final int BARRICADE_OVERHANG = WALL_OVERHANG+28;
|
||||
public static final int HIGH_GRASS_OVERHANG = WALL_OVERHANG+29;
|
||||
public static final int STATUE_OVERHANG = WALL_OVERHANG+32;
|
||||
public static final int ALCHEMY_POT_OVERHANG = WALL_OVERHANG+33;
|
||||
public static final int BARRICADE_OVERHANG = WALL_OVERHANG+34;
|
||||
public static final int HIGH_GRASS_OVERHANG = WALL_OVERHANG+35;
|
||||
public static final int FURROWED_OVERHANG = WALL_OVERHANG+36;
|
||||
|
||||
public static final int HIGH_GRASS_OVERHANG_ALT = WALL_OVERHANG+31;
|
||||
public static final int HIGH_GRASS_OVERHANG_ALT = WALL_OVERHANG+38;
|
||||
public static final int FURROWED_OVERHANG_ALT = WALL_OVERHANG+39;
|
||||
|
||||
/**********************************************************************
|
||||
* Logic for the selection of tile visuals
|
||||
|
@ -373,6 +380,7 @@ public class DungeonTileSheet {
|
|||
directFlatVisuals.put(Terrain.ALCHEMY, FLAT_ALCHEMY_POT);
|
||||
directFlatVisuals.put(Terrain.BARRICADE, FLAT_BARRICADE);
|
||||
directFlatVisuals.put(Terrain.HIGH_GRASS, FLAT_HIGH_GRASS);
|
||||
directFlatVisuals.put(Terrain.FURROWED_GRASS, FLAT_FURROWED_GRASS);
|
||||
|
||||
directFlatVisuals.put(Terrain.SECRET_DOOR, directFlatVisuals.get(Terrain.WALL));
|
||||
}
|
||||
|
@ -405,13 +413,16 @@ public class DungeonTileSheet {
|
|||
|
||||
commonAltVisuals.put(FLAT_BOOKSHELF, FLAT_BOOKSHELF_ALT);
|
||||
commonAltVisuals.put(FLAT_HIGH_GRASS, FLAT_HIGH_GRASS_ALT);
|
||||
commonAltVisuals.put(FLAT_FURROWED_GRASS, FLAT_FURROWED_ALT);
|
||||
|
||||
commonAltVisuals.put(RAISED_WALL, RAISED_WALL_ALT);
|
||||
commonAltVisuals.put(RAISED_WALL_DECO, RAISED_WALL_DECO_ALT);
|
||||
commonAltVisuals.put(RAISED_WALL_BOOKSHELF, RAISED_WALL_BOOKSHELF_ALT);
|
||||
|
||||
commonAltVisuals.put(RAISED_HIGH_GRASS, RAISED_HIGH_GRASS_ALT);
|
||||
commonAltVisuals.put(RAISED_FURROWED_GRASS, RAISED_FURROWED_ALT);
|
||||
commonAltVisuals.put(HIGH_GRASS_OVERHANG, HIGH_GRASS_OVERHANG_ALT);
|
||||
commonAltVisuals.put(FURROWED_OVERHANG, FURROWED_OVERHANG_ALT);
|
||||
}
|
||||
|
||||
//These alt visuals trigger 5% of the time (and also override common alts when they show up)
|
||||
|
|
|
@ -81,6 +81,8 @@ public class DungeonWallsTilemap extends DungeonTilemap {
|
|||
return DungeonTileSheet.BARRICADE_OVERHANG;
|
||||
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.HIGH_GRASS){
|
||||
return DungeonTileSheet.getVisualWithAlts(DungeonTileSheet.HIGH_GRASS_OVERHANG, pos + mapWidth);
|
||||
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.FURROWED_GRASS){
|
||||
return DungeonTileSheet.getVisualWithAlts(DungeonTileSheet.FURROWED_OVERHANG, pos + mapWidth);
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
|
|
@ -45,7 +45,7 @@ public class GridTileMap extends DungeonTilemap {
|
|||
protected int getTileVisual(int pos, int tile, boolean flat) {
|
||||
if (gridSetting == -1 || (pos % mapWidth) % 2 != (pos / mapWidth) % 2){
|
||||
return -1;
|
||||
} else if (DungeonTileSheet.floorTile(tile) || tile == Terrain.HIGH_GRASS) {
|
||||
} else if (DungeonTileSheet.floorTile(tile) || tile == Terrain.HIGH_GRASS || tile == Terrain.FURROWED_GRASS) {
|
||||
return gridSetting;
|
||||
} else if (DungeonTileSheet.doorTile(tile)){
|
||||
if (DungeonTileSheet.wallStitcheable(map[pos - mapWidth])){
|
||||
|
|
|
@ -39,9 +39,14 @@ public class RaisedTerrainTilemap extends DungeonTilemap {
|
|||
if (tile == Terrain.HIGH_GRASS){
|
||||
return DungeonTileSheet.getVisualWithAlts(
|
||||
DungeonTileSheet.RAISED_HIGH_GRASS,
|
||||
pos) + 1;
|
||||
pos) + 2;
|
||||
} else if (tile == Terrain.FURROWED_GRASS){
|
||||
return DungeonTileSheet.getVisualWithAlts(
|
||||
DungeonTileSheet.RAISED_FURROWED_GRASS,
|
||||
pos) + 2;
|
||||
}
|
||||
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,10 +68,13 @@ public class TerrainFeaturesTilemap extends DungeonTilemap {
|
|||
if (Dungeon.depth == 21) stage--;
|
||||
if (tile == Terrain.HIGH_GRASS){
|
||||
return 9 + 16*stage + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0);
|
||||
} else if (tile == Terrain.GRASS) {
|
||||
} else if (tile == Terrain.FURROWED_GRASS){
|
||||
//TODO
|
||||
return 11 + 16*stage + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0);
|
||||
} else if (tile == Terrain.GRASS) {
|
||||
return 13 + 16*stage + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0);
|
||||
} else if (tile == Terrain.EMBERS) {
|
||||
return 13 + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0);
|
||||
return 9 * (16*5) + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0);
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
|
|
@ -160,6 +160,7 @@ levels.level.open_door_name=Open door
|
|||
levels.level.entrace_name=Depth entrance
|
||||
levels.level.exit_name=Depth exit
|
||||
levels.level.embers_name=Embers
|
||||
levels.level.furrowed_grass_name=Furrowed vegetation
|
||||
levels.level.locked_door_name=Locked door
|
||||
levels.level.pedestal_name=Pedestal
|
||||
levels.level.barricade_name=Barricade
|
||||
|
|