class_name BattleMove extends BattleAction enum MoveType { PHYSICAL, ABILITY, MAGICAL, } enum BattleMoveResult { HIT, MISS, CRIT, } var name:String var power:int var mpCost:int var accuracy:float var moveType:MoveType var fieldUse:bool func _init(params:Dictionary) -> void: self.name = params.get("name", "Unknown Move") self.power = params.get("power", 0) self.mpCost = params.get("mpCost", 0) self.speedModifier = params.get("speedModifier", 1.0) self.accuracy = params.get("accuracy", 1.0) self.moveType = params.get("moveType", MoveType.PHYSICAL) self.fieldUse = params.get("fieldUse", false) func perform(params:Dictionary): super.perform(params) var user:BattleFighter = params.get("user") var targets:Array[BattleFighter] = params.get("targets") # What to do if target is dead? for target in targets: if target.status == BattleFighter.Status.DEAD: print("Target is already dead. Move has no effect.") assert(false) # TODO: Determine damage var damage:int = 0 var isCrit:bool = false var isMiss:bool = false user.mpConsume(self.mpCost) if isMiss: print("ATTACK MISS") assert(false) if isCrit: print("CRITICAL HIT!") for target in targets: target.damage(damage, isCrit) print("DAMAGE DONE") func canFighterUse(fighter:BattleFighter) -> bool: if !super.canFighterUse(fighter): return false if fighter.mp < self.mpCost: return false return true # Moves static var MOVE_PUNCH = BattleMove.new({ "name": "Punch", "power": 15, "accuracy": 0.95, "moveType": MoveType.PHYSICAL }) static var MOVE_FIRE1 = BattleMove.new({ "name": "Fire", "power": 25, "mpCost": 5, "accuracy": 0.9, "moveType": MoveType.MAGICAL, "canTargetMultiple": true }) static var MOVE_HEAL1 = BattleMove.new({ "name": "Heal", "power": -20, "mpCost": 8, "accuracy": 1.0, "moveType": MoveType.ABILITY, "canTargetMultiple": true, "preferAlly": true })