private void changeMap(int[] map){ this.map = map.clone(); buildFlagMaps(); cleanWalls(); exit = entrance = 0; for (int i = 0; i < length(); i ++) if (map[i] == Terrain.ENTRANCE) entrance = i; else if (map[i] == Terrain.EXIT) exit = i; BArray.setFalse(visited); BArray.setFalse(mapped); for (Blob blob: blobs.values()){ blob.fullyClear(); } addVisuals(); //this also resets existing visuals resetTraps(); GameScene.resetMap(); Dungeon.observe(); }
@Override protected void createItems() { Item item = Bones.get(); if (item != null) { drop( item, randomRespawnCell() ).setHauntedIfCursed(1f).type = Heap.Type.REMAINS; } drop(new IronKey(10), randomPrisonCell()); }
@Override protected boolean build() { setSize(32, 32); map = MAP_START.clone(); buildFlagMaps(); cleanWalls(); state = State.START; entrance = 5+2*32; exit = 0; resetTraps(); return true; }
seal(); set(5 + 25 * 32, Terrain.LOCKED_DOOR); GameScene.updateMap(5 + 25 * 32); changeMap(MAP_MAZE); clearEntities((Room) new EmptyRoom().set(0, 5, 8, 32)); //clear the entrance maze.connected.put(maze, new Room.Door(20, 29)); maze.paint(this); buildFlagMaps(); cleanWalls(); GameScene.resetMap(); changeMap(MAP_ARENA); clearEntities( (Room) new EmptyRoom().set(0, 0, 10, 4)); //clear all but the area right around the teleport spot tengu.pos = Random.Int(length()); } while (solid[tengu.pos] || distance(tengu.pos, Dungeon.hero.pos) < 8); GameScene.add(tengu); tengu.notice(); unseal(); clearEntities(null); changeMap(MAP_END); } while (findMob(m.pos) != null); m.sprite().place(m.pos);
@Override public void press( int cell, Char ch ) { super.press(cell, ch); if (ch == Dungeon.hero){ //hero enters tengu's chamber if (state == State.START && (new EmptyRoom().set(2, 25, 8, 32)).inside(cellToPoint(cell))){ progress(); } //hero finishes the maze else if (state == State.MAZE && (new EmptyRoom().set(4, 0, 7, 4)).inside(cellToPoint(cell))){ progress(); } } }
private void clearEntities(Room safeArea){ for (Heap heap : heaps.values()){ if (safeArea == null || !safeArea.inside(cellToPoint(heap.pos))){ for (Item item : heap.items) storedItems.add(item); heap.destroy(); } } for (Mob mob : Dungeon.level.mobs.toArray(new Mob[Dungeon.level.mobs.size()])){ if (mob != tengu && (safeArea == null || !safeArea.inside(cellToPoint(mob.pos)))){ mob.destroy(); if (mob.sprite != null) mob.sprite.killAndErase(); } } for (Plant plant : plants.values()){ if (safeArea == null || !safeArea.inside(cellToPoint(plant.pos))){ plants.remove(plant.pos); } } }
break; case 10: level = new PrisonBossLevel(); break; case 11:
seal(); set(5 + 25 * 32, Terrain.LOCKED_DOOR); GameScene.updateMap(5 + 25 * 32); changeMap(MAP_MAZE); clearEntities((Room) new EmptyRoom().set(0, 5, 8, 32)); //clear the entrance maze.connected.put(maze, new Room.Door(20, 29)); maze.paint(this); buildFlagMaps(); cleanWalls(); GameScene.resetMap(); changeMap(MAP_ARENA); clearEntities( (Room) new EmptyRoom().set(0, 0, 10, 4)); //clear all but the area right around the teleport spot tengu.pos = Random.Int(length()); } while (solid[tengu.pos] || distance(tengu.pos, Dungeon.hero.pos) < 8); GameScene.add(tengu); tengu.notice(); unseal(); clearEntities(null); changeMap(MAP_END); } while (findMob(m.pos) != null); m.sprite().place(m.pos);
@Override protected boolean build() { setSize(32, 32); map = MAP_START.clone(); buildFlagMaps(); cleanWalls(); state = State.START; entrance = 5+2*32; exit = 0; resetTraps(); return true; }
@Override public void press( int cell, Char ch ) { super.press(cell, ch); if (ch == Dungeon.hero){ //hero enters tengu's chamber if (state == State.START && (new EmptyRoom().set(2, 25, 8, 32)).inside(cellToPoint(cell))){ progress(); } //hero finishes the maze else if (state == State.MAZE && (new EmptyRoom().set(4, 0, 7, 4)).inside(cellToPoint(cell))){ progress(); } } }
private void clearEntities(Room safeArea){ for (Heap heap : heaps.values()){ if (safeArea == null || !safeArea.inside(cellToPoint(heap.pos))){ for (Item item : heap.items) storedItems.add(item); heap.destroy(); } } for (Mob mob : Dungeon.level.mobs.toArray(new Mob[Dungeon.level.mobs.size()])){ if (mob != tengu && (safeArea == null || !safeArea.inside(cellToPoint(mob.pos)))){ mob.destroy(); if (mob.sprite != null) mob.sprite.killAndErase(); } } for (Plant plant : plants.values()){ if (safeArea == null || !safeArea.inside(cellToPoint(plant.pos))){ plants.remove(plant.pos); } } }
break; case 10: level = new PrisonBossLevel(); break; case 11:
private void changeMap(int[] map){ this.map = map.clone(); buildFlagMaps(); cleanWalls(); exit = entrance = 0; for (int i = 0; i < length(); i ++) if (map[i] == Terrain.ENTRANCE) entrance = i; else if (map[i] == Terrain.EXIT) exit = i; BArray.setFalse(visited); BArray.setFalse(mapped); for (Blob blob: blobs.values()){ blob.fullyClear(); } addVisuals(); //this also resets existing visuals resetTraps(); GameScene.resetMap(); Dungeon.observe(); }
@Override protected void createItems() { Item item = Bones.get(); if (item != null) { drop( item, randomRespawnCell() ).setHauntedIfCursed(1f).type = Heap.Type.REMAINS; } drop(new IronKey(10), randomPrisonCell()); }