#pragma once #include #include "coordinates.hpp" #include "start_size.hpp" #include "render_map.hpp" // for cell_offset #include "vdp2.h" #include "pokemon_instance.hpp" struct interactive { static constexpr uint8_t l_arrow = 0x75; // → static constexpr uint8_t l_arrow_solid = 0x76; // → static constexpr uint8_t d_arrow = 0x77; // }; struct dialog_border { static constexpr uint8_t corner_top_left = 105; static constexpr uint8_t corner_top_right = 106; static constexpr uint8_t corner_bottom_left = 107; static constexpr uint8_t corner_bottom_right = 108; static constexpr uint8_t vertical_end_cap = 109; static constexpr uint8_t vertical = 110; static constexpr uint8_t horizontal = 111; }; struct battle_border { static constexpr uint8_t horizontal = 96; static constexpr uint8_t corner_bottom_right = 97; static constexpr uint8_t arrow_right = 98; static constexpr uint8_t vertical = 99; static constexpr uint8_t corner_bottom_left = 100; static constexpr uint8_t three_dots = 101; static constexpr uint8_t vertical_end_cap = 102; static constexpr uint8_t level = 103; static constexpr uint8_t arrow_left = 104; }; struct hp_bar { static constexpr uint8_t hp = 0x50; static constexpr uint8_t start_cap = 0x51; static constexpr uint8_t seg0 = 0x52; static constexpr uint8_t seg1 = 0x53; static constexpr uint8_t seg2 = 0x54; static constexpr uint8_t seg3 = 0x55; static constexpr uint8_t seg4 = 0x56; static constexpr uint8_t seg5 = 0x57; static constexpr uint8_t seg6 = 0x58; static constexpr uint8_t seg7 = 0x59; static constexpr uint8_t seg8 = 0x5a; static constexpr uint8_t end_cap_nobar = 0x5b; static constexpr uint8_t end_cap_bar = 0x66; }; struct stats { static constexpr uint8_t id = 0x70; // ID static constexpr uint8_t no = 0x71; // No static constexpr uint8_t to = 0x4c; // to static constexpr uint8_t p = 0x4d; // p (bold) static constexpr uint8_t no_dot = 0x4e; // . }; static inline void put_char(const uint32_t base_pattern, const int32_t x, const int32_t y, // in cells const uint8_t c) { const int32_t ix = (0x2000 / 2) + ((cell_offset::y + y) * 64 + (cell_offset::x + x)); vdp2.vram.u16[ix] = ((base_pattern + c) & 0xfff) | PATTERN_NAME_TABLE_1WORD__PALETTE(1); } void draw_text(const uint32_t base_pattern, const uint8_t * text, const int32_t x, const int32_t y); void draw_box_border(const uint32_t base_pattern, const screen_cell_t& top_left, const screen_cell_t& bottom_right); void draw_box_background(const uint32_t base_pattern, const screen_cell_t& top_left, const screen_cell_t& bottom_right); void draw_battle_border(const uint32_t base_pattern, const screen_cell_t& top_corner, const screen_cell_t& bottom_corner); void draw_hp_bar_with_numbers(const uint32_t base_pattern, const pokemon_instance_t& pokemon_instance, const screen_cell_t& pos);