Files
Dawn-Godot/battle/action/BattleMove.gd
2026-01-16 22:01:19 -06:00

79 lines
1.6 KiB
GDScript

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 target:BattleFighter = params.get("target")
# What to do if target is dead?
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!")
target.damage(damage, isCrit)
print("DAMAGE DONE")
# 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
})
static var MOVE_HEAL1 = BattleMove.new({
"name": "Heal",
"power": -20,
"mpCost": 8,
"accuracy": 1.0,
"moveType": MoveType.ABILITY
})