Fix highlighting for Use menu
This commit is contained in:
parent
79bf5ff3eb
commit
c59838b37d
|
@ -36,14 +36,18 @@ org $80CA448; push {lr}; bl m2_vwf.main; b $80CA46C
|
||||||
org $80C9116; push {lr}; bl m2_vwf.status; b $80C9144
|
org $80C9116; push {lr}; bl m2_vwf.status; b $80C9144
|
||||||
|
|
||||||
// Goods entry
|
// Goods entry
|
||||||
org $80BFB3E; bl m2_vwf.goods; b $80BFB78
|
org $80BFB3E; bl m2_vwf.goods; b $80BFB78 // unfocused
|
||||||
|
org $80BF0E2; bl m2_vwf.goods2; b $80BF11A // focused
|
||||||
org $80BFB98; b $80BFBCC // skip drawing equip symbol
|
org $80BFB98; b $80BFBCC // skip drawing equip symbol
|
||||||
|
org $80BF134; b $80BF15E
|
||||||
|
org $80B999C; bl m2_vwf.goods_highlight
|
||||||
|
|
||||||
// Goods -- dirty flags
|
// Goods -- dirty flags
|
||||||
org $80BF91E; bl m2_vwf.goods_dirty1
|
org $80BF91E; bl m2_vwf.goods_dirty1
|
||||||
org $80BF8FA; bl m2_vwf.goods_dirty2
|
org $80BF8FA; bl m2_vwf.goods_dirty2
|
||||||
org $80B8540; bl m2_vwf.goods_dirty3
|
org $80B8540; bl m2_vwf.goods_dirty3
|
||||||
org $80BFC0E; bl m2_vwf.goods_clean
|
org $80BFC0E; bl m2_vwf.goods_clean
|
||||||
|
org $80BF054; bl m2_vwf.goods_dirty4
|
||||||
|
|
||||||
// Menu select entry
|
// Menu select entry
|
||||||
org $80B7FC6; bl m2_vwf.print_string_relative
|
org $80B7FC6; bl m2_vwf.print_string_relative
|
||||||
|
@ -78,6 +82,8 @@ org $80CA270; bl m2_vwf.x_reset1
|
||||||
org $80CA30A; bl m2_vwf.x_reset2
|
org $80CA30A; bl m2_vwf.x_reset2
|
||||||
org $80CA332; bl m2_vwf.x_reset1
|
org $80CA332; bl m2_vwf.x_reset1
|
||||||
org $80C8F26; bl m2_vwf.x_reset4 // Newline after a menu selection
|
org $80C8F26; bl m2_vwf.x_reset4 // Newline after a menu selection
|
||||||
|
org $80C888C; bl m2_vwf.x_resetall // Use goods menu
|
||||||
|
org $80C9D2C; bl m2_vwf.x_reset5 // After finishing Use menu
|
||||||
// Possible other places: 80BE370, 80BE436,
|
// Possible other places: 80BE370, 80BE436,
|
||||||
|
|
||||||
// Erase a tile
|
// Erase a tile
|
||||||
|
|
347
m2-vwf.asm
347
m2-vwf.asm
|
@ -985,13 +985,6 @@ push {r1-r3,lr}
|
||||||
mov r0,r1
|
mov r0,r1
|
||||||
bl .get_window_number
|
bl .get_window_number
|
||||||
|
|
||||||
//--------------------------------
|
|
||||||
// Reset the pixel X
|
|
||||||
ldr r3,=#m2_custom_wram
|
|
||||||
add r2,r0,r3
|
|
||||||
mov r3,#0
|
|
||||||
strb r3,[r2,#4]
|
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
// Clear the window
|
// Clear the window
|
||||||
mov r0,r1
|
mov r0,r1
|
||||||
|
@ -1081,13 +1074,6 @@ push {r1-r2,lr}
|
||||||
mov r0,r3
|
mov r0,r3
|
||||||
bl .get_window_number
|
bl .get_window_number
|
||||||
|
|
||||||
//--------------------------------
|
|
||||||
// Reset the pixel X
|
|
||||||
ldr r1,=#m2_custom_wram
|
|
||||||
add r2,r0,r1
|
|
||||||
mov r1,#0
|
|
||||||
strb r1,[r2,#4]
|
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
// Clear the window
|
// Clear the window
|
||||||
mov r0,r3
|
mov r0,r3
|
||||||
|
@ -1133,6 +1119,59 @@ ldr r4,=#0x3005228
|
||||||
pop {r1-r3,pc}
|
pop {r1-r3,pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void x_reset5()
|
||||||
|
// In:
|
||||||
|
// r5: window address
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.x_reset5:
|
||||||
|
push {r1-r3,lr}
|
||||||
|
mov r3,r0
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Get the window number
|
||||||
|
mov r0,r5
|
||||||
|
bl .get_window_number
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Reset the pixel X
|
||||||
|
ldr r1,=#m2_custom_wram
|
||||||
|
add r2,r0,r1
|
||||||
|
mov r1,#0
|
||||||
|
strb r1,[r2,#4]
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Clobbered code
|
||||||
|
pop {r1-r3}
|
||||||
|
ldrb r0,[r3,#0]
|
||||||
|
sub r0,#6
|
||||||
|
pop {pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void x_resetall()
|
||||||
|
// In:
|
||||||
|
// r6: window address
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.x_resetall:
|
||||||
|
push {lr}
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Reset the pixel X
|
||||||
|
ldr r5,=#m2_custom_wram
|
||||||
|
mov r0,#0
|
||||||
|
str r0,[r5,#4]
|
||||||
|
str r0,[r5,#8]
|
||||||
|
str r0,[r5,#12]
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Clobbered code
|
||||||
|
strh r0,[r6,#0x32]
|
||||||
|
pop {pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// void clear_window(*WINDOW window)
|
// void clear_window(*WINDOW window)
|
||||||
// In:
|
// In:
|
||||||
|
@ -1143,12 +1182,24 @@ pop {r1-r3,pc}
|
||||||
print "m2vwf.clear_window: $",pc
|
print "m2vwf.clear_window: $",pc
|
||||||
|
|
||||||
push {r0-r7,lr}
|
push {r0-r7,lr}
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Reset the X coordinate
|
||||||
|
mov r2,r0
|
||||||
|
bl .get_window_number
|
||||||
|
ldr r1,=#m2_custom_wram
|
||||||
|
add r1,r0,r1
|
||||||
|
mov r0,#0
|
||||||
|
strb r0,[r1,#4]
|
||||||
|
mov r0,r2
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Erase each tile
|
||||||
mov r1,r8
|
mov r1,r8
|
||||||
push {r1}
|
push {r1}
|
||||||
ldr r1,=#0x44444444
|
ldr r1,=#0x44444444
|
||||||
mov r8,r1
|
mov r8,r1
|
||||||
|
|
||||||
//--------------------------------
|
|
||||||
mov r7,#0x22
|
mov r7,#0x22
|
||||||
ldrb r6,[r0,r7] // Window X
|
ldrb r6,[r0,r7] // Window X
|
||||||
mov r7,#0x24
|
mov r7,#0x24
|
||||||
|
@ -1161,6 +1212,7 @@ ldrb r4,[r0,r7] // Window height
|
||||||
add r4,r4,r2 // Window bottom
|
add r4,r4,r2 // Window bottom
|
||||||
ldr r7,=#0x30051EC
|
ldr r7,=#0x30051EC
|
||||||
ldrh r7,[r7,#0] // Tile offset
|
ldrh r7,[r7,#0] // Tile offset
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
.clear_loop:
|
.clear_loop:
|
||||||
mov r5,r6
|
mov r5,r6
|
||||||
|
@ -1412,10 +1464,9 @@ pop {r2}
|
||||||
+
|
+
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
// Check if the dirty flag is set
|
// Check if the dirty flag is set
|
||||||
ldr r0,=#m2_custom_wram
|
mov r0,r7
|
||||||
add r0,#0x14
|
bl .get_dirty_flag
|
||||||
ldrb r1,[r0,#0]
|
cmp r0,#1
|
||||||
cmp r1,#1
|
|
||||||
bne +
|
bne +
|
||||||
|
|
||||||
// Just get the string width instead (don't need to render)
|
// Just get the string width instead (don't need to render)
|
||||||
|
@ -1482,19 +1533,210 @@ b -
|
||||||
pop {pc}
|
pop {pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void goods2(char* chr, TILEDATA* tileData)
|
||||||
|
// In:
|
||||||
|
// r3: chr
|
||||||
|
// r6: tileData
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.goods2:
|
||||||
|
print "m2vwf.goods2: $",pc
|
||||||
|
|
||||||
|
push {lr}
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Check if the item is equipped
|
||||||
|
push {r1-r3}
|
||||||
|
mov r0,r8
|
||||||
|
add r0,r0,#1
|
||||||
|
bl $80BC670
|
||||||
|
pop {r1-r3}
|
||||||
|
cmp r0,#0
|
||||||
|
beq +
|
||||||
|
|
||||||
|
// Write the equip symbol
|
||||||
|
push {r2}
|
||||||
|
ldr r0,=#0x30051EC
|
||||||
|
ldrh r0,[r0,#0] // tile offset (0x100)
|
||||||
|
ldr r1,=#0x8B1B6AC // equip tile number (0x1DE)
|
||||||
|
ldrh r1,[r1,#0]
|
||||||
|
add r0,r0,r1
|
||||||
|
mov r1,r9
|
||||||
|
ldrh r2,[r1,#0] // mask (0xE000)
|
||||||
|
mov r1,r2
|
||||||
|
orr r1,r0
|
||||||
|
strh r1,[r6,#0]
|
||||||
|
mov r1,r6
|
||||||
|
add r1,#0x40
|
||||||
|
add r0,#0x20
|
||||||
|
orr r0,r2
|
||||||
|
strh r0,[r1,#0]
|
||||||
|
|
||||||
|
add r6,r6,#2
|
||||||
|
pop {r2}
|
||||||
|
|
||||||
|
+
|
||||||
|
//--------------------------------
|
||||||
|
// Check if the dirty flag is set
|
||||||
|
mov r0,r7
|
||||||
|
bl .get_dirty_flag
|
||||||
|
cmp r0,#1
|
||||||
|
bne +
|
||||||
|
|
||||||
|
// Just get the string width instead (don't need to render)
|
||||||
|
mov r0,r3
|
||||||
|
mov r1,#0
|
||||||
|
bl .string_width
|
||||||
|
add r3,r3,r1
|
||||||
|
b .goods2_skip
|
||||||
|
|
||||||
|
+
|
||||||
|
//--------------------------------
|
||||||
|
// Get x and y from tilebase
|
||||||
|
mov r0,r6
|
||||||
|
bl .get_coords
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
// Print string
|
||||||
|
push {r6,r7}
|
||||||
|
mov r6,#0
|
||||||
|
mov r5,r3
|
||||||
|
mov r3,#0
|
||||||
|
|
||||||
|
-
|
||||||
|
ldrb r2,[r5,#1]
|
||||||
|
cmp r2,#0xFF
|
||||||
|
beq +
|
||||||
|
|
||||||
|
ldrb r2,[r5,#0]
|
||||||
|
sub r2,#0x50
|
||||||
|
mov r7,r0
|
||||||
|
bl .print_character
|
||||||
|
add r6,r0,r6
|
||||||
|
add r0,r0,r7
|
||||||
|
add r5,r5,#1
|
||||||
|
b -
|
||||||
|
|
||||||
|
+
|
||||||
|
mov r3,r5
|
||||||
|
mov r0,r6
|
||||||
|
pop {r6,r7}
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
.goods2_skip:
|
||||||
|
|
||||||
|
// Advance r4 and r6
|
||||||
|
sub r1,r0,#1
|
||||||
|
asr r0,r0,#3
|
||||||
|
add r1,r0,#1
|
||||||
|
|
||||||
|
//ldr r2,=#0xFFFF0000
|
||||||
|
|
||||||
|
-
|
||||||
|
cmp r1,#0
|
||||||
|
beq +
|
||||||
|
|
||||||
|
//lsl r0,r4,#0x10
|
||||||
|
//add r0,r0,r2
|
||||||
|
//lsr r4,r0,#0x10
|
||||||
|
add r6,r6,#2
|
||||||
|
sub r1,r1,#1
|
||||||
|
b -
|
||||||
|
|
||||||
|
+
|
||||||
|
pop {pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void goods_highlight(WINDOW* window, char* chr, int itemIndex)
|
||||||
|
// In:
|
||||||
|
// r0: window
|
||||||
|
// r1: chr
|
||||||
|
// r9: itemIndex (based at 0)
|
||||||
|
// Out:
|
||||||
|
// r2: new tile X
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.goods_highlight:
|
||||||
|
print "m2vwf.goods_highlight: $",pc
|
||||||
|
|
||||||
|
// Clobbered code
|
||||||
|
str r1,[sp,#0]
|
||||||
|
|
||||||
|
//--------------------------------
|
||||||
|
push {r0,r4,lr}
|
||||||
|
mov r4,r0
|
||||||
|
mov r0,r9
|
||||||
|
add r0,#1
|
||||||
|
push {r1-r3}
|
||||||
|
bl $80BC670
|
||||||
|
pop {r1-r3}
|
||||||
|
cmp r0,#0
|
||||||
|
beq +
|
||||||
|
|
||||||
|
// Advance the X coord by 1 tile
|
||||||
|
add r2,#1
|
||||||
|
|
||||||
|
+
|
||||||
|
mov r0,r4
|
||||||
|
//--------------------------------
|
||||||
|
// Clobbered code
|
||||||
|
mov r1,r6
|
||||||
|
pop {r0,r4,pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void get_dirty_flag(WINDOW* window)
|
||||||
|
// In:
|
||||||
|
// r0: window
|
||||||
|
// Out:
|
||||||
|
// r0: flag
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.get_dirty_flag:
|
||||||
|
|
||||||
|
push {r1,lr}
|
||||||
|
|
||||||
|
ldr r1,=#m2_custom_wram
|
||||||
|
add r1,#0x14
|
||||||
|
bl .get_window_number
|
||||||
|
ldrb r0,[r1,r0]
|
||||||
|
|
||||||
|
pop {r1,pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void set_dirty_flag(WINDOW* window, byte value)
|
||||||
|
// In:
|
||||||
|
// r0: window
|
||||||
|
// r1: value
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.set_dirty_flag:
|
||||||
|
|
||||||
|
push {r0-r2,lr}
|
||||||
|
|
||||||
|
ldr r2,=#m2_custom_wram
|
||||||
|
add r2,#0x14
|
||||||
|
bl .get_window_number
|
||||||
|
strb r1,[r2,r0]
|
||||||
|
|
||||||
|
pop {r0-r2,pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// void goods_clean()
|
// void goods_clean()
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
.goods_clean:
|
.goods_clean:
|
||||||
print "m2vwf.goods_clean: $",pc}
|
print "m2vwf.goods_clean: $",pc
|
||||||
|
|
||||||
push {lr}
|
push {lr}
|
||||||
|
|
||||||
ldr r0,=#m2_custom_wram
|
mov r0,r7
|
||||||
add r0,#0x14
|
|
||||||
mov r1,#1
|
mov r1,#1
|
||||||
strb r1,[r0,#0]
|
bl .set_dirty_flag
|
||||||
|
|
||||||
ldr r0,=#0x3002504 // Clobbered code
|
ldr r0,=#0x3002504 // Clobbered code
|
||||||
ldrh r1,[r0,#0]
|
ldrh r1,[r0,#0]
|
||||||
|
@ -1509,13 +1751,12 @@ pop {pc}
|
||||||
.goods_dirty1:
|
.goods_dirty1:
|
||||||
print "m2vwf.goods_dirty1: $",pc
|
print "m2vwf.goods_dirty1: $",pc
|
||||||
|
|
||||||
push {lr}
|
push {r1,lr}
|
||||||
|
|
||||||
// Set the dirty flag
|
// Set the dirty flag
|
||||||
ldr r5,=#m2_custom_wram
|
mov r0,r7
|
||||||
add r5,#0x14
|
mov r1,#0
|
||||||
mov r0,#0
|
bl .set_dirty_flag
|
||||||
strb r0,[r5,#0]
|
|
||||||
|
|
||||||
// Clear the window
|
// Clear the window
|
||||||
mov r0,r7
|
mov r0,r7
|
||||||
|
@ -1525,7 +1766,7 @@ bl .clear_window
|
||||||
ldrh r0,[r4,#0]
|
ldrh r0,[r4,#0]
|
||||||
sub r0,#0x1
|
sub r0,#0x1
|
||||||
|
|
||||||
pop {pc}
|
pop {r1,pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
@ -1538,10 +1779,9 @@ print "m2vwf.goods_dirty2: $",pc
|
||||||
push {lr}
|
push {lr}
|
||||||
|
|
||||||
// Set the dirty flag
|
// Set the dirty flag
|
||||||
ldr r1,=#m2_custom_wram
|
mov r0,r7
|
||||||
add r1,#0x14
|
mov r1,#0
|
||||||
mov r0,#0
|
bl .set_dirty_flag
|
||||||
strb r0,[r1,#0]
|
|
||||||
|
|
||||||
// Clear the window
|
// Clear the window
|
||||||
mov r0,r7
|
mov r0,r7
|
||||||
|
@ -1553,6 +1793,7 @@ add r0,#0x1
|
||||||
|
|
||||||
pop {pc}
|
pop {pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// void goods_dirty3()
|
// void goods_dirty3()
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
@ -1560,19 +1801,46 @@ pop {pc}
|
||||||
.goods_dirty3:
|
.goods_dirty3:
|
||||||
print "m2vwf.goods_dirty3: $",pc
|
print "m2vwf.goods_dirty3: $",pc
|
||||||
|
|
||||||
push {r3,lr}
|
push {r2-r3,lr}
|
||||||
|
mov r2,r0
|
||||||
|
mov r3,r1
|
||||||
|
|
||||||
// Set the dirty flag
|
// Set the dirty flag
|
||||||
ldr r2,=#m2_custom_wram
|
ldr r0,=#0x3005240
|
||||||
add r2,#0x14
|
ldr r0,[r0,#0]
|
||||||
mov r3,#0
|
mov r2,r1
|
||||||
strb r3,[r2,#0]
|
mov r1,#0
|
||||||
|
bl .set_dirty_flag
|
||||||
|
|
||||||
|
mov r0,r2
|
||||||
|
mov r1,r3
|
||||||
|
|
||||||
// Clobbered code
|
// Clobbered code
|
||||||
ldrb r0,[r0,#0]
|
ldrb r0,[r0,#0]
|
||||||
strh r0,[r1,#0]
|
strh r0,[r1,#0]
|
||||||
|
|
||||||
pop {r3,pc}
|
pop {r2-r3,pc}
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
// void goods_dirty4()
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
.goods_dirty4:
|
||||||
|
print "m2vwf.goods_dirty4: $",pc
|
||||||
|
|
||||||
|
push {r1,lr}
|
||||||
|
|
||||||
|
// Set the dirty flag
|
||||||
|
mov r0,r7
|
||||||
|
mov r1,#0
|
||||||
|
bl .set_dirty_flag
|
||||||
|
|
||||||
|
// Clobbered code
|
||||||
|
mov r6,#0
|
||||||
|
mov r8,r6
|
||||||
|
|
||||||
|
pop {r1,pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
@ -1599,6 +1867,7 @@ lsl r1,r2,#3
|
||||||
|
|
||||||
pop {r2-r3,pc}
|
pop {r2-r3,pc}
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
// void menu_select(WINDOW* window, char* chr, TILEDATA* tileData)
|
// void menu_select(WINDOW* window, char* chr, TILEDATA* tileData)
|
||||||
// In:
|
// In:
|
||||||
|
|
Loading…
Reference in New Issue