Mother2GbaTranslation/m2-hack.asm

429 lines
11 KiB
NASM

arch gba.thumb
//==============================================================================
// Relocation hacks
//==============================================================================
// Move the weird box font from 0xFCE6C
org $80B3274; dd m2_font_relocate
//==============================================================================
// Font hacks
//==============================================================================
org $8AFED84; incbin m2-mainfont1-empty.bin
org $8B0F424; incbin m2-mainfont2-empty.bin
org $8B13424; incbin m2-mainfont3-empty.bin
org $8B088A4; incbin m2-shifted-cursor.bin
// Greek letters
org $8B1B907; db $8B // alpha
org $8B1B90A; db $8C // beta
org $8B1B90D; db $8D // gamma
org $8B1B910; db $8E // sigma
org $8B1B913; db $8F // omega
//==============================================================================
// VWF hacks
//==============================================================================
// 32- to 16-bit access change for window flags
org $80BE16A; strh r2,[r4,#0]
org $80BE1FA; strh r2,[r6,#0]
org $80BE222; strh r6,[r1,#0]
// PSI class window size
org $80B7820
mov r1,#4
mov r2,#1
mov r3,#6
//---------------------------------------------------------
// C0A5C hacks (status window)
//---------------------------------------------------------
incsrc m2-status-initial.asm
incsrc m2-status-switch.asm
//---------------------------------------------------------
// BAC18 hacks (status window switching)
//---------------------------------------------------------
org $80BACFC; bl m2_vwf_entries.bac18_redraw_status
org $80BADE6; bl m2_vwf_entries.bac18_redraw_status
org $80BACEE; bl m2_vwf_entries.bac18_clear_psi
org $80BADC8
bl m2_vwf_entries.bac18_check_button
b $80BADD8
//---------------------------------------------------------
// BAEF8 hacks (equip window)
//---------------------------------------------------------
// Erase offense change
define erase_offense "mov r0,#0xC; mov r1,#0xB; mov r2,#4; bl m2_vwf.print_blankstr"
org $80BB216; {erase_offense}
org $80BB38C; {erase_offense}
org $80BB4C6; {erase_offense}
org $80BB5FC; {erase_offense}
org $80BBAAE; {erase_offense}
org $80BBBF6; {erase_offense}
org $80BBD54; {erase_offense}
// Erase defense change
define erase_defense "mov r0,#0xC; mov r1,#0xD; mov r2,#4; bl m2_vwf.print_blankstr"
org $80BB226; {erase_defense}
org $80BBABE; {erase_defense}
org $80BBC06; {erase_defense}
org $80BBD64; {erase_defense}
// Erase offense/defense after changing equipment
org $80BB3E2; bl m2_vwf_entries.baef8_reequip_erase
org $80BB518; bl m2_vwf_entries.baef8_reequip_erase
org $80BBB12; bl m2_vwf_entries.baef8_reequip_erase
org $80BBC70; bl m2_vwf_entries.baef8_reequip_erase
//80B80EE
//---------------------------------------------------------
// C5500 hacks (equip window switching)
//---------------------------------------------------------
// Clear offense/defense changes when moving cursor
org $80C5AA2; bl m2_vwf_entries.c5500_clear_up
org $80C5B12; bl m2_vwf_entries.c5500_clear_down
// Don't draw equip icon
org $80C5A1A; nop
org $80C5A28; nop
//---------------------------------------------------------
// C1FBC hacks (PSI window)
//---------------------------------------------------------
org $80C203E; mov r1,#0x14 // new entry length
org $80C21B4; mov r1,#0x14
org $80C224A; mov r1,#0x14
org $80C229E; mov r1,#0x14
// Draw PSI Rockin
org $80C2192
mov r2,r8
str r2,[sp,#0]
mov r2,#0xFD
lsl r2,r2,#1
add r0,r6,r2
mov r1,#0x71
mov r2,#8
bl m2_vwf.print_string
//---------------------------------------------------------
// C438C hacks (PSI window cursor movement)
//---------------------------------------------------------
org $80C4580; bl m2_vwf_entries.c438c_moveup
org $80C4642; bl m2_vwf_entries.c438c_movedown
org $80C4768; bl m2_vwf_entries.c438c_moveright
org $80C48B2; bl m2_vwf_entries.c438c_moveleft
//---------------------------------------------------------
// PSI target window hacks
//---------------------------------------------------------
// PSI target length hack
org $80B8B12; mov r0,#0x14
org $80C24EE; mov r1,#0x14
// Fix PSI target offset calculation
org $80B8B08
mov r1,#100
mul r1,r2
nop
nop
// Make PP cost use correct number values
org $80CA732
add r1,#0x60
// Make PP cost use the correct space value if there's only one digit
org $80CA712
mov r0,#0x50
//---------------------------------------------------------
// B8BBC hacks (PSI window)
//---------------------------------------------------------
// Redraw main menu when exiting PSI target window
org $80B8E3A; bl m2_vwf_entries.b8bbc_redraw_menu_2to1
// Redraw main menu when entering PSI target window
org $80B8CF8; bl m2_vwf_entries.b8bbc_redraw_menu_13to2 // 1 to 2
org $80B920C; bl m2_vwf_entries.b8bbc_redraw_menu_13to2 // 3 to 2
//---------------------------------------------------------
// C4B2C hacks (Equip window render)
//---------------------------------------------------------
// Start equipment at the 6th tile instead of 5th
org $80C4C96; mov r2,#6 // Weapon
org $80C4D1C; mov r2,#6 // Body
org $80C4DA4; mov r2,#6 // Arms
org $80C4E2C; mov r2,#6 // Other
// Only render (None) if necessary
org $80C4C0C
bl m2_vwf_entries.c4b2c_skip_nones
b $80C4C58
// Don't render equip symbols
org $80C4CD0; nop
org $80C4CDE; nop
org $80C4D58; nop
org $80C4D66; nop
org $80C4DE0; nop
org $80C4DEE; nop
org $80C4E68; nop
org $80C4E76; nop
// Widen the who/where/etc window
org $80B77B4; mov r3,#5
org $80BA9E2; mov r3,#5
//---------------------------------------------------------
// C4B2C hacks (Equip window loop)
//---------------------------------------------------------
org $80C4F80; bl m2_vwf_entries.c4b2c_clear_left
org $80C4F84; bl m2_vwf_entries.c4b2c_clear_right
//---------------------------------------------------------
// C980C hacks (main character printing)
//---------------------------------------------------------
// Reset pixel X during scroll
org $80C9858; bl m2_vwf_entries.c980c_resetx_newline
org $80C9BF0; bl m2_vwf_entries.c980c_resetx_scroll
org $80C9D18; bl m2_vwf_entries.c980c_resetx_newline
org $80CA336; bl m2_vwf_entries.c980c_resetx_newline
// Reset pixel X during a newline
org $80C9CC4
bl m2_vwf_entries.c980c_resetx_newline
// Other reset X
org $80C9D62; bl m2_vwf_entries.c980c_resetx_other
org $80C9D76; bl m2_vwf_entries.c980c_resetx_other2
org $80C9EEC; bl m2_vwf_entries.c980c_resetx_other3
org $80C9F34; bl m2_vwf_entries.c980c_resetx_other3
org $80CA204; bl m2_vwf_entries.c980c_resetx_other4
org $80CA274; bl m2_vwf_entries.c980c_resetx_other4
org $80CA30E; bl m2_vwf_entries.c980c_resetx_newline
// Custom codes check
org $80CA2BC
bl m2_vwf_entries.c980c_custom_codes
// Reset pixel X when redrawing the window
org $80CA2E6
bl m2_vwf_entries.c980c_resetx
// Welding entry
org $80CA448
bl m2_vwf_entries.c980c_weld_entry
b $80CA46C
// Disable X coordinate incrementing
org $80CA48E
nop
//---------------------------------------------------------
// C8FFC hacks (main string printing)
//---------------------------------------------------------
// Custom codes check
org $80C90A2
bl m2_vwf_entries.c8ffc_custom_codes
// Welding entry
org $80C9114
bl m2_vwf_entries.c8ffc_weld_entry
b $80C9144
// Integer-to-char changes
org $80CA67C; mov r3,#0x50 // space
org $80CA69C; mov r2,#0x60 // zero
org $80CA78A; mov r0,#0x60 // zero
org $80CA7AC; mov r2,#0x69 // nine
org $80CA7EC; sub r1,#0xA0
//---------------------------------------------------------
// C87D0 hacks (draw blank window)
//---------------------------------------------------------
org $80C87DC
bl m2_vwf_entries.c87d0_clear_entry
//---------------------------------------------------------
// C9634 hacks (string printing)
//---------------------------------------------------------
org $80C967E
bl m2_vwf_entries.c9634_resetx
//---------------------------------------------------------
// C96F0 hacks (string printing with highlight)
//---------------------------------------------------------
org $80C9714
lsl r3,r3,#1 // change from row coords to tile coords
ldrh r1,[r0,#0x22]
add r1,r1,r2
lsl r1,r1,#3 // r1 = tile_x * 8
ldrh r2,[r0,#0x24]
add r2,r2,r3
lsl r2,r2,#3 // r2 = tile_y * 8
mov r0,r6
bl m2_vwf.print_string
mov r7,r0
b $80C9788
//---------------------------------------------------------
// CA4BC hacks (scroll text)
//---------------------------------------------------------
org $80CA55E; bl m2_vwf_entries.ca4bc_erase_tile_short
org $80CA60E; bl m2_vwf_entries.ca4bc_copy_tile_up
org $80CA626; bl m2_vwf_entries.ca4bc_erase_tile
//---------------------------------------------------------
// D2E94 hacks (print party character name)
//---------------------------------------------------------
org $80D2F24
mov r1,r6
mov r2,r7
mov r0,r4
bl m2_vwf.weld_entry
b $80D2F52
// Disable X increment
org $80D2F5A; nop
//---------------------------------------------------------
// D30C4 hacks (print number)
//---------------------------------------------------------
org $80D314A
mov r0,r5
mov r1,r7
bl m2_vwf.weld_entry
b $80D3178
// Disable X increment
org $80D3180; nop
//---------------------------------------------------------
// D332C hacks (print name)
//---------------------------------------------------------
org $80D34E8
mov r0,r5
mov r1,r4
bl m2_vwf.weld_entry
b $80D3514
// Disable X increment
org $80D351A; nop
//---------------------------------------------------------
// D3934 hacks (print PSI name)
//---------------------------------------------------------
org $80D39BA; mov r0,#0x14 // PSI name length
// Weld entry
org $80D39E2
mov r0,r4
mov r1,r5
bl m2_vwf.weld_entry
b $80D3A14
// Print a space before the Greek letter
org $80D39D4; bl m2_vwf_entries.d3934_print_space
// Allocate extra space for enemy names
org $80DB04E; add sp,#-0x20
org $80DB058; mov r2,#0x1E
org $80DB08C; mov r2,#0x1A
org $80DB116; mov r1,#0x1E
org $80DB15A; app sp,#0x20
//80DB116: length of name + end code
//==============================================================================
// Data files
//==============================================================================
org $8B2C000
// Box font relocation
m2_font_relocate:
incbin m2-font-relocate.bin
// Co-ordinate table
m2_coord_table:
incbin m2-coord-table.bin
// EB fonts
m2_font_table:
dd m2_font_main
dd m2_font_saturn
m2_font_main:
incbin m2-font-main.bin
m2_font_saturn:
incbin m2-font-saturn.bin
// EB font heights
m2_height_table:
db $02, $02, $01, $00 // last byte for alignment
// EB font widths
m2_widths_table:
dd m2_widths_main
dd m2_widths_saturn
m2_widths_main:
incbin m2-widths-main.bin
m2_widths_saturn:
// tbd
m2_bits_to_nybbles:
incbin m2-bits-to-nybbles.bin
m2_nybbles_to_bits:
incbin m2-nybbles-to-bits.bin
//==============================================================================
// Misc
//==============================================================================
org $2027FC0
m2_custom_wram:
//==============================================================================
// Code files
//==============================================================================
org $80FCE6C
incsrc m2-vwf.asm
incsrc m2-vwf-entries.asm
incsrc m2-formatting.asm
incsrc m2-customcodes.asm