Search in sources :

Example 31 with Tile

use of objects.Tile in project ultimate-java by pantinor.

the class GameScreen method addBalloonActor.

public void addBalloonActor(int x, int y) {
    if (Ultima4.balloon != null) {
        Ultima4.balloon.remove();
    }
    Tile st = Ultima4.baseTileSet.getTileByName("balloon");
    Ultima4.balloon = new Drawable(Maps.WORLD.getMap(), x, y, st, Ultima4.standardAtlas);
    Vector3 bpos = getMapPixelCoords(x, y);
    Ultima4.balloon.setX(bpos.x);
    Ultima4.balloon.setY(bpos.y);
    mapObjectsStage.addActor(Ultima4.balloon);
}
Also used : Drawable(objects.Drawable) StaticTiledMapTile(com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile) TiledMapTile(com.badlogic.gdx.maps.tiled.TiledMapTile) Tile(objects.Tile) Vector3(com.badlogic.gdx.math.Vector3)

Example 32 with Tile

use of objects.Tile in project ultimate-java by pantinor.

the class GameScreen method endCombat.

@Override
public void endCombat(boolean isWon, BaseMap combatMap, boolean wounded) {
    mainGame.setScreen(this);
    if (currentEncounter != null) {
        Tile tile = context.getCurrentMap().getTile(currentEncounter.currentX, currentEncounter.currentY);
        if (isWon) {
            log("Victory!");
            if (!currentEncounter.getGood()) {
                context.getParty().adjustKarma(KarmaAction.KILLED_EVIL);
            }
            TileRule r = tile.getRule();
            /* add a chest, if the creature leaves one */
            if (!currentEncounter.getNochest() && (r == null || !r.has(TileAttrib.unwalkable))) {
                Tile ct = Ultima4.baseTileSet.getTileByName("chest");
                Drawable chest = new Drawable(context.getCurrentMap(), currentEncounter.currentX, currentEncounter.currentY, ct, Ultima4.standardAtlas);
                chest.setX(currentEncounter.currentPos.x);
                chest.setY(currentEncounter.currentPos.y);
                mapObjectsStage.addActor(chest);
            } else /* add a ship if you just defeated a pirate ship */
            if (currentEncounter.getTile() == CreatureType.pirate_ship) {
                Tile st = Ultima4.baseTileSet.getTileByName("ship");
                Drawable ship = new Drawable(context.getCurrentMap(), currentEncounter.currentX, currentEncounter.currentY, st, Ultima4.standardAtlas);
                ship.setX(currentEncounter.currentPos.x);
                ship.setY(currentEncounter.currentPos.y);
                mapObjectsStage.addActor(ship);
            }
        } else {
            if (context.getParty().didAnyoneFlee()) {
                log("Battle is lost!");
                /* minus points for fleeing from evil creatures */
                if (!currentEncounter.getGood()) {
                    // lose karma points here
                    if (!wounded) {
                        context.getParty().adjustKarma(KarmaAction.HEALTHY_FLED_EVIL);
                    }
                } else {
                    // get extra karma points
                    context.getParty().adjustKarma(KarmaAction.FLED_GOOD);
                }
            } else if (!context.getParty().isAnyoneAlive()) {
                partyDeath();
            }
        }
        context.getCurrentMap().removeCreature(currentEncounter);
        currentEncounter = null;
    }
}
Also used : Drawable(objects.Drawable) StaticTiledMapTile(com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile) TiledMapTile(com.badlogic.gdx.maps.tiled.TiledMapTile) Tile(objects.Tile)

Example 33 with Tile

use of objects.Tile in project ultimate-java by pantinor.

the class GameScreen method checkBridgeTrolls.

private void checkBridgeTrolls(int x, int y) {
    Tile bridge = context.getCurrentMap().getTile(x, y);
    if (bridge == null || !bridge.getName().equals("bridge")) {
        return;
    }
    if (rand.nextInt(8) != 0) {
        return;
    }
    log("Bridge Trolls!");
    Creature troll = Ultima4.creatures.getInstance(CreatureType.troll, Ultima4.standardAtlas);
    troll.currentX = x;
    troll.currentY = y;
    troll.currentPos = getMapPixelCoords(x, y);
    attackAt(bridge.getCombatMap(), troll);
}
Also used : Creature(objects.Creature) StaticTiledMapTile(com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile) TiledMapTile(com.badlogic.gdx.maps.tiled.TiledMapTile) Tile(objects.Tile)

Example 34 with Tile

use of objects.Tile in project ultimate-java by pantinor.

the class SecondaryInputProcessor method keyUp.

@Override
public boolean keyUp(int keycode) {
    Direction dir = Direction.NORTH;
    int x = currentX, y = currentY;
    if (keycode == Keys.UP) {
        dir = Direction.NORTH;
        y = y - 1;
    } else if (keycode == Keys.DOWN) {
        dir = Direction.SOUTH;
        y = y + 1;
    } else if (keycode == Keys.LEFT) {
        dir = Direction.WEST;
        x = x - 1;
    } else if (keycode == Keys.RIGHT) {
        dir = Direction.EAST;
        x = x + 1;
    }
    if (screen.scType == ScreenType.MAIN) {
        Window dialog = null;
        if (initialKeyCode == Keys.T) {
            screen.logAppend(dir.toString());
            Tile tile = bm.getTile(x, y);
            if (tile.getRule() == TileRule.signs) {
                // talking to vendor so get the vendor on other side of sign
                switch(dir) {
                    case NORTH:
                        y = y - 1;
                        break;
                    case SOUTH:
                        y = y + 1;
                        break;
                    case EAST:
                        x = x + 1;
                        break;
                    case WEST:
                        x = x - 1;
                        break;
                }
            }
            City city = bm.getCity();
            if (city != null) {
                Person p = city.getPersonAt(x, y);
                if (p != null && (p.getConversation() != null || p.getRole() != null)) {
                    Gdx.input.setInputProcessor(stage);
                    if (p.getRole() != null && p.getRole().getInventoryType() != null && p.getRole().getInventoryType() == InventoryType.TINKER) {
                        dialog = new TinkerDialog(screen.context.getParty(), (GameScreen) screen, stage, Ultima4.skin).show();
                    } else {
                        dialog = new ConversationDialog(p, (GameScreen) screen, stage).show(stage);
                    }
                } else {
                    screen.log("Funny, no response! ");
                }
            } else {
                screen.log("Funny, no response! ");
            }
        } else if (initialKeyCode == Keys.O) {
            screen.logAppend(dir.toString());
            if (bm.openDoor(x, y)) {
                screen.log("Opened!");
            } else {
                screen.log("Can't!");
            }
        } else if (initialKeyCode == Keys.J) {
            screen.logAppend(dir.toString());
            if (screen.context.getParty().getSaveGame().keys > 0 && bm.unlockDoor(x, y)) {
                screen.log("Unlocked!");
                screen.context.getParty().getSaveGame().keys--;
            } else {
                screen.log("Can't!");
            }
        } else if (initialKeyCode == Keys.R) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), true));
                return false;
            }
        } else if (initialKeyCode == Keys.W) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), false));
                return false;
            }
        } else if (initialKeyCode == Keys.G) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                GameScreen gameScreen = (GameScreen) screen;
                gameScreen.getChest(keycode - 7 - 1, x, y);
            }
        } else if (initialKeyCode == Keys.A) {
            screen.logAppend(dir.toString());
            GameScreen gameScreen = (GameScreen) screen;
            for (Creature c : bm.getCreatures()) {
                if (c.currentX == x && c.currentY == y) {
                    Maps cm = screen.context.getCombatMap(c, bm, x, y, currentX, currentY);
                    gameScreen.attackAt(cm, c);
                    return false;
                }
            }
        }
        if (dialog == null) {
            Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
        } else {
            return false;
        }
    } else if (screen.scType == ScreenType.SHRINE) {
        ShrineScreen shrineScreen = (ShrineScreen) screen;
        if (keycode >= Keys.NUM_0 && keycode <= Keys.NUM_3) {
            shrineScreen.meditate(keycode - 7);
        } else {
            screen.log("For how many Cycles (0-3)?");
            return false;
        }
        Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
        return false;
    } else if (screen.scType == ScreenType.COMBAT) {
        CombatScreen combatScreen = (CombatScreen) screen;
        if (initialKeyCode == Keys.A) {
            screen.log("Attack > " + dir.toString());
            PartyMember attacker = combatScreen.party.getActivePartyMember();
            WeaponType wt = attacker.getPlayer().weapon;
            if (rangeInputModeDirection != null) {
                switch(rangeInputModeDirection) {
                    case NORTH:
                        y = y - 1;
                        break;
                    case SOUTH:
                        y = y + 1;
                        break;
                    case EAST:
                        x = x + 1;
                        break;
                    case WEST:
                        x = x - 1;
                        break;
                }
                if (keycode >= Keys.NUM_0 && keycode <= Keys.NUM_9) {
                    Sounds.play(Sound.PC_ATTACK);
                    Utils.animateAttack(stage, combatScreen, attacker, rangeInputModeDirection, x, y, keycode - 7);
                } else {
                    screen.log("Invalid range!");
                }
                rangeInputModeDirection = null;
            } else {
                if (wt.getWeapon().getChoosedistance()) {
                    rangeInputModeDirection = dir;
                    screen.log("Throw Range:");
                    return false;
                }
                Sounds.play(Sound.PC_ATTACK);
                int range = wt.getWeapon().getRange();
                Utils.animateAttack(stage, combatScreen, attacker, dir, x, y, range);
            }
            Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
            return false;
        } else if (initialKeyCode == Keys.U) {
            if (keycode == Keys.ENTER) {
                if (buffer.length() < 1) {
                    return false;
                }
                String useItem = buffer.toString();
                screen.log(useItem);
                if (useItem.startsWith("stone")) {
                    screen.log("There are holes for 4 stones.");
                    screen.log("What colors?");
                    screen.log("1: ");
                    buffer = new StringBuilder();
                    StoneColorsInputAdapter scia = new StoneColorsInputAdapter(combatScreen);
                    Gdx.input.setInputProcessor(scia);
                } else if (useItem.startsWith("mask")) {
                    if (combatScreen.party.getSaveGame().moves - combatScreen.party.getSaveGame().lastmask >= 4) {
                        screen.log("Use Mask of Minax!");
                        PartyMember attacker = combatScreen.party.getActivePartyMember();
                        SpellUtil.useMaskOfMinax(combatScreen, attacker);
                        combatScreen.party.getSaveGame().lastmask = combatScreen.party.getSaveGame().moves;
                    } else {
                        screen.log("no effect!");
                    }
                    Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
                } else if (useItem.startsWith("rage")) {
                    if (combatScreen.party.getSaveGame().moves - combatScreen.party.getSaveGame().lastrage >= 6) {
                        screen.log("Use Rage of God!");
                        PartyMember attacker = combatScreen.party.getActivePartyMember();
                        SpellUtil.useRageOfGod(combatScreen, attacker);
                        combatScreen.party.getSaveGame().lastrage = combatScreen.party.getSaveGame().moves;
                    } else {
                        screen.log("no effect!");
                    }
                    Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
                } else {
                    screen.log("Not a usable item!");
                    Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
                    combatScreen.finishPlayerTurn();
                }
            } else if (keycode == Keys.BACKSPACE) {
                if (buffer.length() > 0) {
                    buffer.deleteCharAt(buffer.length() - 1);
                    screen.logDeleteLastChar();
                }
            } else if (keycode >= 29 && keycode <= 54) {
                buffer.append(Keys.toString(keycode).toLowerCase());
                screen.logAppend(Keys.toString(keycode).toLowerCase());
            }
            return false;
        }
    } else if (screen.scType == ScreenType.DUNGEON) {
        DungeonScreen dngScreen = (DungeonScreen) screen;
        if (initialKeyCode == Keys.S) {
            switch(dngTile) {
                case FOUNTAIN_PLAIN:
                case FOUNTAIN_HEAL:
                case FOUNTAIN_ACID:
                case FOUNTAIN_CURE:
                case FOUNTAIN_POISON:
                    if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                        dngScreen.dungeonDrinkFountain(dngTile, keycode - 7 - 1);
                    }
                    break;
                case ORB:
                    if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                        dngScreen.dungeonTouchOrb(keycode - 7 - 1);
                    }
                    break;
                default:
                    break;
            }
        } else if (initialKeyCode == Keys.G) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                dngScreen.getChest(keycode - 7 - 1, currentX, currentY);
            }
        } else if (initialKeyCode == Keys.R) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), true));
                return false;
            }
        } else if (initialKeyCode == Keys.W) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), false));
                return false;
            }
        }
        Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
    } else if (screen.scType == ScreenType.TMXDUNGEON) {
        StaticGeneratedDungeonScreen dngScreen = (StaticGeneratedDungeonScreen) screen;
        if (initialKeyCode == Keys.S) {
            switch(dngTile) {
                case FOUNTAIN_PLAIN:
                case FOUNTAIN_HEAL:
                case FOUNTAIN_ACID:
                case FOUNTAIN_CURE:
                case FOUNTAIN_POISON:
                    if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                        dngScreen.dungeonDrinkFountain(dngTile, keycode - 7 - 1);
                    }
                    break;
                case ORB:
                    if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                        dngScreen.dungeonTouchOrb(keycode - 7 - 1);
                    }
                    break;
                default:
                    break;
            }
        } else if (initialKeyCode == Keys.G) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                dngScreen.getChest(keycode - 7 - 1, currentX, currentY);
            }
        } else if (initialKeyCode == Keys.R) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), true));
                return false;
            }
        } else if (initialKeyCode == Keys.W) {
            if (keycode >= Keys.NUM_1 && keycode <= Keys.NUM_8) {
                Gdx.input.setInputProcessor(new ReadyWearInputAdapter(screen.context.getParty().getMember(keycode - 7 - 1), false));
                return false;
            }
        }
        Gdx.input.setInputProcessor(new InputMultiplexer(screen, stage));
    }
    screen.finishTurn(currentX, currentY);
    return false;
}
Also used : Window(com.badlogic.gdx.scenes.scene2d.ui.Window) Creature(objects.Creature) PartyMember(objects.Party.PartyMember) Tile(objects.Tile) City(objects.City) StaticGeneratedDungeonScreen(generator.StaticGeneratedDungeonScreen) StaticGeneratedDungeonScreen(generator.StaticGeneratedDungeonScreen) InputMultiplexer(com.badlogic.gdx.InputMultiplexer) TinkerDialog(vendor.TinkerDialog) Person(objects.Person)

Example 35 with Tile

use of objects.Tile in project ultimate-java by pantinor.

the class CombatScreen method checkTileAffects.

private void checkTileAffects(PartyMember ap, int x, int y) throws PartyDeathException {
    Tile tile = combatMap.getTile(x, y);
    if (tile == null || tile.getRule() == null) {
        return;
    }
    TileEffect effect = tile.getRule().getEffect();
    context.getParty().applyEffect(ap, effect);
    if (effect == TileEffect.FIRE || effect == TileEffect.LAVA) {
        Sounds.play(Sound.FIREFIELD);
    } else if (effect == TileEffect.POISON || effect == TileEffect.POISONFIELD) {
        Sounds.play(Sound.POISON_EFFECT);
    } else if (effect == TileEffect.SLEEP) {
        Sounds.play(Sound.SLEEP);
    }
    DungeonRoom room = (DungeonRoom) tmap.getProperties().get("dungeonRoom");
    if (room != null) {
        for (int i = 0; i < 4; i++) {
            Trigger tr = room.triggers[i];
            if (tr.tile.getIndex() != 0 && tr.trigX == x && tr.trigY == y) {
                Sounds.play(Sound.TRIGGER);
                TileRule rule = tr.tile.getRule();
                boolean nullplace1 = tr.t1X == 0 && tr.t1Y == 0;
                boolean nullplace2 = tr.t2X == 0 && tr.t2Y == 0;
                if (rule == TileRule.monster) {
                } else {
                    if (!nullplace1) {
                        replaceTile(tr.tile.getName(), tr.t1X, tr.t1Y);
                    }
                    if (!nullplace2) {
                        replaceTile(tr.tile.getName(), tr.t2X, tr.t2Y);
                    }
                }
            }
        }
    }
}
Also used : DungeonRoom(ultima.DungeonScreen.DungeonRoom) Trigger(ultima.DungeonScreen.Trigger) Tile(objects.Tile) StaticTiledMapTile(com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile) TiledMapTile(com.badlogic.gdx.maps.tiled.TiledMapTile)

Aggregations

Tile (objects.Tile)39 StaticTiledMapTile (com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile)22 TiledMapTile (com.badlogic.gdx.maps.tiled.TiledMapTile)16 Creature (objects.Creature)12 Drawable (objects.Drawable)10 File (java.io.File)8 JAXBContext (javax.xml.bind.JAXBContext)8 DungeonTile (ultima.Constants.DungeonTile)8 Unmarshaller (javax.xml.bind.Unmarshaller)7 BaseMap (objects.BaseMap)7 TileSet (objects.TileSet)7 FileHandle (com.badlogic.gdx.files.FileHandle)6 Region (com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData.Region)6 TextureAtlasData (com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData)5 TiledMap (com.badlogic.gdx.maps.tiled.TiledMap)5 Vector3 (com.badlogic.gdx.math.Vector3)5 FileInputStream (java.io.FileInputStream)5 ArrayList (java.util.ArrayList)5 MapSet (objects.MapSet)5 TiledMapTileLayer (com.badlogic.gdx.maps.tiled.TiledMapTileLayer)4