Merge pull request #61 from Lorenzooone/background-windows
Improve background window consistency
This commit is contained in:
commit
67046711aa
|
@ -186,6 +186,33 @@ int goods_outer_process(WINDOW* window, int y_offset, bool give)
|
|||
return ACTION_NONE;
|
||||
}
|
||||
|
||||
//Returns in *String a string containing either "PSI \n Check" or "Check" based on the value of PSIValid
|
||||
void setupShortMainMenu(char *String, byte PSIValid)
|
||||
{
|
||||
String[0] = 1;
|
||||
String[1] = 0xFF;
|
||||
char PSI[] = "PSI";
|
||||
char Check[] = "Check";
|
||||
int index = 2;
|
||||
if(PSIValid != 0xFF)
|
||||
{
|
||||
String[index++] = 0x5F;
|
||||
String[index++] = 0xFF;
|
||||
String[index++] = 0x08;
|
||||
for(int i = 0; i < (sizeof(PSI) - 1); i++)
|
||||
String[index++] = encode_ascii(PSI[i]);
|
||||
}
|
||||
String[index++] = 1;
|
||||
String[index++] = 0xFF;
|
||||
String[index++] = 0x5F;
|
||||
String[index++] = 0xFF;
|
||||
String[index++] = 0x08;
|
||||
for(int i = 0; i < (sizeof(Check) - 1); i++)
|
||||
String[index++] = encode_ascii(Check[i]);
|
||||
String[index++] = 0;
|
||||
String[index++] = 0xFF;
|
||||
}
|
||||
|
||||
// Process the inner Goods window (i.e. item selection)
|
||||
// Called every frame. Replaces $80BEB6C fully.
|
||||
// Returns
|
||||
|
|
|
@ -690,12 +690,72 @@ pop {pc}
|
|||
.org 0x80BA61C
|
||||
bl ba61c_get_print_inventory_window
|
||||
|
||||
//---------------------------------------------------------
|
||||
// B9ECC hacks (Fixes inventory when out of selecting a party member to give food to via B button)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9ECC
|
||||
bl b9ecc_get_print_inventory_window
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BA48E hacks (Fixes inventory when out of Give via text)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80BA48E
|
||||
bl ba48e_get_print_inventory_window
|
||||
|
||||
//---------------------------------------------------------
|
||||
// B9F96 hacks (Fixes main window after consuming an item)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9F96
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// B9CF8 hacks (Fixes main window after an item prints a dialogue)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9CF8
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// B9C88 hacks (Fixes main window after an equippable item prints a dialogue)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9C88
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BA52C hacks (Fixes main window after giving an item)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80BA52C
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BA44E hacks (Fixes main window after not being able to give an item)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80BA44E
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BA7BE hacks (Fixes main window after calling the help function)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80BA7BE
|
||||
bl ba7be_reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// B9AA2 hacks (Fixes main window after exiting the item action window)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80B9AA2
|
||||
bl b9aa2_reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// C6BA2 hacks (Fixes main window after exiting the Stored Goods window)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80C6BA2
|
||||
bl c6ba2_reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// BCEB0 hacks (Fixes main window after exiting the pickup menu)
|
||||
//---------------------------------------------------------
|
||||
.org 0x80BCEB0
|
||||
bl _reprint_first_menu
|
||||
|
||||
//---------------------------------------------------------
|
||||
// C1C98 hacks (menu selection)
|
||||
//---------------------------------------------------------
|
||||
|
@ -1176,6 +1236,7 @@ m2_enemy_attributes:
|
|||
.definelabel m2_cstm_last_printed ,0x3001F4F
|
||||
.definelabel m2_player1 ,0x3001F50
|
||||
.definelabel m2_script_readability ,0x3004F08
|
||||
.definelabel m2_psi_exist ,0x300525C
|
||||
.definelabel m2_active_window_pc ,0x3005264
|
||||
.definelabel m2_setup_naming_mem ,0x8001D5C
|
||||
.definelabel m2_soundeffect ,0x8001720
|
||||
|
|
|
@ -1570,6 +1570,19 @@ pop {r4}
|
|||
bl 0x80BD7F8 //Copies old arrangements, this includes the highlight
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Specific Routine which calls get_print_inventory_window
|
||||
b9ecc_get_print_inventory_window:
|
||||
push {lr}
|
||||
push {r4-r5}
|
||||
mov r5,r4
|
||||
mov r4,#0x1C
|
||||
sub r5,r5,r4 //Address with the windows' pc
|
||||
ldr r4,=#0x3005230
|
||||
bl get_print_inventory_window //Prints old inventory
|
||||
pop {r4-r5}
|
||||
bl 0x80BD7F8 //Copies old arrangements, this includes the highlight
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Specific Routine which calls get_print_inventory_window
|
||||
|
@ -1581,3 +1594,166 @@ bl 0x80BD7F8 //Copies old arrangements, this includes the highlight
|
|||
pop {r5,pc}
|
||||
|
||||
.pool
|
||||
|
||||
//==============================================================================
|
||||
//Reprints both the Main window and the Cash window if need be
|
||||
generic_reprinting_first_menu:
|
||||
push {lr}
|
||||
push {r0-r6}
|
||||
add sp,#-8
|
||||
ldr r6,=#0x3005078 //Make sure the game expects only the right amount of lines to be written (so only 1)
|
||||
ldrb r4,[r6,#0]
|
||||
str r4,[sp,#4]
|
||||
mov r4,#0
|
||||
strb r4,[r6,#0]
|
||||
ldr r4,=#0x3005230 //Window generic address
|
||||
|
||||
//Main window
|
||||
mov r2,#1
|
||||
ldr r0,[r4,#0] //Main window place in ram
|
||||
ldrb r0,[r0,#0]
|
||||
and r2,r0
|
||||
cmp r2,#0
|
||||
beq @@cash //Check if window is enabled before printing in it
|
||||
|
||||
ldr r0,=#0x8B17EE4
|
||||
ldr r1,=#0x8B17424
|
||||
ldr r3,=m2_psi_exist //Flag which if not 0xFF means no one has PSI
|
||||
ldrb r3,[r3,#0]
|
||||
cmp r3,#0xFF
|
||||
beq @@psiNotFound
|
||||
mov r2,#0
|
||||
b @@keep_going
|
||||
@@psiNotFound:
|
||||
mov r2,#1
|
||||
@@keep_going:
|
||||
bl m2_strlookup //Load the proper menu string based on m2_psi_exist
|
||||
mov r1,#0
|
||||
str r1,[sp,#0]
|
||||
mov r1,r0
|
||||
ldr r0,[r4,#0]
|
||||
mov r2,#5
|
||||
mov r3,#2
|
||||
bl 0x80BE4C8 //Let it do its things
|
||||
ldr r0,[r4,#0]
|
||||
bl 0x80C8BE4 //Print text in the window
|
||||
|
||||
@@cash:
|
||||
//Cash
|
||||
mov r2,#1
|
||||
ldr r0,[r4,#4] //Cash window place in ram
|
||||
ldrb r0,[r0,#0]
|
||||
and r2,r0
|
||||
cmp r2,#0
|
||||
beq @@end //Check if window is enabled before printing in it
|
||||
|
||||
ldr r2,=#0x300130C
|
||||
ldr r0,[r2,#0]
|
||||
mov r1,#2
|
||||
orr r0,r1
|
||||
str r0,[r2,#0]
|
||||
ldr r0,=#0x3001D40
|
||||
mov r1,#0xD2
|
||||
lsl r1,r1,#3
|
||||
add r0,r0,r1
|
||||
ldr r0,[r0,#0] //Load the money
|
||||
ldr r5,=#0x3005200
|
||||
ldr r1,[r5,#0]
|
||||
mov r2,r1 //Load the string address
|
||||
mov r1,#0x30 //Padding
|
||||
bl format_cash_window
|
||||
ldr r0,[r4,#4]
|
||||
ldr r1,[r5,#0]
|
||||
mov r2,#0
|
||||
bl m2_initwindow //Let it do its things
|
||||
ldr r0,[r4,#4]
|
||||
bl 0x80C8BE4 //Print text in the window
|
||||
|
||||
@@end:
|
||||
ldr r4,[sp,#4]
|
||||
strb r4,[r6,#0] //Restore expected amount of lines to be written
|
||||
add sp,#8
|
||||
pop {r0-r6}
|
||||
pop {pc}
|
||||
|
||||
.pool
|
||||
|
||||
//==============================================================================
|
||||
//Specific (But still very generic) call to generic_reprinting_first_menu which then calls swapwindowbuf as expected from the game
|
||||
_reprint_first_menu:
|
||||
push {lr}
|
||||
bl generic_reprinting_first_menu
|
||||
mov r0,#1
|
||||
bl m2_swapwindowbuf
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Specific call to generic_reprinting_first_menu which then calls a DMA transfer of the old arrangement
|
||||
c6ba2_reprint_first_menu:
|
||||
push {lr}
|
||||
bl generic_reprinting_first_menu
|
||||
mov r0,#1
|
||||
bl 0x80BD7F8
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Specific call to b9aa2_special_string, needed for the help function
|
||||
ba7be_reprint_first_menu:
|
||||
push {lr}
|
||||
bl b9aa2_special_string
|
||||
ldr r1,=#0x40000D4
|
||||
ldr r0,=#0x3005200
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Specific call to b9aa2_special_string, needed for when you exit the item action function
|
||||
b9aa2_reprint_first_menu:
|
||||
push {lr}
|
||||
bl b9aa2_special_string
|
||||
mov r0,#1
|
||||
bl 0x80BD7F8
|
||||
pop {pc}
|
||||
|
||||
//==============================================================================
|
||||
//Setup which only prints either "Check" or "PSI \n Check" in the main window. Needed in order to avoid the not-needed options popping in the item window for 2-3 frames
|
||||
b9aa2_special_string:
|
||||
push {lr}
|
||||
push {r0-r5}
|
||||
add sp,#-68
|
||||
ldr r5,=#0x3005078 //Make sure the game expects only the right amount of lines to be written (so only 1)
|
||||
ldrb r4,[r5,#0]
|
||||
str r4,[sp,#4]
|
||||
mov r4,#0
|
||||
strb r4,[r5,#0]
|
||||
ldr r4,=#0x3005230 //Window generic address
|
||||
|
||||
//Main window
|
||||
mov r2,#1
|
||||
ldr r0,[r4,#0] //Main window place in ram
|
||||
ldrb r0,[r0,#0]
|
||||
and r2,r0
|
||||
cmp r2,#0
|
||||
beq @@end //Check if window is enabled before printing in it
|
||||
|
||||
ldr r1,=m2_psi_exist
|
||||
ldrb r1,[r1,#0]
|
||||
add r0,sp,#8
|
||||
bl setupShortMainMenu //Get shortened menu string
|
||||
mov r1,#0
|
||||
str r1,[sp,#0]
|
||||
add r1,sp,#8
|
||||
ldr r0,[r4,#0]
|
||||
mov r2,#5
|
||||
mov r3,#2
|
||||
bl 0x80BE4C8 //Let it do its things
|
||||
ldr r0,[r4,#0]
|
||||
bl 0x80C8BE4 //Print text in the window
|
||||
|
||||
@@end:
|
||||
ldr r4,[sp,#4]
|
||||
strb r4,[r5,#0] //Restore expected amount of lines to be written
|
||||
add sp,#68
|
||||
pop {r0-r5}
|
||||
pop {pc}
|
||||
|
||||
.pool
|
Loading…
Reference in New Issue