From a633b9d643bdba800f5ed546a839f8120351c275 Mon Sep 17 00:00:00 2001 From: jeffman Date: Sun, 16 Apr 2017 19:15:22 -0400 Subject: [PATCH] Added code to draw equip window header --- compiled/vwf.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ compiled/vwf.h | 9 +++++++++ m2-hack.asm | 14 ++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/compiled/vwf.c b/compiled/vwf.c index 6d9accf..a9b3d66 100644 --- a/compiled/vwf.c +++ b/compiled/vwf.c @@ -186,6 +186,55 @@ void clear_window_header(int *dest) clear_rect_ram(dest, 16, 0x33333333); } +unsigned short* print_equip_header(int type, unsigned short *tilemap, unsigned int *dest, WINDOW *window) +{ + byte *str = 0; + + switch (type) + { + case 3: + str = m12_other_str5; // Weapon + break; + case 4: + str = m12_other_str6; // Body + break; + case 5: + str = m12_other_str7; // Arms + break; + case 6: + str = m12_other_str8; // Other + break; + } + + if (str != 0) + { + int startX = 0x10 * 8; + int startY = 0x11 * 8; + int width = 0; + + width += print_window_header_string(dest, str, startX + width, startY); + + // Print (X) + if (window->cursor_x > 6) + { + int page = window->page; + str = m2_strlookup(m2_misc_offsets, m2_misc_strings, page + 0x8C); + width += print_window_header_string(dest, str, startX + width, startY); + } + + // Do tilemap + int tiles = (width + 7) >> 3; + int tileIndex = 0x230 + *tile_offset; + + for (int i = 0; i < tiles; i++) + { + *tilemap++ = tileIndex++ | *palette_mask; + } + } + + return tilemap; +} + void weld_entry(WINDOW *window, byte *str) { weld_entry_custom(window, str, 0, 0xF); diff --git a/compiled/vwf.h b/compiled/vwf.h index ad82876..ce779ee 100644 --- a/compiled/vwf.h +++ b/compiled/vwf.h @@ -9,6 +9,9 @@ unsigned short *palette_mask = (unsigned short*)0x3005228; unsigned short **tilemap_pointer = (unsigned short**)0x3005270; int *vram = (int*)0x6000000; +int *m2_misc_offsets = (int*)0x8B17EE4; +byte *m2_misc_strings = (byte*)0x8B17424; + byte decode_character(byte chr); int get_tile_number(int x, int y); int expand_bit_depth(byte row, int foreground); @@ -20,6 +23,8 @@ byte print_character_with_callback(byte chr, int x, int y, int font, int foregro byte print_character_to_ram(byte chr, int *dest, int xOffset, int font, int foreground); int print_window_header_string(int *dest, byte *str, int x, int y); void clear_window_header(int *dest); +unsigned short* print_equip_header(int type, unsigned short *tilemap, unsigned int *dest, + WINDOW *window); void weld_entry(WINDOW *window, byte *str); void weld_entry_custom(WINDOW *window, byte *str, int font, int foreground); void clear_tile(int x, int y, int pixels); @@ -38,6 +43,10 @@ extern byte *m2_font_table[]; extern byte m2_font_widths[]; extern byte m2_font_heights[]; extern unsigned short *m2_widths_table[]; +extern byte m12_other_str5[]; +extern byte m12_other_str6[]; +extern byte m12_other_str7[]; +extern byte m12_other_str8[]; extern void cpufastset(void *source, void *dest, int mode); extern byte* m2_strlookup(int *offset_table, byte *strings, int index); diff --git a/m2-hack.asm b/m2-hack.asm index 626cb7e..48397a1 100644 --- a/m2-hack.asm +++ b/m2-hack.asm @@ -163,6 +163,20 @@ b 0x80BFB84 // Skip the remaining nonsense .org 0x80C5A1A :: nop .org 0x80C5A28 :: nop +// Draw equipment window header +.org 0x80C55CE :: b 0x80C55F8 +.org 0x80C55F8 +mov r4,r0 +mov r0,r9 +bl clear_window_header +mov r0,r4 +mov r1,r6 // tilemap +mov r2,r9 // vram +mov r3,r7 // window +bl print_equip_header +mov r6,r0 +b 0x80C5726 + //--------------------------------------------------------- // C1FBC hacks (PSI window) //---------------------------------------------------------