v0.7.1: implemented new furrowed grass mechanic for huntress

This commit is contained in:
Evan Debenham 2018-11-17 03:30:10 -05:00
parent 72249110bf
commit 74fc34bd97
22 changed files with 117 additions and 74 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -44,7 +44,8 @@ public class StormCloud extends Blob {
int terr = Dungeon.level.map[cell]; int terr = Dungeon.level.map[cell];
if (terr == Terrain.EMPTY || terr == Terrain.GRASS || if (terr == Terrain.EMPTY || terr == Terrain.GRASS ||
terr == Terrain.EMBERS || terr == Terrain.EMPTY_SP || 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); Level.set(cell, Terrain.WATER);
GameScene.updateMap(cell); GameScene.updateMap(cell);
} else if (terr == Terrain.SECRET_TRAP || terr == Terrain.TRAP || terr == Terrain.INACTIVE_TRAP) { } else if (terr == Terrain.SECRET_TRAP || terr == Terrain.TRAP || terr == Terrain.INACTIVE_TRAP) {

View File

@ -78,7 +78,8 @@ public class RegrowthBomb extends Bomb {
Dungeon.level.map[i] == Terrain.EMBERS || Dungeon.level.map[i] == Terrain.EMBERS ||
Dungeon.level.map[i] == Terrain.EMPTY_DECO || Dungeon.level.map[i] == Terrain.EMPTY_DECO ||
Dungeon.level.map[i] == Terrain.GRASS || 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); plantCandidates.add(i);
} }

View File

@ -55,7 +55,8 @@ public class AquaBlast extends TargetedSpell {
int terr = Dungeon.level.map[cell + i]; int terr = Dungeon.level.map[cell + i];
if (terr == Terrain.EMPTY || terr == Terrain.GRASS || if (terr == Terrain.EMPTY || terr == Terrain.GRASS ||
terr == Terrain.EMBERS || terr == Terrain.EMPTY_SP || 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); Level.set(cell + i, Terrain.WATER);
GameScene.updateMap(cell + i); GameScene.updateMap(cell + i);
} }

View File

@ -128,14 +128,7 @@ public class CursedWand {
case 1: case 1:
cursedFX(user, bolt, new Callback() { cursedFX(user, bolt, new Callback() {
public void call() { public void call() {
int c = Dungeon.level.map[bolt.collisionPos]; GameScene.add( Blob.seed(bolt.collisionPos, 30, Regrowth.class));
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(); wand.wandUsed();
} }
}); });
@ -220,7 +213,8 @@ public class CursedWand {
pos == Terrain.EMBERS || pos == Terrain.EMBERS ||
pos == Terrain.EMPTY_DECO || pos == Terrain.EMPTY_DECO ||
pos == Terrain.GRASS || 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); Dungeon.level.plant((Plant.Seed) Generator.random(Generator.Category.SEED), pos);
} }
wand.wandUsed(); wand.wandUsed();
@ -358,14 +352,7 @@ public class CursedWand {
//great forest fire! //great forest fire!
case 0: case 0:
for (int i = 0; i < Dungeon.level.length(); i++){ for (int i = 0; i < Dungeon.level.length(); i++){
int c = Dungeon.level.map[i]; GameScene.add( Blob.seed(i, 15, Regrowth.class));
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 { do {
GameScene.add(Blob.seed(Dungeon.level.randomDestination(), 10, Fire.class)); GameScene.add(Blob.seed(Dungeon.level.randomDestination(), 10, Fire.class));

View File

@ -78,7 +78,8 @@ public class WandOfRegrowth extends Wand {
c == Terrain.EMBERS || c == Terrain.EMBERS ||
c == Terrain.EMPTY_DECO || c == Terrain.EMPTY_DECO ||
c == Terrain.GRASS || c == Terrain.GRASS ||
c == Terrain.HIGH_GRASS)) { c == Terrain.HIGH_GRASS ||
c == Terrain.FURROWED_GRASS)) {
i.remove(); i.remove();
} }
} }

View File

@ -711,6 +711,7 @@ public abstract class Level implements Bundlable {
} }
if (map[pos] == Terrain.HIGH_GRASS || if (map[pos] == Terrain.HIGH_GRASS ||
map[pos] == Terrain.FURROWED_GRASS ||
map[pos] == Terrain.EMPTY || map[pos] == Terrain.EMPTY ||
map[pos] == Terrain.EMBERS || map[pos] == Terrain.EMBERS ||
map[pos] == Terrain.EMPTY_DECO) { map[pos] == Terrain.EMPTY_DECO) {
@ -800,6 +801,7 @@ public abstract class Level implements Bundlable {
break; break;
case Terrain.HIGH_GRASS: case Terrain.HIGH_GRASS:
case Terrain.FURROWED_GRASS:
HighGrass.trample( this, cell, ch ); HighGrass.trample( this, cell, ch );
break; break;
@ -1002,6 +1004,8 @@ public abstract class Level implements Bundlable {
return Messages.get(Level.class, "exit_name"); return Messages.get(Level.class, "exit_name");
case Terrain.EMBERS: case Terrain.EMBERS:
return Messages.get(Level.class, "embers_name"); return Messages.get(Level.class, "embers_name");
case Terrain.FURROWED_GRASS:
return Messages.get(Level.class, "furrowed_grass_name");
case Terrain.LOCKED_DOOR: case Terrain.LOCKED_DOOR:
return Messages.get(Level.class, "locked_door_name"); return Messages.get(Level.class, "locked_door_name");
case Terrain.PEDESTAL: case Terrain.PEDESTAL:
@ -1049,6 +1053,7 @@ public abstract class Level implements Bundlable {
case Terrain.EMBERS: case Terrain.EMBERS:
return Messages.get(Level.class, "embers_desc"); return Messages.get(Level.class, "embers_desc");
case Terrain.HIGH_GRASS: case Terrain.HIGH_GRASS:
case Terrain.FURROWED_GRASS:
return Messages.get(Level.class, "high_grass_desc"); return Messages.get(Level.class, "high_grass_desc");
case Terrain.LOCKED_DOOR: case Terrain.LOCKED_DOOR:
return Messages.get(Level.class, "locked_door_desc"); return Messages.get(Level.class, "locked_door_desc");

View File

@ -237,7 +237,7 @@ public abstract class RegularLevel extends Level {
} }
for (Mob m : mobs){ 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; map[m.pos] = Terrain.GRASS;
losBlocking[m.pos] = false; losBlocking[m.pos] = false;
} }
@ -324,7 +324,7 @@ public abstract class RegularLevel extends Level {
type = Heap.Type.HEAP; type = Heap.Type.HEAP;
} }
int cell = randomDropCell(); int cell = randomDropCell();
if (map[cell] == Terrain.HIGH_GRASS) { if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
map[cell] = Terrain.GRASS; map[cell] = Terrain.GRASS;
losBlocking[cell] = false; losBlocking[cell] = false;
} }
@ -353,7 +353,7 @@ public abstract class RegularLevel extends Level {
for (Item item : itemsToSpawn) { for (Item item : itemsToSpawn) {
int cell = randomDropCell(); int cell = randomDropCell();
drop( item, cell ).type = Heap.Type.HEAP; 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; map[cell] = Terrain.GRASS;
losBlocking[cell] = false; losBlocking[cell] = false;
} }
@ -362,7 +362,7 @@ public abstract class RegularLevel extends Level {
Item item = Bones.get(); Item item = Bones.get();
if (item != null) { if (item != null) {
int cell = randomDropCell(); int cell = randomDropCell();
if (map[cell] == Terrain.HIGH_GRASS) { if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
map[cell] = Terrain.GRASS; map[cell] = Terrain.GRASS;
losBlocking[cell] = false; losBlocking[cell] = false;
} }
@ -389,7 +389,7 @@ public abstract class RegularLevel extends Level {
GuidePage p = new GuidePage(); GuidePage p = new GuidePage();
p.page(missingPages.get(0)); p.page(missingPages.get(0));
int cell = randomDropCell(); int cell = randomDropCell();
if (map[cell] == Terrain.HIGH_GRASS) { if (map[cell] == Terrain.HIGH_GRASS || map[cell] == Terrain.FURROWED_GRASS) {
map[cell] = Terrain.GRASS; map[cell] = Terrain.GRASS;
losBlocking[cell] = false; losBlocking[cell] = false;
} }

View File

@ -39,6 +39,7 @@ public class Terrain {
public static final int BARRICADE = 13; public static final int BARRICADE = 13;
public static final int EMPTY_SP = 14; public static final int EMPTY_SP = 14;
public static final int HIGH_GRASS = 15; 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_DOOR = 16;
public static final int SECRET_TRAP = 17; public static final int SECRET_TRAP = 17;
@ -85,6 +86,7 @@ public class Terrain {
flags[BARRICADE] = FLAMABLE | SOLID | LOS_BLOCKING; flags[BARRICADE] = FLAMABLE | SOLID | LOS_BLOCKING;
flags[EMPTY_SP] = flags[EMPTY]; flags[EMPTY_SP] = flags[EMPTY];
flags[HIGH_GRASS] = PASSABLE | LOS_BLOCKING | FLAMABLE; flags[HIGH_GRASS] = PASSABLE | LOS_BLOCKING | FLAMABLE;
flags[FURROWED_GRASS]= flags[HIGH_GRASS];
flags[SECRET_DOOR] = flags[WALL] | SECRET; flags[SECRET_DOOR] = flags[WALL] | SECRET;
flags[SECRET_TRAP] = flags[EMPTY] | SECRET; flags[SECRET_TRAP] = flags[EMPTY] | SECRET;

View File

@ -42,53 +42,72 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.watabou.utils.Random; import com.watabou.utils.Random;
public class HighGrass { 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 ) { public static void trample( Level level, int pos, Char ch ) {
if (ch instanceof Hero && ((Hero) ch).heroClass == HeroClass.HUNTRESS){ if (freezeTrample) return;
//Level.set(pos, Terrain.FURROWED_GRASS);
Level.set(pos, Terrain.GRASS);
} else {
Level.set(pos, Terrain.GRASS);
}
GameScene.updateMap( pos );
int naturalismLevel = 0; if (level.map[pos] == Terrain.FURROWED_GRASS){
if (ch instanceof Hero && ((Hero) ch).heroClass == HeroClass.HUNTRESS){
if (ch != null) { //Do nothing
SandalsOfNature.Naturalism naturalism = ch.buff( SandalsOfNature.Naturalism.class ); freezeTrample = true;
if (naturalism != null) { } else {
if (!naturalism.isCursed()) { Level.set(pos, Terrain.GRASS);
naturalismLevel = naturalism.itemLevel() + 1; }
naturalism.charge();
} else { } else {
naturalismLevel = -1; if (ch instanceof Hero && ((Hero) ch).heroClass == HeroClass.HUNTRESS){
Level.set(pos, Terrain.FURROWED_GRASS);
freezeTrample = true;
} else {
Level.set(pos, Terrain.GRASS);
}
int naturalismLevel = 0;
if (ch != null) {
SandalsOfNature.Naturalism naturalism = ch.buff( SandalsOfNature.Naturalism.class );
if (naturalism != null) {
if (!naturalism.isCursed()) {
naturalismLevel = naturalism.itemLevel() + 1;
naturalism.charge();
} else {
naturalismLevel = -1;
}
} }
} }
}
if (naturalismLevel >= 0) {
if (naturalismLevel >= 0) { // Seed, scales from 1/20 to 1/4
// Seed, scales from 1/20 to 1/4 if (Random.Int(20 - (naturalismLevel * 4)) == 0) {
if (Random.Int(20 - (naturalismLevel * 4)) == 0) { Item seed = Generator.random(Generator.Category.SEED);
Item seed = Generator.random(Generator.Category.SEED);
if (seed instanceof BlandfruitBush.Seed) {
if (seed instanceof BlandfruitBush.Seed) { if (Random.Int(3) - Dungeon.LimitedDrops.BLANDFRUIT_SEED.count >= 0) {
if (Random.Int(3) - Dungeon.LimitedDrops.BLANDFRUIT_SEED.count >= 0) { level.drop(seed, pos).sprite.drop();
Dungeon.LimitedDrops.BLANDFRUIT_SEED.count++;
}
} else
level.drop(seed, pos).sprite.drop(); level.drop(seed, pos).sprite.drop();
Dungeon.LimitedDrops.BLANDFRUIT_SEED.count++; }
}
} else // Dew, scales from 1/6 to 1/3
level.drop(seed, pos).sprite.drop(); if (Random.Int(24 - naturalismLevel*3) <= 3) {
} level.drop(new Dewdrop(), pos).sprite.drop();
}
// Dew, scales from 1/6 to 1/3
if (Random.Int(24 - naturalismLevel*3) <= 3) {
level.drop(new Dewdrop(), pos).sprite.drop();
} }
} }
freezeTrample = false;
GameScene.updateMap( pos );
int leaves = 4; int leaves = 4;
if (ch instanceof Hero) { if (ch instanceof Hero) {
Hero hero = (Hero)ch; Hero hero = (Hero)ch;

View File

@ -80,6 +80,10 @@ public class DungeonTerrainTilemap extends DungeonTilemap {
return DungeonTileSheet.getVisualWithAlts( return DungeonTileSheet.getVisualWithAlts(
DungeonTileSheet.RAISED_HIGH_GRASS, DungeonTileSheet.RAISED_HIGH_GRASS,
pos); pos);
} else if (tile == Terrain.FURROWED_GRASS) {
return DungeonTileSheet.getVisualWithAlts(
DungeonTileSheet.RAISED_FURROWED_GRASS,
pos);
} else { } else {
return DungeonTileSheet.NULL_TILE; return DungeonTileSheet.NULL_TILE;
} }

View File

@ -81,7 +81,7 @@ public class DungeonTileSheet {
public static HashSet<Integer> waterStitcheable = new HashSet<>(Arrays.asList( public static HashSet<Integer> waterStitcheable = new HashSet<>(Arrays.asList(
Terrain.EMPTY, Terrain.GRASS, Terrain.EMPTY_WELL, Terrain.EMPTY, Terrain.GRASS, Terrain.EMPTY_WELL,
Terrain.ENTRANCE, Terrain.EXIT, Terrain.EMBERS, 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.TRAP, Terrain.INACTIVE_TRAP, Terrain.EMPTY_DECO,
Terrain.SIGN, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY, Terrain.SIGN, Terrain.WELL, Terrain.STATUE, Terrain.ALCHEMY,
Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR Terrain.DOOR, Terrain.OPEN_DOOR, Terrain.LOCKED_DOOR
@ -123,6 +123,7 @@ public class DungeonTileSheet {
chasmStitcheable.put( Terrain.EMBERS, CHASM_FLOOR ); chasmStitcheable.put( Terrain.EMBERS, CHASM_FLOOR );
chasmStitcheable.put( Terrain.EMPTY_WELL, CHASM_FLOOR ); chasmStitcheable.put( Terrain.EMPTY_WELL, CHASM_FLOOR );
chasmStitcheable.put( Terrain.HIGH_GRASS, 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.EMPTY_DECO, CHASM_FLOOR );
chasmStitcheable.put( Terrain.SIGN, CHASM_FLOOR ); chasmStitcheable.put( Terrain.SIGN, CHASM_FLOOR );
chasmStitcheable.put( Terrain.EMPTY_WELL, 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_ALCHEMY_POT = FLAT_OTHER+3;
public static final int FLAT_BARRICADE = FLAT_OTHER+4; public static final int FLAT_BARRICADE = FLAT_OTHER+4;
public static final int FLAT_HIGH_GRASS = FLAT_OTHER+5; 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_ALCHEMY_POT = RAISED_OTHER+3;
public static final int RAISED_BARRICADE = RAISED_OTHER+4; public static final int RAISED_BARRICADE = RAISED_OTHER+4;
public static final int RAISED_HIGH_GRASS = RAISED_OTHER+5; 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 = WALL_OVERHANG+23;
public static final int DOOR_SIDEWAYS_LOCKED = WALL_OVERHANG+24; public static final int DOOR_SIDEWAYS_LOCKED = WALL_OVERHANG+24;
public static final int STATUE_OVERHANG = WALL_OVERHANG+26; public static final int STATUE_OVERHANG = WALL_OVERHANG+32;
public static final int ALCHEMY_POT_OVERHANG = WALL_OVERHANG+27; public static final int ALCHEMY_POT_OVERHANG = WALL_OVERHANG+33;
public static final int BARRICADE_OVERHANG = WALL_OVERHANG+28; public static final int BARRICADE_OVERHANG = WALL_OVERHANG+34;
public static final int HIGH_GRASS_OVERHANG = WALL_OVERHANG+29; 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 * Logic for the selection of tile visuals
@ -373,6 +380,7 @@ public class DungeonTileSheet {
directFlatVisuals.put(Terrain.ALCHEMY, FLAT_ALCHEMY_POT); directFlatVisuals.put(Terrain.ALCHEMY, FLAT_ALCHEMY_POT);
directFlatVisuals.put(Terrain.BARRICADE, FLAT_BARRICADE); directFlatVisuals.put(Terrain.BARRICADE, FLAT_BARRICADE);
directFlatVisuals.put(Terrain.HIGH_GRASS, FLAT_HIGH_GRASS); 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)); 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_BOOKSHELF, FLAT_BOOKSHELF_ALT);
commonAltVisuals.put(FLAT_HIGH_GRASS, FLAT_HIGH_GRASS_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, RAISED_WALL_ALT);
commonAltVisuals.put(RAISED_WALL_DECO, RAISED_WALL_DECO_ALT); commonAltVisuals.put(RAISED_WALL_DECO, RAISED_WALL_DECO_ALT);
commonAltVisuals.put(RAISED_WALL_BOOKSHELF, RAISED_WALL_BOOKSHELF_ALT); commonAltVisuals.put(RAISED_WALL_BOOKSHELF, RAISED_WALL_BOOKSHELF_ALT);
commonAltVisuals.put(RAISED_HIGH_GRASS, RAISED_HIGH_GRASS_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(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) //These alt visuals trigger 5% of the time (and also override common alts when they show up)

View File

@ -81,6 +81,8 @@ public class DungeonWallsTilemap extends DungeonTilemap {
return DungeonTileSheet.BARRICADE_OVERHANG; return DungeonTileSheet.BARRICADE_OVERHANG;
} else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.HIGH_GRASS){ } else if (pos + mapWidth < size && map[pos+mapWidth] == Terrain.HIGH_GRASS){
return DungeonTileSheet.getVisualWithAlts(DungeonTileSheet.HIGH_GRASS_OVERHANG, pos + mapWidth); 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; return -1;

View File

@ -45,7 +45,7 @@ public class GridTileMap extends DungeonTilemap {
protected int getTileVisual(int pos, int tile, boolean flat) { protected int getTileVisual(int pos, int tile, boolean flat) {
if (gridSetting == -1 || (pos % mapWidth) % 2 != (pos / mapWidth) % 2){ if (gridSetting == -1 || (pos % mapWidth) % 2 != (pos / mapWidth) % 2){
return -1; 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; return gridSetting;
} else if (DungeonTileSheet.doorTile(tile)){ } else if (DungeonTileSheet.doorTile(tile)){
if (DungeonTileSheet.wallStitcheable(map[pos - mapWidth])){ if (DungeonTileSheet.wallStitcheable(map[pos - mapWidth])){

View File

@ -39,9 +39,14 @@ public class RaisedTerrainTilemap extends DungeonTilemap {
if (tile == Terrain.HIGH_GRASS){ if (tile == Terrain.HIGH_GRASS){
return DungeonTileSheet.getVisualWithAlts( return DungeonTileSheet.getVisualWithAlts(
DungeonTileSheet.RAISED_HIGH_GRASS, 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; return -1;
} }

View File

@ -68,10 +68,13 @@ public class TerrainFeaturesTilemap extends DungeonTilemap {
if (Dungeon.depth == 21) stage--; if (Dungeon.depth == 21) stage--;
if (tile == Terrain.HIGH_GRASS){ if (tile == Terrain.HIGH_GRASS){
return 9 + 16*stage + (DungeonTileSheet.tileVariance[pos] >= 50 ? 1 : 0); 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); 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) { } 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; return -1;

View File

@ -160,6 +160,7 @@ levels.level.open_door_name=Open door
levels.level.entrace_name=Depth entrance levels.level.entrace_name=Depth entrance
levels.level.exit_name=Depth exit levels.level.exit_name=Depth exit
levels.level.embers_name=Embers levels.level.embers_name=Embers
levels.level.furrowed_grass_name=Furrowed vegetation
levels.level.locked_door_name=Locked door levels.level.locked_door_name=Locked door
levels.level.pedestal_name=Pedestal levels.level.pedestal_name=Pedestal
levels.level.barricade_name=Barricade levels.level.barricade_name=Barricade