diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-01-17 11:14:25 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-17 11:14:25 -0500 |
commit | 055e5d2bbff31a98bcdffec0d7392e7ce77bcd46 (patch) | |
tree | 44873a5ffa58b0ee53bc5dcf17a73ccaf57d89fa | |
parent | 8bdd942c9e087148a4b5c47a990550b2b363250a (diff) | |
parent | b786145272491ea33924ffc0526b268a9b102619 (diff) |
Merge pull request #230 from PikalaxALT/save_failed_screen
Save failed screen
-rw-r--r-- | asm/save_failed_screen.s | 595 | ||||
-rw-r--r-- | common_syms/quest_log.txt | 3 | ||||
-rw-r--r-- | common_syms/save_failed_screen.txt | 1 | ||||
-rw-r--r-- | data/save_failed_screen.s | 10 | ||||
-rw-r--r-- | data/strings.s | 6 | ||||
-rw-r--r-- | include/help_system.h | 1 | ||||
-rw-r--r-- | include/save_failed_screen.h | 4 | ||||
-rw-r--r-- | include/strings.h | 5 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/battle_ai_script_commands.c | 508 | ||||
-rw-r--r-- | src/fldeff_rocksmash.c | 2 | ||||
-rw-r--r-- | src/main.c | 4 | ||||
-rw-r--r-- | src/save_failed_screen.c | 231 | ||||
-rw-r--r-- | sym_common.txt | 35 | ||||
-rw-r--r-- | sym_ewram.txt | 31 |
15 files changed, 536 insertions, 904 deletions
diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s deleted file mode 100644 index aa9d375a3..000000000 --- a/asm/save_failed_screen.s +++ /dev/null @@ -1,595 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F50F4 -sub_80F50F4: @ 80F50F4 - ldr r1, _080F50FC @ =gUnknown_3005430 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_080F50FC: .4byte gUnknown_3005430 - thumb_func_end sub_80F50F4 - - thumb_func_start DoSaveFailedScreen -DoSaveFailedScreen: @ 80F5100 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080F5110 @ =gUnknown_203AB4C - strh r0, [r1] - ldr r1, _080F5114 @ =gUnknown_3005430 - movs r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_080F5110: .4byte gUnknown_203AB4C -_080F5114: .4byte gUnknown_3005430 - thumb_func_end DoSaveFailedScreen - - thumb_func_start sub_80F5118 -sub_80F5118: @ 80F5118 - push {lr} - ldr r0, _080F5130 @ =gUnknown_203AB50 - ldrb r1, [r0] - adds r2, r0, 0 - cmp r1, 0x8 - bls _080F5126 - b _080F52D6 -_080F5126: - lsls r0, r1, 2 - ldr r1, _080F5134 @ =_080F5138 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F5130: .4byte gUnknown_203AB50 -_080F5134: .4byte _080F5138 - .align 2, 0 -_080F5138: - .4byte _080F515C - .4byte _080F5190 - .4byte _080F51B4 - .4byte _080F51E4 - .4byte _080F5204 - .4byte _080F5240 - .4byte _080F5280 - .4byte _080F5298 - .4byte _080F52B4 -_080F515C: - ldr r0, _080F5168 @ =gUnknown_3005430 - ldr r0, [r0] - cmp r0, 0 - bne _080F516C - movs r0, 0 - b _080F52D8 - .align 2, 0 -_080F5168: .4byte gUnknown_3005430 -_080F516C: - ldr r0, _080F5184 @ =gMPlayInfo_BGM - ldr r1, _080F5188 @ =0x0000ffff - movs r2, 0x80 - bl m4aMPlayVolumeControl - bl SaveCallbacks - ldr r1, _080F518C @ =gUnknown_203AB50 - movs r0, 0x1 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5184: .4byte gMPlayInfo_BGM -_080F5188: .4byte 0x0000ffff -_080F518C: .4byte gUnknown_203AB50 -_080F5190: - bl SaveMapTiles - bl SaveMapGPURegs - bl SaveMapTextColors - bl sub_80F52EC - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F51B0 @ =gUnknown_203AB50 - movs r0, 0x2 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51B0: .4byte gUnknown_203AB50 -_080F51B4: - ldr r1, _080F51D8 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 7 - movs r0, 0 - movs r3, 0 - bl RequestDma3Fill - ldr r0, _080F51DC @ =gUnknown_841EE44 - movs r1, 0xA0 - lsls r1, 19 - movs r2, 0x20 - movs r3, 0 - bl RequestDma3Copy - ldr r1, _080F51E0 @ =gUnknown_203AB50 - movs r0, 0x3 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51D8: .4byte 0x0600c000 -_080F51DC: .4byte gUnknown_841EE44 -_080F51E0: .4byte gUnknown_203AB50 -_080F51E4: - bl sub_80F53E8 - ldr r0, _080F51FC @ =gUnknown_8418C83 - bl sub_80F5404 - bl sub_80F53CC - ldr r1, _080F5200 @ =gUnknown_203AB50 - movs r0, 0x4 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51FC: .4byte gUnknown_8418C83 -_080F5200: .4byte gUnknown_203AB50 -_080F5204: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F5238 @ =0x00001f0c - movs r0, 0x8 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 1 - movs r0, 0 - bl SetGpuReg - ldr r1, _080F523C @ =gUnknown_203AB50 - movs r0, 0x5 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5238: .4byte 0x00001f0c -_080F523C: .4byte gUnknown_203AB50 -_080F5240: - bl sub_80F5458 - adds r1, r0, 0 - cmp r1, 0x1 - bne _080F5260 - ldr r0, _080F5258 @ =gSaveSucceeded - strh r1, [r0] - ldr r0, _080F525C @ =gUnknown_8418E09 - bl sub_80F5404 - b _080F526C - .align 2, 0 -_080F5258: .4byte gSaveSucceeded -_080F525C: .4byte gUnknown_8418E09 -_080F5260: - ldr r0, _080F5274 @ =gSaveSucceeded - movs r1, 0xFF - strh r1, [r0] - ldr r0, _080F5278 @ =gUnknown_8418CD9 - bl sub_80F5404 -_080F526C: - ldr r1, _080F527C @ =gUnknown_203AB50 - movs r0, 0x6 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5274: .4byte gSaveSucceeded -_080F5278: .4byte gUnknown_8418CD9 -_080F527C: .4byte gUnknown_203AB50 -_080F5280: - ldr r0, _080F5294 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F52D6 - movs r0, 0x7 - strb r0, [r2] - b _080F52D6 - .align 2, 0 -_080F5294: .4byte gMain -_080F5298: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl RestoreMapTiles - bl sub_80F52EC - ldr r1, _080F52B0 @ =gUnknown_203AB50 - movs r0, 0x8 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F52B0: .4byte gUnknown_203AB50 -_080F52B4: - ldr r0, _080F52DC @ =gMPlayInfo_BGM - ldr r1, _080F52E0 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - bl RestoreMapTextColors - bl RestoreGPURegs - bl RestoreCallbacks - ldr r0, _080F52E4 @ =gUnknown_3005430 - movs r1, 0 - str r1, [r0] - ldr r0, _080F52E8 @ =gUnknown_203AB50 - strb r1, [r0] -_080F52D6: - movs r0, 0x1 -_080F52D8: - pop {r1} - bx r1 - .align 2, 0 -_080F52DC: .4byte gMPlayInfo_BGM -_080F52E0: .4byte 0x0000ffff -_080F52E4: .4byte gUnknown_3005430 -_080F52E8: .4byte gUnknown_203AB50 - thumb_func_end sub_80F5118 - - thumb_func_start sub_80F52EC -sub_80F52EC: @ 80F52EC - push {r4,r5,lr} - movs r1, 0 - ldr r5, _080F5310 @ =0x000001ff - movs r4, 0xA0 - lsls r4, 19 - movs r2, 0 - ldr r3, _080F5314 @ =0x05000200 -_080F52FA: - adds r0, r1, r4 - strh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - adds r1, 0x2 - cmp r1, r5 - ble _080F52FA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F5310: .4byte 0x000001ff -_080F5314: .4byte 0x05000200 - thumb_func_end sub_80F52EC - - thumb_func_start sub_80F5318 -sub_80F5318: @ 80F5318 - push {lr} - ldr r0, _080F532C @ =gDecompressionBuffer + 0x3800 - ldr r1, _080F5330 @ =0x0600f800 - movs r2, 0xA0 - lsls r2, 3 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F532C: .4byte gDecompressionBuffer + 0x3800 -_080F5330: .4byte 0x0600f800 - thumb_func_end sub_80F5318 - - thumb_func_start sub_80F5334 -sub_80F5334: @ 80F5334 - push {lr} - ldr r0, _080F5348 @ =gDecompressionBuffer + 0x020 - ldr r1, _080F534C @ =0x0600c020 - movs r2, 0x8C - lsls r2, 6 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F5348: .4byte gDecompressionBuffer + 0x020 -_080F534C: .4byte 0x0600c020 - thumb_func_end sub_80F5334 - - thumb_func_start sub_80F5350 -sub_80F5350: @ 80F5350 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, [sp, 0x20] - ldr r5, [sp, 0x24] - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r7, r5, 16 - lsrs r0, r2, 24 - adds r2, r0, r4 - cmp r0, r2 - bge _080F53B6 - mov r12, r2 - ldr r1, _080F53C8 @ =gDecompressionBuffer + 0x3800 - mov r10, r1 -_080F5386: - mov r4, r9 - mov r2, r8 - adds r1, r4, r2 - adds r3, r0, 0x1 - cmp r4, r1 - bge _080F53AE - lsls r2, r0, 6 - mov r5, r10 -_080F5396: - lsls r0, r4, 1 - adds r0, r2, r0 - adds r0, r5 - strh r6, [r0] - adds r0, r6, r7 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r1 - blt _080F5396 -_080F53AE: - lsls r0, r3, 16 - lsrs r0, 16 - cmp r0, r12 - blt _080F5386 -_080F53B6: - bl sub_80F5318 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F53C8: .4byte gDecompressionBuffer + 0x3800 - thumb_func_end sub_80F5350 - - thumb_func_start sub_80F53CC -sub_80F53CC: @ 80F53CC - push {lr} - sub sp, 0x8 - movs r0, 0xA - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r1, 0x1 - movs r2, 0x5 - movs r3, 0x1C - bl sub_80F5350 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80F53CC - - thumb_func_start sub_80F53E8 -sub_80F53E8: @ 80F53E8 - push {lr} - sub sp, 0x8 - movs r0, 0x14 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0 - movs r2, 0 - movs r3, 0x1E - bl sub_80F5350 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80F53E8 - - thumb_func_start sub_80F5404 -sub_80F5404: @ 80F5404 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0x3 - bl GenerateFontHalfRowLookupTable - add r1, sp, 0xC - ldr r2, _080F544C @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _080F5450 @ =gDecompressionBuffer + 0x020 - ldr r2, _080F5454 @ =0x01001180 - adds r0, r1, 0 - adds r1, r4, 0 - bl CpuSet - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1C - str r0, [sp, 0x4] - movs r0, 0xA - str r0, [sp, 0x8] - movs r0, 0x2 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x2 - bl HelpSystemRenderText - bl sub_80F5334 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F544C: .4byte 0x00001111 -_080F5450: .4byte gDecompressionBuffer + 0x020 -_080F5454: .4byte 0x01001180 - thumb_func_end sub_80F5404 - - thumb_func_start sub_80F5458 -sub_80F5458: @ 80F5458 - push {r4,r5,lr} - movs r5, 0 - ldr r0, _080F5490 @ =gDamagedSaveSectors - ldr r1, [r0] - adds r4, r0, 0 - cmp r1, 0 - beq _080F548C -_080F5466: - ldr r0, [r4] - bl sub_80F5540 - cmp r0, 0 - bne _080F5498 - ldr r0, _080F5494 @ =gUnknown_203AB4C - ldrb r0, [r0] - bl HandleSavingData - adds r5, 0x1 - ldr r0, [r4] - cmp r0, 0 - beq _080F548C - ldr r4, _080F5490 @ =gDamagedSaveSectors - cmp r5, 0x2 - ble _080F5466 - ldr r0, [r4] - cmp r0, 0 - bne _080F5498 -_080F548C: - movs r0, 0x1 - b _080F549A - .align 2, 0 -_080F5490: .4byte gDamagedSaveSectors -_080F5494: .4byte gUnknown_203AB4C -_080F5498: - movs r0, 0 -_080F549A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80F5458 - - thumb_func_start VerifySectorWipe -VerifySectorWipe: @ 80F54A0 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r4, _080F54C4 @ =gSaveDataBuffer - movs r3, 0x80 - lsls r3, 5 - movs r1, 0 - adds r2, r4, 0 - bl ReadFlash - movs r1, 0 - ldr r2, _080F54C8 @ =0x000003ff -_080F54B8: - ldr r0, [r4] - cmp r0, 0 - beq _080F54CC - movs r0, 0x1 - b _080F54DA - .align 2, 0 -_080F54C4: .4byte gSaveDataBuffer -_080F54C8: .4byte 0x000003ff -_080F54CC: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - adds r4, 0x4 - cmp r1, r2 - bls _080F54B8 - movs r0, 0 -_080F54DA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end VerifySectorWipe - - thumb_func_start WipeSector -WipeSector: @ 80F54E0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0 - lsls r6, r7, 16 - ldr r1, _080F5538 @ =ProgramFlashByte - mov r9, r1 - ldr r1, _080F553C @ =0x00000fff - mov r8, r1 -_080F54F6: - movs r4, 0 - adds r5, r0, 0x1 -_080F54FA: - mov r0, r9 - ldr r3, [r0] - lsrs r0, r6, 16 - adds r1, r4, 0 - movs r2, 0 - bl _call_via_r3 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r8 - bls _080F54FA - adds r0, r7, 0 - bl VerifySectorWipe - lsls r0, 16 - lsrs r1, r0, 16 - lsls r0, r5, 16 - lsrs r0, 16 - cmp r1, 0 - beq _080F5528 - cmp r0, 0x81 - bls _080F54F6 -_080F5528: - adds r0, r1, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080F5538: .4byte ProgramFlashByte -_080F553C: .4byte 0x00000fff - thumb_func_end WipeSector - - thumb_func_start sub_80F5540 -sub_80F5540: @ 80F5540 - push {r4-r6,lr} - adds r5, r0, 0 - movs r6, 0 -_080F5546: - movs r4, 0x1 - lsls r4, r6 - adds r0, r5, 0 - ands r0, r4 - cmp r0, 0 - beq _080F555E - adds r0, r6, 0 - bl WipeSector - cmp r0, 0 - bne _080F555E - bics r5, r4 -_080F555E: - adds r6, 0x1 - cmp r6, 0x1F - ble _080F5546 - cmp r5, 0 - beq _080F556C - movs r0, 0x1 - b _080F556E -_080F556C: - movs r0, 0 -_080F556E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80F5540 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/quest_log.txt b/common_syms/quest_log.txt index 4ecbf66a8..cc7fbbfcf 100644 --- a/common_syms/quest_log.txt +++ b/common_syms/quest_log.txt @@ -1 +1,4 @@ gUnknown_3005E88 +sNumQuestLogs +gUnknown_3005E90 +gUnknown_3005E94 diff --git a/common_syms/save_failed_screen.txt b/common_syms/save_failed_screen.txt new file mode 100644 index 000000000..caab09b26 --- /dev/null +++ b/common_syms/save_failed_screen.txt @@ -0,0 +1 @@ +sIsInSaveFailedScreen diff --git a/data/save_failed_screen.s b/data/save_failed_screen.s deleted file mode 100644 index e19763962..000000000 --- a/data/save_failed_screen.s +++ /dev/null @@ -1,10 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_841EE44:: @ 841EE44 - .incbin "graphics/interface/save_failed_screen.gbapal" diff --git a/data/strings.s b/data/strings.s index a9c76b88e..55c54f6c3 100644 --- a/data/strings.s +++ b/data/strings.s @@ -2465,14 +2465,14 @@ gUnknown_8418C62:: @ 0x8418C62 gUnknown_8418C6F:: @ 0x8418C6F .string "もう これいじょう たべない みたい‥$" -gUnknown_8418C83:: @ 8418C83 +gText_SaveFailedScreen_CheckingBackupMemory:: @ 8418C83 .string "Save failed.\n" .string "Checking the backup memory‥\n" .string "Please wait.\n" .string "“Time required:\n" .string "about 1 minute”$" -gUnknown_8418CD9:: @ 8418CD9 +gText_SaveFailedScreen_BackupMemoryDamaged:: @ 8418CD9 .string "The backup memory is damaged or\n" .string "the game's battery has run dry.\n" .string "The game can be played, but its\n" @@ -2493,7 +2493,7 @@ gUnknown_8418DC9:: @ 0x8418DC9 .string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n" .string "タイトルに もどります”$" -gUnknown_8418E09:: @ 8418E09 +gText_SaveFailedScreen_SaveCompleted:: @ 8418E09 .string "Save completed.\n" .string "“Please press the A Button.”$" diff --git a/include/help_system.h b/include/help_system.h index 53dc45014..273b5e119 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -91,5 +91,6 @@ void PlaceListMenuCursor(void); bool8 MoveCursor(u8 by, u8 dirn); void HelpSystem_BackupSomeVariable(void); void HelpSystem_RestoreSomeVariable(void); +void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/save_failed_screen.h b/include/save_failed_screen.h index 5950430d2..7056fc6c6 100644 --- a/include/save_failed_screen.h +++ b/include/save_failed_screen.h @@ -2,7 +2,7 @@ #define GUARD_SAVE_FAILED_SCREEN_H extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen -void sub_80F50F4(void); -bool32 sub_80F5118(void); +void SetNotInSaveFailedScreen(void); +bool32 RunSaveFailedScreen(void); #endif //GUARD_SAVE_FAILED_SCREEN_H diff --git a/include/strings.h b/include/strings.h index ec8533a54..eace8d67e 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1033,4 +1033,9 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; +// save_failed_screen +extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; +extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; +extern const u8 gText_SaveFailedScreen_SaveCompleted[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index d6dec1ea3..f07e480a2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -217,7 +217,7 @@ SECTIONS { src/hall_of_fame.o(.text); src/credits.o(.text); src/diploma.o(.text); - asm/save_failed_screen.o(.text); + src/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); src/evolution_graphics.o(.text); src/fldeff_teleport.o(.text); @@ -505,7 +505,7 @@ SECTIONS { src/credits.o(.rodata); src/diploma.o(.rodata); data/strings.o(.rodata); - data/save_failed_screen.o(.rodata); + src/save_failed_screen.o(.rodata); data/clear_save_data_screen.o(.rodata); src/evolution_graphics.o(.rodata); src/new_menu_helpers.o(.rodata); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index f98922c28..d988fd7b4 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -34,14 +34,14 @@ enum }; /* -gAIScriptPtr is a pointer to the next battle AI cmd command to read. -when a command finishes processing, gAIScriptPtr is incremented by +sAIScriptPtr is a pointer to the next battle AI cmd command to read. +when a command finishes processing, sAIScriptPtr is incremented by the number of bytes that the current command had reserved for arguments in order to read the next command correctly. refer to battle_ai_scripts.s for the AI scripts. */ -extern const u8 *gAIScriptPtr; +static EWRAM_DATA const u8 *sAIScriptPtr = NULL; extern u8 *gBattleAI_ScriptsTable[]; static void BattleAICmd_if_random_less_than(void); @@ -419,7 +419,7 @@ static void BattleAI_DoAIProcessing(void) case AIState_DoNotProcess: //Needed to match. break; case AIState_SettingUp: - gAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. + sAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. if (gBattleMons[gBattlerAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) { AI_THINKING_STRUCT->moveConsidered = 0; // don't consider a move you have 0 PP for, idiot. @@ -432,7 +432,7 @@ static void BattleAI_DoAIProcessing(void) break; case AIState_Processing: if (AI_THINKING_STRUCT->moveConsidered != 0) - sBattleAICmdTable[*gAIScriptPtr](); // run AI command. + sBattleAICmdTable[*sAIScriptPtr](); // run AI command. else { AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. @@ -490,44 +490,44 @@ void RecordItemEffectBattle(u8 battlerId, u8 itemEffect) static void BattleAICmd_if_random_less_than(void) { - if (Random() % 256 < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 < sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_greater_than(void) { - if (Random() % 256 > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 > sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_equal(void) { - if (Random() % 256 == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_not_equal(void) { - if (Random() % 256 != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_score(void) { - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += sAIScriptPtr[1]; // add the result to the array of the move consider's score. if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // if the score is negative, flatten it to 0. AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; - gAIScriptPtr += 2; // AI return. + sAIScriptPtr += 2; // AI return. } enum { @@ -539,60 +539,60 @@ static void BattleAICmd_if_hp_less_than(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_more_than(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_equal(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_not_equal(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_status(void) @@ -600,17 +600,17 @@ static void BattleAICmd_if_status(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status(void) @@ -618,17 +618,17 @@ static void BattleAICmd_if_not_status(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status2(void) @@ -636,17 +636,17 @@ static void BattleAICmd_if_status2(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status2(void) @@ -654,17 +654,17 @@ static void BattleAICmd_if_not_status2(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status3(void) @@ -672,17 +672,17 @@ static void BattleAICmd_if_status3(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gStatuses3[index] & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status3(void) @@ -690,17 +690,17 @@ static void BattleAICmd_if_not_status3(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gStatuses3[index] & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status4(void) @@ -708,18 +708,18 @@ static void BattleAICmd_if_status4(void) u16 index; u32 arg1, arg2; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(gAIScriptPtr + 2); + arg2 = T1_READ_32(sAIScriptPtr + 2); if ((gSideStatuses[arg1] & arg2) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status4(void) @@ -727,174 +727,174 @@ static void BattleAICmd_if_not_status4(void) u16 index; u32 arg1, arg2; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(gAIScriptPtr + 2); + arg2 = T1_READ_32(sAIScriptPtr + 2); if ((gSideStatuses[arg1] & arg2) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_less_than(void) { - if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult < sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_more_than(void) { - if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult > sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_equal(void) { - if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_not_equal(void) { - if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_less_than_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult < *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_more_than_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult > *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_equal_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult == *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_equal_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult != *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_move(void) { - u16 move = T1_READ_16(gAIScriptPtr + 1); + u16 move = T1_READ_16(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_not_move(void) { - u16 move = T1_READ_16(gAIScriptPtr + 1); + u16 move = T1_READ_16(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_in_bytes(void) { - u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); return; } ptr++; } - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_in_bytes(void) { - u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr += 9; + sAIScriptPtr += 9; return; } ptr++; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } static void BattleAICmd_if_in_words(void) { - u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); return; } ptr++; } - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_in_words(void) { - u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr += 9; + sAIScriptPtr += 9; return; } ptr++; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } static void BattleAICmd_if_user_can_damage(void) @@ -908,9 +908,9 @@ static void BattleAICmd_if_user_can_damage(void) break; } if (i == MAX_MON_MOVES) - gAIScriptPtr += 5; + sAIScriptPtr += 5; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_if_user_cant_damage(void) @@ -924,20 +924,20 @@ static void BattleAICmd_if_user_cant_damage(void) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 5; + sAIScriptPtr += 5; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_get_turn_count(void) { AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_type(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: // player primary type AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type1; @@ -955,13 +955,13 @@ static void BattleAICmd_get_type(void) AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; break; } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_move_power(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_is_most_powerful_move(void) @@ -1025,49 +1025,49 @@ static void BattleAICmd_is_most_powerful_move(void) AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power. } - gAIScriptPtr++; + sAIScriptPtr++; } static void BattleAICmd_get_move(void) { - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerAttacker]; else AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_if_arg_equal(void) { - if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (sAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_arg_not_equal(void) { - if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (sAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_would_go_first(void) { - if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_would_not_go_first(void) { - if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_nullsub_2A(void) @@ -1087,7 +1087,7 @@ static void BattleAICmd_count_alive_pokemon(void) AI_THINKING_STRUCT->funcResult = 0; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1121,26 +1121,26 @@ static void BattleAICmd_count_alive_pokemon(void) } } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_considered_move(void) { AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_considered_move_effect(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_ability(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1152,7 +1152,7 @@ static void BattleAICmd_get_ability(void) if (BATTLE_HISTORY->abilities[side] != 0) { AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[side]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; return; } @@ -1162,7 +1162,7 @@ static void BattleAICmd_get_ability(void) || gBattleMons[index].ability == ABILITY_ARENA_TRAP) { AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; - gAIScriptPtr += 2; + sAIScriptPtr += 2; return; } @@ -1195,7 +1195,7 @@ static void BattleAICmd_get_ability(void) // The AI knows its own ability. AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_highest_possible_damage(void) @@ -1237,7 +1237,7 @@ static void BattleAICmd_get_highest_possible_damage(void) } } - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_if_type_effectiveness(void) @@ -1267,13 +1267,13 @@ static void BattleAICmd_if_type_effectiveness(void) if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) gBattleMoveDamage = AI_EFFECTIVENESS_x0; - // Store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8. + // Store gBattleMoveDamage in a u8 variable because sAIScriptPtr[1] is a u8. damageVar = gBattleMoveDamage; - if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (damageVar == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_nullsub_32(void) @@ -1292,7 +1292,7 @@ static void BattleAICmd_if_status_in_party(void) u32 statusToCompareTo; // for whatever reason, game freak put the party pointer into 2 variables instead of 1. it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: party = partyPtr = gEnemyParty; @@ -1302,7 +1302,7 @@ static void BattleAICmd_if_status_in_party(void) break; } - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1312,12 +1312,12 @@ static void BattleAICmd_if_status_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); // WHAT. why is this being merged into the above switch return; } } - gAIScriptPtr += 10; + sAIScriptPtr += 10; } // bugged, doesnt return properly. also unused @@ -1328,7 +1328,7 @@ static void BattleAICmd_if_status_not_in_party(void) int i; u32 statusToCompareTo; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: party = partyPtr = gEnemyParty; @@ -1338,7 +1338,7 @@ static void BattleAICmd_if_status_not_in_party(void) break; } - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1348,9 +1348,9 @@ static void BattleAICmd_if_status_not_in_party(void) // everytime the status is found, the AI's logic jumps further and further past its intended destination. this results in a broken AI macro and is probably why it is unused. if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - gAIScriptPtr += 10; // doesnt return? + sAIScriptPtr += 10; // doesnt return? } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); } enum @@ -1374,90 +1374,90 @@ static void BattleAICmd_get_weather(void) if (gBattleWeather & WEATHER_HAIL) AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_HAIL; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_if_effect(void) { - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_not_effect(void) { - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_stat_level_less_than(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] < sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_more_than(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] > sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_equal(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] == sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_not_equal(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] != sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_can_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { - gAIScriptPtr += 5; + sAIScriptPtr += 5; return; } @@ -1477,16 +1477,16 @@ static void BattleAICmd_if_can_faint(void) gBattleMoveDamage = 1; if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_cant_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { - gAIScriptPtr += 5; + sAIScriptPtr += 5; return; } @@ -1504,17 +1504,17 @@ static void BattleAICmd_if_cant_faint(void) // This macro is missing the damage 0 = 1 assumption. if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_has_move(void) { int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: @@ -1524,9 +1524,9 @@ static void BattleAICmd_if_has_move(void) break; } if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; case 0: case 2: @@ -1536,9 +1536,9 @@ static void BattleAICmd_if_has_move(void) break; } if (i == 8) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; } } @@ -1546,9 +1546,9 @@ static void BattleAICmd_if_has_move(void) static void BattleAICmd_if_dont_have_move(void) { int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: @@ -1558,9 +1558,9 @@ static void BattleAICmd_if_dont_have_move(void) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; case 0: case 2: @@ -1570,9 +1570,9 @@ static void BattleAICmd_if_dont_have_move(void) break; } if (i != 8) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; } } @@ -1581,28 +1581,28 @@ static void BattleAICmd_if_move_effect(void) { int i; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; break; case 0: case 2: for (i = 0; i < 8; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) break; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); } } @@ -1610,28 +1610,28 @@ static void BattleAICmd_if_not_move_effect(void) { int i; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 7; + sAIScriptPtr += 7; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); break; case 0: case 2: for (i = 0; i < 8; i++) { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2]) + if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) break; } - gAIScriptPtr += 7; + sAIScriptPtr += 7; } } @@ -1639,56 +1639,56 @@ static void BattleAICmd_if_last_move_did_damage(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if (gAIScriptPtr[2] == 0) + if (sAIScriptPtr[2] == 0) { if (gDisableStructs[index].disabledMove == MOVE_NONE) { - gAIScriptPtr += 7; + sAIScriptPtr += 7; return; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); return; } - else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. + else if (sAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. { - gAIScriptPtr += 7; + sAIScriptPtr += 7; return; } else if (gDisableStructs[index].encoredMove != MOVE_NONE) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); return; } - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_encored(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 0: // _08109348 if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 1: // _08109370 if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; default: - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; } } @@ -1719,9 +1719,9 @@ static void BattleAICmd_frlg_safari(void) var = gBattleStruct->safariEscapeFactor; var *= 5; if ((u8)(Random() % 100) < var) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_watch(void) @@ -1734,7 +1734,7 @@ static void BattleAICmd_get_hold_effect(void) u8 index; u16 side; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1747,104 +1747,104 @@ static void BattleAICmd_get_hold_effect(void) else AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[index].item); - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_gender(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality); - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_is_first_turn(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_stockpile_count(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_is_double_battle(void) { AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_used_held_item(void) { u8 battlerId; - if (gAIScriptPtr[1] == AI_USER) + if (sAIScriptPtr[1] == AI_USER) battlerId = gBattlerAttacker; else battlerId = gBattlerTarget; // This is likely a leftover from Ruby's code and its ugly ewram access. AI_THINKING_STRUCT->funcResult = ((u8 *)gBattleStruct->usedHeldItems)[battlerId * 2]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_move_type_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_move_power_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_move_effect_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_protect_count(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_nullsub_52(void) @@ -1873,13 +1873,13 @@ static void BattleAICmd_nullsub_57(void) static void BattleAICmd_call(void) { - AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + AIStackPushVar(sAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_jump(void) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_end(void) @@ -1890,31 +1890,31 @@ static void BattleAICmd_end(void) static void BattleAICmd_if_level_compare(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 0: // greater than if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 1: // less than if (gBattleMons[gBattlerAttacker].level < gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 2: // equal if (gBattleMons[gBattlerAttacker].level == gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; } } @@ -1922,17 +1922,17 @@ static void BattleAICmd_if_level_compare(void) static void BattleAICmd_if_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_not_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void AIStackPushVar(const u8 *var) @@ -1943,7 +1943,7 @@ static void AIStackPushVar(const u8 *var) // unused static void AIStackPushVar_cursor(void) { - gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr; + gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = sAIScriptPtr; } static bool8 AIStackPop(void) @@ -1951,7 +1951,7 @@ static bool8 AIStackPop(void) if (gBattleResources->AI_ScriptsStack->size != 0) { --gBattleResources->AI_ScriptsStack->size; - gAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size]; + sAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size]; return TRUE; } else diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 980b72d4f..2cca37f7a 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -25,6 +25,8 @@ static void sub_80C99A0(u8 taskId); static void sub_80C9A10(void); static void sub_80C9A60(void); +EWRAM_DATA struct MapPosition gPlayerFacingPosition = {}; + bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) { u8 mapObjId; diff --git a/src/main.c b/src/main.c index 336584ab3..b88326cda 100644 --- a/src/main.c +++ b/src/main.c @@ -115,7 +115,7 @@ void AgbMain() gSoftResetDisabled = FALSE; gHelpSystemEnabled = FALSE; - sub_80F50F4(); + SetNotInSaveFailedScreen(); AGBPrintInit(); @@ -186,7 +186,7 @@ static void InitMainCallbacks(void) static void CallCallbacks(void) { - if (!sub_80F5118() && !RunHelpSystemCallback()) + if (!RunSaveFailedScreen() && !RunHelpSystemCallback()) { if (gMain.callback1) gMain.callback1(); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c new file mode 100644 index 000000000..b6cce890a --- /dev/null +++ b/src/save_failed_screen.c @@ -0,0 +1,231 @@ +#include "global.h" +#include "decompress.h" +#include "dma3.h" +#include "gba/flash_internal.h" +#include "gpu_regs.h" +#include "help_system.h" +#include "m4a.h" +#include "save.h" +#include "save_failed_screen.h" +#include "strings.h" +#include "text.h" + +bool32 sIsInSaveFailedScreen; + +static EWRAM_DATA u16 sSaveType = SAVE_NORMAL; +static EWRAM_DATA u16 unused_203AB4E = 0; +static EWRAM_DATA u8 sSaveFailedScreenState = 0; + +static void BlankPalettes(void); +static void UpdateMapBufferWithText(void); +static void ClearMapBuffer(void); +static void PrintTextOnSaveFailedScreen(const u8 *a0); +static bool32 TryWipeDamagedSectors(void); +static bool32 WipeDamagedSectors(u32 damagedSectors); + +static const u16 sSaveFailedScreenPals[] = INCBIN_U16("graphics/interface/save_failed_screen.gbapal"); + +void SetNotInSaveFailedScreen(void) +{ + sIsInSaveFailedScreen = FALSE; +} + +void DoSaveFailedScreen(u8 saveType) +{ + sSaveType = saveType; + sIsInSaveFailedScreen = TRUE; +} + +bool32 RunSaveFailedScreen(void) +{ + switch (sSaveFailedScreenState) + { + case 0: + if (!sIsInSaveFailedScreen) + return FALSE; + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + SaveCallbacks(); + sSaveFailedScreenState = 1; + break; + case 1: + SaveMapTiles(); + SaveMapGPURegs(); + SaveMapTextColors(); + BlankPalettes(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + sSaveFailedScreenState = 2; + break; + case 2: + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); + RequestDma3Copy(sSaveFailedScreenPals, (void *)PLTT, 0x20, 0); + sSaveFailedScreenState = 3; + break; + case 3: + ClearMapBuffer(); + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_CheckingBackupMemory); + UpdateMapBufferWithText(); + sSaveFailedScreenState = 4; + break; + case 4: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + sSaveFailedScreenState = 5; + break; + case 5: + if (TryWipeDamagedSectors() == TRUE) + { + gSaveSucceeded = SAVE_STATUS_OK; + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_SaveCompleted); + } + else + { + gSaveSucceeded = SAVE_STATUS_ERROR; + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_BackupMemoryDamaged); + } + sSaveFailedScreenState = 6; + break; + case 6: + if (JOY_NEW(A_BUTTON)) + sSaveFailedScreenState = 7; + break; + case 7: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + RestoreMapTiles(); + BlankPalettes(); + sSaveFailedScreenState = 8; + break; + case 8: + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + RestoreMapTextColors(); + RestoreGPURegs(); + RestoreCallbacks(); + sIsInSaveFailedScreen = FALSE; + sSaveFailedScreenState = 0; + break; + } + return TRUE; +} + +static void BlankPalettes(void) +{ + int i; + for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16)) + { + *((u16 *)(BG_PLTT + i)) = RGB_BLACK; + *((u16 *)(OBJ_PLTT + i)) = RGB_BLACK; + } +} + +static void RequestDmaCopyFromScreenBuffer(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0); +} + +static void RequestDmaCopyFromCharBuffer(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0); +} + +static void FillBgMapBufferRect(u16 baseBlock, u8 left, u8 top, u8 width, u8 height, u16 blockOffset) +{ + u16 i, j; + + for (i = top; i < top + height; i++) + { + for (j = left; j < left + width; j++) + { + *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseBlock; + baseBlock += blockOffset; + } + } + RequestDmaCopyFromScreenBuffer(); +} + +static void UpdateMapBufferWithText(void) +{ + FillBgMapBufferRect(0x001, 1, 5, 28, 10, 0x001); +} + +static void ClearMapBuffer(void) +{ + FillBgMapBufferRect(0x000, 0, 0, 30, 20, 0x000); +} + +static void PrintTextOnSaveFailedScreen(const u8 *str) +{ + GenerateFontHalfRowLookupTable(TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); + CpuFill16(PIXEL_FILL(1) | (PIXEL_FILL(1) << 8), gDecompressionBuffer + 0x20, 0x2300); + HelpSystemRenderText(2, gDecompressionBuffer + 0x20, str, 2, 2, 28, 10); + RequestDmaCopyFromCharBuffer(); +} + +static bool32 TryWipeDamagedSectors(void) +{ + int i = 0; + for (i = 0; gDamagedSaveSectors != 0 && i < 3; i++) + { + if (WipeDamagedSectors(gDamagedSaveSectors)) + return FALSE; + HandleSavingData(sSaveType); + } + if (gDamagedSaveSectors != 0) + return FALSE; + return TRUE; +} + +static bool16 VerifySectorWipe(u32 sector) +{ + u16 sector0 = sector; + u16 i; + u32 *saveDataBuffer = (void *)&gSaveDataBuffer; + ReadFlash(sector0, 0, saveDataBuffer, 0x1000); + for (i = 0; i < 0x1000 / sizeof(u32); i++, saveDataBuffer++) + { + if (*saveDataBuffer != 0) + return TRUE; + } + return FALSE; +} + +static bool32 WipeSector(u32 sector) +{ + bool32 result; + u16 i, j; + + i = 0; + while (i < 130) + { + for (j = 0; j < 0x1000; j++) + { + ProgramFlashByte(sector, j, 0); + } + result = VerifySectorWipe(sector); + i++; + if (!result) + break; + } + + return result; +} + +static bool32 WipeDamagedSectors(u32 damagedSectors) +{ + int i; + for (i = 0; i < 32; i++) + { + if (damagedSectors & (1 << i)) + { + if (!WipeSector(i)) + { + damagedSectors &= ~(1 << i); + } + } + } + if (damagedSectors == 0) + return FALSE; + else + return TRUE; +} diff --git a/sym_common.txt b/sym_common.txt index 9f39f9f2b..74e642bc2 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,13 +1,22 @@ + .align 2 .include "main.o" + .align 2 .include "bg.o" + .align 2 .include "text_printer.o" + .align 2 .include "window.o" + .align 2 .include "text.o" + .align 2 .include "sprite.o" + .align 2 .include "link.o" .align 4 .include "battle_main.o" + .align 2 .include "random.o" + .align 2 .include "load_save.o" .align 2 @@ -35,6 +44,7 @@ gUnknown_300502C: @ 300502C gUnknown_3005030: @ 3005030 .space 0x10 + .align 2 .include "fieldmap.o" .align 4 @@ -47,16 +57,21 @@ gUnknown_3005068: @ 3005068 gUnknown_300506C: @ 300506C .space 0x4 + .align 2 .include "scrcmd.o" + .align 2 gSelectedObjectEvent: @ 3005074 .space 0x4 gUnknown_3005078: @ 3005078 .space 0x4 + .align 2 .include "event_data.o" + .align 2 .include "sound.o" + .align 2 .include "task.o" @ what is this? @@ -71,10 +86,8 @@ gUnknown_3005078: @ 3005078 .include "save.o" .align 2 .include "battle_anim_special.o" - -gUnknown_3005430: @ 3005430 - .space 0x10 - + .align 2 + .include "save_failed_screen.o" .align 4 .include "link_rfu_2.o" .align 4 @@ -83,31 +96,23 @@ gUnknown_3005430: @ 3005430 .include "list_menu.o" .align 2 .include "quest_log.o" - -sNumQuestLogs: @ 3005E8C - .space 0x4 - -gUnknown_3005E90: @ 3005E90 - .space 0x4 - -gUnknown_3005E94: @ 3005E94 - .space 0x4 - .align 2 .include "party_menu.o" .align 2 .include "help_system_812B1E0.o" .align 4 .include "fame_checker.o" + .align 2 .include "help_system.o" .align 4 .include "mevent.o" - .align 4 .include "battle_controller_pokedude.o" .align 4 .include "berry_fix_program.o" + .align 2 .include "m4a.o" + .align 2 .include "agb_flash.o" .align 2 .include "librfu_stwi.o" diff --git a/sym_ewram.txt b/sym_ewram.txt index b4e4fc2c0..188ccd3aa 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -16,7 +16,6 @@ .align 2 .include "src/link.o" .space 8 - .align 2 .include "src/battle_controllers.o" .align 2 @@ -144,6 +143,7 @@ gUnknown_20386A4: @ 20386A4 gUnknown_20386A8: @ 20386A8 .space 0x4 + .align 2 .include "src/battle_setup.o" .align 2 .include "src/wild_encounter.o" @@ -154,7 +154,6 @@ gFieldEffectArguments: @ 20386E0 .align 2 .include "src/scanline_effect.o" - .align 2 .include "src/option_menu.o" .align 2 @@ -268,14 +267,10 @@ gUnknown_203998C: @ 203998C .include "src/menu_helpers.o" .align 2 .include "src/region_map.o" - .align 2 -gAIScriptPtr: @ 2039A00 - .space 0x4 - -gPlayerFacingPosition: @ 2039A04 - .space 0x8 - + .include "src/battle_ai_script_commands.o" + .align 2 + .include "src/fldeff_rocksmash.o" .align 2 .include "src/field_specials.o" .align 2 @@ -310,15 +305,13 @@ gPlayerFacingPosition: @ 2039A04 .include "src/diploma.o" .align 2 -gUnknown_203AB4C: @ 203AB4C - .space 0x4 - -gUnknown_203AB50: @ 203AB50 - .space 0x4 + .include "src/save_failed_screen.o" + .align 2 gUnknown_203AB54: @ 203AB54 .space 0x4 + .align 2 .include "src/new_menu_helpers.o" .align 2 .include "src/box_party_pokemon_dropdown.o" @@ -460,6 +453,7 @@ gUnknown_203B0E8: @ 203B0E8 .include "src/oak_speech.o" .align 2 .include "src/tm_case.o" + .align 2 .include "src/menu_indicators.o" gUnknown_203B140: @ 203B140 @@ -506,13 +500,8 @@ gUnknown_203B170: @ 203B170 .include "src/berry_pouch.o" .align 2 .include "src/slot_machine.o" - -sLocationHistory: @ 203F3A8 - .space 0x6 - -sRoamerLocation: @ 203F3AE - .space 0x2 - + .align 2 + .include "src/roamer.o" .align 2 .include "src/mystery_gift_menu.o" .align 2 |