diff --git a/core/src/com/riiablo/entity/DT1Sound.java b/core/src/com/riiablo/entity/DT1Sound.java index cd535fc4..083dbf45 100644 --- a/core/src/com/riiablo/entity/DT1Sound.java +++ b/core/src/com/riiablo/entity/DT1Sound.java @@ -8,10 +8,12 @@ public class DT1Sound { private DT1Sound() {} public static String getType(Levels.Entry levels, DT1.Tile tile) { + if (tile == null) return "dirt"; int soundIndex = tile.soundIndex & 0xFF; switch (levels.LevelType) { case 1: return getType1(soundIndex); case 2: return getType2(soundIndex); + case 3: return getType3(soundIndex); default: return "dirt"; } @@ -39,4 +41,11 @@ public class DT1Sound { default: return "dirt"; } } + + private static String getType3(int soundIndex) { + switch (soundIndex) { + case 0: return "dirt"; + default: return "dirt"; + } + } } diff --git a/core/src/com/riiablo/entity/Warp.java b/core/src/com/riiablo/entity/Warp.java index 21623edd..48cbbb56 100644 --- a/core/src/com/riiablo/entity/Warp.java +++ b/core/src/com/riiablo/entity/Warp.java @@ -2,6 +2,7 @@ package com.riiablo.entity; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.GridPoint2; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.IntIntMap; @@ -12,6 +13,7 @@ import com.riiablo.codec.util.BBox; import com.riiablo.graphics.PaletteIndexedBatch; import com.riiablo.map.DT1; import com.riiablo.map.Map; +import com.riiablo.screen.GameScreen; import static com.riiablo.map.DT1.Tile; @@ -73,6 +75,21 @@ public class Warp extends Entity { } } + @Override + public void interact(GameScreen gameScreen) { + System.out.println("zim zim zala bim"); + Map.Zone dst = map.findZone(dstLevel); + GridPoint2 point = dst.find(0, 1, Map.ID.VIS_0_03); + System.out.println(point); + gameScreen.player.position.set(dst.getGlobalX(point.x * 5) + 2, dst.getGlobalY(point.y * 5) + 24 * 5 + 5); + gameScreen.player.setPath(map, null); + } + + @Override + public float getInteractRange() { + return 2; + } + @Override public void setOver(boolean b) { super.setOver(b); diff --git a/core/src/com/riiablo/map/Map.java b/core/src/com/riiablo/map/Map.java index 70ad8cfb..5d6d0faf 100644 --- a/core/src/com/riiablo/map/Map.java +++ b/core/src/com/riiablo/map/Map.java @@ -383,6 +383,13 @@ public class Map implements Disposable { } }; + level = Riiablo.files.Levels.get(8); + zone = map.addZone(level, diff, 24, 24); + zone.setPosition(level.OffsetX, level.OffsetY); + zone.presets[0][1] = Preset.of(Riiablo.files.LvlPrest.get(84), 0); + zone.presets[1][1] = Preset.of(Riiablo.files.LvlPrest.get(61), 1); + zone.presets[1][0] = Preset.of(Riiablo.files.LvlPrest.get(97), 0); + return map; } @@ -438,7 +445,6 @@ public class Map implements Disposable { dependencies.add(new AssetDescriptor<>(TILES_PATH + zone.type.File[i], DT1.class)); } } - } } } @@ -525,6 +531,14 @@ public class Map implements Disposable { } } + public Zone findZone(Levels.Entry level) { + for (Zone zone : zones) { + if (zone.level == level) return zone; + } + + return null; + } + public Zone getZone(int x, int y) { for (Zone zone : zones) { if (zone.contains(x, y)) { @@ -710,6 +724,11 @@ public class Map implements Disposable { ty = y / DT1.Tile.SUBTILE_SIZE; } + // TODO: define entrance, exit to eliminate x,y + public GridPoint2 find(int x, int y, int id) { + return presets[x][y].ds1.find(id); + } + @Override public String toString() { return new ToStringBuilder(this) @@ -732,6 +751,8 @@ public class Map implements Disposable { public int getLocalTX(int tx) { return tx - this.tx; } public int getLocalTY(int ty) { return ty - this.ty; } + public int getGlobalX(int x) { return this.x + x; } + public int getGlobalY(int y) { return this.y + y; } public boolean contains(int x, int y) { x -= this.x; @@ -767,7 +788,7 @@ public class Map implements Disposable { for (int y = 0; y < gridsY; y++, gridY += gridSizeY) { Preset preset = presets[x][y]; if (preset == null) { - generator.generate(this, dt1s, gridX, gridY); + if (generator != null) generator.generate(this, dt1s, gridX, gridY); continue; } @@ -927,6 +948,12 @@ public class Map implements Disposable { } Tile tile = zone.tiles[layer][tx][ty] = Tile.of(dt1s, cell); + // FIXME: These are "empty"/"unknown" tiles, in caves, they fill in the gaps + if (tile.tile == null) System.out.println(cell.orientation + ":" + cell.mainIndex + ":" + cell.subIndex + ": " + cell.prop1() + " " + cell.prop2() + " " + cell.prop3() + " " + cell.prop4()); + if (tile.tile == null) { + zone.tiles[layer][tx][ty] = null; + continue; + } copyFlags(zone.flags, tx, ty, tile.tile); if (NO_FLOOR) { orFlags(zone.flags, tx, ty, DT1.Tile.FLAG_BLOCK_WALK); diff --git a/core/src/com/riiablo/map/MapLoader.java b/core/src/com/riiablo/map/MapLoader.java index 4fb23bc4..b6e620bf 100644 --- a/core/src/com/riiablo/map/MapLoader.java +++ b/core/src/com/riiablo/map/MapLoader.java @@ -56,7 +56,7 @@ public class MapLoader extends AsynchronousAssetLoader getDependencies(String fileName, FileHandle file, MapLoader.MapParameters params) { Array dependencies = new Array<>(); - for (int def = Map.ACT_DEF[params.act]; def < 53/*Map.ACT_DEF[params.act + 1]*/; def++) { + for (int def = Map.ACT_DEF[params.act]; def < /*53*/Map.ACT_DEF[params.act + 1]; def++) { LvlPrest.Entry preset = Riiablo.files.LvlPrest.get(def); for (int i = 0; i < preset.File.length; i++) { if (preset.File[i].charAt(0) != '0') { @@ -66,7 +66,7 @@ public class MapLoader extends AsynchronousAssetLoader(Map.TILES_PATH + type.File[i], DT1.class)); }