From bcf02928b4e0a57845ecdc4e0196ff09cba80378 Mon Sep 17 00:00:00 2001 From: RageCage64 Date: Thu, 27 Jan 2022 19:37:17 -0500 Subject: [PATCH] battling kinda works, or at least pretends to --- src/assets.p8 | 3 +- src/game.lua | 125 ++++++++++++++++++++++++++++++++++++++++++++---- src/main.lua | 11 ++++- src/menu.lua | 27 +++++------ src/move.lua | 40 ++++++++++++++++ src/pokemon.lua | 61 +++++++++++++++++++++-- 6 files changed, 233 insertions(+), 34 deletions(-) create mode 100644 src/move.lua diff --git a/src/assets.p8 b/src/assets.p8 index ba2f486..d3697e1 100644 --- a/src/assets.p8 +++ b/src/assets.p8 @@ -97,13 +97,12 @@ __gfx__ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077000 __sfx__ 000300001c3501d3501c15020150261502e1502e3501d15027150381500000000000000001d3501c350193501735014350113500c350093500535000350123000f3000e3000b3000830004300003000000000000 diff --git a/src/game.lua b/src/game.lua index 2d72440..5168a7d 100644 --- a/src/game.lua +++ b/src/game.lua @@ -2,6 +2,8 @@ require("pokemon.lua") require("textbox.lua") require("menu.lua") +-- Game Constructor + function new_game(start_state) return { player = nil, @@ -10,9 +12,20 @@ function new_game(start_state) menu = nil, state = start_state, lockout = 0, + + player_move = nil, + enemy_move = nil, } end +-- Game methods + +function set_txb(g, s) + g.main_txb.current_text = s +end + +-- State Constructor + function new_state(name, init, draw, update, next, timer) return { name = name, @@ -50,22 +63,19 @@ function pick_state(enemy, name, next) menu = pokemon_menu() g.menu = menu if enemy then - g.main_txb.current_text = "choose your enemy's pokemon" + set_txb(g, "choose your enemy's pokemon") else - g.main_txb.current_text = "choose your pokemon" + set_txb(g, "choose your pokemon") end end update = function(g) - if g.lockout > 0 then - g.lockout = g.lockout - 1 - return false - end - if btn(2) then m_up(g.menu) + g.lockout = 4 elseif btn(3) then m_down(g.menu) + g.lockout = 4 end if btn(4) then @@ -94,7 +104,7 @@ end function appear_enemy() init = function(g) appear(g.enemy) - g.main_txb.current_text = "enemy " .. g.enemy.name .. " appeared!" + set_txb(g, "enemy " .. g.enemy.name .. " appeared!") end update = function(g) @@ -111,7 +121,100 @@ end function appear_player() init = function(g) appear(g.player) - g.main_txb.current_text = "go " .. g.player.name .. "!" + set_txb(g, "go " .. g.player.name .. "!") + end + + update = function(g) + end + + draw = function(g) + draw_p(g.enemy) + draw_p(g.player) + draw_txb(g.main_txb) + end + + return new_state("appear_player", init, draw, update, "player_choose_move", 80) +end + +function player_choose_move() + init = function(g) + set_txb(g, "") + g.menu = move_menu(g.player) + end + + update = function(g) + if btn(2) then + m_up(g.menu) + g.lockout = 4 + elseif btn(3) then + m_down(g.menu) + g.lockout = 4 + end + + if btn(4) then + m_name = m_select(g.menu) + g.player_move = g.player.moves[m_name] + g.menu = nil + return true + end + + return false + end + + draw = function(g) + draw_p(g.enemy) + draw_health(g.enemy) + draw_p(g.player) + draw_health(g.player) + draw_m(g.menu) + end + + return new_state("player_choose_move", init, draw, update, "enemy_choose_move") +end + +function enemy_choose_move() + init = function(g) + end + + update = function(g) + g.enemy_move = choose_random_move(p) + return true + end + + draw = function(g) + draw_p(g.enemy) + draw_health(g.enemy) + draw_p(g.player) + draw_health(g.player) + end + + return new_state("enemy_choose_move", init, draw, update, "player_turn") +end + +function player_turn() + init = function(g) + set_txb(g, g.player.name .. " used " .. g.player_move.name) + g.enemy.health = g.enemy.health - g.player_move.damage + end + + update = function(g) + end + + draw = function(g) + draw_p(g.enemy) + draw_health(g.enemy) + draw_p(g.player) + draw_health(g.player) + draw_txb(g.main_txb) + end + + return new_state("player_turn", init, draw, update, "enemy_turn", 80) +end + +function enemy_turn() + init = function(g) + set_txb(g, g.enemy.name .. " used " .. g.enemy_move.name) + g.player.health = g.player.health - g.enemy_move.damage end update = function(g) @@ -119,9 +222,11 @@ function appear_player() draw = function(g) draw_p(g.enemy) + draw_health(g.enemy) draw_p(g.player) + draw_health(g.player) draw_txb(g.main_txb) end - return new_state("appear_player", init, draw, update, "appear_player", 80) + return new_state("enemy_turn", init, draw, update, "player_choose_move", 80) end diff --git a/src/main.lua b/src/main.lua index 672eb54..91af7dd 100644 --- a/src/main.lua +++ b/src/main.lua @@ -7,6 +7,10 @@ function _init() states["pick_enemy"] = pick_state(true, "pick_enemy", "appear_enemy") states["appear_enemy"] = appear_enemy() states["appear_player"] = appear_player() + states["player_choose_move"] = player_choose_move() + states["enemy_choose_move"] = enemy_choose_move() + states["player_turn"] = player_turn() + states["enemy_turn"] = enemy_turn() gm = new_game("start_menu") states[gm.state].init(gm) @@ -18,7 +22,12 @@ function _draw() end function _update() - next_state = states[gm.state].update(gm) + if gm.lockout > 0 then + gm.lockout = gm.lockout - 1 + return false + else + next_state = states[gm.state].update(gm) + end t = states[gm.state].timer if t then diff --git a/src/menu.lua b/src/menu.lua index edb01b9..8a66d7d 100644 --- a/src/menu.lua +++ b/src/menu.lua @@ -4,12 +4,10 @@ cursor_spr = 207 -- Constructor -function new_menu(x, y, w, h, options) +function new_menu(x, y, options) return { x = x, y = y, - w = w, - h = h, options = options, cursor = 1, @@ -18,33 +16,30 @@ end -- Menu methods -function pokemon_menu() - return new_menu(60, 8, 88, 68, { - "axoleafel", - }) -end - function draw_m(m) - rect(m.x, m.y, m.w, m.h) for i,o in ipairs(m.options) do r = i-1 - o_x = m.x+14 + o_x = m.x+12 o_y = m.y+4+(8*r) print(o, o_x, o_y) end - spr(cursor_spr, m.x+14, m.y+4+(8*m.cursor)) + spr(cursor_spr, m.x+2, m.y+2+(8*(m.cursor-1))) end -function m_down(m) +function m_up(m) if m.cursor == 1 then - m.cursor = table.getn(m.options) + m.cursor = count(m.options) + else + m.cursor = m.cursor - 1 end end -function m_up(m) - if m.cursor == table.getn(m.options) then +function m_down(m) + if m.cursor == count(m.options) then m.cursor = 1 + else + m.cursor = m.cursor + 1 end end diff --git a/src/move.lua b/src/move.lua new file mode 100644 index 0000000..3ef0d6c --- /dev/null +++ b/src/move.lua @@ -0,0 +1,40 @@ +-- Constructor + +function new_move(name, damage) + return { + name = name, + damage = damage, + } +end + +-- Move methods + +-- Move Builders + +function tackle() + return new_move( + "tackle", + 10 + ) +end + +function grass_knot() + return new_move( + "grass knot", + 10 + ) +end + +function wrap() + return new_move( + "wrap", + 10 + ) +end + +function leaf_blade() + return new_move( + "leaf blade", + 10 + ) +end diff --git a/src/pokemon.lua b/src/pokemon.lua index 6cc3a56..dfa0d26 100644 --- a/src/pokemon.lua +++ b/src/pokemon.lua @@ -1,6 +1,9 @@ +require("menu.lua") +require("move.lua") + -- Constructor -function new_pokemon(name, enemy, front_sprite, back_sprite, cry) +function new_pokemon(name, enemy, front_sprite, back_sprite, cry, health, moves) p_x = 12 p_y = 56 if enemy then @@ -8,12 +11,21 @@ function new_pokemon(name, enemy, front_sprite, back_sprite, cry) p_y = 8 end + move_table = {} + for i,m in ipairs(moves) do + move_table[m.name] = m + end + return { name = name, enemy = enemy, front_sprite = front_sprite, back_sprite = back_sprite, cry = cry, + health = health, + max_health = health, + + moves = move_table, x = p_x, y = p_y, @@ -22,7 +34,7 @@ function new_pokemon(name, enemy, front_sprite, back_sprite, cry) } end --- Pokemon methods +-- Methods function appear(p) if p.appeared then @@ -64,7 +76,40 @@ function draw_p_spr(start, x, y) end end ---Pokemon +function move_menu(p) + move_names = {} + for n in pairs(p.moves) do + add(move_names, n) + end + return new_menu(76, 84, move_names) +end + +function choose_random_move(p) + move_names = {} + for n in pairs(p.moves) do + add(move_names, n) + end + choice = flr(rnd(4)) + 1 + choice_move = move_names[choice] + return p.moves[choice_move] +end + +function draw_health(p) + h = tostr(p.health) .. "/" .. tostr(p.max_health) + if p.enemy then + print(h, 56, 16) + else + print(h, 46, 66) + end +end + +-- Pokemon builders + +function pokemon_menu() + return new_menu(30, 8, { + "axoleafel", + }) +end function choose(name, enemy) if name == "axoleafel" then @@ -78,7 +123,13 @@ function axoleafel(enemy) enemy, 4, 8, - 0 - -- {} + 0, + 50, + { + tackle(), + wrap(), + grass_knot(), + leaf_blade(), + } ) end