diff --git a/compiled/vwf.c b/compiled/vwf.c index 198c489..cf01fa8 100644 --- a/compiled/vwf.c +++ b/compiled/vwf.c @@ -118,3 +118,22 @@ void weld_entry_custom(WINDOW *window, byte *str, int font, int foreground) window->pixel_x = x & 7; window->text_x = (x >> 3) - window->window_x; } + +// Returns: ____XXXX = number of characters printed +// XXXX____ = number of pixels printed +int print_string(byte *str, int x, int y) +{ + byte chr; + int initial_x = x; + int charCount = 0; + + while ((chr = str[1]) != 0xFF) + { + chr = *str++; + x += print_character(chr - 0x50, x, y, 0, 0xF); + charCount++; + } + + int totalWidth = x - initial_x; + return (charCount & 0xFFFF) | (totalWidth << 16); +} diff --git a/m2-hack.asm b/m2-hack.asm index dc43aa9..d166fd3 100644 --- a/m2-hack.asm +++ b/m2-hack.asm @@ -362,7 +362,8 @@ add r2,r2,r3 lsl r2,r2,3 // r2 = tile_y * 8 mov r0,r6 bl print_string -mov r7,r0 +lsl r0,r0,16 +lsr r7,r0,16 b 0x80C9788 //--------------------------------------------------------- diff --git a/m2-vwf.asm b/m2-vwf.asm index 92c5359..814a781 100644 --- a/m2-vwf.asm +++ b/m2-vwf.asm @@ -1,47 +1,3 @@ -//============================================================================= -// void print_string(char* str, int x, int y) -// In: -// r0: address of string to print -// r1: x (pixel) -// r2: y (pixel) -// Out: -// r0: number of characters printed -// r1: number of pixels printed -//============================================================================= - -print_string: -push {r2-r6,lr} - -mov r5,0 -mov r6,r1 -mov r4,r0 -@@prev: -ldrb r0,[r4,1] -cmp r0,0xFF -beq @@end -ldrb r0,[r4,0] -sub r0,0x50 - -push {r1-r3} -add sp,-4 -mov r3,0xF -str r3,[sp] -mov r3,0 -bl print_character -add sp,4 -pop {r1-r3} - -add r1,r0,r1 -add r4,1 -add r5,1 -b @@prev - -@@end: -mov r0,r5 -sub r1,r1,r6 -pop {r2-r6,pc} - - //============================================================================= // void print_string_hlight_pixels(WINDOW* window, char* str, int x, // int y, bool highlight) @@ -85,7 +41,9 @@ lsl r2,r2,3 add r2,r2,r3 mov r0,r6 bl print_string -mov r7,r0 +lsr r1,r0,16 +lsl r0,r0,16 +lsr r7,r0,16 ldrh r0,[r5,0] lsl r0,r0,0x10 asr r0,r0,0x1C