summaryrefslogblamecommitdiff
path: root/battle/skills.py
blob: 72f4610838e9867069e8320bad8d81a19092461c (plain) (tree)


















                                                                                        
                                  

































































                                                                          





                                                 
########################################################################################
#     This file is part of Spheres.
#     Copyright (C) 2019  Jesusalva

#     This library is free software; you can redistribute it and/or
#     modify it under the terms of the GNU Lesser General Public
#     License as published by the Free Software Foundation; either
#     version 2.1 of the License, or (at your option) any later version.

#     This library 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
#     Lesser General Public License for more details.

#     You should have received a copy of the GNU Lesser General Public
#     License along with this library; if not, write to the Free Software
#     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
########################################################################################
# Battle Module - Skills
from utils import dbgprint, Battle
from consts import (SK_SINGLE_DMG, SK_MULTI_DMG, SK_ATK_UP, SK_DEF_UP,
    SK_SINGLE_HEAL, SK_MULTI_HEAL, SC_ATKUP, SC_DEFUP)
from battle.common import find_target, calc_dmg, attackall
def skill_core(token, mask, force, element):
    global Battle

    # Create a fake unit
    dummy={
            "name": "Dummy",
            "unit_id": 1,
            "max_hp": 1,
            "hp": 1,
            "atk": force,
            "ele": element,
            "status_effects": 0
            }

    # Handle the mask to determine the action
    # TODO: SK_CLEAR_SC, SK_RESSURECTION
    if mask & SK_SINGLE_DMG:
        # Single Damage skill: 1 strength = 1 damage
        target_id=find_target(token, "enemy")
        dbgprint("Enemy selected: %d" % target_id)
        target=Battle[token]["enemy"][target_id]
        target["hp"]-=calc_dmg(token, dummy, target, dummy["atk"])

    if mask & SK_MULTI_DMG:
        # Multi Damage skill: 1 strength = 1 damage
        attackall(token, dummy, "enemy")

    if mask & SK_ATK_UP:
        # Attack up skill: Add SC_ATKUP to all members (even dead ones)
        for target in Battle[token]["party"]:
            if not (target["status_effects"] & SC_ATKUP):
                target["status_effects"]=target["status_effects"]|SC_ATKUP

    if mask & SK_DEF_UP:
        # Defense up skill: Add SC_DEFUP to all members (even dead ones)
        for target in Battle[token]["party"]:
            if not (target["status_effects"] & SC_DEFUP):
                target["status_effects"]=target["status_effects"]|SC_DEFUP

    # TODO: Is single heal the same as self heal?
    if mask & SK_SINGLE_HEAL:
        # Heal skill: 1 strength = 1% healing (FIXME?)
        target_id=find_target(token, "party")
        target=Battle[token]["party"][target_id]
        target["hp"]+=int(target["max_hp"]*dummy["atk"]/100)
        if (target["hp"] > target["max_hp"]):
            target["hp"]=0+target["max_hp"]

    if mask & SK_MULTI_HEAL:
        # Heal skill: 1 strength = 1 HP (FIXME?)
        dummy["atk"]*=-1
        attackall(token, dummy, "party")

    # Victory/Defeat checks are not handled here
    # This doesn't returns anything, actually.
    # Errors must be handled as Exceptions
    return

def handle_skill(token, skill_id):
    global Battle
    # TODO
    return


#################################################
# Handles CI false positives in a lame way
def pyflakes():
    return Battle