Grafikusítás
This commit is contained in:
@@ -4,6 +4,7 @@ import pygame
|
|||||||
pygame.mixer.init()
|
pygame.mixer.init()
|
||||||
|
|
||||||
sprites = {
|
sprites = {
|
||||||
|
"kefka" : arcade.load_texture("res/sprite/kefka.png"),
|
||||||
"cursor" : arcade.load_texture("res/sprite/handcursor.png"),
|
"cursor" : arcade.load_texture("res/sprite/handcursor.png"),
|
||||||
"font" : arcade.load_spritesheet("res/sprite/font.png"),
|
"font" : arcade.load_spritesheet("res/sprite/font.png"),
|
||||||
"panel" : arcade.load_spritesheet("res/sprite/panel.png"),
|
"panel" : arcade.load_spritesheet("res/sprite/panel.png"),
|
||||||
|
|||||||
@@ -245,10 +245,20 @@ battles = [
|
|||||||
Combatant("Mira, a Tanonc Varázsló", 90, 15, 50, 5, 10, 10, False, False),
|
Combatant("Mira, a Tanonc Varázsló", 90, 15, 50, 5, 10, 10, False, False),
|
||||||
Combatant("Bence, a Gyakornok Pap", 100, 12, 60, 10, 20, 20, False, False),
|
Combatant("Bence, a Gyakornok Pap", 100, 12, 60, 10, 20, 20, False, False),
|
||||||
],
|
],
|
||||||
|
"enemy_sprites": [
|
||||||
|
# normál, kritikus , halott
|
||||||
|
["cursor", "cursor", "cursor"],
|
||||||
|
["cursor", "cursor", "cursor"],
|
||||||
|
["cursor", "cursor", "cursor"]
|
||||||
|
],
|
||||||
"party_members": [
|
"party_members": [
|
||||||
Combatant("Mordrak, a Sötét Úr", 400, 50, 80, 30, 20, 20, False, False),
|
Combatant("Mordrak, a Sötét Úr", 400, 50, 80, 30, 20, 20, False, False),
|
||||||
Combatant("Csontvázőr", 150, 35, 67, 40, -40, 0, False, False),
|
Combatant("Csontvázőr", 150, 35, 67, 40, -40, 0, False, False),
|
||||||
],
|
],
|
||||||
|
"party_sprites": [
|
||||||
|
["kefka", "kefka", "kefka"],
|
||||||
|
["cursor", "cursor", "cursor"]
|
||||||
|
],
|
||||||
"enemy_turn_func": hero_turn_rookies,
|
"enemy_turn_func": hero_turn_rookies,
|
||||||
"mus_id": "mus_fnafsux",
|
"mus_id": "mus_fnafsux",
|
||||||
"init_ai_data": _hero_moves(can_petrify=False),
|
"init_ai_data": _hero_moves(can_petrify=False),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import random
|
|||||||
import renderers
|
import renderers
|
||||||
import arcade
|
import arcade
|
||||||
import gamestate
|
import gamestate
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
from battle import Combatant, Action, Damage, StatusChange
|
from battle import Combatant, Action, Damage, StatusChange
|
||||||
from menu import MenuItem
|
from menu import MenuItem
|
||||||
@@ -21,12 +22,14 @@ party_menus = []
|
|||||||
spells = []
|
spells = []
|
||||||
inventory = []
|
inventory = []
|
||||||
|
|
||||||
|
enemy_sprites = []
|
||||||
|
party_sprites = []
|
||||||
|
gray_cache = {}
|
||||||
|
|
||||||
action_queue = []
|
action_queue = []
|
||||||
cur_action = None
|
cur_action = None
|
||||||
action_timer = 0
|
action_timer = 0
|
||||||
|
|
||||||
party_text = TextRenderer(3, 206, 210)
|
|
||||||
ene_text = TextRenderer(123, 206, 210)
|
|
||||||
menu_text = TextRenderer(6, 76, 210)
|
menu_text = TextRenderer(6, 76, 210)
|
||||||
action_text = TextRenderer(110, 215, 210)
|
action_text = TextRenderer(110, 215, 210)
|
||||||
|
|
||||||
@@ -37,8 +40,14 @@ panel = renderers.NineSlicesPanel(0,0,230,100)
|
|||||||
|
|
||||||
battle_id = 0
|
battle_id = 0
|
||||||
|
|
||||||
|
def enemy_pos(i):
|
||||||
|
return (185, 195 - i * 40)
|
||||||
|
|
||||||
|
def party_pos(i):
|
||||||
|
return (40 + (i % 2) * 30, 165 - i * 35)
|
||||||
|
|
||||||
def switch(game):
|
def switch(game):
|
||||||
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory
|
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory, enemy_sprites, party_sprites
|
||||||
enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"])
|
enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"])
|
||||||
party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
|
party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
|
||||||
enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"])
|
enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"])
|
||||||
@@ -46,6 +55,8 @@ def switch(game):
|
|||||||
party_menus = copy.deepcopy(battle_data.battles[battle_id]["menus"])
|
party_menus = copy.deepcopy(battle_data.battles[battle_id]["menus"])
|
||||||
spells = copy.deepcopy(battle_data.battles[battle_id]["spells"])
|
spells = copy.deepcopy(battle_data.battles[battle_id]["spells"])
|
||||||
inventory = copy.deepcopy(battle_data.battles[battle_id]["inventory"])
|
inventory = copy.deepcopy(battle_data.battles[battle_id]["inventory"])
|
||||||
|
enemy_sprites = battle_data.battles[battle_id]["enemy_sprites"]
|
||||||
|
party_sprites = battle_data.battles[battle_id]["party_sprites"]
|
||||||
battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True)
|
battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True)
|
||||||
close_menu()
|
close_menu()
|
||||||
|
|
||||||
@@ -265,16 +276,6 @@ def update(game, dt):
|
|||||||
else:
|
else:
|
||||||
action_timer += dt
|
action_timer += dt
|
||||||
|
|
||||||
# Szövegek Frissítése
|
|
||||||
partytext = ""
|
|
||||||
enetext = ""
|
|
||||||
|
|
||||||
for m in party_members:
|
|
||||||
partytext += f"=={m.name}==\nHP: {m.hp}\n"
|
|
||||||
|
|
||||||
for e in enemies:
|
|
||||||
enetext += f"=={e.name}==\nHP: {e.hp}\n"
|
|
||||||
|
|
||||||
if len(menu_queue) != 0 and menu_open == 0:
|
if len(menu_queue) != 0 and menu_open == 0:
|
||||||
whose = menu_queue.pop(0)
|
whose = menu_queue.pop(0)
|
||||||
menu_open = whose
|
menu_open = whose
|
||||||
@@ -297,18 +298,48 @@ def update(game, dt):
|
|||||||
gamestate.switch_gamestate(game,"gameover")
|
gamestate.switch_gamestate(game,"gameover")
|
||||||
return
|
return
|
||||||
|
|
||||||
party_text.reset(partytext)
|
# !!! CHATGPT !!!
|
||||||
ene_text.reset(enetext)
|
def make_gray(tex, key):
|
||||||
party_text.type_all()
|
img = tex.image.convert("RGBA")
|
||||||
ene_text.type_all()
|
a = img.getchannel("A")
|
||||||
|
l = img.convert("L")
|
||||||
|
out = Image.merge("RGBA", (l, l, l, a))
|
||||||
|
return arcade.Texture(out)
|
||||||
|
|
||||||
|
def get_texture(sprite_id, gray=False):
|
||||||
|
asset = assets.sprites[sprite_id]
|
||||||
|
tex = getattr(asset, "texture", asset) # works for Sprite or Texture
|
||||||
|
if not gray:
|
||||||
|
return tex
|
||||||
|
if sprite_id not in gray_cache:
|
||||||
|
gray_cache[sprite_id] = make_gray(tex, sprite_id)
|
||||||
|
return gray_cache[sprite_id]
|
||||||
|
|
||||||
|
def pick_sprite_id(c, ids):
|
||||||
|
if c.ko:
|
||||||
|
return ids[2]
|
||||||
|
if c.hp <= c.maxhp * 0.1:
|
||||||
|
return ids[1]
|
||||||
|
return ids[0]
|
||||||
|
|
||||||
|
def draw_tex(tex, cx, cy):
|
||||||
|
arcade.draw_texture_rect(tex, arcade.LRBT(
|
||||||
|
cx - tex.width / 2, cx + tex.width / 2,
|
||||||
|
cy - tex.height / 2, cy + tex.height / 2))
|
||||||
|
|
||||||
|
def draw_battlers(combatants, sprite_table, pos_func):
|
||||||
|
for i, c in enumerate(combatants):
|
||||||
|
sid = pick_sprite_id(c, sprite_table[i])
|
||||||
|
tex = get_texture(sid, gray=bool(c.stone and not c.ko))
|
||||||
|
draw_tex(tex, *pos_func(i))
|
||||||
|
|
||||||
def draw(game):
|
def draw(game):
|
||||||
|
draw_battlers(enemies, enemy_sprites, enemy_pos)
|
||||||
|
draw_battlers(party_members, party_sprites, party_pos)
|
||||||
panel.render()
|
panel.render()
|
||||||
for m in menu:
|
for m in menu:
|
||||||
m.render()
|
m.render()
|
||||||
|
|
||||||
party_text.render()
|
|
||||||
ene_text.render()
|
|
||||||
menu_text.render()
|
menu_text.render()
|
||||||
action_text.render()
|
action_text.render()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user