AI generálta csaták
This commit is contained in:
@@ -13,7 +13,7 @@ Teljesen AI-generált szakaszokat egy `# !!! CHATGPT !!!` komment jelzi
|
|||||||
* NineSlicesPanel
|
* NineSlicesPanel
|
||||||
|
|
||||||
### battle_data.py
|
### battle_data.py
|
||||||
* csata függvények
|
* MINDEN
|
||||||
|
|
||||||
### gamestates/battle.py
|
### gamestates/battle.py
|
||||||
* menük
|
* menük
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import random
|
import random
|
||||||
from battle import Combatant, Action, Damage, StatusChange
|
from battle import Combatant, Action, Damage, StatusChange
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Animáció (ugyanaz, mint az eredetiben)
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
def anim_default(action, text, timer, dt):
|
def anim_default(action, text, timer, dt):
|
||||||
if timer == 0:
|
if timer == 0:
|
||||||
text.reset(action.name)
|
text.reset(action.name)
|
||||||
@@ -13,142 +17,438 @@ def anim_default(action, text, timer, dt):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# !!! CHATGPT !!!
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Hősök (ellenfelek) képességei
|
||||||
|
# StatusChange(halál, kő, védés): 1 = rátesz, 2 = levesz
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
def move_attack(user, target):
|
def move_attack(user, target):
|
||||||
return Action("Támadás", user, target, Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0), anim_default)
|
return Action("Támadás", user, target, Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
def move_fire(user, target):
|
|
||||||
return Action("Fira", user, target, Damage(0, 45, 0, 0), StatusChange(0, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def move_ice(user, target):
|
|
||||||
return Action("Blizzara", user, target, Damage(0, 0, 45, 0), StatusChange(0, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def move_cure(user, target):
|
|
||||||
return Action("Cure", user, target, Damage(0, 0, 0, 42), StatusChange(0, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def move_defend(user, target):
|
|
||||||
return Action("Védés", user, target, Damage(0, 0, 0, 0), StatusChange(0, 0, 1), anim_default)
|
|
||||||
|
|
||||||
def move_break(user, target):
|
|
||||||
return Action("Break", user, target, Damage(0, 0, 0, 0), StatusChange(0, 1, 0), anim_default)
|
|
||||||
|
|
||||||
def move_death(user, target):
|
|
||||||
return Action("Death", user, target, Damage(0, 0, 0, 0), StatusChange(1, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def move_phoenix(user, target):
|
|
||||||
return Action("Phoenix Down", user, target, Damage(0, 0, 0, 30), StatusChange(2, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def move_softenup(user, target):
|
|
||||||
return Action("Esuna", user, target, Damage(0, 0, 0, 0), StatusChange(2, 0, 0), anim_default)
|
|
||||||
|
|
||||||
def enemy_turn_test(e,ep, ap,d):
|
def move_fire(user, target):
|
||||||
|
return Action("Tűzlabda", user, target, Damage(0, 40, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_ice(user, target):
|
||||||
|
return Action("Jégszilánk", user, target, Damage(0, 0, 40, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_cure(user, target):
|
||||||
|
return Action("Gyógyítás", user, target, Damage(0, 0, 0, 45), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_defend(user, target):
|
||||||
|
return Action("Védekezés", user, target, Damage(0, 0, 0, 0), StatusChange(0, 0, 1), anim_default)
|
||||||
|
|
||||||
|
def move_break(user, target):
|
||||||
|
# kővé változtatás
|
||||||
|
return Action("Kővé Változtatás", user, target, Damage(0, 0, 0, 0), StatusChange(0, 1, 0), anim_default)
|
||||||
|
|
||||||
|
def move_phoenix(user, target):
|
||||||
|
return Action("Főnixtoll", user, target, Damage(0, 0, 0, 30), StatusChange(2, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_esuna(user, target):
|
||||||
|
# kő állapot levétele
|
||||||
|
return Action("Megtisztítás", user, target, Damage(0, 0, 0, 0), StatusChange(0, 2, 0), anim_default)
|
||||||
|
|
||||||
|
def move_potion(user, target):
|
||||||
|
return Action("Gyógyital", user, target, Damage(0, 0, 0, 60), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Főellenség (játékos) képességei
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def move_crush(user, target):
|
||||||
|
return Action("Zúzó Csapás", user, target, Damage(user.attack * 2, 0, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_hellfire(user, target):
|
||||||
|
return Action("Pokoltűz", user, target, Damage(0, 80, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_frost(user, target):
|
||||||
|
return Action("Sarki Fagy", user, target, Damage(0, 0, 80, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_dark_heal(user, target):
|
||||||
|
return Action("Sötét Gyógyulás", user, target, Damage(0, 0, 0, 80), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_dark_heal_minor(user, target):
|
||||||
|
return Action("Csontkovácsolás", user, target, Damage(0, 0, 0, 40), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_curse(user, target):
|
||||||
|
return Action("Halálos Átok", user, target, Damage(0, 0, 0, 0), StatusChange(1, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_petrify(user, target):
|
||||||
|
return Action("Kőátok", user, target, Damage(0, 0, 0, 0), StatusChange(0, 1, 0), anim_default)
|
||||||
|
|
||||||
|
def move_raise(user, target):
|
||||||
|
return Action("Felélesztés", user, target, Damage(0, 0, 0, 60), StatusChange(2, 0, 0), anim_default)
|
||||||
|
|
||||||
|
def move_bone_toss(user, target):
|
||||||
|
return Action("Csontdobás", user, target, Damage(user.attack + 15, 0, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Segédfüggvények a hősök MI-jéhez
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def _choose(e, d, act, target):
|
||||||
|
_, builder, _ = d["moves"][act]
|
||||||
|
print(f" ({e.name} választása: {act} -> {target.name})")
|
||||||
|
return builder(e, target)
|
||||||
|
|
||||||
|
|
||||||
|
def _can_petrify(d):
|
||||||
|
# kővé változtatást csak akkor használnak a hősök, ha a csatában
|
||||||
|
# a főellenség oldalának van Megtisztítása (a data-ban benne van a "break")
|
||||||
|
return "break" in d["moves"]
|
||||||
|
|
||||||
|
|
||||||
|
def _best_element(target):
|
||||||
|
"""Eldönti, hogy tűz vagy jég jobb-e a célpont ellen (nyelő elemet elkerüli)."""
|
||||||
|
fire_ok = not getattr(target, "abs_fire", False)
|
||||||
|
ice_ok = not getattr(target, "abs_ice", False)
|
||||||
|
if fire_ok and ice_ok:
|
||||||
|
if getattr(target, "def_fire", 0) <= getattr(target, "def_ice", 0):
|
||||||
|
return "fire"
|
||||||
|
return "ice"
|
||||||
|
if fire_ok:
|
||||||
|
return "fire"
|
||||||
|
if ice_ok:
|
||||||
|
return "ice"
|
||||||
|
return "attack"
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 1. csata MI: kezdő hősök, egyszerű és kiszámítható
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def hero_turn_rookies(e, ep, ap, d):
|
||||||
living = [p for p in ap if not p.ko]
|
living = [p for p in ap if not p.ko]
|
||||||
if not living:
|
if not living:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# weighted move pool -- enemies get the same toolkit as the party
|
hurt_allies = [a for a in ep if not a.ko and a.hp < a.maxhp * 0.5]
|
||||||
offensive = ["attack", "fire", "ice", "death"]
|
|
||||||
support = ["break"]
|
|
||||||
self_only = ["defend"]
|
|
||||||
|
|
||||||
# if an ally is KO'd, occasionally try to revive/cure instead of attacking
|
|
||||||
ko_allies = [a for a in ep if a.ko and a is not e]
|
|
||||||
hurt_allies = [a for a in ep if not a.ko and a.hp < a.maxhp]
|
|
||||||
|
|
||||||
roll = random.random()
|
roll = random.random()
|
||||||
|
|
||||||
if ko_allies and roll < 0.15:
|
|
||||||
act = "phoenix"
|
|
||||||
target = random.choice(ko_allies)
|
|
||||||
elif hurt_allies and roll < 0.30:
|
|
||||||
act = "cure"
|
|
||||||
target = random.choice(hurt_allies)
|
|
||||||
elif not e.def_up and roll < 0.40:
|
|
||||||
act = "defend"
|
|
||||||
target = e
|
|
||||||
elif roll < 0.55:
|
|
||||||
act = "break"
|
|
||||||
target = random.choice(living)
|
|
||||||
elif roll < 0.65:
|
|
||||||
act = "death"
|
|
||||||
target = random.choice(living)
|
|
||||||
else:
|
|
||||||
act = random.choice(["attack", "fire", "ice"])
|
|
||||||
target = random.choice(living)
|
|
||||||
|
|
||||||
_, builder, _ = d["moves"][act]
|
|
||||||
print(f" ({e.name} chooses {act} -> {target.name})")
|
|
||||||
return builder(e, target)
|
|
||||||
|
|
||||||
# !!! CHATGPT VÉGE !!!
|
if hurt_allies and roll < 0.25:
|
||||||
|
return _choose(e, d, "cure", random.choice(hurt_allies))
|
||||||
|
if not e.def_up and e.hp < e.maxhp * 0.4 and roll < 0.6:
|
||||||
|
return _choose(e, d, "defend", e)
|
||||||
|
if _can_petrify(d) and roll < 0.15:
|
||||||
|
return _choose(e, d, "break", random.choice(living))
|
||||||
|
return _choose(e, d, random.choice(["attack", "attack", "fire", "ice"]), random.choice(living))
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 2. csata MI: elemi hősök, kerülik a nyelő elemet
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def hero_turn_elemental(e, ep, ap, d):
|
||||||
|
living = [p for p in ap if not p.ko]
|
||||||
|
if not living:
|
||||||
|
return None
|
||||||
|
|
||||||
|
hurt_allies = [a for a in ep if not a.ko and a.hp < a.maxhp * 0.4]
|
||||||
|
roll = random.random()
|
||||||
|
|
||||||
|
if hurt_allies and roll < 0.25:
|
||||||
|
return _choose(e, d, "cure", random.choice(hurt_allies))
|
||||||
|
if _can_petrify(d) and roll < 0.35:
|
||||||
|
return _choose(e, d, "break", random.choice(living))
|
||||||
|
|
||||||
|
target = random.choice(living)
|
||||||
|
return _choose(e, d, _best_element(target), target)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 3. csata MI: a főpap folyamatosan gyógyít és éleszt
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
HEALER_NAMES = {"Lilla, a Főpap"}
|
||||||
|
|
||||||
|
def hero_turn_healers(e, ep, ap, d):
|
||||||
|
living = [p for p in ap if not p.ko]
|
||||||
|
if not living:
|
||||||
|
return None
|
||||||
|
|
||||||
|
ko_allies = [a for a in ep if a.ko and a is not e]
|
||||||
|
hurt_allies = [a for a in ep if not a.ko and a.hp < a.maxhp * 0.6]
|
||||||
|
is_healer = e.name in HEALER_NAMES
|
||||||
|
roll = random.random()
|
||||||
|
|
||||||
|
if is_healer:
|
||||||
|
if ko_allies and roll < 0.6:
|
||||||
|
return _choose(e, d, "phoenix", random.choice(ko_allies))
|
||||||
|
if hurt_allies and roll < 0.9:
|
||||||
|
return _choose(e, d, "cure", min(hurt_allies, key=lambda a: a.hp))
|
||||||
|
return _choose(e, d, "attack", random.choice(living))
|
||||||
|
|
||||||
|
if hurt_allies and roll < 0.1:
|
||||||
|
return _choose(e, d, "cure", random.choice(hurt_allies))
|
||||||
|
if roll < 0.2 and not e.def_up:
|
||||||
|
return _choose(e, d, "defend", e)
|
||||||
|
if _can_petrify(d) and roll < 0.4:
|
||||||
|
return _choose(e, d, "break", random.choice(living))
|
||||||
|
return _choose(e, d, "attack", random.choice(living))
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 4. csata MI: összehangolt hősök, a leggyengébb főellenségre fókuszálnak
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def hero_turn_final(e, ep, ap, d):
|
||||||
|
living = [p for p in ap if not p.ko]
|
||||||
|
if not living:
|
||||||
|
return None
|
||||||
|
|
||||||
|
ko_allies = [a for a in ep if a.ko and a is not e]
|
||||||
|
hurt_allies = [a for a in ep if not a.ko and a.hp < a.maxhp * 0.35]
|
||||||
|
weakest = min(living, key=lambda p: p.hp)
|
||||||
|
strongest = max(living, key=lambda p: p.attack)
|
||||||
|
roll = random.random()
|
||||||
|
|
||||||
|
if ko_allies and roll < 0.2:
|
||||||
|
return _choose(e, d, "phoenix", random.choice(ko_allies))
|
||||||
|
if hurt_allies and roll < 0.4:
|
||||||
|
return _choose(e, d, "cure", random.choice(hurt_allies))
|
||||||
|
if not e.def_up and e.hp < e.maxhp * 0.3:
|
||||||
|
return _choose(e, d, "defend", e)
|
||||||
|
if _can_petrify(d) and roll < 0.55:
|
||||||
|
return _choose(e, d, "break", strongest)
|
||||||
|
if roll < 0.8:
|
||||||
|
return _choose(e, d, _best_element(weakest), weakest)
|
||||||
|
return _choose(e, d, "attack", weakest)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Közös hős-képességlista
|
||||||
|
# can_petrify=True csak akkor, ha a főellenség oldalán van Megtisztítás
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
def _hero_moves(can_petrify=False):
|
||||||
|
moves = {
|
||||||
|
"attack": ("Fizikai támadás", move_attack, True),
|
||||||
|
"fire": ("Tűzlabda", move_fire, True),
|
||||||
|
"ice": ("Jégszilánk", move_ice, True),
|
||||||
|
"cure": ("Gyógyítás", move_cure, False),
|
||||||
|
"defend": ("Védekezés", move_defend, None),
|
||||||
|
"phoenix": ("Főnixtoll", move_phoenix, False),
|
||||||
|
"unstone": ("Megtisztítás", move_esuna, False),
|
||||||
|
}
|
||||||
|
if can_petrify:
|
||||||
|
moves["break"] = ("Kővé Változtatás", move_break, True)
|
||||||
|
return {"moves": moves}
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# CSATÁK: "te irányítod a főellenséget"
|
||||||
|
# "party_members" = a főellenség és csatlósai (játékos)
|
||||||
|
# "enemies" = a betolakodó hősök (MI)
|
||||||
|
# Ellenfél-célzás: "ene", szövetséges-célzás (spellek és tárgyak): "all_rev"
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
battles = [
|
battles = [
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# 1. A Trónterem védelme (nincs Megtisztítás -> a hősök nem kövesítenek)
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
{ "enemies": [
|
{ "enemies": [
|
||||||
Combatant("Six-Seven gyerek", 120, 30, 80, 20, 0, 50, False, False),
|
Combatant("Aldor, az Ifjú Lovag", 130, 28, 90, 20, 0, 0, False, False),
|
||||||
Combatant("Jég Manó", 60, 15, 150, 10, 0, 200, False, True ),
|
Combatant("Mira, a Tanonc Varázsló", 90, 15, 110, 5, 10, 10, False, False),
|
||||||
Combatant("Láva Bestia", 200, 40, 40, 60, 999, -50, True, False),
|
Combatant("Bence, a Gyakornok Pap", 100, 12, 80, 10, 20, 20, False, False),
|
||||||
],
|
],
|
||||||
"party_members": [
|
"party_members": [
|
||||||
Combatant("Locke", 80, 45, 130, 15, 10, 10, False, False),
|
Combatant("Mordrak, a Sötét Úr", 400, 50, 70, 30, 20, 20, False, False),
|
||||||
Combatant("Terra", 100, 35, 100, 30, 30, 30, False, False),
|
Combatant("Csontvázőr", 150, 35, 60, 40, -40, 0, False, False),
|
||||||
Combatant("Celes", 110, 25, 90, 50, 40, 40, False, False),
|
|
||||||
Combatant("Cyan", 130, 38, 70, 40, 20, 20, False, False),
|
|
||||||
],
|
],
|
||||||
"enemy_turn_func": enemy_turn_test,
|
"enemy_turn_func": hero_turn_rookies,
|
||||||
"mus_id": "mus_fnafsux",
|
"mus_id": "mus_fnafsux",
|
||||||
"init_ai_data": {
|
"init_ai_data": _hero_moves(can_petrify=False),
|
||||||
"moves": {
|
|
||||||
"attack": ("Physical attack", move_attack, True),
|
|
||||||
"fire": ("Fira", move_fire, True),
|
|
||||||
"ice": ("Blizzara", move_ice, True),
|
|
||||||
"cure": ("Cure", move_cure, False),
|
|
||||||
"defend": ("Defend", move_defend, None),
|
|
||||||
"break": ("Break", move_break, True),
|
|
||||||
"death": ("Death", move_death, True),
|
|
||||||
"phoenix": ("Phoenix Down", move_phoenix, False),
|
|
||||||
"unstone": ("Esuna", move_softenup,False),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"menus": [
|
"menus": [
|
||||||
[ # Locke
|
[ # Mordrak
|
||||||
["Harc", "phys_att"],
|
|
||||||
["", "unselectable"],
|
|
||||||
["", "unselectable"],
|
|
||||||
["Tárgy", "items"]
|
|
||||||
],
|
|
||||||
[ # Terra
|
|
||||||
["Harc", "phys_att"],
|
["Harc", "phys_att"],
|
||||||
["Varázslat", "magic"],
|
["Varázslat", "magic"],
|
||||||
["", "unselectable"],
|
["", "unselectable"],
|
||||||
["Tárgy", "items"]
|
["Tárgy", "items"]
|
||||||
],
|
],
|
||||||
[ # Celes
|
[ # Csontvázőr
|
||||||
["Harc", "phys_att"],
|
["Harc", "phys_att"],
|
||||||
["Varázslat", "magic"],
|
["Varázslat", "magic"],
|
||||||
["", "unselectable"],
|
["", "unselectable"],
|
||||||
["Tárgy", "items"]
|
["Tárgy", "items"]
|
||||||
],
|
|
||||||
[ # Cyan
|
|
||||||
["Harc", "phys_att"],
|
|
||||||
["", "unselectable"],
|
|
||||||
["", "unselectable"],
|
|
||||||
["Tárgy", "items"]
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"spells": [
|
"spells": [
|
||||||
[], # Locke
|
[ # Mordrak
|
||||||
[ # Terra
|
["Pokoltűz", 0, ("Pokoltűz", move_hellfire, "ene")],
|
||||||
["Fira", 0, ("Fira", move_fire, "ene")],
|
["Sarki Fagy", 0, ("Sarki Fagy", move_frost, "ene")],
|
||||||
["Blizzara", 0, ("Blizzara", move_ice, "ene")],
|
["Zúzó Csapás", 0, ("Zúzó Csapás", move_crush, "ene")],
|
||||||
|
["Sötét Gyógyulás", 0, ("Sötét Gyógyulás", move_dark_heal, "all_rev")],
|
||||||
],
|
],
|
||||||
[ # Celes
|
[ # Csontvázőr
|
||||||
["Fira", 0, ("Fira", move_fire, "ene")],
|
["Csontkovácsolás", 0, ("Csontkovácsolás", move_dark_heal_minor, "all_rev")],
|
||||||
["Blizzara", 0, ("Blizzara", move_ice, "ene")],
|
]
|
||||||
],
|
|
||||||
[] # Cyan
|
|
||||||
],
|
],
|
||||||
"inventory": [
|
"inventory": [
|
||||||
["Phoenix Down",67, ("Phoenix Down", move_phoenix, "all_rev")]
|
["Gyógyital", 3, ("Gyógyital", move_potion, "all_rev")],
|
||||||
|
["Főnixtoll", 2, ("Főnixtoll", move_phoenix, "all_rev")]
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# 2. A Tűz és Jég Kapuja (a sárkányúrnő nyeli a tüzet, de a jég fáj neki)
|
||||||
|
# Nincs kőátok, a hősök sem kövesítenek.
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
{ "enemies": [
|
||||||
|
Combatant("Korom, a Tűzbűvölő", 110, 20, 95, 10, 60, 0, False, False),
|
||||||
|
Combatant("Fagyi, a Jégmágus", 110, 20, 100, 10, 0, 60, False, False),
|
||||||
|
Combatant("Szikla, a Pajzsos", 220, 30, 50, 60, 10, 10, False, False),
|
||||||
|
],
|
||||||
|
"party_members": [
|
||||||
|
Combatant("Ignisza, a Sárkányúrnő", 450, 45, 85, 25, 999, -60, True, False),
|
||||||
|
Combatant("Parázs Sárkánykölyök", 180, 40, 100, 30, 999, -50, True, False),
|
||||||
|
],
|
||||||
|
"enemy_turn_func": hero_turn_elemental,
|
||||||
|
"mus_id": "mus_fnafsux",
|
||||||
|
"init_ai_data": _hero_moves(can_petrify=False),
|
||||||
|
"menus": [
|
||||||
|
[ # Ignisza
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
],
|
||||||
|
[ # Parázs
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"spells": [
|
||||||
|
[ # Ignisza
|
||||||
|
["Pokoltűz", 0, ("Pokoltűz", move_hellfire, "ene")],
|
||||||
|
["Zúzó Csapás", 0, ("Zúzó Csapás", move_crush, "ene")],
|
||||||
|
["Sötét Gyógyulás", 0, ("Sötét Gyógyulás", move_dark_heal, "all_rev")],
|
||||||
|
],
|
||||||
|
[ # Parázs
|
||||||
|
["Pokoltűz", 0, ("Pokoltűz", move_hellfire, "ene")],
|
||||||
|
["Csontkovácsolás", 0, ("Csontkovácsolás", move_dark_heal_minor, "all_rev")],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"inventory": [
|
||||||
|
["Gyógyital", 3, ("Gyógyital", move_potion, "all_rev")],
|
||||||
|
["Főnixtoll", 3, ("Főnixtoll", move_phoenix, "all_rev")]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# 3. A Nekromanta Kriptája (előbb a főpapot kell elintézni!)
|
||||||
|
# A Csontmágus tud Megtisztítani, így a hősök kövesíthetnek.
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
{ "enemies": [
|
||||||
|
Combatant("Lilla, a Főpap", 150, 10, 100, 10, 30, 30, False, False),
|
||||||
|
Combatant("Garat, a Harcos", 240, 45, 70, 40, 0, 0, False, False),
|
||||||
|
Combatant("Réka, a Fürge Tolvaj", 100, 40, 140, 10, 0, 0, False, False),
|
||||||
|
],
|
||||||
|
"party_members": [
|
||||||
|
Combatant("Vorik, a Nekromanta", 320, 35, 90, 15, 10, 10, False, False),
|
||||||
|
Combatant("Zombi Szolga", 140, 30, 40, 25, -30, 20, False, False),
|
||||||
|
Combatant("Csontmágus", 90, 20, 95, 5, 0, 0, False, False),
|
||||||
|
],
|
||||||
|
"enemy_turn_func": hero_turn_healers,
|
||||||
|
"mus_id": "mus_fnafsux",
|
||||||
|
"init_ai_data": _hero_moves(can_petrify=True),
|
||||||
|
"menus": [
|
||||||
|
[ # Vorik
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
],
|
||||||
|
[ # Zombi Szolga
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
],
|
||||||
|
[ # Csontmágus
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"spells": [
|
||||||
|
[ # Vorik
|
||||||
|
["Halálos Átok", 0, ("Halálos Átok", move_curse, "ene")],
|
||||||
|
["Kőátok", 0, ("Kőátok", move_petrify, "ene")],
|
||||||
|
["Felélesztés", 0, ("Felélesztés", move_raise, "all_rev")],
|
||||||
|
["Sötét Gyógyulás", 0, ("Sötét Gyógyulás", move_dark_heal, "all_rev")],
|
||||||
|
],
|
||||||
|
[], # Zombi Szolga
|
||||||
|
[ # Csontmágus
|
||||||
|
["Csontdobás", 0, ("Csontdobás", move_bone_toss, "ene")],
|
||||||
|
["Sarki Fagy", 0, ("Sarki Fagy", move_frost, "ene")],
|
||||||
|
["Megtisztítás", 0, ("Megtisztítás", move_esuna, "all_rev")],
|
||||||
|
["Csontkovácsolás", 0, ("Csontkovácsolás", move_dark_heal_minor, "all_rev")],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"inventory": [
|
||||||
|
["Gyógyital", 3, ("Gyógyital", move_potion, "all_rev")],
|
||||||
|
["Főnixtoll", 2, ("Főnixtoll", move_phoenix, "all_rev")]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# 4. A Hősök Utolsó Bástyája (a végső küzdelem: három főellenség négy hős ellen)
|
||||||
|
# Nyx tud Megtisztítani, így a hősök kövesíthetnek.
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
{ "enemies": [
|
||||||
|
Combatant("Szent Aurélia, a Vezér", 260, 42, 100, 35, 25, 25, False, False),
|
||||||
|
Combatant("Bálint, a Lovagkapitány", 220, 48, 80, 50, 10, 10, False, False),
|
||||||
|
Combatant("Eszter, a Nagymágus", 130, 22, 105, 10, 50, 50, False, False),
|
||||||
|
Combatant("Domonkos, a Gyógyító", 140, 14, 95, 15, 30, 30, False, False),
|
||||||
|
],
|
||||||
|
"party_members": [
|
||||||
|
Combatant("Sötét Úr Zagorath", 600, 55, 80, 35, 30, 30, False, False),
|
||||||
|
Combatant("Árnyboszorkány Nyx", 300, 30, 110, 10, 60, 60, False, False),
|
||||||
|
Combatant("Csontlovag Gorm", 380, 50, 60, 70, -20, 40, False, False),
|
||||||
|
],
|
||||||
|
"enemy_turn_func": hero_turn_final,
|
||||||
|
"mus_id": "mus_fnafsux",
|
||||||
|
"init_ai_data": _hero_moves(can_petrify=True),
|
||||||
|
"menus": [
|
||||||
|
[ # Zagorath
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
],
|
||||||
|
[ # Nyx
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
],
|
||||||
|
[ # Gorm
|
||||||
|
["Harc", "phys_att"],
|
||||||
|
["Varázslat", "magic"],
|
||||||
|
["", "unselectable"],
|
||||||
|
["Tárgy", "items"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"spells": [
|
||||||
|
[ # Zagorath
|
||||||
|
["Pokoltűz", 0, ("Pokoltűz", move_hellfire, "ene")],
|
||||||
|
["Sarki Fagy", 0, ("Sarki Fagy", move_frost, "ene")],
|
||||||
|
["Zúzó Csapás", 0, ("Zúzó Csapás", move_crush, "ene")],
|
||||||
|
["Sötét Gyógyulás", 0, ("Sötét Gyógyulás", move_dark_heal, "all_rev")],
|
||||||
|
],
|
||||||
|
[ # Nyx
|
||||||
|
["Halálos Átok", 0, ("Halálos Átok", move_curse, "ene")],
|
||||||
|
["Kőátok", 0, ("Kőátok", move_petrify, "ene")],
|
||||||
|
["Sötét Gyógyulás", 0, ("Sötét Gyógyulás", move_dark_heal, "all_rev")],
|
||||||
|
["Felélesztés", 0, ("Felélesztés", move_raise, "all_rev")],
|
||||||
|
["Megtisztítás", 0, ("Megtisztítás", move_esuna, "all_rev")],
|
||||||
|
],
|
||||||
|
[ # Gorm
|
||||||
|
["Zúzó Csapás", 0, ("Zúzó Csapás", move_crush, "ene")],
|
||||||
|
["Csontdobás", 0, ("Csontdobás", move_bone_toss, "ene")],
|
||||||
|
["Csontkovácsolás", 0, ("Csontkovácsolás", move_dark_heal_minor, "all_rev")],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"inventory": [
|
||||||
|
["Gyógyital", 4, ("Gyógyital", move_potion, "all_rev")],
|
||||||
|
["Főnixtoll", 3, ("Főnixtoll", move_phoenix, "all_rev")]
|
||||||
|
]
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ def menu_action(data):
|
|||||||
def queue_attack(targets):
|
def queue_attack(targets):
|
||||||
action_queue.append(Action(
|
action_queue.append(Action(
|
||||||
"Támadás", user, targets[0],
|
"Támadás", user, targets[0],
|
||||||
Damage(166, 0, 0, 0), StatusChange(0, 0, 0),
|
Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0),
|
||||||
battle_data.anim_default))
|
battle_data.anim_default))
|
||||||
|
|
||||||
open_target_menu(user, aparty, eparty, "ene", queue_attack,
|
open_target_menu(user, aparty, eparty, "ene", queue_attack,
|
||||||
|
|||||||
@@ -4,14 +4,17 @@ import controls
|
|||||||
import gamestate
|
import gamestate
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from objects import BalthasarRenderer, OverworldMap, TestObject, DIR_UP, DIR_LEFT, DIR_DOWN, DIR_RIGHT, B_SPRITE_HEIGHT
|
from objects import BalthasarRenderer, OverworldMap, BattlePodium, DIR_UP, DIR_LEFT, DIR_DOWN, DIR_RIGHT, B_SPRITE_HEIGHT
|
||||||
|
|
||||||
WALK_SPEED = 48
|
WALK_SPEED = 48
|
||||||
|
|
||||||
balthasar = BalthasarRenderer()
|
balthasar = BalthasarRenderer()
|
||||||
overworld = OverworldMap()
|
overworld = OverworldMap()
|
||||||
objects = [
|
objects = [
|
||||||
TestObject(0,16),
|
BattlePodium(0 , 0, 0),
|
||||||
|
BattlePodium(48, 0, 1),
|
||||||
|
BattlePodium(0 ,48, 2),
|
||||||
|
BattlePodium(48,48, 3),
|
||||||
balthasar
|
balthasar
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -186,4 +189,4 @@ def draw(game):
|
|||||||
|
|
||||||
trans = overworld.get_translation(game)
|
trans = overworld.get_translation(game)
|
||||||
for o in sorted(objects, key=lambda o: o.y, reverse=True):
|
for o in sorted(objects, key=lambda o: o.y, reverse=True):
|
||||||
o.render(game, trans)
|
o.render(game, trans)
|
||||||
|
|||||||
@@ -152,14 +152,15 @@ class OverworldMap:
|
|||||||
pixelated=True
|
pixelated=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# Teszt objektum
|
# Csata Szobor
|
||||||
class TestObject:
|
class BattlePodium:
|
||||||
def __init__(self, x, y):
|
def __init__(self, x, y, battle_id):
|
||||||
self.x = x
|
self.x = x
|
||||||
self.y = y
|
self.y = y
|
||||||
self.w = 16
|
self.w = 16
|
||||||
self.h = 16
|
self.h = 16
|
||||||
self.interactive = True
|
self.interactive = True
|
||||||
|
self.battle = battle_id
|
||||||
|
|
||||||
def get_aabb(self):
|
def get_aabb(self):
|
||||||
return self.x, self.y, self.x + self.w, self.y + self.h
|
return self.x, self.y, self.x + self.w, self.y + self.h
|
||||||
@@ -171,5 +172,4 @@ class TestObject:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def on_interact(self, start_battle_func):
|
def on_interact(self, start_battle_func):
|
||||||
print("never gonna give you up")
|
start_battle_func(self.battle)
|
||||||
start_battle_func(0)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user