Search in sources :

Example 11 with Party

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

the class GameScreen method show.

@Override
public void show() {
    Gdx.input.setInputProcessor(new InputMultiplexer(this, stage));
    gameTimer.active = true;
    // load save game if initializing
    if (context == null) {
        context = new Context();
        SaveGame sg = new SaveGame();
        try {
            sg.read(PARTY_SAV_BASE_FILENAME);
        } catch (Exception e) {
            e.printStackTrace();
        }
        LordBritishConversation.saveGame = sg;
        Party party = new Party(sg);
        context.setParty(party);
        context.loadJournalEntries();
        // party.getMember(0).getPlayer().klass = ClassType.MAGE;
        // party.getMember(0).getPlayer().xp = 899;
        // party.getMember(0).getPlayer().hp = 999;
        // party.getMember(0).getPlayer().hpMax = 999;
        // party.getMember(0).getPlayer().intel = 99;
        // party.getMember(0).getPlayer().mp = 999;
        // sg.reagents = new int[]{90, 93, 94, 90, 90, 90, 90, 90};
        // for (Spell sp : Spell.values()) {
        // party.getSaveGame().mixtures[sp.ordinal()] = 99;
        // }
        // for (Virtue v : Virtue.values()) {
        // sg.karma[v.ordinal()] = 0;
        // }
        // 
        // party.join(NpcDefaults.Geoffrey.name());
        // party.join(NpcDefaults.Shamino.name());
        // party.join(NpcDefaults.Katrina.name());
        // party.join(NpcDefaults.Mariah.name());
        // party.join(NpcDefaults.Dupre.name());
        // party.join(NpcDefaults.Iolo.name());
        // party.join(NpcDefaults.Julia.name());
        // party.join(NpcDefaults.Jaana.name());
        // 
        // sg.food = 30000;
        // sg.gold = 999;
        // sg.keys = 20;
        // sg.gems = 15;
        // sg.moves = 2800;
        // sg.stones = 0xff;
        // sg.runes = 0xff;
        // sg.items = 0xff;
        // sg.sextants = 1;
        // party.getMember(0).getPlayer().status = StatusType.GOOD;
        // party.getMember(0).getPlayer().weapon = WeaponType.MAGICAXE;
        // party.getMember(0).getPlayer().armor = ArmorType.MYSTICROBE;
        // for (int i = 1; i < 16; i++) {
        // party.getSaveGame().weapons[i] = 2;
        // }
        // for (int i = 1; i < 8; i++) {
        // party.getSaveGame().armor[i] = 2;
        // }
        // mainAvatar = shipAnim;
        // sg.transport = 0x10;
        // sg.items |= Constants.Item.IRON_ORE.getLoc();
        // sg.items |= Constants.Item.RUNE_MOLD.getLoc();
        // sg.items |= Constants.Item.BOOK.getLoc();
        // load the surface world first
        loadNextMap(Maps.WORLD, sg.x, sg.y);
        // load the dungeon if save game starts in dungeon
        if (Maps.get(sg.location) != Maps.WORLD) {
            loadNextMap(Maps.get(sg.location), sg.x, sg.y, sg.x, sg.y, sg.dnglevel, Direction.getByValue(sg.orientation + 1), true);
        // loadNextMap(Maps.ABYSS, 0, 0, 5, 5, 0, Direction.SOUTH, true);
        // loadNextMap(Maps.DESTARD, 0, 0, 3, 5, 3, Direction.SOUTH, true);
        // loadNextMap(Maps.DELVE_SORROWS, 0, 0, 3, 19, 1, Direction.EAST, true);
        }
        for (Virtue v : Virtue.values()) {
            v.adjustProgress(sg.karma[v.ordinal()]);
        }
        party.setTransport(Ultima4.baseTileSet.getTileByIndex(sg.transport));
        switch(sg.transport) {
            case 31:
                mainAvatar = avatarAnim;
                break;
            case 16:
            case 17:
            case 18:
            case 19:
                mainAvatar = shipAnim;
                break;
            case 20:
            case 21:
                mainAvatar = horseAnim;
                break;
            case 24:
                mainAvatar = balloonAnim;
                break;
        }
        if (sg.balloonfound == 1 && context.getTransportContext() != TransportContext.BALLOON) {
            addBalloonActor(sg.balloonx, sg.balloony);
        }
        // load objects to surface stage
        for (int i = 0; i < 24; i++) {
            if (sg.objects_save_tileids[i] != 0 && sg.objects_save_x[i] != 0 && sg.objects_save_y[i] != 0) {
                Tile t = Ultima4.baseTileSet.getTileByIndex(sg.objects_save_tileids[i] & 0xff);
                Drawable d = new Drawable(Maps.WORLD.getMap(), sg.objects_save_x[i] & 0xff, sg.objects_save_y[i] & 0xff, t, Ultima4.standardAtlas);
                Vector3 v = getMapPixelCoords(sg.objects_save_x[i] & 0xff, sg.objects_save_y[i] & 0xff);
                d.setX(v.x);
                d.setY(v.y);
                mapObjectsStage.addActor(d);
            }
        }
        // load monsters to surface map
        for (int i = 0; i < 8; i++) {
            if (sg.monster_save_tileids[i] != 0 && sg.monster_save_x[i] != 0 && sg.monster_save_y[i] != 0) {
                Tile t = Ultima4.baseTileSet.getTileByIndex(sg.monster_save_tileids[i] & 0xff);
                Creature cr = Ultima4.creatures.getInstance(CreatureType.get(t.getName()), Ultima4.standardAtlas);
                cr.currentX = sg.monster_save_x[i] & 0xff;
                cr.currentY = sg.monster_save_y[i] & 0xff;
                cr.currentPos = getMapPixelCoords(cr.currentX, cr.currentY);
                Maps.WORLD.getMap().addCreature(cr);
            }
        }
    }
    context.getParty().addObserver(this);
}
Also used : InputMultiplexer(com.badlogic.gdx.InputMultiplexer) Party(objects.Party) Creature(objects.Creature) SaveGame(objects.SaveGame) 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) PartyDeathException(util.PartyDeathException)

Example 12 with Party

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

the class ConversationDialog method initialize.

private void initialize() {
    screen.gameTimer.active = false;
    setModal(true);
    defaults().space(10);
    add(internalTable = new Table(Ultima4.skin)).expand().fill();
    row();
    internalTable.defaults().pad(1);
    scrollPane = new LogScrollPane(Ultima4.skin, width);
    scrollPane.setHeight(height);
    input = new TextField("", Ultima4.skin);
    input.setTextFieldListener(new TextFieldListener() {

        @Override
        public void keyTyped(TextField tf, char key) {
            if (key == '\r') {
                if (tf.getText().length() == 0) {
                    if (!cancelHide) {
                        hide();
                    }
                    cancelHide = false;
                }
                Conversation conversation = person.getConversation();
                if (conversation != null) {
                    if (conversation instanceof CustomInputConversation) {
                        ((CustomInputConversation) conversation).setParty(screen.context.getParty());
                    }
                    String query = tf.getText();
                    Topic t = conversation.matchTopic(query);
                    if (t != null) {
                        if (t.getQuery() != null && t.getQuery().equals("join")) {
                            String name = conversation.getName();
                            Virtue virtue = screen.context.getParty().getVirtueForJoinable(name);
                            if (virtue != null) {
                                CannotJoinError join = screen.context.getParty().join(name);
                                if (join == CannotJoinError.JOIN_SUCCEEDED) {
                                    scrollPane.add("I am honored to join thee!");
                                    screen.context.getCurrentMap().removeJoinedPartyMemberFromPeopleList(screen.context.getParty());
                                } else {
                                    scrollPane.add("Thou art not " + (join == CannotJoinError.JOIN_NOT_VIRTUOUS ? virtue.getDescription() : "experienced") + " enough for me to join thee.");
                                }
                            } else {
                                scrollPane.add("I cannot join thee.");
                            }
                        } else {
                            if (!conversation.isStandardQuery(query)) {
                                screen.context.addEntry(conversation.getName(), conversation.getMap(), t.getPhrase());
                            }
                            scrollPane.add(t.getPhrase());
                            if (t.getQuestion() != null) {
                                scrollPane.add(t.getQuestion());
                            }
                        }
                        previousTopic = t;
                    } else {
                        if (previousTopic != null && previousTopic.getQuestion() != null) {
                            if (query.toLowerCase().contains("y")) {
                                screen.context.addEntry(conversation.getName(), conversation.getMap(), previousTopic.getYesResponse());
                                scrollPane.add(previousTopic.getYesResponse());
                                if (conversation.getRespAffectsHumility() > 0) {
                                    screen.context.getParty().adjustKarma(KarmaAction.BRAGGED);
                                }
                            } else {
                                screen.context.addEntry(conversation.getName(), conversation.getMap(), previousTopic.getNoResponse());
                                scrollPane.add(previousTopic.getNoResponse());
                                if (previousTopic.isLbHeal()) {
                                    for (PartyMember pm : screen.context.getParty().getMembers()) {
                                        pm.heal(HealType.CURE);
                                        pm.heal(HealType.FULLHEAL);
                                    }
                                    Sounds.play(Sound.HEALING);
                                }
                                if (conversation.getRespAffectsHumility() > 0) {
                                    screen.context.getParty().adjustKarma(KarmaAction.HUMBLE);
                                }
                            }
                        } else {
                            scrollPane.add("That I cannot help thee with.");
                        }
                        previousTopic = null;
                    }
                } else if (person.getRole() != null && vendor != null) {
                    String input = tf.getText();
                    vendor.setResponse(input);
                    vendor.nextDialog();
                }
                tf.setText("");
            }
        }
    });
    defaults().pad(5);
    internalTable.add(scrollPane).maxWidth(width).width(width);
    internalTable.row();
    internalTable.add(input).maxWidth(width).width(width);
    focusListener = new FocusListener() {

        @Override
        public void keyboardFocusChanged(FocusEvent event, Actor actor, boolean focused) {
            if (!focused) {
                focusChanged(event);
            }
        }

        @Override
        public void scrollFocusChanged(FocusEvent event, Actor actor, boolean focused) {
            if (!focused) {
                focusChanged(event);
            }
        }

        private void focusChanged(FocusEvent event) {
            Stage stage = getStage();
            if (isModal() && stage != null && stage.getRoot().getChildren().size > 0 && stage.getRoot().getChildren().peek() == ConversationDialog.this) {
                Actor newFocusedActor = event.getRelatedActor();
                if (newFocusedActor != null && !newFocusedActor.isDescendantOf(ConversationDialog.this) && !(newFocusedActor.equals(previousKeyboardFocus) || newFocusedActor.equals(previousScrollFocus))) {
                    event.cancel();
                }
            }
        }
    };
    person.setTalking(true);
    if (person.getConversation() != null) {
        if (person.getRole() != null && person.getRole().getRole().equals("lordbritish")) {
            LordBritishConversation conv = (LordBritishConversation) person.getConversation();
            scrollPane.add(conv.intro(screen.context));
            SequenceAction seq = Actions.action(SequenceAction.class);
            Party party = screen.context.getParty();
            if (party.getMember(0).getPlayer().status == StatusType.DEAD) {
                party.getMember(0).heal(HealType.RESURRECT);
                party.getMember(0).heal(HealType.FULLHEAL);
                seq.addAction(Actions.run(new LBAction(Sound.HEALING, "I resurrect thee.")));
                seq.addAction(Actions.delay(3f));
            }
            for (int i = 0; i < party.getMembers().size(); i++) {
                PartyMember pm = party.getMember(i);
                if (pm.getPlayer().advanceLevel()) {
                    seq.addAction(Actions.run(new LBAction(Sound.MAGIC, pm.getPlayer().name + " thou art now level " + pm.getPlayer().getLevel())));
                    seq.addAction(Actions.delay(3f));
                }
            }
            stage.addAction(seq);
        } else if (person.getRole() != null && person.getRole().getRole().equals("hawkwind")) {
            HawkwindConversation conv = (HawkwindConversation) person.getConversation();
            conv.setParty(screen.context.getParty());
            scrollPane.add(conv.intro());
        } else {
            scrollPane.add("You meet " + person.getConversation().getDescription().toLowerCase() + ".");
        }
    } else if (person.getRole() != null && person.getRole().getInventoryType() != null) {
        vendor = Ultima4.vendorClassSet.getVendorImpl(person.getRole().getInventoryType(), Maps.get(screen.context.getCurrentMap().getId()), screen.context);
        vendor.setScreen(screen);
        vendor.setScrollPane(scrollPane);
        vendor.nextDialog();
    }
}
Also used : Table(com.badlogic.gdx.scenes.scene2d.ui.Table) PartyMember(objects.Party.PartyMember) LordBritishConversation(objects.LordBritishConversation) LogScrollPane(util.LogScrollPane) Conversation(objects.Conversation) CustomInputConversation(objects.CustomInputConversation) LordBritishConversation(objects.LordBritishConversation) HawkwindConversation(objects.HawkwindConversation) HawkwindConversation(objects.HawkwindConversation) Party(objects.Party) Actor(com.badlogic.gdx.scenes.scene2d.Actor) TextField(com.badlogic.gdx.scenes.scene2d.ui.TextField) Stage(com.badlogic.gdx.scenes.scene2d.Stage) TextFieldListener(com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldListener) Topic(objects.Conversation.Topic) FocusListener(com.badlogic.gdx.scenes.scene2d.utils.FocusListener) SequenceAction(com.badlogic.gdx.scenes.scene2d.actions.SequenceAction) CustomInputConversation(objects.CustomInputConversation)

Example 13 with Party

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

the class SpellUtil method spellCast.

public static boolean spellCast(final BaseScreen screen, final Context context, final Spell spell, final PartyMember caster, final PartyMember subject, final Direction dir, final int phase) {
    if (caster == null || spell == null || screen == null) {
        return false;
    }
    switch(spell) {
        case AWAKEN:
        case CURE:
        case HEAL:
        case RESURRECT:
            if (subject == null) {
                Ultima4.hud.add("Thou must indicate a target to cast the spell!");
                return false;
            }
            break;
        case DISPEL:
        case ICEBALL:
        case KILL:
        case SLEEP:
        case MAGICMISSILE:
        case FIREBALL:
        case ENERGY:
        case WINDS:
        case BLINK:
            if (dir == null) {
                Ultima4.hud.add("Thou must indicate a direction to cast the spell!");
                return false;
            }
            break;
        default:
            break;
    }
    if (caster.getPlayer().mp < spell.getMp()) {
        Ultima4.hud.add("Thou dost not have enough magic points!");
        return false;
    }
    Party party = context.getParty();
    if (party.getSaveGame().mixtures[spell.ordinal()] < 1) {
        Ultima4.hud.add("Thou dost not have the mixture prepared!");
        return false;
    }
    // subtract the mixture for even trying to cast the spell
    party.getSaveGame().mixtures[spell.ordinal()]--;
    if (context.getAura().getType() == AuraType.NEGATE) {
        Ultima4.hud.add("Spell is negated!");
        return false;
    }
    caster.adjustMagic(spell.getMp());
    SequenceAction seq = Actions.action(SequenceAction.class);
    seq.addAction(Actions.run(new PlaySoundAction(spell.getSound())));
    seq.addAction(Actions.delay(0.5f));
    seq.addAction(Actions.run(new Runnable() {

        @Override
        public void run() {
            switch(spell) {
                case AWAKEN:
                    spellAwaken(subject);
                    break;
                case CURE:
                    spellCure(subject);
                    break;
                case HEAL:
                    spellHeal(subject);
                    break;
                case RESURRECT:
                    spellRez(subject);
                    break;
                case DISPEL:
                    spellDispel(screen, context, caster, dir);
                    break;
                case ICEBALL:
                    spellIceball(screen, caster, dir);
                    break;
                case KILL:
                    spellKill(screen, caster, dir);
                    break;
                case MAGICMISSILE:
                    spellMMissle(screen, caster, dir);
                    break;
                case FIREBALL:
                    spellFireball(screen, caster, dir);
                    break;
                case ENERGY:
                    spellEnergyField(dir);
                    break;
                case WINDS:
                    spellWinds(screen, dir);
                    break;
                case BLINK:
                    spellBlink(screen, dir);
                    break;
                case GATE:
                    spellGate(screen, phase);
                    break;
                case JINX:
                    spellJinx(context);
                    break;
                case LIGHT:
                    spellLight();
                    break;
                case NEGATE:
                    spellNegate(context);
                    break;
                case OPEN:
                    spellOpen();
                    break;
                case PROTECTION:
                    spellProtect(context);
                    break;
                case QUICKNESS:
                    spellQuick(context);
                    break;
                case SLEEP:
                    spellSleep(screen, caster, dir);
                    break;
                case TREMOR:
                    spellTremor(screen, caster);
                    break;
                case UNDEAD:
                    spellUndead(screen, caster);
                    break;
                case VIEW:
                    spellView(screen, caster);
                    break;
                case XIT:
                    spellXit(screen, caster);
                    break;
                case YUP:
                    spellYup(screen, caster);
                    break;
                case ZDOWN:
                    spellZdown(screen, caster);
                    break;
                default:
                    break;
            }
        }
    }));
    screen.getStage().addAction(seq);
    return true;
}
Also used : Party(objects.Party) SequenceAction(com.badlogic.gdx.scenes.scene2d.actions.SequenceAction)

Aggregations

Party (objects.Party)13 SaveGame (objects.SaveGame)11 Context (ultima.Context)7 BufferedReader (java.io.BufferedReader)6 File (java.io.File)6 InputStreamReader (java.io.InputStreamReader)6 JAXBContext (javax.xml.bind.JAXBContext)6 Unmarshaller (javax.xml.bind.Unmarshaller)6 BaseVendor (vendor.BaseVendor)6 VendorClassSet (vendor.VendorClassSet)6 SequenceAction (com.badlogic.gdx.scenes.scene2d.actions.SequenceAction)2 InputMultiplexer (com.badlogic.gdx.InputMultiplexer)1 Animation (com.badlogic.gdx.graphics.g2d.Animation)1 SpriteBatch (com.badlogic.gdx.graphics.g2d.SpriteBatch)1 TextureAtlas (com.badlogic.gdx.graphics.g2d.TextureAtlas)1 TextureRegion (com.badlogic.gdx.graphics.g2d.TextureRegion)1 TiledMap (com.badlogic.gdx.maps.tiled.TiledMap)1 TiledMapTile (com.badlogic.gdx.maps.tiled.TiledMapTile)1 StaticTiledMapTile (com.badlogic.gdx.maps.tiled.tiles.StaticTiledMapTile)1 Vector3 (com.badlogic.gdx.math.Vector3)1