Package org.pokenet.server.battle.mechanics.statuses

Source Code of org.pokenet.server.battle.mechanics.statuses.ConfuseEffect

/*
* ConfuseEffect.java
*
* Created on December 23, 2006, 12:12 PM
*
* This file is a part of Shoddy Battle.
* Copyright (C) 2006  Colin Fitzpatrick
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, visit the Free Software Foundation, Inc.
* online at http://gnu.org.
*/

package org.pokenet.server.battle.mechanics.statuses;
import org.pokenet.server.battle.BattleField;
import org.pokenet.server.battle.Pokemon;
import org.pokenet.server.battle.mechanics.BattleMechanics;
import org.pokenet.server.battle.mechanics.PokemonType;
import org.pokenet.server.battle.mechanics.moves.PokemonMove;

/**
*
* @author Colin
*/
public class ConfuseEffect extends StatusEffect {

    private int m_turns = 0;
   
    public String getName() {
        return "Confusion";
    }
   
    public boolean tick(Pokemon p) {
        return false;
    }
   
    public int getTier() {
        // Not applicable.
        return 1;
    }
   
    public boolean switchOut(Pokemon p) {
        return true;
    }
   
    public boolean apply(Pokemon p) {
        if (p.hasSubstitute()) {
            return false;
        }
        if (p.hasAbility("Own Tempo")) {
            return false;
        }
        if (p.hasAbility("Tangled Feet")) {
            p.getMultiplier(Pokemon.S_EVASION).increaseMultiplier();
        }
        m_turns = p.getField().getRandom().nextInt(4) + 2;
        return true;
    }
   
    public void unapply(Pokemon p) {
        if (p.hasAbility("Tangled Feet")) {
            p.getMultiplier(Pokemon.S_EVASION).decreaseMultiplier();
        }
    }
   
    public String getDescription() {
        return " became confused!";
    }
   
    /**
     * Confusion has a 50% chance of immobolising the afflicted pokemon.
     */
    public boolean immobilises(Pokemon poke) {
        if (poke.hasEffect(SleepEffect.class)) {
            return false;
        }
       
        if (--m_turns <= 0) {
            poke.removeStatus(this);
            poke.getField().showMessage(poke.getName()
                + " snapped out of confusion!");
            return false;
        }
       
        BattleField field = poke.getField();
       
        field.showMessage(poke.getName() + " is confused!");
        if (field.getRandom().nextDouble() <= 0.5) {
            return false;
        }
       
        field.showMessage("It hurt itself in its confusion!");
        poke.useMove(new PokemonMove(PokemonType.T_TYPELESS, 40, 1.0, 1) {
                public int use(BattleMechanics mech, Pokemon source, Pokemon target) {
                    int damage = mech.calculateDamage(this, source, target);
                    target.changeHealth(-damage, true);
                    return damage;
                }
                public boolean attemptHit(BattleMechanics mech,
                        Pokemon source, Pokemon target) {
                    return true;
                }
                public boolean canCriticalHit() {
                    return false;
                }
            }, poke);
        return true;
    }
   
    public void informDuplicateEffect(Pokemon p) {
        p.getField().showMessage(p.getName() + " is already confused!");
    }
}
TOP

Related Classes of org.pokenet.server.battle.mechanics.statuses.ConfuseEffect

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.