Exemple #1
0
 static void ahpc(int s, int, BS &b) {
     if (!b.koed(s) && b.poke(s).lifePercent() <= 50) {
         b.disposeItem(s);
         b.sendItemMessage(18,s,0);
         b.healLife(s, 20);
     }
 }
Exemple #2
0
 static void os(int s, int, BS &b) {
     b.sendItemMessage(40, s, 0);
     b.sendItemMessage(40, s, 1);
     b.inflictStatMod(s, Attack, 2, s, false);
     b.inflictConfused(s,s);
     b.disposeItem(s);
 }
Exemple #3
0
 static void uodr(int s, int t, BS &b) {
     if (fturn(b,t).typeMod > 0 && !b.koed(s)) {
         b.sendItemMessage(43, s);
         b.disposeItem(s);
         b.inflictStatMod(s, Attack, 2, s);
         b.inflictStatMod(s, SpAttack, 2, s);
     }
 }
Exemple #4
0
    static void uodr(int s, int t, BS &b) {
        if (b.koed(s))
	    return;
        if (turn(b,s).contains("CannotBeKoedBy") && turn(b,s)["CannotBeKoedBy"].toInt() == t && b.poke(s).lifePoints() == 1) {
	    b.sendItemMessage(5, s);
	    b.disposeItem(s);
	}
    }
Exemple #5
0
    static void uss(int s, int, BS &b) {
        if (b.koed(s))
            return;

        b.sendItemMessage(5, s);
        b.disposeItem(s);

        turn(b,s)["SurviveReason"] = true;
    }
Exemple #6
0
    static void ahpc(int s, int, BS &b) {
        if (!b.canHeal(s))
            return;

        if (b.poke(s).lifePercent() <= 50) {
            b.disposeItem(s);
            b.sendItemMessage(18,s,0);
            b.healLife(s, 20);
        }
    }
Exemple #7
0
 static void ubh(int s, int t, BS &b) {
     int tp = poke(b,s)["ItemArg"].toString().section('_', 0, 0).toInt();
     if (!b.koed(s) && type(b,t) == tp) {
         int stat = poke(b,s)["ItemArg"].toString().section('_', 1).toInt();
         if (b.hasMaximalStatMod(s, stat))
             return;
         b.sendItemMessage(36, s, 0, t, b.poke(s).item(), stat);
         b.disposeItem(s);
         b.inflictStatMod(s, stat, 1, s, false);
     }
 }
Exemple #8
0
    static void as(int s, int, BS &b) {
	if (poke(b,s).contains("AttractedTo")) {
	    int seducer = poke(b,s)["AttractedTo"].toInt();
	    if (poke(b,seducer).contains("Attracted") && poke(b,seducer)["Attracted"].toInt() == s) {
		b.sendItemMessage(7,s);
		removeFunction(poke(b,s), "DetermineAttackPossible", "Attract");
		poke(b,s).remove("AttractedTo");
		b.disposeItem(s);
	    }
	}
    }
Exemple #9
0
    static void uodr(int s, int t, BS &b) {
        if (forbidden_moves.contains(move(b,t)))
            return;

        if (fturn(b,t).typeMod > 0 && !b.koed(s)) {
            b.sendItemMessage(43, s);
            b.disposeItem(s);
            b.inflictStatMod(s, Attack, 2, s);
            b.inflictStatMod(s, SpAttack, 2, s);
        }
    }
Exemple #10
0
    static void as(int s, int, BS &b) {
	bool act = false;
	for (int i = 1; i <= 7; i++) {
	    if (poke(b,s)["Boost" + QString::number(i)].toInt() < 0) {
		act = true;
		poke(b,s)["Boost"+ QString::number(i)] = 0;
	    }
	}
	if (act) {
	    b.sendItemMessage(3,s);
	    b.disposeItem(s);
	}
    }
Exemple #11
0
 static void as(int s, int, BS &b) {
     bool act = false;
     for (int i = 1; i <= 7; i++) {
         if (fpoke(b,s).boosts[i] < 0) {
             act = true;
             fpoke(b,s).boosts[i] = 0;
         }
     }
     if (act) {
         b.sendItemMessage(3,s);
         b.disposeItem(s);
     }
 }
Exemple #12
0
    static void os(int s, int, BS &b) {
        b.sendItemMessage(40, s, 0);
        b.sendItemMessage(40, s, 1);
        b.inflictStatMod(s, Attack, 2, s, false);
        b.inflictConfused(s,s);
        b.disposeItem(s);

        /* in GSC cart mechanics, infinite confusion */
        if (b.isConfused(s)) {
            if (b.gen() == Gen::GoldSilver || b.gen() == Gen::Crystal) {
                poke(b,s)["ConfusedCount"] = 255;
            }
        }
    }
Exemple #13
0
    static void aaf(int, int, BS &b) {
        std::vector<int> speeds = b.sortedBySpeed();

        for (unsigned i = 0; i < speeds.size(); i++) {
            int p = speeds[i];
            if (!b.hasWorkingItem(p, Item::EscapeButton))
                continue;
            if (!turn(b,p).contains("EscapeButtonActivated"))
                continue;
            if (turn(b,p)["EscapeButtonCount"] != slot(b,p)["SwitchCount"])
                continue;

            b.sendItemMessage(39, p, 0);
            b.disposeItem(p);
            b.requestSwitch(p);
        }
    }
Exemple #14
0
 static void ubh(int s, int t, BS &b) {
     if (!b.koed(s) && type(b,t) == poke(b,s)["ItemArg"].toInt()) {
         int stat;
         if (b.poke(s).item() == Item::RechargeableBattery) {
             if (b.hasMaximalStatMod(s, Attack))
                 return;
             stat = Attack;
         } else {
             if (b.hasMaximalStatMod(s, SpAttack))
                 return;
             stat = SpAttack;
         }
         b.sendItemMessage(36, s, 0, t, b.poke(s).item(), stat);
         b.disposeItem(s);
         b.inflictStatMod(s, stat, 1, s, false);
     }
 }
Exemple #15
0
    static void bpm(int s, int t, BS &b) {
        if (s == t)
            return;

        /* Doom Desire & Future sight don't have their gem attacking right away,
           only when it hits, and then b.attacking() is false */
        if (tmove(b,s).attack == Move::FutureSight || tmove(b,s).attack == Move::DoomDesire) {
            if (b.attacking())
                return;
        }

        if (tmove(b,s).power <= 1) {
            return;
        }
        if (tmove(b,s).type != poke(b,s)["ItemArg"].toInt() || tmove(b,s).attack == Move::FirePledge  || tmove(b,s).attack == Move::GrassPledge  || tmove(b,s).attack == Move::WaterPledge )
            return;
        b.sendItemMessage(37, s, 0, 0, b.poke(s).item(), move(b,s));
        turn(b,s)["GemActivated"] = true;
        b.disposeItem(s);
    }
Exemple #16
0
    static void bpm(int s, int t, BS &b) {
        if (s == t)
            return;

        /* Doom Desire & Future sight don't have their jewel attacking right away,
           only when it hits, and then b.attacking() is false */
        if (tmove(b,s).attack == Move::FutureSight || tmove(b,s).attack == Move::DoomDesire) {
            if (b.attacking())
                return;
        }

        if (tmove(b,s).power <= 1) {
            return;
        }
        if (tmove(b,s).type != poke(b,s)["ItemArg"].toInt())
            return;
        b.sendItemMessage(37, s, 0, 0, b.poke(s).item(), move(b,s));
        turn(b,s)["BasePowerItemModifier"] = 5;
        b.disposeItem(s);
    }
Exemple #17
0
 static void as(int s, int, BS &b) {
     bool used = false;
     if (poke(b,s).contains("AttractedTo")) {
         int seducer = poke(b,s)["AttractedTo"].toInt();
         if (poke(b,seducer).contains("Attracted") && poke(b,seducer)["Attracted"].toInt() == s) {
             removeFunction(poke(b,s), "DetermineAttackPossible", "Attract");
             poke(b,s).remove("AttractedTo");
             used = true;
         }
     }
     if (b.gen() >= 5) {
         if (poke(b,s).contains("Tormented")) {
             removeFunction(poke(b,s), "MovesPossible", "Torment");
             poke(b,s).remove("Tormented");
             used = true;
         }
         if (b.counters(s).hasCounter(BC::Taunt)) {
             removeFunction(poke(b,s), "MovesPossible", "Taunt");
             removeFunction(poke(b,s), "MovePossible", "Taunt");
             b.removeEndTurnEffect(BS::PokeEffect, s, "Taunt");
             used = true;
         }
         if (b.counters(s).hasCounter(BC::Encore)) {
             removeFunction(poke(b,s), "MovesPossible", "Encore");
             b.removeEndTurnEffect(BS::PokeEffect, s, "Encore");
             used = true;
         }
         if (b.counters(s).hasCounter(BC::Disable)) {
             removeFunction(poke(b,s), "MovesPossible", "Disable");
             removeFunction(poke(b,s), "MovePossible", "Disable");
             b.removeEndTurnEffect(BS::PokeEffect, s, "Disable");
             used = true;
         }
         b.counters(s).clear();
     }
     if (used) {
         b.sendItemMessage(7,s);
         b.disposeItem(s);
     }
 }
Exemple #18
0
    static void aaf(int t, int, BS &b) {
        if (turn(b,t)["RedCardCount"] != slot(b,t)["SwitchCount"])
            return;
        int s = turn(b,t)["RedCardUser"].toInt();
        if (b.koed(s) || b.koed(t) || turn(b,t)["RedCardGiverCount"] != slot(b,s)["SwitchCount"])
            return;
        if (!b.hasWorkingItem(s, Item::RedCard))
            return;

        int target = b.player(t);
        if (b.countBackUp(target) == 0) {
            return;
        }

        b.sendItemMessage(38, s, 0, t);
        b.disposeItem(s);

        /* ingrain & suction cups */
        if (poke(b,t).value("Rooted").toBool()) {
            b.sendMoveMessage(107, 1, s, Pokemon::Grass,t);
            return;
        } else if (b.hasWorkingAbility(t,Ability::SuctionCups)) {
            b.sendMoveMessage(107, 0, s, 0,t);
            return;
        }

        QList<int> switches;

        for (int i = 0; i < 6; i++) {
            if (!b.isOut(target, i) && !b.poke(target,i).ko()) {
                switches.push_back(i);
            }
        }
        b.sendBack(t, true);
        b.sendPoke(t, switches[b.randint(switches.size())], true);
        b.sendMoveMessage(107,2,s,0,t);
        b.callEntryEffects(t);

        turn(b,t).remove("RedCardUser");
    }
Exemple #19
0
 static void upbi(int s, int, BS &b) {
     if (b.koed(s))
         return;
     b.sendItemMessage(35,s,0);
     b.disposeItem(s);
 }
Exemple #20
0
 static void upa(int s, int t, BS &b) {
     if (!b.koed(t) && b.poke(t).item() == 0) {
         b.poke(t).item() = b.poke(s).item();
         b.disposeItem(s);
     }
 }