diff options
78 files changed, 6329 insertions, 8747 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index 0bdda588e..e6fbd1886 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1729,7 +1729,7 @@ _080B3248: thumb_func_start sub_80B3254 sub_80B3254: @ 80B3254 push {lr} - bl sub_809FF80 + bl SaveGame pop {r0} bx r0 thumb_func_end sub_80B3254 diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index c1c96272f..7e25c45da 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -326,7 +326,7 @@ _0809C13A: beq _0809C15C movs r0, 0x6 bl PlaySE - bl sub_809FA9C + bl ShowStartMenu _0809C14E: movs r0, 0x1 b _0809C172 diff --git a/asm/field_specials.s b/asm/field_specials.s index d7bb80f30..ca22af002 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -4894,7 +4894,7 @@ sub_813A46C: @ 813A46C lsrs r0, 24 mov r1, sp movs r2, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow ldr r1, =gUnknown_0203AB68 mov r0, sp ldrh r0, [r0] @@ -4903,7 +4903,7 @@ sub_813A46C: @ 813A46C lsls r0, 24 lsrs r0, 24 mov r1, sp - bl sub_81AE838 + bl ListMenuGetCurrentItemArrayId ldrh r0, [r4, 0x1E] ldr r5, =gUnknown_0203AB6A ldrh r1, [r5] @@ -5007,7 +5007,7 @@ sub_813A570: @ 813A570 lsls r0, 24 lsrs r0, 24 mov r1, sp - bl sub_81AE838 + bl ListMenuGetCurrentItemArrayId ldrh r0, [r4, 0x1E] mov r1, sp ldrh r1, [r1] @@ -5019,7 +5019,7 @@ sub_813A570: @ 813A570 lsrs r0, 24 movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldr r0, =gUnknown_0203AB64 ldr r0, [r0] bl Free @@ -6012,7 +6012,7 @@ sub_813ADD4: @ 813ADD4 adds r4, 0x16 add r1, sp, 0x14 adds r2, r4, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow ldrh r0, [r6, 0x22] lsls r0, 24 lsrs r0, 24 @@ -6173,7 +6173,7 @@ sub_813AF48: @ 813AF48 lsrs r0, 24 movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldr r0, =gUnknown_0203AB64 ldr r0, [r0] bl Free diff --git a/asm/item_menu_icons.s b/asm/item_menu_icons.s deleted file mode 100644 index 8068e37c2..000000000 --- a/asm/item_menu_icons.s +++ /dev/null @@ -1,637 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start RemoveBagObject -@ void RemoveBagObject(u8 a1) -RemoveBagObject: @ 80D4CA8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, =gUnknown_0203CE54 - ldr r2, =0x00000804 - adds r1, r4, r2 - ldr r0, [r0] - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, 0xFF - beq _080D4CEE - adds r4, 0x64 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - movs r0, 0xFF - strb r0, [r5] -_080D4CEE: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end RemoveBagObject - - thumb_func_start AddBagVisualObject -@ void AddBagVisualObject(u8 bagPocketId) -AddBagVisualObject: @ 80D4D00 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, =gUnknown_0203CE54 - ldr r4, [r0] - ldr r0, =0x00000804 - adds r4, r0 - ldr r0, =gUnknown_0857FB4C - movs r1, 0x44 - movs r2, 0x42 - movs r3, 0 - bl CreateSprite - strb r0, [r4] - adds r0, r5, 0 - movs r1, 0 - bl SetBagVisualPocketId - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end AddBagVisualObject - - thumb_func_start SetBagVisualPocketId -@ void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) -SetBagVisualPocketId: @ 80D4D38 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - ldr r0, =gUnknown_0203CE54 - ldr r0, [r0] - ldr r2, =0x00000804 - adds r0, r2 - ldrb r2, [r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r2, =gSprites - adds r2, r0, r2 - cmp r1, 0 - beq _080D4D84 - ldr r0, =0x0000fffb - strh r0, [r2, 0x26] - ldr r0, =ObjectCB_BagVisualSwitchingPockets - str r0, [r2, 0x1C] - adds r0, r3, 0x1 - strh r0, [r2, 0x2E] - adds r0, r2, 0 - movs r1, 0 - bl StartSpriteAnim - b _080D4D90 - .pool -_080D4D84: - adds r1, r3, 0x1 - lsls r1, 24 - lsrs r1, 24 - adds r0, r2, 0 - bl StartSpriteAnim -_080D4D90: - pop {r0} - bx r0 - thumb_func_end SetBagVisualPocketId - - thumb_func_start ObjectCB_BagVisualSwitchingPockets -@ void ObjectCB_BagVisualSwitchingPockets(struct obj *object) -ObjectCB_BagVisualSwitchingPockets: @ 80D4D94 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x26] - movs r2, 0x26 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080D4DA8 - adds r0, r1, 0x1 - strh r0, [r4, 0x26] - b _080D4DB8 -_080D4DA8: - ldrh r1, [r4, 0x2E] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080D4DB8: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end ObjectCB_BagVisualSwitchingPockets - - thumb_func_start ShakeBagVisual -@ void ShakeBagVisual() -ShakeBagVisual: @ 80D4DC4 - push {r4,lr} - ldr r0, =gUnknown_0203CE54 - ldr r0, [r0] - ldr r1, =0x00000804 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080D4DF4 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, =ObjectCB_ShakeBagVisual - str r0, [r4, 0x1C] -_080D4DF4: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end ShakeBagVisual - - thumb_func_start ObjectCB_ShakeBagVisual -@ void ObjectCB_ShakeBagVisual(struct obj *object) -ObjectCB_ShakeBagVisual: @ 80D4E0C - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080D4E28 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r0, =SpriteCallbackDummy - str r0, [r4, 0x1C] -_080D4E28: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end ObjectCB_ShakeBagVisual - - thumb_func_start AddSwitchPocketRotatingBallObject -@ void AddSwitchPocketRotatingBallObject(u16 rotationDirection) -AddSwitchPocketRotatingBallObject: @ 80D4E34 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 16 - lsrs r5, 16 - ldr r0, =gUnknown_0203CE54 - ldr r4, [r0] - ldr r0, =0x00000805 - adds r4, r0 - ldr r0, =gUnknown_0857FBA0 - bl LoadSpriteSheet - ldr r0, =gUnknown_0857FBA8 - bl LoadSpritePalette - ldr r0, =gUnknown_0857FBB0 - movs r1, 0x10 - movs r2, 0x10 - movs r3, 0 - bl CreateSprite - strb r0, [r4] - ldr r2, =gSprites - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r5, [r0, 0x2E] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end AddSwitchPocketRotatingBallObject - - thumb_func_start update_switch_pocket_rotating_ball_coords -@ void update_switch_pocket_rotating_ball_coords(struct obj *object) -update_switch_pocket_rotating_ball_coords: @ 80D4E8C - ldrh r2, [r0, 0x30] - ldrh r1, [r0, 0x34] - adds r1, 0x1 - movs r3, 0x1 - ands r1, r3 - subs r2, r1 - adds r1, r0, 0 - adds r1, 0x28 - strb r2, [r1] - ldrh r2, [r0, 0x30] - ldrh r1, [r0, 0x34] - adds r1, 0x1 - ands r1, r3 - subs r2, r1 - adds r0, 0x29 - strb r2, [r0] - bx lr - thumb_func_end update_switch_pocket_rotating_ball_coords - - thumb_func_start ObjectCB_SwitchPocketRotatingBallInit -@ void ObjectCB_SwitchPocketRotatingBallInit(struct obj *object) -ObjectCB_SwitchPocketRotatingBallInit: @ 80D4EB0 - push {r4,lr} - adds r4, r0, 0 - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - movs r0, 0x2E - ldrsh r1, [r4, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080D4ED8 - ldr r0, =gUnknown_0857FB98 - b _080D4EDA - .pool -_080D4ED8: - ldr r0, =gUnknown_0857FB9C -_080D4EDA: - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - adds r0, 0x28 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - strh r0, [r4, 0x30] - adds r0, r4, 0 - adds r0, 0x29 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - strh r0, [r4, 0x30] - adds r0, r4, 0 - bl update_switch_pocket_rotating_ball_coords - ldr r0, =ObjectCB_SwitchPocketRotatingBallContinue - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end ObjectCB_SwitchPocketRotatingBallInit - - thumb_func_start ObjectCB_SwitchPocketRotatingBallContinue -@ void ObjectCB_SwitchPocketRotatingBallContinue(struct obj *object) -ObjectCB_SwitchPocketRotatingBallContinue: @ 80D4F14 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl update_switch_pocket_rotating_ball_coords - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0x10 - bne _080D4F32 - movs r0, 0x1 - bl RemoveBagObject -_080D4F32: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ObjectCB_SwitchPocketRotatingBallContinue - - thumb_func_start AddBagItemIconObject -@ void AddBagItemIconObject(u16 itemId, u8 a2) -AddBagItemIconObject: @ 80D4F38 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r0, =gUnknown_0203CE54 - ldr r2, =0x00000806 - adds r1, r4, r2 - ldr r0, [r0] - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, 0xFF - bne _080D4F86 - adds r4, 0x66 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl AddItemIconSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080D4F86 - strb r2, [r5] - ldr r1, =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0x18 - strh r1, [r0, 0x24] - movs r1, 0x58 - strh r1, [r0, 0x26] -_080D4F86: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end AddBagItemIconObject - - thumb_func_start RemoveBagItemIconObject -@ void RemoveBagItemIconObject(u8 a1) -RemoveBagItemIconObject: @ 80D4F98 - push {lr} - lsls r0, 24 - movs r1, 0x80 - lsls r1, 18 - adds r0, r1 - lsrs r0, 24 - bl RemoveBagObject - pop {r0} - bx r0 - thumb_func_end RemoveBagItemIconObject - - thumb_func_start sub_80D4FAC -sub_80D4FAC: @ 80D4FAC - push {lr} - ldr r0, =gUnknown_0203CE54 - ldr r0, [r0] - ldr r1, =0x00000808 - adds r0, r1 - movs r1, 0x8 - bl sub_8122344 - pop {r0} - bx r0 - .pool - thumb_func_end sub_80D4FAC - - thumb_func_start sub_80D4FC8 -sub_80D4FC8: @ 80D4FC8 - push {lr} - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, =gUnknown_0203CE54 - ldr r0, [r0] - ldr r1, =0x00000808 - adds r0, r1 - movs r1, 0x8 - bl sub_81223FC - pop {r0} - bx r0 - .pool - thumb_func_end sub_80D4FC8 - - thumb_func_start sub_80D4FEC -sub_80D4FEC: @ 80D4FEC - push {lr} - adds r3, r0, 0 - lsls r3, 24 - ldr r0, =gUnknown_0203CE54 - ldr r0, [r0] - ldr r1, =0x00000808 - adds r0, r1 - lsrs r3, 4 - movs r1, 0x80 - lsls r1, 13 - adds r3, r1 - lsrs r3, 16 - movs r1, 0x88 - movs r2, 0x78 - bl sub_8122448 - pop {r0} - bx r0 - .pool - thumb_func_end sub_80D4FEC - - thumb_func_start sub_80D5018 -sub_80D5018: @ 80D5018 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - movs r2, 0x80 - lsls r2, 4 - adds r0, r4, 0 - movs r1, 0 - bl memset - movs r0, 0x80 - lsls r0, 1 - adds r4, r0 - movs r7, 0 -_080D5036: - adds r4, 0x20 - movs r5, 0 - adds r1, r7, 0x1 - mov r8, r1 -_080D503E: - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0x20 - bl memcpy - adds r4, 0x20 - adds r6, 0x20 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080D503E - cmp r7, 0x5 - beq _080D505C - adds r4, 0x20 -_080D505C: - mov r1, r8 - lsls r0, r1, 24 - lsrs r7, r0, 24 - cmp r7, 0x5 - bls _080D5036 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80D5018 - - thumb_func_start sub_80D5070 -sub_80D5070: @ 80D5070 - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - cmp r4, 0x2A - bne _080D5082 - bl IsEnigmaBerryValid -_080D5082: - ldr r5, =gBerryPicTable - lsls r4, 3 - adds r0, r5, 0x4 - adds r0, r4, r0 - ldr r0, [r0] - str r0, [sp] - ldr r1, =0xffff0000 - ldr r0, [sp, 0x4] - ands r0, r1 - ldr r1, =0x00007544 - orrs r0, r1 - str r0, [sp, 0x4] - mov r0, sp - bl LoadCompressedObjectPalette - adds r4, r5 - ldr r0, [r4] - ldr r4, =0x0201d000 - adds r1, r4, 0 - bl LZDecompressWram - ldr r0, =0xfffff000 - adds r1, r4, r0 - adds r0, r4, 0 - bl sub_80D5018 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80D5070 - - thumb_func_start CreateBerryTagSprite -CreateBerryTagSprite: @ 80D50D4 - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - bl sub_80D5070 - ldr r0, =gUnknown_0857FBEC - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end CreateBerryTagSprite - - thumb_func_start FreeBerryTagSpritePalette -FreeBerryTagSpritePalette: @ 80D510C - push {lr} - ldr r0, =0x00007544 - bl FreeSpritePaletteByTag - pop {r0} - bx r0 - .pool - thumb_func_end FreeBerryTagSpritePalette - - thumb_func_start sub_80D511C -sub_80D511C: @ 80D511C - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, =0x00007544 - bl FreeSpritePaletteByTag - adds r0, r4, 0 - bl sub_80D5070 - ldr r0, =gUnknown_0857FC7C - adds r1, r5, 0 - adds r2, r6, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - adds r4, r1, 0 - mov r0, r8 - cmp r0, 0x1 - bne _080D5172 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, =gSprites - adds r0, r1 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080D5172: - adds r0, r4, 0 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .pool - thumb_func_end sub_80D511C - - thumb_func_start CreateBerryFlavorCircleSprite -CreateBerryFlavorCircleSprite: @ 80D518C - push {lr} - adds r1, r0, 0 - ldr r0, =gUnknown_0857FE10 - lsls r1, 16 - asrs r1, 16 - movs r2, 0x74 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .pool - thumb_func_end CreateBerryFlavorCircleSprite - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/learn_move.s b/asm/learn_move.s index 56f6f84c7..a33bd11b6 100644 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -903,7 +903,7 @@ sub_8160EA0: @ 8160EA0 ldrb r0, [r0] ldr r1, =gUnknown_0203BC38 adds r2, r1, 0x2 - bl sub_81AE6C8 + bl DestroyListMenuTask bl FreeAllWindowBuffers ldr r0, [r4] bl Free @@ -988,7 +988,7 @@ sub_8160F50: @ 8160F50 ldr r4, =gUnknown_0203BC38 adds r2, r4, 0x2 adds r1, r4, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r5, r0 diff --git a/asm/list_menu.s b/asm/list_menu.s deleted file mode 100644 index 58719093c..000000000 --- a/asm/list_menu.s +++ /dev/null @@ -1,1643 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ListMenuDummyTask -@ void ListMenuDummyTask(u8 taskId) -ListMenuDummyTask: @ 81AE458 - bx lr - thumb_func_end ListMenuDummyTask - - thumb_func_start DoMysteryGiftListMenu -@ int DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, int a3, int a4, int a5) -DoMysteryGiftListMenu: @ 81AE45C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r12, r0 - str r1, [sp] - ldr r0, [sp, 0x28] - lsls r2, 24 - lsrs r6, r2, 24 - mov r10, r6 - lsls r3, 16 - lsrs r7, r3, 16 - str r7, [sp, 0x4] - lsls r0, 16 - mov r8, r0 - lsrs r0, 16 - mov r9, r0 - ldr r5, =gUnknown_0203CE84 - ldrb r4, [r5, 0x4] - cmp r4, 0x1 - beq _081AE4F4 - cmp r4, 0x1 - ble _081AE492 - cmp r4, 0x2 - beq _081AE558 -_081AE492: - mov r0, r12 - bl AddWindow - strb r0, [r5, 0x5] - cmp r6, 0x1 - beq _081AE4B0 - cmp r6, 0x2 - bne _081AE4C0 - ldrb r0, [r5, 0x5] - mov r1, r9 - lsls r2, r1, 24 - lsrs r2, 24 - adds r1, r7, 0 - bl sub_809882C -_081AE4B0: - ldrb r0, [r5, 0x5] - mov r3, r8 - lsrs r2, r3, 20 - lsls r2, 24 - lsrs r2, 24 - ldr r1, [sp, 0x4] - bl sub_8098858 -_081AE4C0: - ldr r0, =gMultiuseListMenuTemplate - adds r2, r0, 0 - ldr r1, [sp] - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldr r4, =gUnknown_0203CE84 - ldrb r1, [r4, 0x5] - strb r1, [r0, 0x10] - movs r1, 0 - movs r2, 0 - bl ListMenuInit - strb r0, [r4, 0x6] - ldrb r0, [r4, 0x5] - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x1 - strb r0, [r4, 0x4] - b _081AE570 - .pool -_081AE4F4: - ldrb r0, [r5, 0x6] - bl ListMenuHandleInputGetItemId - str r0, [r5] - ldr r1, =gMain - ldrh r0, [r1, 0x2E] - ands r4, r0 - cmp r4, 0 - beq _081AE50A - movs r0, 0x2 - strb r0, [r5, 0x4] -_081AE50A: - ldrh r1, [r1, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081AE51E - movs r0, 0x2 - negs r0, r0 - str r0, [r5] - movs r0, 0x2 - strb r0, [r5, 0x4] -_081AE51E: - ldrb r0, [r5, 0x4] - cmp r0, 0x2 - bne _081AE570 - cmp r6, 0 - bne _081AE534 - ldrb r0, [r5, 0x5] - bl ClearWindowTilemap - b _081AE546 - .pool -_081AE534: - mov r4, r10 - cmp r4, 0 - blt _081AE546 - cmp r4, 0x2 - bgt _081AE546 - ldrb r0, [r5, 0x5] - movs r1, 0 - bl sub_819746C -_081AE546: - ldr r0, =gUnknown_0203CE84 - ldrb r0, [r0, 0x5] - movs r1, 0x1 - bl CopyWindowToVram - b _081AE570 - .pool -_081AE558: - ldrb r0, [r5, 0x6] - movs r1, 0 - movs r2, 0 - bl sub_81AE6C8 - ldrb r0, [r5, 0x5] - bl RemoveWindow - movs r0, 0 - strb r0, [r5, 0x4] - ldr r0, [r5] - b _081AE574 -_081AE570: - movs r0, 0x1 - negs r0, r0 -_081AE574: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end DoMysteryGiftListMenu - - thumb_func_start ListMenuInit -@ u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) -ListMenuInit: @ 81AE584 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - bl ListMenuInitInternal - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5, 0x10] - bl PutWindowTilemap - ldrb r0, [r5, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end ListMenuInit - - thumb_func_start Unused_ListMenuInit2 -@ u8 Unused_ListMenuInit2(struct ListMenuTemplate *listMenuTemplate, int a2, u16 scrollOffset, u16 selectedRow) -Unused_ListMenuInit2: @ 81AE5B0 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r0, 0 - adds r4, r1, 0 - adds r1, r2, 0 - adds r2, r3, 0 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - bl ListMenuInitInternal - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r4, 0x4] - cmp r0, 0xFF - beq _081AE5F0 - adds r5, r4, 0 -_081AE5D4: - ldrb r0, [r6, 0x10] - ldrb r1, [r5] - ldrb r2, [r5, 0x1] - ldrb r3, [r5, 0x2] - ldrb r4, [r5, 0x3] - str r4, [sp] - ldrb r4, [r5, 0x4] - str r4, [sp, 0x4] - bl PutWindowRectTilemapOverridePalette - adds r5, 0x8 - ldrb r0, [r5, 0x4] - cmp r0, 0xFF - bne _081AE5D4 -_081AE5F0: - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - adds r0, r7, 0 - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end Unused_ListMenuInit2 - - thumb_func_start ListMenuHandleInputGetItemId -@ int ListMenuHandleInputGetItemId(u8 taskId) -ListMenuHandleInputGetItemId: @ 81AE604 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r3, r1, r0 - ldr r2, =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _081AE638 - ldrh r0, [r3, 0x18] - ldrh r1, [r3, 0x1A] - adds r0, r1 - ldr r1, [r3] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - b _081AE6C2 - .pool -_081AE638: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _081AE646 - movs r0, 0x2 - negs r0, r0 - b _081AE6C2 -_081AE646: - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _081AE65A - adds r0, r3, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0 - b _081AE6BA -_081AE65A: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081AE66A - adds r0, r3, 0 - movs r1, 0x1 - movs r2, 0x1 - b _081AE6B8 -_081AE66A: - ldrb r0, [r3, 0x16] - lsrs r0, 6 - cmp r0, 0x1 - beq _081AE680 - cmp r0, 0x1 - ble _081AE67A - cmp r0, 0x2 - beq _081AE68C -_081AE67A: - movs r2, 0 - movs r0, 0 - b _081AE6A0 -_081AE680: - movs r0, 0x20 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r0, 0x10 - b _081AE69A -_081AE68C: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r0, 0x80 - lsls r0, 1 -_081AE69A: - ands r0, r1 - lsls r0, 16 - lsrs r0, 16 -_081AE6A0: - cmp r2, 0 - beq _081AE6AE - ldrb r2, [r3, 0xE] - adds r0, r3, 0 - movs r1, 0x1 - movs r3, 0 - b _081AE6BA -_081AE6AE: - cmp r0, 0 - beq _081AE6BE - ldrb r2, [r3, 0xE] - adds r0, r3, 0 - movs r1, 0x1 -_081AE6B8: - movs r3, 0x1 -_081AE6BA: - bl ListMenuChangeSelection -_081AE6BE: - movs r0, 0x1 - negs r0, r0 -_081AE6C2: - pop {r1} - bx r1 - thumb_func_end ListMenuHandleInputGetItemId - - thumb_func_start sub_81AE6C8 -sub_81AE6C8: @ 81AE6C8 - push {r4,lr} - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r1, r0, r1 - cmp r3, 0 - beq _081AE6E4 - ldrh r0, [r1, 0x18] - strh r0, [r3] -_081AE6E4: - cmp r2, 0 - beq _081AE6EC - ldrh r0, [r1, 0x1A] - strh r0, [r2] -_081AE6EC: - ldrb r0, [r1, 0x1E] - cmp r0, 0xFF - beq _081AE6FC - ldrb r1, [r1, 0x17] - lsrs r1, 6 - subs r1, 0x2 - bl ListMenuRemoveCursorObject -_081AE6FC: - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE6C8 - - thumb_func_start sub_81AE70C -sub_81AE70C: @ 81AE70C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - ldrb r0, [r4, 0x10] - ldrb r2, [r4, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r4, 0x18] - ldrh r3, [r4, 0xE] - adds r0, r4, 0 - movs r2, 0 - bl ListMenuPrintEntries - adds r0, r4, 0 - bl ListMenuDrawCursor - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE70C - - thumb_func_start sub_81AE750 -sub_81AE750: @ 81AE750 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - lsrs r1, 20 - ldrb r6, [r4, 0x14] - movs r5, 0xF - adds r0, r5, 0 - ands r0, r6 - orrs r0, r1 - strb r0, [r4, 0x14] - ands r2, r5 - ldrb r1, [r4, 0x15] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - orrs r0, r2 - lsrs r3, 20 - ands r0, r5 - orrs r0, r3 - strb r0, [r4, 0x15] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE750 - - thumb_func_start sub_81AE794 -sub_81AE794: @ 81AE794 - push {r4,r5,lr} - adds r3, r1, 0 - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - ldrb r0, [r4, 0x10] - movs r1, 0x1 - adds r2, r3, 0 - bl SetWindowAttribute - ldrb r0, [r4, 0x10] - movs r1, 0x2 - adds r2, r5, 0 - bl SetWindowAttribute - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE794 - - thumb_func_start sub_81AE7D0 -sub_81AE7D0: @ 81AE7D0 - push {r4-r7,lr} - sub sp, 0x20 - mov r12, r2 - ldr r5, [sp, 0x34] - lsls r3, 16 - lsrs r3, 16 - adds r4, r3, 0 - mov r3, sp - ldm r0!, {r2,r6,r7} - stm r3!, {r2,r6,r7} - ldm r0!, {r2,r6,r7} - stm r3!, {r2,r6,r7} - mov r0, sp - movs r3, 0 - strh r1, [r0, 0x18] - mov r1, r12 - strh r1, [r0, 0x1A] - strb r3, [r0, 0x1C] - strb r3, [r0, 0x1D] - cmp r4, 0x40 - bne _081AE804 - movs r1, 0 - movs r2, 0x1 - movs r3, 0 - bl ListMenuChangeSelection -_081AE804: - cmp r4, 0x80 - bne _081AE814 - mov r0, sp - movs r1, 0 - movs r2, 0x1 - movs r3, 0x1 - bl ListMenuChangeSelection -_081AE814: - cmp r5, 0 - beq _081AE81E - mov r0, sp - ldrh r0, [r0, 0x18] - strh r0, [r5] -_081AE81E: - ldr r2, [sp, 0x38] - cmp r2, 0 - beq _081AE82A - mov r0, sp - ldrh r0, [r0, 0x1A] - strh r0, [r2] -_081AE82A: - movs r0, 0x1 - negs r0, r0 - add sp, 0x20 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_81AE7D0 - - thumb_func_start sub_81AE838 -sub_81AE838: @ 81AE838 - push {lr} - adds r2, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r1, r0 - cmp r2, 0 - beq _081AE856 - ldrh r0, [r1, 0x1A] - ldrh r1, [r1, 0x18] - adds r0, r1 - strh r0, [r2] -_081AE856: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE838 - - thumb_func_start sub_81AE860 -sub_81AE860: @ 81AE860 - push {lr} - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r1, r0 - cmp r3, 0 - beq _081AE87A - ldrh r0, [r1, 0x18] - strh r0, [r3] -_081AE87A: - cmp r2, 0 - beq _081AE882 - ldrh r0, [r1, 0x1A] - strh r0, [r2] -_081AE882: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AE860 - - thumb_func_start ListMenuGetYCoordForPrintingArrowCursor -@ u8 ListMenuGetYCoordForPrintingArrowCursor(u8 taskId) -ListMenuGetYCoordForPrintingArrowCursor: @ 81AE88C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r4, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x1A] - adds r2, r1, 0 - muls r2, r0 - adds r1, r2, 0 - ldrb r0, [r4, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end ListMenuGetYCoordForPrintingArrowCursor - - thumb_func_start ListMenuInitInternal -@ u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) -ListMenuInitInternal: @ 81AE8D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - ldr r0, =ListMenuDummyTask - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r7, r0, r1 - adds r0, r7, 0 - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - ldm r4!, {r1-r3} - stm r0!, {r1-r3} - movs r1, 0 - strh r5, [r7, 0x18] - strh r6, [r7, 0x1A] - strb r1, [r7, 0x1C] - strb r1, [r7, 0x1D] - movs r0, 0xFF - strb r0, [r7, 0x1E] - strb r1, [r7, 0x1F] - ldr r3, =gUnknown_03006300 - ldrb r1, [r7, 0x14] - movs r5, 0xF - lsrs r1, 4 - ldrb r4, [r3] - movs r2, 0x10 - negs r2, r2 - adds r0, r2, 0 - ands r0, r4 - orrs r0, r1 - strb r0, [r3] - ldrb r1, [r7, 0x15] - lsls r1, 28 - lsrs r1, 24 - ands r0, r5 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r7, 0x15] - lsrs r0, 4 - ands r5, r0 - ldrb r0, [r3, 0x1] - ands r2, r0 - orrs r2, r5 - strb r2, [r3, 0x1] - ldrb r1, [r7, 0x16] - lsls r1, 29 - lsrs r1, 17 - ldr r0, [r3] - ldr r2, =0xfffc0fff - ands r0, r2 - orrs r0, r1 - str r0, [r3] - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - strb r0, [r3, 0x3] - ldrh r0, [r7, 0xC] - ldrh r1, [r7, 0xE] - cmp r0, r1 - bcs _081AE96C - strh r0, [r7, 0xE] -_081AE96C: - ldrb r0, [r7, 0x10] - ldrb r2, [r7, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r7, 0x18] - ldrh r3, [r7, 0xE] - adds r0, r7, 0 - movs r2, 0 - bl ListMenuPrintEntries - adds r0, r7, 0 - bl ListMenuDrawCursor - adds r0, r7, 0 - movs r1, 0x1 - bl ListMenuCallSelectionChangedCallback - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .pool - thumb_func_end ListMenuInitInternal - - thumb_func_start ListMenuPrint -@ void ListMenuPrint(struct ListMenu *listMenu, u8 *str, u8 x, u8 y) -ListMenuPrint: @ 81AE9B4 - push {r4-r7,lr} - sub sp, 0x18 - adds r4, r0, 0 - adds r6, r1, 0 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - ldr r5, =gUnknown_03006300 - ldrb r1, [r5, 0x3] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _081AEA20 - add r1, sp, 0x14 - ldr r2, [r5] - lsls r0, r2, 24 - lsrs r0, 28 - movs r3, 0 - strb r0, [r1] - lsls r0, r2, 28 - lsrs r0, 28 - strb r0, [r1, 0x1] - lsls r0, r2, 20 - lsrs r0, 28 - strb r0, [r1, 0x2] - ldrb r0, [r4, 0x10] - lsls r1, r2, 1 - lsrs r1, 25 - lsls r2, 14 - lsrs r2, 26 - str r2, [sp] - str r3, [sp, 0x4] - add r2, sp, 0x14 - str r2, [sp, 0x8] - movs r2, 0x1 - negs r2, r2 - str r2, [sp, 0xC] - str r6, [sp, 0x10] - adds r2, r7, 0 - mov r3, r12 - bl AddTextPrinterParameterized2 - ldrb r1, [r5, 0x3] - movs r0, 0x7F - ands r0, r1 - strb r0, [r5, 0x3] - b _081AEA5E - .pool -_081AEA20: - add r2, sp, 0x14 - ldrb r1, [r4, 0x15] - lsls r0, r1, 28 - lsrs r0, 28 - strb r0, [r2] - ldrb r0, [r4, 0x14] - lsrs r0, 4 - strb r0, [r2, 0x1] - adds r0, r2, 0 - lsls r1, 24 - lsrs r1, 28 - strb r1, [r0, 0x2] - ldrb r0, [r4, 0x10] - ldrb r1, [r4, 0x17] - lsls r1, 26 - lsrs r1, 26 - ldrb r2, [r4, 0x16] - lsls r2, 29 - lsrs r2, 29 - str r2, [sp] - str r3, [sp, 0x4] - add r2, sp, 0x14 - str r2, [sp, 0x8] - movs r2, 0x1 - negs r2, r2 - str r2, [sp, 0xC] - str r6, [sp, 0x10] - adds r2, r7, 0 - mov r3, r12 - bl AddTextPrinterParameterized2 -_081AEA5E: - add sp, 0x18 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuPrint - - thumb_func_start ListMenuPrintEntries -@ void ListMenuPrintEntries(struct ListMenu *listMenu, u16 startIndex, u16 yOffset, u16 count) -ListMenuPrintEntries: @ 81AEA68 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r4, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp] - lsls r3, 16 - lsrs r3, 16 - mov r10, r3 - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r4, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0 - mov r8, r0 - cmp r8, r10 - bge _081AEB10 -_081AEAAA: - ldr r0, [r4] - mov r2, r9 - lsls r1, r2, 3 - adds r0, r1, r0 - ldr r2, [r0, 0x4] - movs r0, 0x3 - negs r0, r0 - adds r5, r1, 0 - cmp r2, r0 - beq _081AEAC2 - ldrb r6, [r4, 0x12] - b _081AEAC4 -_081AEAC2: - ldrb r6, [r4, 0x11] -_081AEAC4: - ldr r0, [sp] - add r0, r8 - ldr r2, [sp, 0x4] - adds r1, r0, 0 - muls r1, r2 - ldrb r0, [r4, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 24 - lsrs r2, r0, 24 - adds r7, r2, 0 - ldr r3, [r4, 0x8] - cmp r3, 0 - beq _081AEAEE - ldrb r0, [r4, 0x10] - ldr r1, [r4] - adds r1, r5, r1 - ldr r1, [r1, 0x4] - bl _call_via_r3 -_081AEAEE: - ldr r0, [r4] - adds r0, r5, r0 - ldr r1, [r0] - adds r0, r4, 0 - adds r2, r6, 0 - adds r3, r7, 0 - bl ListMenuPrint - mov r0, r9 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - movs r0, 0x1 - add r8, r0 - cmp r8, r10 - blt _081AEAAA -_081AEB10: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuPrintEntries - - thumb_func_start ListMenuDrawCursor -@ void ListMenuDrawCursor(struct ListMenu *listMenu) -ListMenuDrawCursor: @ 81AEB20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldrb r0, [r6, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r6, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r6, 0x13] - mov r8, r1 - ldrh r1, [r6, 0x1A] - muls r1, r0 - ldrb r0, [r6, 0x14] - lsls r0, 28 - lsrs r0, 28 - adds r0, r1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r0, [r6, 0x17] - lsrs r0, 6 - cmp r0, 0x1 - beq _081AEC0C - cmp r0, 0x1 - bgt _081AEB66 - cmp r0, 0 - beq _081AEB70 - b _081AEC0C -_081AEB66: - cmp r0, 0x2 - beq _081AEB84 - cmp r0, 0x3 - beq _081AEBCC - b _081AEC0C -_081AEB70: - ldr r1, =gText_SelectorArrow2 - adds r0, r6, 0 - mov r2, r8 - adds r3, r7, 0 - bl ListMenuPrint - b _081AEC0C - .pool -_081AEB84: - ldrb r0, [r6, 0x1E] - cmp r0, 0xFF - bne _081AEB94 - adds r0, r6, 0 - movs r1, 0 - bl ListMenuAddCursorObject - strb r0, [r6, 0x1E] -_081AEB94: - ldrb r5, [r6, 0x1E] - ldrb r0, [r6, 0x10] - movs r1, 0x1 - bl GetWindowAttribute - adds r4, r0, 0 - lsls r4, 19 - ldr r0, =0xffff0000 - adds r4, r0 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl GetWindowAttribute - adds r2, r0, 0 - lsls r2, 3 - adds r2, r7 - subs r2, 0x1 - lsls r2, 16 - lsrs r2, 16 - adds r0, r5, 0 - adds r1, r4, 0 - movs r3, 0 - bl ListMenuUpdateCursorObject - b _081AEC0C - .pool -_081AEBCC: - ldrb r0, [r6, 0x1E] - cmp r0, 0xFF - bne _081AEBDC - adds r0, r6, 0 - movs r1, 0x1 - bl ListMenuAddCursorObject - strb r0, [r6, 0x1E] -_081AEBDC: - ldrb r5, [r6, 0x1E] - ldrb r0, [r6, 0x10] - movs r1, 0x1 - bl GetWindowAttribute - adds r4, r0, 0 - lsls r4, 3 - add r4, r8 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x2 - bl GetWindowAttribute - adds r2, r0, 0 - lsls r2, 3 - adds r2, r7 - lsls r2, 16 - lsrs r2, 16 - adds r0, r5, 0 - adds r1, r4, 0 - movs r3, 0x1 - bl ListMenuUpdateCursorObject -_081AEC0C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuDrawCursor - - thumb_func_start ListMenuAddCursorObject -ListMenuAddCursorObject: @ 81AEC18 - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r1, 0 - mov r1, sp - movs r0, 0 - strb r0, [r1] - movs r0, 0xA0 - strb r0, [r1, 0x1] - ldrb r0, [r4, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - mov r1, sp - lsls r0, 3 - adds r0, 0x2 - strh r0, [r1, 0x2] - ldrb r0, [r4, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - mov r1, sp - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x2 - strh r0, [r1, 0x4] - movs r0, 0x80 - lsls r0, 7 - strh r0, [r1, 0x6] - ldr r0, =0x0000ffff - strh r0, [r1, 0x8] - movs r0, 0xF - strb r0, [r1, 0xA] - mov r0, sp - adds r1, r5, 0 - bl ListMenuAddCursorObjectInternal - lsls r0, 24 - lsrs r0, 24 - add sp, 0xC - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end ListMenuAddCursorObject - - thumb_func_start ListMenuErasePrintedCursor -ListMenuErasePrintedCursor: @ 81AEC78 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r7, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - ldrb r1, [r7, 0x17] - lsrs r0, r1, 6 - cmp r0, 0 - bne _081AECF4 - lsls r0, r1, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - adds r4, r0, 0 - ldrb r0, [r7, 0x16] - lsls r0, 26 - lsrs r0, 29 - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldrb r0, [r7, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r0, 24 - ldrb r6, [r7, 0x10] - ldrb r2, [r7, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - ldrb r2, [r7, 0x13] - mov r3, r8 - muls r3, r4 - adds r4, r3, 0 - ldrb r3, [r7, 0x14] - lsls r3, 28 - lsrs r3, 28 - adds r3, r4 - lsls r3, 16 - lsrs r3, 16 - str r5, [sp] - str r0, [sp, 0x4] - adds r0, r6, 0 - bl FillWindowPixelRect -_081AECF4: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuErasePrintedCursor - - thumb_func_start ListMenuUpdateSelectedRowIndexAndScrollOffset -@ u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(int, bool8 movingDown) -ListMenuUpdateSelectedRowIndexAndScrollOffset: @ 81AED00 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - ldrh r3, [r4, 0x1A] - ldrh r5, [r4, 0x18] - cmp r1, 0 - bne _081AED74 - ldrh r0, [r4, 0xE] - cmp r0, 0x1 - bne _081AED18 - movs r2, 0 - b _081AED2A -_081AED18: - ldrh r0, [r4, 0xE] - lsrs r2, r0, 1 - movs r1, 0x1 - ands r1, r0 - adds r2, r1 - subs r0, r2 - subs r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 -_081AED2A: - cmp r5, 0 - bne _081AED50 - cmp r3, 0 - beq _081AEDB6 - ldr r1, [r4] - movs r2, 0x3 - negs r2, r2 -_081AED38: - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r2 - bne _081AEDBA - cmp r3, 0 - bne _081AED38 - b _081AEDB6 -_081AED50: - cmp r3, r2 - bls _081AED70 - ldr r1, [r4] - movs r6, 0x3 - negs r6, r6 -_081AED5A: - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _081AEDBA - cmp r3, r2 - bhi _081AED5A -_081AED70: - subs r0, r5, 0x1 - b _081AEDE2 -_081AED74: - ldrh r0, [r4, 0xE] - cmp r0, 0x1 - bne _081AED7E - movs r2, 0 - b _081AED88 -_081AED7E: - ldrh r0, [r4, 0xE] - lsrs r2, r0, 1 - movs r1, 0x1 - ands r1, r0 - adds r2, r1 -_081AED88: - adds r1, r0, 0 - ldrh r0, [r4, 0xC] - subs r0, r1 - cmp r5, r0 - bne _081AEDC0 - subs r0, r1, 0x1 - cmp r3, r0 - bge _081AEDB6 - ldr r2, [r4] - movs r6, 0x3 - negs r6, r6 - adds r1, r0, 0 -_081AEDA0: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r2 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _081AEDBA - cmp r3, r1 - blt _081AEDA0 -_081AEDB6: - movs r0, 0 - b _081AEDE8 -_081AEDBA: - strh r3, [r4, 0x1A] - movs r0, 0x1 - b _081AEDE8 -_081AEDC0: - cmp r3, r2 - bcs _081AEDE0 - ldr r1, [r4] - movs r6, 0x3 - negs r6, r6 -_081AEDCA: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r0, r5, r3 - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - cmp r0, r6 - bne _081AEDBA - cmp r3, r2 - bcc _081AEDCA -_081AEDE0: - adds r0, r5, 0x1 -_081AEDE2: - strh r2, [r4, 0x1A] - strh r0, [r4, 0x18] - movs r0, 0x2 -_081AEDE8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end ListMenuUpdateSelectedRowIndexAndScrollOffset - - thumb_func_start ListMenuScroll -@ void ListMenuScroll(struct ListMenu *listMenu, int a2, bool8 movingDown) -ListMenuScroll: @ 81AEDF0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r6, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - adds r7, r5, 0 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldrh r0, [r6, 0xE] - cmp r5, r0 - bcc _081AEE2A - ldrb r0, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - bl FillWindowPixelBuffer - ldrh r1, [r6, 0x18] - ldrh r3, [r6, 0xE] - adds r0, r6, 0 - movs r2, 0 - bl ListMenuPrintEntries - b _081AEF1A -_081AEE2A: - ldrb r0, [r6, 0x17] - lsls r0, 26 - lsrs r0, 26 - movs r1, 0x1 - bl GetFontAttribute - ldrb r1, [r6, 0x16] - lsls r1, 26 - lsrs r1, 29 - adds r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - mov r1, r8 - cmp r1, 0 - bne _081AEEBC - ldrb r0, [r6, 0x10] - adds r2, r5, 0 - muls r2, r4 - lsls r2, 24 - lsrs r2, 24 - ldrb r1, [r6, 0x15] - lsls r1, 28 - lsrs r3, r1, 4 - orrs r3, r1 - lsrs r3, 24 - movs r1, 0x1 - bl ScrollWindow - ldrh r1, [r6, 0x18] - adds r0, r6, 0 - movs r2, 0 - adds r3, r5, 0 - bl ListMenuPrintEntries - ldrh r0, [r6, 0xE] - adds r1, r0, 0 - muls r1, r4 - adds r0, r1, 0 - ldrb r4, [r6, 0x14] - lsls r4, 28 - lsrs r4, 28 - adds r4, r0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - adds r5, r0, 0 - lsls r5, 19 - lsrs r5, 16 - ldrb r0, [r6, 0x10] - movs r1, 0x4 - bl GetWindowAttribute - lsls r0, 3 - subs r0, r4 - lsls r0, 16 - lsrs r0, 16 - ldrb r3, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - str r5, [sp] - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r2, 0 - adds r3, r4, 0 - bl FillWindowPixelRect - b _081AEF1A -_081AEEBC: - ldrb r0, [r6, 0x10] - adds r2, r7, 0 - muls r2, r4 - lsls r2, 24 - lsrs r2, 24 - ldrb r1, [r6, 0x15] - lsls r1, 28 - lsrs r3, r1, 4 - orrs r3, r1 - lsrs r3, 24 - movs r1, 0 - bl ScrollWindow - ldrh r2, [r6, 0xE] - subs r2, r7 - ldrh r1, [r6, 0x18] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - adds r0, r6, 0 - adds r3, r7, 0 - bl ListMenuPrintEntries - ldrb r0, [r6, 0x10] - movs r1, 0x3 - bl GetWindowAttribute - lsls r0, 19 - lsrs r0, 16 - ldrb r3, [r6, 0x10] - ldrb r2, [r6, 0x15] - lsls r2, 28 - lsrs r1, r2, 4 - orrs r1, r2 - lsrs r1, 24 - str r0, [sp] - ldrb r0, [r6, 0x14] - lsls r0, 28 - lsrs r0, 28 - str r0, [sp, 0x4] - adds r0, r3, 0 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect -_081AEF1A: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ListMenuScroll - - thumb_func_start ListMenuChangeSelection -@ bool8 ListMenuChangeSelection(struct ListMenu *listMenu, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown) -ListMenuChangeSelection: @ 81AEF28 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - ldrh r0, [r4, 0x1A] - mov r10, r0 - movs r7, 0 - movs r5, 0 - movs r0, 0 - cmp r7, r8 - bcs _081AEF90 -_081AEF56: - adds r6, r0, 0x1 - b _081AEF76 -_081AEF5A: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrh r0, [r4, 0x18] - ldrh r1, [r4, 0x1A] - adds r0, r1 - ldr r1, [r4] - lsls r0, 3 - adds r0, r1 - ldr r1, [r0, 0x4] - movs r0, 0x3 - negs r0, r0 - cmp r1, r0 - bne _081AEF88 -_081AEF76: - adds r0, r4, 0 - mov r1, r9 - bl ListMenuUpdateSelectedRowIndexAndScrollOffset - lsls r0, 24 - lsrs r0, 24 - orrs r5, r0 - cmp r0, 0x2 - beq _081AEF5A -_081AEF88: - lsls r0, r6, 24 - lsrs r0, 24 - cmp r0, r8 - bcc _081AEF56 -_081AEF90: - ldr r0, [sp] - cmp r0, 0 - beq _081AEFEE - cmp r5, 0x1 - beq _081AEFA6 - cmp r5, 0x1 - ble _081AEFA2 - cmp r5, 0x3 - ble _081AEFC6 -_081AEFA2: - movs r0, 0x1 - b _081AEFF0 -_081AEFA6: - adds r0, r4, 0 - mov r1, r10 - bl ListMenuErasePrintedCursor - adds r0, r4, 0 - bl ListMenuDrawCursor - adds r0, r4, 0 - movs r1, 0 - bl ListMenuCallSelectionChangedCallback - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - b _081AEFEE -_081AEFC6: - adds r0, r4, 0 - mov r1, r10 - bl ListMenuErasePrintedCursor - adds r0, r4, 0 - adds r1, r7, 0 - mov r2, r9 - bl ListMenuScroll - adds r0, r4, 0 - bl ListMenuDrawCursor - adds r0, r4, 0 - movs r1, 0 - bl ListMenuCallSelectionChangedCallback - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram -_081AEFEE: - movs r0, 0 -_081AEFF0: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ListMenuChangeSelection - - thumb_func_start ListMenuCallSelectionChangedCallback -@ void ListMenuCallSelectionChangedCallback(struct ListMenu *listMenu, u8 a2) -ListMenuCallSelectionChangedCallback: @ 81AF000 - push {r4,lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - ldr r3, [r2, 0x4] - cmp r3, 0 - beq _081AF022 - ldrh r0, [r2, 0x18] - ldrh r1, [r2, 0x1A] - adds r0, r1 - ldr r1, [r2] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0, 0x4] - adds r1, r4, 0 - bl _call_via_r3 -_081AF022: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ListMenuCallSelectionChangedCallback - - thumb_func_start sub_81AF028 -sub_81AF028: @ 81AF028 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r6, =gUnknown_03006300 - movs r5, 0xF - ands r0, r5 - ldrb r3, [r6] - mov r8, r3 - movs r4, 0x10 - negs r4, r4 - adds r3, r4, 0 - mov r7, r8 - ands r3, r7 - orrs r3, r0 - lsrs r1, 20 - ands r3, r5 - orrs r3, r1 - strb r3, [r6] - ands r2, r5 - ldrb r0, [r6, 0x1] - ands r4, r0 - orrs r4, r2 - strb r4, [r6, 0x1] - ldrb r0, [r6, 0x3] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r6, 0x3] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81AF028 - - thumb_func_start sub_81AF078 -sub_81AF078: @ 81AF078 - push {lr} - lsls r1, 24 - cmp r1, 0 - bne _081AF086 - movs r0, 0x5 - bl PlaySE -_081AF086: - pop {r0} - bx r0 - thumb_func_end sub_81AF078 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/map_name_popup.s b/asm/map_name_popup.s index 76edd1f1f..d4775389a 100644 --- a/asm/map_name_popup.s +++ b/asm/map_name_popup.s @@ -8,7 +8,7 @@ thumb_func_start sub_80D47D4 sub_80D47D4: @ 80D47D4 push {lr} - bl sub_80A0934 + bl HideStartMenu bl ShowMapNamePopup movs r0, 0x1 pop {r1} diff --git a/asm/player_pc.s b/asm/player_pc.s index 8a329a2fe..6fe4b3b85 100644 --- a/asm/player_pc.s +++ b/asm/player_pc.s @@ -1021,7 +1021,7 @@ sub_816B674: @ 816B674 mov r8, r1 adds r1, r7, 0 mov r2, r8 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r6, r0 @@ -1050,7 +1050,7 @@ _0816B6EA: ldrb r0, [r4, 0xA] adds r1, r7, 0 mov r2, r8 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl schedule_bg_copy_tilemap_to_vram mov r1, r8 @@ -1129,7 +1129,7 @@ sub_816B798: @ 816B798 ldrb r0, [r4, 0xA] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl schedule_bg_copy_tilemap_to_vram bl sub_81D1EC0 @@ -2476,7 +2476,7 @@ sub_816C30C: @ 816C30C ldr r1, =gUnknown_0203BCBA subs r4, r1, 0x2 adds r2, r4, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow ldrh r1, [r4, 0x2] ldrh r0, [r4] adds r1, r0 @@ -2497,7 +2497,7 @@ _0816C35C: ldrb r0, [r4, 0xA] ldr r1, =gUnknown_0203BCBA subs r2, r1, 0x2 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r6, r0 @@ -2584,7 +2584,7 @@ sub_816C400: @ 816C400 ldrb r0, [r5, 0xA] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldr r0, =gUnknown_0203BCC4 ldr r0, [r0] movs r1, 0xCD @@ -2691,7 +2691,7 @@ sub_816C4FC: @ 816C4FC ldrb r0, [r4, 0xA] ldr r1, =gUnknown_0203BCBA subs r2, r1, 0x2 - bl sub_81AE860 + bl ListMenuGetScrollAndRow b _0816C57E .pool _0816C530: @@ -2702,7 +2702,7 @@ _0816C530: ldr r1, =gUnknown_0203BCBA subs r4, r1, 0x2 adds r2, r4, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow ldr r0, =gUnknown_0203BCC4 ldr r0, [r0] movs r1, 0xCD @@ -2776,7 +2776,7 @@ sub_816C5A0: @ 816C5A0 ldrb r0, [r2, 0xA] adds r1, r4, 0x2 adds r2, r4, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask cmp r5, 0 bne _0816C60A ldr r1, =gUnknown_0203BCC4 @@ -3359,7 +3359,7 @@ sub_816CB04: @ 816CB04 ldrb r0, [r5, 0xA] adds r1, r4, 0x2 adds r2, r4, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask bl sub_816C110 bl sub_816C140 bl sub_816BD04 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 14dc569fe..3b41afb55 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -3469,7 +3469,7 @@ sub_81C5B4C: @ 81C5B4C ldr r4, =gUnknown_0203CF38 subs r2, r4, 0x2 adds r1, r4, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldr r0, =gUnknown_0203CF2C ldr r0, [r0] ldr r0, [r0] @@ -3545,7 +3545,7 @@ _081C5C12: adds r1, r4, 0 adds r1, 0x8 adds r2, r4, 0x6 - bl sub_81AE860 + bl ListMenuGetScrollAndRow ldrh r1, [r4, 0x8] ldrh r0, [r4, 0x6] adds r1, r0 @@ -3572,7 +3572,7 @@ _081C5C5C: mov r8, r1 mov r2, r8 subs r2, 0x2 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r6, r0 @@ -4642,7 +4642,7 @@ sub_81C65CC: @ 81C65CC ldrb r0, [r4] adds r1, r6, 0 adds r2, r7, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask bl sub_81C5924 bl sub_81C59BC bl sub_81C5314 @@ -4953,7 +4953,7 @@ sub_81C68B0: @ 81C68B0 ldrb r0, [r4] ldr r1, =gUnknown_0203CF38 subs r2, r1, 0x2 - bl sub_81AE860 + bl ListMenuGetScrollAndRow b _081C6940 .pool _081C68F8: @@ -4964,7 +4964,7 @@ _081C68F8: ldr r4, =gUnknown_0203CF38 subs r2, r4, 0x2 adds r1, r4, 0 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0 bl sub_81C7028 subs r4, 0x8 @@ -5054,7 +5054,7 @@ _081C69A8: ldrb r0, [r5] adds r1, r7, 0 mov r2, r8 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r3, 0x2 ldrsh r0, [r5, r3] cmp r0, r4 @@ -5109,7 +5109,7 @@ sub_81C6A14: @ 81C6A14 ldrb r0, [r4] adds r1, r5, 0 adds r2, r7, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0x2 ldrsh r2, [r4, r0] ldrh r0, [r5] diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s index b069ec58e..4d50a5271 100644 --- a/asm/rom_8011DC0.s +++ b/asm/rom_8011DC0.s @@ -1192,7 +1192,7 @@ sub_8012F64: @ 8012F64 ldrb r0, [r4, 0x12] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r4, 0x10] bl ClearWindowTilemap ldrb r0, [r4, 0xF] @@ -2394,7 +2394,7 @@ _08013A8C: ldrb r0, [r6, 0xE] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r6, 0xC] bl ClearWindowTilemap ldrb r0, [r6, 0xB] @@ -4511,7 +4511,7 @@ _08014E16: ldrb r0, [r5, 0x12] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xF] @@ -4567,7 +4567,7 @@ _08014EA8: ldrb r0, [r5, 0x12] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xF] @@ -4923,7 +4923,7 @@ _08015204: ldrb r0, [r7, 0xE] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r7, 0xD] @@ -5292,7 +5292,7 @@ _08015564: ldrb r0, [r5, 0xE] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask movs r0, 0 bl CopyBgTilemapBufferToVram ldrb r0, [r5, 0xB] @@ -8545,7 +8545,7 @@ _08017228: ldrb r0, [r4] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r5] movs r1, 0x1 bl sub_819746C @@ -8565,7 +8565,7 @@ _08017264: ldrb r0, [r6] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r5] movs r1, 0x1 bl sub_819746C @@ -8669,7 +8669,7 @@ _0801733E: ldrb r0, [r4] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r6] bl RemoveWindow mov r7, r9 @@ -8691,7 +8691,7 @@ _08017368: ldrb r0, [r1] movs r1, 0 movs r2, 0 - bl sub_81AE6C8 + bl DestroyListMenuTask ldrb r0, [r6] bl RemoveWindow mov r3, r9 diff --git a/asm/script_menu.s b/asm/script_menu.s index 7317317a3..0624dba83 100644 --- a/asm/script_menu.s +++ b/asm/script_menu.s @@ -836,7 +836,7 @@ _080E24C6: adds r1, r4, 0 adds r2, r7, 0 movs r3, 0x11 - bl sub_819A024 + bl PrintPlayerNameOnWindow adds r0, r6, 0 mov r1, r8 movs r2, 0 diff --git a/asm/shop.s b/asm/shop.s index c42af8ef1..ae60eb364 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -1985,7 +1985,7 @@ _080E0AEA: adds r1, r2, r3 subs r3, 0x2 adds r2, r3 - bl sub_81AE860 + bl ListMenuGetScrollAndRow movs r0, 0x2 negs r0, r0 cmp r5, r0 diff --git a/asm/start_menu.s b/asm/start_menu.s deleted file mode 100644 index 275d2124e..000000000 --- a/asm/start_menu.s +++ /dev/null @@ -1,2101 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PrintStartMenuActions -PrintStartMenuActions: @ 809F7C0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r8, r0 - adds r6, r1, 0 - ldrb r2, [r0] - ldr r0, =sStartMenuItems - mov r9, r0 - ldr r1, =gStringVar4 - mov r10, r1 -_0809F7DA: - ldr r0, =sCurrentStartMenuActions - lsls r2, 24 - asrs r4, r2, 24 - adds r5, r4, r0 - ldrb r0, [r5] - lsls r3, r0, 3 - mov r0, r9 - adds r0, 0x4 - adds r0, r3, r0 - ldr r1, [r0] - ldr r0, =StartMenu_PlayerName - adds r7, r2, 0 - cmp r1, r0 - bne _0809F828 - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r5] - lsls r1, 3 - add r1, r9 - ldr r1, [r1] - lsls r3, r4, 4 - adds r3, 0x9 - lsls r3, 16 - lsrs r3, 16 - movs r2, 0x8 - bl sub_819A024 - b _0809F858 - .pool -_0809F828: - mov r1, r9 - adds r0, r3, r1 - ldr r1, [r0] - mov r0, r10 - bl StringExpandPlaceholders - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 4 - adds r1, 0x9 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x1 - mov r2, r10 - movs r3, 0x8 - bl PrintTextOnWindow -_0809F858: - movs r0, 0x80 - lsls r0, 17 - adds r1, r7, r0 - lsrs r2, r1, 24 - asrs r1, 24 - ldr r0, =sNumStartMenuActions - ldrb r0, [r0] - cmp r1, r0 - bge _0809F87C - subs r6, 0x1 - cmp r6, 0 - bne _0809F7DA - mov r1, r8 - strb r2, [r1] - movs r0, 0 - b _0809F882 - .pool -_0809F87C: - mov r0, r8 - strb r2, [r0] - movs r0, 0x1 -_0809F882: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end PrintStartMenuActions - - thumb_func_start sub_809F894 -sub_809F894: @ 809F894 - push {r4,lr} - sub sp, 0xC - ldr r0, =gUnknown_02037619 - movs r1, 0 - ldrsb r1, [r0, r1] - adds r2, r0, 0 - cmp r1, 0x5 - bhi _0809F98C - lsls r0, r1, 2 - ldr r1, =_0809F8B8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_0809F8B8: - .4byte _0809F8D0 - .4byte _0809F8D8 - .4byte _0809F8E4 - .4byte _0809F90C - .4byte _0809F930 - .4byte _0809F94C -_0809F8D0: - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - b _0809F98C -_0809F8D8: - bl BuildStartMenuActions - ldr r1, =gUnknown_02037619 - b _0809F940 - .pool -_0809F8E4: - bl sub_81973A4 - ldr r0, =sNumStartMenuActions - ldrb r0, [r0] - bl sub_81979C4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl NewMenuHelpers_DrawStdWindowFrame - ldr r1, =gUnknown_02037619 - movs r0, 0 - strb r0, [r1, 0x1] - b _0809F940 - .pool -_0809F90C: - bl GetSafariZoneFlag - cmp r0, 0 - beq _0809F918 - bl DisplaySafariBallsWindow -_0809F918: - bl InBattlePyramid - lsls r0, 24 - cmp r0, 0 - beq _0809F926 - bl DisplayPyramidFloorWindow -_0809F926: - ldr r1, =gUnknown_02037619 - b _0809F940 - .pool -_0809F930: - ldr r4, =gUnknown_02037619+1 - adds r0, r4, 0 - movs r1, 0x2 - bl PrintStartMenuActions - cmp r0, 0 - beq _0809F98C - subs r1, r4, 0x1 -_0809F940: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0809F98C - .pool -_0809F94C: - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x10 - str r1, [sp] - ldr r1, =sNumStartMenuActions - ldrb r1, [r1] - str r1, [sp, 0x4] - ldr r4, =sStartMenuCursorPos - ldrb r1, [r4] - str r1, [sp, 0x8] - movs r1, 0x1 - movs r2, 0 - movs r3, 0x9 - bl sub_81983AC - strb r0, [r4] - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x1 - b _0809F98E - .pool -_0809F98C: - movs r0, 0 -_0809F98E: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809F894 - - thumb_func_start sub_809F998 -sub_809F998: @ 809F998 - push {lr} - ldr r1, =gUnknown_02037619 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] -_0809F9A2: - bl sub_809F894 - cmp r0, 0 - beq _0809F9A2 - pop {r0} - bx r0 - .pool - thumb_func_end sub_809F998 - - thumb_func_start task50_startmenu -task50_startmenu: @ 809F9B4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_809F894 - cmp r0, 0x1 - bne _0809F9C8 - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc -_0809F9C8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end task50_startmenu - - thumb_func_start sub_809F9D0 -sub_809F9D0: @ 809F9D0 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r1, =gUnknown_02037619 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - ldr r4, =task50_startmenu - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809F9D0 - - thumb_func_start sub_809FA00 -sub_809FA00: @ 809FA00 - push {lr} - bl sub_809F894 - cmp r0, 0 - beq _0809FA12 - bl sub_80AF688 - movs r0, 0x1 - b _0809FA14 -_0809FA12: - movs r0, 0 -_0809FA14: - pop {r1} - bx r1 - thumb_func_end sub_809FA00 - - thumb_func_start sub_809FA18 -sub_809FA18: @ 809FA18 - ldr r1, =gUnknown_02037619 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - ldr r1, =gUnknown_03005DB0 - ldr r0, =sub_809FA00 - str r0, [r1] - bx lr - .pool - thumb_func_end sub_809FA18 - - thumb_func_start sub_809FA34 -sub_809FA34: @ 809FA34 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0809FA58 - cmp r0, 0x1 - beq _0809FA7C - b _0809FA92 - .pool -_0809FA58: - bl InUnionRoom - cmp r0, 0x1 - bne _0809FA64 - bl var_800D_set_xB -_0809FA64: - ldr r1, =gUnknown_03005DF4 - ldr r0, =HandleStartMenuInput - str r0, [r1] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0809FA92 - .pool -_0809FA7C: - ldr r0, =gUnknown_03005DF4 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809FA92 - adds r0, r5, 0 - bl DestroyTask -_0809FA92: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FA34 - - thumb_func_start sub_809FA9C -sub_809FA9C: @ 809FA9C - push {lr} - bl is_c1_link_related_active - cmp r0, 0 - bne _0809FAB2 - bl FreezeMapObjects - bl sub_808B864 - bl sub_808BCF4 -_0809FAB2: - ldr r0, =sub_809FA34 - bl sub_809F9D0 - bl ScriptContext2_Enable - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FA9C - - thumb_func_start HandleStartMenuInput -HandleStartMenuInput: @ 809FAC4 - push {r4,lr} - ldr r4, =gMain - ldrh r1, [r4, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0809FAE4 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - ldr r1, =sStartMenuCursorPos - strb r0, [r1] -_0809FAE4: - ldrh r1, [r4, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FAFE - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl MoveMenuCursor - ldr r1, =sStartMenuCursorPos - strb r0, [r1] -_0809FAFE: - ldrh r1, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809FB98 - movs r0, 0x5 - bl PlaySE - ldr r1, =sStartMenuItems - ldr r2, =sCurrentStartMenuActions - ldr r0, =sStartMenuCursorPos - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - ldr r0, =StartMenu_Pokedex - cmp r1, r0 - bne _0809FB34 - movs r0, 0 - bl GetNationalPokedexCount - lsls r0, 16 - cmp r0, 0 - beq _0809FBA0 -_0809FB34: - ldr r3, =gUnknown_03005DF4 - ldr r1, =sStartMenuItems - ldr r2, =sCurrentStartMenuActions - ldr r0, =sStartMenuCursorPos - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - str r1, [r3] - ldr r0, =StartMenu_Save - cmp r1, r0 - beq _0809FBA0 - ldr r0, =StartMenu_Exit - cmp r1, r0 - beq _0809FBA0 - ldr r0, =StartMenu_SafariZoneRetire - cmp r1, r0 - beq _0809FBA0 - ldr r0, =StartMenu_BattlePyramidRetire - cmp r1, r0 - beq _0809FBA0 - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - b _0809FBA0 - .pool -_0809FB98: - movs r0, 0xA - ands r0, r1 - cmp r0, 0 - bne _0809FBA4 -_0809FBA0: - movs r0, 0 - b _0809FBAE -_0809FBA4: - bl RemoveExtraStartMenuWindows - bl sub_80A0934 - movs r0, 0x1 -_0809FBAE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end HandleStartMenuInput - - thumb_func_start StartMenu_Pokedex -StartMenu_Pokedex: @ 809FBB4 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FBCC - movs r0, 0 - b _0809FBE6 - .pool -_0809FBCC: - movs r0, 0x29 - bl IncrementGameStat - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =sub_80BB534 - bl SetMainCallback2 - movs r0, 0x1 -_0809FBE6: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_Pokedex - - thumb_func_start StartMenu_Pokemon -StartMenu_Pokemon: @ 809FBF0 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FC08 - movs r0, 0 - b _0809FC1C - .pool -_0809FC08: - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =CB2_PartyMenuFromStartMenu - bl SetMainCallback2 - movs r0, 0x1 -_0809FC1C: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_Pokemon - - thumb_func_start StartMenu_Bag -StartMenu_Bag: @ 809FC24 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FC3C - movs r0, 0 - b _0809FC50 - .pool -_0809FC3C: - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =CB2_BagMenuFromStartMenu - bl SetMainCallback2 - movs r0, 0x1 -_0809FC50: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_Bag - - thumb_func_start StartMenu_PokeNav -StartMenu_PokeNav: @ 809FC58 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FC70 - movs r0, 0 - b _0809FC84 - .pool -_0809FC70: - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =CB2_PokeNav - bl SetMainCallback2 - movs r0, 0x1 -_0809FC84: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_PokeNav - - thumb_func_start StartMenu_PlayerName -StartMenu_PlayerName: @ 809FC8C - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0809FCF4 - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - bl is_c1_link_related_active - cmp r0, 0 - bne _0809FCB6 - bl InUnionRoom - cmp r0, 0 - beq _0809FCC8 -_0809FCB6: - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl sub_80C4DDC - b _0809FCEA - .pool -_0809FCC8: - ldr r0, =0x000008d2 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0809FCE4 - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl sub_80C51C4 - b _0809FCEA - .pool -_0809FCE4: - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl sub_80C4DDC -_0809FCEA: - movs r0, 0x1 - b _0809FCF6 - .pool -_0809FCF4: - movs r0, 0 -_0809FCF6: - pop {r1} - bx r1 - thumb_func_end StartMenu_PlayerName - - thumb_func_start StartMenu_Save -StartMenu_Save: @ 809FCFC - push {lr} - bl InBattlePyramid - lsls r0, 24 - cmp r0, 0 - beq _0809FD0C - bl RemoveExtraStartMenuWindows -_0809FD0C: - ldr r1, =gUnknown_03005DF4 - ldr r0, =sub_809FE28 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_Save - - thumb_func_start StartMenu_Option -StartMenu_Option: @ 809FD20 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FD38 - movs r0, 0 - b _0809FD52 - .pool -_0809FD38: - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =CB2_InitOptionMenu - bl SetMainCallback2 - ldr r1, =gMain - ldr r0, =CB2_ReturnToFieldWithOpenMenu - str r0, [r1, 0x8] - movs r0, 0x1 -_0809FD52: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_Option - - thumb_func_start StartMenu_Exit -StartMenu_Exit: @ 809FD64 - push {lr} - bl RemoveExtraStartMenuWindows - bl sub_80A0934 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end StartMenu_Exit - - thumb_func_start StartMenu_SafariZoneRetire -StartMenu_SafariZoneRetire: @ 809FD74 - push {lr} - bl RemoveExtraStartMenuWindows - bl sub_80A0934 - bl SafariZoneRetirePrompt - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end StartMenu_SafariZoneRetire - - thumb_func_start StartMenu_LinkModePlayerName -StartMenu_LinkModePlayerName: @ 809FD88 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FDA0 - movs r0, 0 - b _0809FDB4 - .pool -_0809FDA0: - bl play_some_sound - bl overworld_free_bg_tilemaps - ldr r0, =gUnknown_03005DB4 - ldrb r0, [r0] - ldr r1, =CB2_ReturnToFieldWithOpenMenu - bl sub_80C4E74 - movs r0, 0x1 -_0809FDB4: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_LinkModePlayerName - - thumb_func_start StartMenu_BattlePyramidRetire -StartMenu_BattlePyramidRetire: @ 809FDC0 - ldr r1, =gUnknown_03005DF4 - ldr r0, =sub_809FE9C - str r0, [r1] - movs r0, 0 - bx lr - .pool - thumb_func_end StartMenu_BattlePyramidRetire - - thumb_func_start sub_809FDD4 -sub_809FDD4: @ 809FDD4 - push {lr} - movs r0, 0 - movs r1, 0 - bl sub_8197DF8 - bl sub_80984F4 - ldr r0, =sub_809FA34 - bl sub_809F9D0 - bl ScriptContext2_Enable - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FDD4 - - thumb_func_start StartMenu_BattlePyramidBag -StartMenu_BattlePyramidBag: @ 809FDF4 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809FE0C - movs r0, 0 - b _0809FE20 - .pool -_0809FE0C: - bl play_some_sound - bl RemoveExtraStartMenuWindows - bl overworld_free_bg_tilemaps - ldr r0, =sub_81C4EFC - bl SetMainCallback2 - movs r0, 0x1 -_0809FE20: - pop {r1} - bx r1 - .pool - thumb_func_end StartMenu_BattlePyramidBag - - thumb_func_start sub_809FE28 -sub_809FE28: @ 809FE28 - push {lr} - bl sub_809FF28 - ldr r1, =gUnknown_03005DF4 - ldr r0, =sub_809FE44 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_809FE28 - - thumb_func_start sub_809FE44 -sub_809FE44: @ 809FE44 - push {lr} - bl sub_809FF4C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809FE7C - cmp r0, 0x1 - ble _0809FE94 - cmp r0, 0x2 - beq _0809FE60 - cmp r0, 0x3 - beq _0809FE7C - b _0809FE94 -_0809FE60: - movs r0, 0 - movs r1, 0 - bl sub_8197DF8 - bl sub_809F998 - ldr r1, =gUnknown_03005DF4 - ldr r0, =HandleStartMenuInput - str r0, [r1] - b _0809FE94 - .pool -_0809FE7C: - movs r0, 0 - movs r1, 0x1 - bl sub_8197DF8 - bl sub_80984F4 - bl ScriptContext2_Disable - bl sub_81A9EC8 - movs r0, 0x1 - b _0809FE96 -_0809FE94: - movs r0, 0 -_0809FE96: - pop {r1} - bx r1 - thumb_func_end sub_809FE44 - - thumb_func_start sub_809FE9C -sub_809FE9C: @ 809FE9C - push {lr} - bl sub_80A0340 - ldr r1, =gUnknown_03005DF4 - ldr r0, =sub_809FED4 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_809FE9C - - thumb_func_start sub_809FEB8 -sub_809FEB8: @ 809FEB8 - push {lr} - bl sub_809F998 - ldr r1, =gUnknown_03005DF4 - ldr r0, =HandleStartMenuInput - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_809FEB8 - - thumb_func_start sub_809FED4 -sub_809FED4: @ 809FED4 - push {lr} - bl sub_809FF4C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809FEEC - cmp r0, 0x1 - ble _0809FF20 - cmp r0, 0x2 - beq _0809FF00 - b _0809FF20 -_0809FEEC: - bl RemoveExtraStartMenuWindows - ldr r1, =gUnknown_03005DF4 - ldr r0, =sub_809FEB8 - str r0, [r1] - b _0809FF20 - .pool -_0809FF00: - movs r0, 0 - movs r1, 0x1 - bl sub_8197DF8 - bl sub_80984F4 - bl ScriptContext2_Disable - ldr r0, =BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88 - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _0809FF22 - .pool -_0809FF20: - movs r0, 0 -_0809FF22: - pop {r1} - bx r1 - thumb_func_end sub_809FED4 - - thumb_func_start sub_809FF28 -sub_809FF28: @ 809FF28 - push {lr} - bl save_serialize_map - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A00A0 - str r0, [r1] - ldr r1, =gUnknown_02037621 - movs r0, 0 - strb r0, [r1] - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FF28 - - thumb_func_start sub_809FF4C -sub_809FF4C: @ 809FF4C - push {lr} - bl sub_8197224 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _0809FF78 - ldr r1, =gUnknown_02037621 - movs r0, 0 - strb r0, [r1] - ldr r0, =gUnknown_0203761C - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - b _0809FF7A - .pool -_0809FF78: - movs r0, 0 -_0809FF7A: - pop {r1} - bx r1 - thumb_func_end sub_809FF4C - - thumb_func_start sub_809FF80 -sub_809FF80: @ 809FF80 - push {lr} - bl sub_809FF28 - ldr r0, =task50_save_game - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FF80 - - thumb_func_start sub_809FF98 -sub_809FF98: @ 809FF98 - push {r4,lr} - adds r2, r0, 0 - adds r4, r1, 0 - ldr r0, =gStringVar4 - adds r1, r2, 0 - bl StringExpandPlaceholders - movs r0, 0 - movs r1, 0x1 - bl sub_819786C - movs r0, 0x1 - bl AddTextPrinterForMessage_2 - ldr r1, =gUnknown_02037621 - movs r0, 0x1 - strb r0, [r1] - ldr r0, =gUnknown_0203761C - str r4, [r0] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809FF98 - - thumb_func_start task50_save_game -task50_save_game: @ 809FFD0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_809FF4C - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - beq _0809FFFC - cmp r1, 0x1 - bgt _0809FFEC - cmp r1, 0 - beq _080A000A - b _080A0000 -_0809FFEC: - cmp r1, 0x3 - bgt _080A0000 - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - b _080A0000 - .pool -_0809FFFC: - ldr r0, =gSpecialVar_Result - strh r1, [r0] -_080A0000: - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_080A000A: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end task50_save_game - - thumb_func_start sub_80A0014 -sub_80A0014: @ 80A0014 - push {lr} - movs r0, 0 - movs r1, 0x1 - bl sub_8197434 - pop {r0} - bx r0 - thumb_func_end sub_80A0014 - - thumb_func_start sub_80A0024 -sub_80A0024: @ 80A0024 - push {lr} - bl sub_80A0888 - pop {r0} - bx r0 - thumb_func_end sub_80A0024 - - thumb_func_start sub_80A0030 -sub_80A0030: @ 80A0030 - ldr r1, =gUnknown_02037620 - movs r0, 0x3C - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_80A0030 - - thumb_func_start sub_80A003C -sub_80A003C: @ 80A003C - push {lr} - ldr r1, =gUnknown_02037620 - ldrb r0, [r1] - subs r2, r0, 0x1 - strb r2, [r1] - ldr r0, =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080A0064 - lsls r0, r2, 24 - cmp r0, 0 - beq _080A006A - movs r0, 0 - b _080A006C - .pool -_080A0064: - movs r0, 0x5 - bl PlaySE -_080A006A: - movs r0, 0x1 -_080A006C: - pop {r1} - bx r1 - thumb_func_end sub_80A003C - - thumb_func_start sub_80A0070 -sub_80A0070: @ 80A0070 - push {lr} - ldr r1, =gUnknown_02037620 - ldrb r0, [r1] - cmp r0, 0 - bne _080A0094 - ldr r0, =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080A0098 - movs r0, 0x1 - b _080A009A - .pool -_080A0094: - subs r0, 0x1 - strb r0, [r1] -_080A0098: - movs r0, 0 -_080A009A: - pop {r1} - bx r1 - thumb_func_end sub_80A0070 - - thumb_func_start sub_80A00A0 -sub_80A00A0: @ 80A00A0 - push {lr} - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_819746C - bl remove_start_menu_window_maybe - bl sub_80A06B4 - bl InBattlePyramid - lsls r0, 24 - cmp r0, 0 - beq _080A00D4 - ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CA7 - ldr r1, =sub_80A00EC - bl sub_809FF98 - b _080A00DC - .pool -_080A00D4: - ldr r0, =gUnknown_082C87B4 - ldr r1, =sub_80A00EC - bl sub_809FF98 -_080A00DC: - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A00A0 - - thumb_func_start sub_80A00EC -sub_80A00EC: @ 80A00EC - push {lr} - bl sub_8197930 - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A0108 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A00EC - - thumb_func_start sub_80A0108 -sub_80A0108: @ 80A0108 - push {lr} - bl ProcessMenuInputNoWrap_ - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080A012A - cmp r1, 0 - bgt _080A0124 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A0168 - b _080A0174 -_080A0124: - cmp r1, 0x1 - beq _080A0168 - b _080A0174 -_080A012A: - ldr r0, =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _080A0136 - cmp r0, 0x2 - bne _080A013E -_080A0136: - ldr r0, =gDifferentSaveFile - ldrb r0, [r0] - cmp r0, 0 - bne _080A0158 -_080A013E: - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A017C - str r0, [r1] - b _080A0174 - .pool -_080A0158: - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A0234 - str r0, [r1] - b _080A0174 - .pool -_080A0168: - bl sub_80A0024 - bl sub_80A0014 - movs r0, 0x2 - b _080A0176 -_080A0174: - movs r0, 0 -_080A0176: - pop {r1} - bx r1 - thumb_func_end sub_80A0108 - - thumb_func_start sub_80A017C -sub_80A017C: @ 80A017C - push {lr} - ldr r0, =gDifferentSaveFile - ldrb r0, [r0] - cmp r0, 0x1 - bne _080A019C - ldr r0, =gUnknown_082C8845 - ldr r1, =sub_80A01B4 - bl sub_809FF98 - b _080A01A4 - .pool -_080A019C: - ldr r0, =gUnknown_082C87D5 - ldr r1, =sub_80A01D0 - bl sub_809FF98 -_080A01A4: - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A017C - - thumb_func_start sub_80A01B4 -sub_80A01B4: @ 80A01B4 - push {lr} - movs r0, 0x1 - bl sub_8197948 - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A01EC - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A01B4 - - thumb_func_start sub_80A01D0 -sub_80A01D0: @ 80A01D0 - push {lr} - bl sub_8197930 - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A01EC - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A01D0 - - thumb_func_start sub_80A01EC -sub_80A01EC: @ 80A01EC - push {lr} - bl ProcessMenuInputNoWrap_ - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080A020E - cmp r1, 0 - bgt _080A0208 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A0220 - b _080A022C -_080A0208: - cmp r1, 0x1 - beq _080A0220 - b _080A022C -_080A020E: - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A0234 - str r0, [r1] - b _080A022C - .pool -_080A0220: - bl sub_80A0024 - bl sub_80A0014 - movs r0, 0x2 - b _080A022E -_080A022C: - movs r0, 0 -_080A022E: - pop {r1} - bx r1 - thumb_func_end sub_80A01EC - - thumb_func_start sub_80A0234 -sub_80A0234: @ 80A0234 - push {lr} - ldr r0, =gUnknown_082C8810 - ldr r1, =sub_80A024C - bl sub_809FF98 - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A0234 - - thumb_func_start sub_80A024C -sub_80A024C: @ 80A024C - push {r4,lr} - movs r0, 0 - bl IncrementGameStat - bl sub_81A9E90 - ldr r4, =gDifferentSaveFile - ldrb r0, [r4] - cmp r0, 0x1 - bne _080A0274 - movs r0, 0x4 - bl TrySavingData - lsls r0, 24 - lsrs r1, r0, 24 - movs r0, 0 - strb r0, [r4] - b _080A027E - .pool -_080A0274: - movs r0, 0 - bl TrySavingData - lsls r0, 24 - lsrs r1, r0, 24 -_080A027E: - cmp r1, 0x1 - bne _080A0294 - ldr r0, =gUnknown_082C8832 - ldr r1, =sub_80A02B0 - bl sub_809FF98 - b _080A029C - .pool -_080A0294: - ldr r0, =gUnknown_082C892A - ldr r1, =sub_80A02FC - bl sub_809FF98 -_080A029C: - bl sub_80A0030 - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A024C - - thumb_func_start sub_80A02B0 -sub_80A02B0: @ 80A02B0 - push {lr} - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _080A02CA - movs r0, 0x37 - bl PlaySE - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A02D8 - str r0, [r1] -_080A02CA: - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A02B0 - - thumb_func_start sub_80A02D8 -sub_80A02D8: @ 80A02D8 - push {lr} - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _080A02F6 - bl sub_80A003C - lsls r0, 24 - cmp r0, 0 - beq _080A02F6 - bl sub_80A0024 - movs r0, 0x1 - b _080A02F8 -_080A02F6: - movs r0, 0 -_080A02F8: - pop {r1} - bx r1 - thumb_func_end sub_80A02D8 - - thumb_func_start sub_80A02FC -sub_80A02FC: @ 80A02FC - push {lr} - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _080A0316 - movs r0, 0x16 - bl PlaySE - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A0324 - str r0, [r1] -_080A0316: - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A02FC - - thumb_func_start sub_80A0324 -sub_80A0324: @ 80A0324 - push {lr} - bl sub_80A0070 - lsls r0, 24 - cmp r0, 0 - beq _080A0338 - bl sub_80A0024 - movs r0, 0x3 - b _080A033A -_080A0338: - movs r0, 0 -_080A033A: - pop {r1} - bx r1 - thumb_func_end sub_80A0324 - - thumb_func_start sub_80A0340 -sub_80A0340: @ 80A0340 - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A035C - str r0, [r1] - ldr r1, =gUnknown_02037621 - movs r0, 0 - strb r0, [r1] - bx lr - .pool - thumb_func_end sub_80A0340 - - thumb_func_start sub_80A035C -sub_80A035C: @ 80A035C - push {lr} - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_819746C - bl remove_start_menu_window_maybe - ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CFB - ldr r1, =sub_80A0388 - bl sub_809FF98 - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A035C - - thumb_func_start sub_80A0388 -sub_80A0388: @ 80A0388 - push {lr} - movs r0, 0x1 - bl sub_8197948 - ldr r1, =gUnknown_0203761C - ldr r0, =sub_80A03A4 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_80A0388 - - thumb_func_start sub_80A03A4 -sub_80A03A4: @ 80A03A4 - push {lr} - bl ProcessMenuInputNoWrap_ - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080A03C6 - cmp r1, 0 - bgt _080A03C0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A03CA - b _080A03D2 -_080A03C0: - cmp r1, 0x1 - beq _080A03CA - b _080A03D2 -_080A03C6: - movs r0, 0x2 - b _080A03D4 -_080A03CA: - bl sub_80A0014 - movs r0, 0x1 - b _080A03D4 -_080A03D2: - movs r0, 0 -_080A03D4: - pop {r1} - bx r1 - thumb_func_end sub_80A03A4 - - thumb_func_start sub_80A03D8 -sub_80A03D8: @ 80A03D8 - push {lr} - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80A03D8 - - thumb_func_start sub_80A03E4 -sub_80A03E4: @ 80A03E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r0 - ldrb r0, [r0] - cmp r0, 0x4 - bls _080A03F6 - b _080A04FC -_080A03F6: - lsls r0, 2 - ldr r1, =_080A0404 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080A0404: - .4byte _080A0418 - .4byte _080A0490 - .4byte _080A04A2 - .4byte _080A04D4 - .4byte _080A04F8 -_080A0418: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl SetVBlankCallback - bl ScanlineEffect_Stop - movs r2, 0xA0 - lsls r2, 19 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, =0x040000d4 - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - ldr r0, =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0xC0 - lsls r3, 9 - mov r4, sp - movs r6, 0 - movs r5, 0x80 - lsls r5, 5 - ldr r7, =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_080A045A: - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r5 - subs r3, r5 - cmp r3, r5 - bhi _080A045A - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - b _080A04FC - .pool -_080A0490: - bl ResetSpriteData - bl ResetTasks - bl ResetPaletteFade - bl ScanlineEffect_Clear - b _080A04FC -_080A04A2: - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_085105A8 - movs r0, 0 - movs r2, 0x1 - bl InitBgsFromTemplates - ldr r0, =gUnknown_085105AC - bl InitWindows - movs r0, 0 - movs r1, 0x8 - movs r2, 0xE0 - bl box_border_load_tiles_and_pal - movs r0, 0xF0 - bl sub_81978B0 - b _080A04FC - .pool -_080A04D4: - movs r0, 0 - bl ShowBg - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, =sub_80A03D8 - bl SetVBlankCallback - movs r0, 0x1 - bl EnableInterrupts - b _080A04FC - .pool -_080A04F8: - movs r0, 0x1 - b _080A0506 -_080A04FC: - mov r1, r8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080A0506: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A03E4 - - thumb_func_start sub_80A0514 -sub_80A0514: @ 80A0514 - push {lr} - ldr r0, =gMain+0x438 - bl sub_80A03E4 - cmp r0, 0 - beq _080A052E - ldr r0, =sub_80A0550 - movs r1, 0x50 - bl CreateTask - ldr r0, =sub_80A0540 - bl SetMainCallback2 -_080A052E: - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A0514 - - thumb_func_start sub_80A0540 -sub_80A0540: @ 80A0540 - push {lr} - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80A0540 - - thumb_func_start sub_80A0550 -sub_80A0550: @ 80A0550 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r5, r0, r1 - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080A0570 - b _080A06A8 -_080A0570: - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x6 - bls _080A057A - b _080A06A8 -_080A057A: - lsls r0, 2 - ldr r1, =_080A0590 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_080A0590: - .4byte _080A05AC - .4byte _080A0630 - .4byte _080A063C - .4byte _080A065C - .4byte _080A0670 - .4byte _080A0688 - .4byte _080A0698 -_080A05AC: - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, =gText_SavingDontTurnOffPower - movs r4, 0 - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r6, 0x1 - str r6, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x1 - movs r3, 0xFF - bl AddTextPrinterParameterized - movs r0, 0 - movs r1, 0x8 - movs r2, 0xE - bl sub_8098858 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _080A0620 - bl InUnionRoom - cmp r0, 0 - beq _080A0620 - bl sub_800A07C - cmp r0, 0 - beq _080A061C - strh r6, [r5] - b _080A06A8 - .pool -_080A061C: - movs r0, 0x5 - b _080A06A6 -_080A0620: - ldr r0, =gSoftResetDisabled - movs r1, 0x1 - strb r1, [r0] - movs r0, 0x1 - b _080A06A6 - .pool -_080A0630: - bl sub_8076D5C - bl sub_8153430 - movs r0, 0x2 - b _080A06A6 -_080A063C: - bl sub_8153474 - lsls r0, 24 - cmp r0, 0 - beq _080A06A8 - bl sav2_gender2_inplace_and_xFE - movs r0, 0x3 - strh r0, [r5] - ldr r1, =gSoftResetDisabled - movs r0, 0 - strb r0, [r1] - b _080A06A8 - .pool -_080A065C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - movs r0, 0x4 - b _080A06A6 -_080A0670: - bl FreeAllWindowBuffers - ldr r0, =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask - b _080A06A8 - .pool -_080A0688: - ldr r0, =sub_8153688 - movs r1, 0x5 - bl CreateTask - movs r0, 0x6 - b _080A06A6 - .pool -_080A0698: - ldr r0, =sub_8153688 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _080A06A8 - movs r0, 0x3 -_080A06A6: - strh r0, [r5] -_080A06A8: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A0550 - - thumb_func_start sub_80A06B4 -sub_80A06B4: @ 80A06B4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - ldr r0, =gUnknown_085105BC - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - ldr r0, =0x00000861 - mov r10, r0 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080A06EC - add r0, sp, 0xC - ldrb r1, [r0, 0x4] - subs r1, 0x2 - lsls r1, 24 - lsrs r1, 24 - ldr r2, =0xffffff00 - ldr r0, [sp, 0x10] - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x10] -_080A06EC: - ldr r6, =gUnknown_02037622 - add r0, sp, 0xC - bl AddWindow - strb r0, [r6] - ldrb r0, [r6] - movs r1, 0 - bl NewMenuHelpers_DrawStdWindowFrame - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - movs r1, 0x4 - mov r9, r1 - cmp r0, 0 - bne _080A0710 - movs r0, 0x8 - mov r9, r0 -_080A0710: - movs r4, 0x1 - ldr r5, =gStringVar4 - movs r0, 0x3 - adds r1, r5, 0 - movs r2, 0x6 - bl sub_819A344 - ldrb r0, [r6] - str r4, [sp] - movs r1, 0xFF - mov r8, r1 - str r1, [sp, 0x4] - movs r7, 0 - str r7, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - movs r3, 0 - bl PrintTextOnWindow - movs r4, 0x11 - ldrb r0, [r6] - ldr r2, =gText_SavingPlayer - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0 - adds r1, r5, 0 - mov r2, r9 - bl sub_819A344 - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0x70 - bl GetStringRightAlignXOffset - adds r2, r0, 0 - ldrb r0, [r6] - lsls r2, 16 - lsrs r2, 16 - adds r1, r5, 0 - movs r3, 0x11 - bl sub_819A024 - movs r4, 0x21 - ldrb r0, [r6] - ldr r2, =gText_SavingBadges - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0x4 - adds r1, r5, 0 - mov r2, r9 - bl sub_819A344 - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0x70 - bl GetStringRightAlignXOffset - adds r2, r0, 0 - ldrb r0, [r6] - lsls r3, r2, 24 - lsrs r3, 24 - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - bl PrintTextOnWindow - mov r0, r10 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080A0802 - movs r4, 0x31 - ldrb r0, [r6] - ldr r2, =gText_SavingPokedex - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0x1 - adds r1, r5, 0 - mov r2, r9 - bl sub_819A344 - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0x70 - bl GetStringRightAlignXOffset - adds r2, r0, 0 - ldrb r0, [r6] - lsls r3, r2, 24 - lsrs r3, 24 - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - bl PrintTextOnWindow -_080A0802: - adds r4, 0x10 - ldrb r0, [r6] - ldr r2, =gText_SavingTime - lsls r4, 24 - lsrs r4, 24 - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0x2 - adds r1, r5, 0 - mov r2, r9 - bl sub_819A344 - movs r0, 0x1 - adds r1, r5, 0 - movs r2, 0x70 - bl GetStringRightAlignXOffset - adds r2, r0, 0 - ldrb r0, [r6] - lsls r3, r2, 24 - lsrs r3, 24 - str r4, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - bl PrintTextOnWindow - ldrb r0, [r6] - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A06B4 - - thumb_func_start sub_80A0888 -sub_80A0888: @ 80A0888 - push {r4,lr} - ldr r4, =gUnknown_02037622 - ldrb r0, [r4] - movs r1, 0 - bl sub_819746C - ldrb r0, [r4] - bl RemoveWindow - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A0888 - - thumb_func_start sub_80A08A4 -sub_80A08A4: @ 80A08A4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, =sub_8153688 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _080A08C0 - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_080A08C0: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A08A4 - - thumb_func_start sub_80A08CC -sub_80A08CC: @ 80A08CC - push {r4,r5,lr} - ldr r0, =sub_8153688 - movs r1, 0x5 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r5 - movs r1, 0x1 - strh r1, [r0, 0xC] - ldr r0, =sub_80A08A4 - movs r1, 0x6 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r5 - strh r4, [r1, 0xA] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_80A08CC - - thumb_func_start sub_80A0914 -sub_80A0914: @ 80A0914 - push {lr} - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl sub_819746C - bl remove_start_menu_window_maybe - bl sub_80984F4 - bl ScriptContext2_Disable - pop {r0} - bx r0 - thumb_func_end sub_80A0914 - - thumb_func_start sub_80A0934 -sub_80A0934: @ 80A0934 - push {lr} - movs r0, 0x5 - bl PlaySE - bl sub_80A0914 - pop {r0} - bx r0 - thumb_func_end sub_80A0934 - - thumb_func_start AppendToList -AppendToList: @ 80A0944 - ldrb r3, [r1] - adds r0, r3 - strb r2, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bx lr - thumb_func_end AppendToList - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt new file mode 100644 index 000000000..a346edeef --- /dev/null +++ b/common_syms/list_menu.txt @@ -0,0 +1,2 @@ +gUnknown_03006300 +gMultiuseListMenuTemplate diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index 430f9f403..1b4863046 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -50,48 +50,48 @@ AI_CheckBadMove: if_move MOVE_FISSURE, BattleAIScript_82DBF92 if_move MOVE_HORN_DRILL, BattleAIScript_82DBF92 get_how_powerful_move_is - if_equal 0, BattleAIScript_82DBFFE + if_equal 0, AI_CheckBadMove_CheckSoundproof -BattleAIScript_82DBF92: +BattleAIScript_82DBF92: @ 82DBF92 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_ability AI_TARGET - if_equal ABILITY_VOLT_ABSORB, BattleAIScript_82DBFBD - if_equal ABILITY_WATER_ABSORB, BattleAIScript_82DBFCA - if_equal ABILITY_FLASH_FIRE, BattleAIScript_82DBFD7 - if_equal ABILITY_WONDER_GUARD, BattleAIScript_82DBFE4 - if_equal ABILITY_LEVITATE, BattleAIScript_82DBFEF + if_equal ABILITY_VOLT_ABSORB, CheckIfVoltAbsorbCancelsElectric + if_equal ABILITY_WATER_ABSORB, CheckIfWaterAbsorbCancelsWater + if_equal ABILITY_FLASH_FIRE, CheckIfFlashFireCancelsFire + if_equal ABILITY_WONDER_GUARD, CheckIfWonderGuardCancelsMove + if_equal ABILITY_LEVITATE, CheckIfLevitateCancelsGroundMove goto BattleAIScript_82DBFF7 -BattleAIScript_82DBFBD: +CheckIfVoltAbsorbCancelsElectric: @ 82DBFBD get_curr_move_type if_equal_ TYPE_ELECTRIC, Score_Minus12 goto BattleAIScript_82DBFF7 -BattleAIScript_82DBFCA: +CheckIfWaterAbsorbCancelsWater: @ 82DBFCA get_curr_move_type if_equal_ TYPE_WATER, Score_Minus12 goto BattleAIScript_82DBFF7 -BattleAIScript_82DBFD7: +CheckIfFlashFireCancelsFire: @ 82DBFD7 get_curr_move_type if_equal_ TYPE_FIRE, Score_Minus12 goto BattleAIScript_82DBFF7 -BattleAIScript_82DBFE4: +CheckIfWonderGuardCancelsMove: @ 82DBFE4 if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DBFF7 goto Score_Minus10 -BattleAIScript_82DBFEF: +CheckIfLevitateCancelsGroundMove: @ 82DBFEF get_curr_move_type if_equal_ TYPE_GROUND, Score_Minus10 -BattleAIScript_82DBFF7: +BattleAIScript_82DBFF7: @ 82DBFF7 get_how_powerful_move_is - if_equal 0, BattleAIScript_82DBFFE + if_equal 0, AI_CheckBadMove_CheckSoundproof -BattleAIScript_82DBFFE: +AI_CheckBadMove_CheckSoundproof: @ 82DBFFE get_ability AI_TARGET - if_not_equal ABILITY_SOUNDPROOF, BattleAIScript_82DC045 + if_not_equal ABILITY_SOUNDPROOF, AI_CheckBadMove_CheckEffect if_move MOVE_GROWL, Score_Minus10 if_move MOVE_ROAR, Score_Minus10 if_move MOVE_SING, Score_Minus10 @@ -102,119 +102,119 @@ BattleAIScript_82DBFFE: if_move MOVE_METAL_SOUND, Score_Minus10 if_move MOVE_GRASS_WHISTLE, Score_Minus10 -BattleAIScript_82DC045: - if_effect EFFECT_SLEEP, BattleAIScript_82DC2D4 - if_effect EFFECT_EXPLOSION, BattleAIScript_82DC2F7 - if_effect EFFECT_DREAM_EATER, BattleAIScript_82DC330 - if_effect EFFECT_ATTACK_UP, BattleAIScript_82DC348 - if_effect EFFECT_DEFENSE_UP, BattleAIScript_82DC351 - if_effect EFFECT_SPEED_UP, BattleAIScript_82DC35A - if_effect EFFECT_SPECIAL_ATTACK_UP, BattleAIScript_82DC363 - if_effect EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DC36C - if_effect EFFECT_ACCURACY_UP, BattleAIScript_82DC375 - if_effect EFFECT_EVASION_UP, BattleAIScript_82DC37E - if_effect EFFECT_ATTACK_DOWN, BattleAIScript_82DC387 - if_effect EFFECT_DEFENSE_DOWN, BattleAIScript_82DC39C - if_effect EFFECT_SPEED_DOWN, BattleAIScript_82DC3A9 - if_effect EFFECT_SPECIAL_ATTACK_DOWN, BattleAIScript_82DC3BF - if_effect EFFECT_SPECIAL_DEFENSE_DOWN, BattleAIScript_82DC3CC - if_effect EFFECT_ACCURACY_DOWN, BattleAIScript_82DC3D9 - if_effect EFFECT_EVASION_DOWN, BattleAIScript_82DC3EE - if_effect EFFECT_HAZE, BattleAIScript_82DC405 - if_effect EFFECT_BIDE, BattleAIScript_82DC4ED - if_effect EFFECT_ROAR, BattleAIScript_82DC47B - if_effect EFFECT_TOXIC, BattleAIScript_82DC48C - if_effect EFFECT_LIGHT_SCREEN, BattleAIScript_82DC4C5 - if_effect EFFECT_OHKO, BattleAIScript_82DC4D0 - if_effect EFFECT_RAZOR_WIND, BattleAIScript_82DC4ED - if_effect EFFECT_SUPER_FANG, BattleAIScript_82DC4ED - if_effect EFFECT_MIST, BattleAIScript_82DC507 - if_effect EFFECT_FOCUS_ENERGY, BattleAIScript_82DC512 - if_effect EFFECT_CONFUSE, BattleAIScript_82DC51D - if_effect EFFECT_ATTACK_UP_2, BattleAIScript_82DC348 - if_effect EFFECT_DEFENSE_UP_2, BattleAIScript_82DC351 - if_effect EFFECT_SPEED_UP_2, BattleAIScript_82DC35A - if_effect EFFECT_SPECIAL_ATTACK_UP_2, BattleAIScript_82DC363 - if_effect EFFECT_SPECIAL_DEFENSE_UP_2, BattleAIScript_82DC36C - if_effect EFFECT_ACCURACY_UP_2, BattleAIScript_82DC375 - if_effect EFFECT_EVASION_UP_2, BattleAIScript_82DC37E - if_effect EFFECT_ATTACK_DOWN_2, BattleAIScript_82DC387 - if_effect EFFECT_DEFENSE_DOWN_2, BattleAIScript_82DC39C - if_effect EFFECT_SPEED_DOWN_2, BattleAIScript_82DC3A9 - if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, BattleAIScript_82DC3BF - if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, BattleAIScript_82DC3CC - if_effect EFFECT_ACCURACY_DOWN_2, BattleAIScript_82DC3D9 - if_effect EFFECT_EVASION_DOWN_2, BattleAIScript_82DC3EE - if_effect EFFECT_REFLECT, BattleAIScript_82DC53A - if_effect EFFECT_POISON, BattleAIScript_82DC48C - if_effect EFFECT_PARALYZE, BattleAIScript_82DC545 - if_effect EFFECT_SUBSTITUTE, BattleAIScript_82DC568 - if_effect EFFECT_RECHARGE, BattleAIScript_82DC4ED - if_effect EFFECT_LEECH_SEED, BattleAIScript_82DC57A - if_effect EFFECT_DISABLE, BattleAIScript_82DC595 - if_effect EFFECT_LEVEL_DAMAGE, BattleAIScript_82DC4ED - if_effect EFFECT_PSYWAVE, BattleAIScript_82DC4ED - if_effect EFFECT_COUNTER, BattleAIScript_82DC4ED - if_effect EFFECT_ENCORE, BattleAIScript_82DC59D - if_effect EFFECT_SNORE, BattleAIScript_82DC5A5 - if_effect EFFECT_SLEEP_TALK, BattleAIScript_82DC5A5 - if_effect EFFECT_FLAIL, BattleAIScript_82DC4ED - if_effect EFFECT_MEAN_LOOK, BattleAIScript_82DC5B0 - if_effect EFFECT_NIGHTMARE, BattleAIScript_82DC31B - if_effect EFFECT_MINIMIZE, BattleAIScript_82DC37E - if_effect EFFECT_CURSE, BattleAIScript_82DC5BB - if_effect EFFECT_SPIKES, BattleAIScript_82DC5CC - if_effect EFFECT_FORESIGHT, BattleAIScript_82DC5D7 - if_effect EFFECT_PERISH_SONG, BattleAIScript_82DC5E2 - if_effect EFFECT_SANDSTORM, BattleAIScript_82DC5ED - if_effect EFFECT_SWAGGER, BattleAIScript_82DC51D - if_effect EFFECT_ATTRACT, BattleAIScript_82DC5F5 - if_effect EFFECT_RETURN, BattleAIScript_82DC4ED - if_effect EFFECT_PRESENT, BattleAIScript_82DC4ED - if_effect EFFECT_FRUSTRATION, BattleAIScript_82DC4ED - if_effect EFFECT_SAFEGUARD, BattleAIScript_82DC635 - if_effect EFFECT_MAGNITUDE, BattleAIScript_82DC4E5 - if_effect EFFECT_BATON_PASS, BattleAIScript_82DC650 - if_effect EFFECT_SONICBOOM, BattleAIScript_82DC4ED - if_effect EFFECT_RAIN_DANCE, BattleAIScript_82DC659 - if_effect EFFECT_SUNNY_DAY, BattleAIScript_82DC661 - if_effect EFFECT_BELLY_DRUM, BattleAIScript_82DC341 - if_effect EFFECT_PSYCH_UP, BattleAIScript_82DC405 - if_effect EFFECT_MIRROR_COAT, BattleAIScript_82DC4ED - if_effect EFFECT_SKULL_BASH, BattleAIScript_82DC4ED - if_effect EFFECT_FUTURE_SIGHT, BattleAIScript_82DC669 +AI_CheckBadMove_CheckEffect: @ 82DC045 + if_effect EFFECT_SLEEP, AI_CBM_Sleep + if_effect EFFECT_EXPLOSION, AI_CBM_Explosion + if_effect EFFECT_DREAM_EATER, AI_CBM_DreamEater + if_effect EFFECT_ATTACK_UP, AI_CBM_AttackUp + if_effect EFFECT_DEFENSE_UP, AI_CBM_DefenseUp + if_effect EFFECT_SPEED_UP, AI_CBM_SpeedUp + if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CBM_SpAtkUp + if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CBM_SpDefUp + if_effect EFFECT_ACCURACY_UP, AI_CBM_AccUp + if_effect EFFECT_EVASION_UP, AI_CBM_EvasionUp + if_effect EFFECT_ATTACK_DOWN, AI_CBM_AttackDown + if_effect EFFECT_DEFENSE_DOWN, AI_CBM_DefenseDown + if_effect EFFECT_SPEED_DOWN, AI_CBM_SpeedDown + if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CBM_SpAtkDown + if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CBM_SpDefDown + if_effect EFFECT_ACCURACY_DOWN, AI_CBM_AccDown + if_effect EFFECT_EVASION_DOWN, AI_CBM_EvasionDown + if_effect EFFECT_HAZE, AI_CBM_Haze + if_effect EFFECT_BIDE, AI_CBM_HighRiskForDamage + if_effect EFFECT_ROAR, AI_CBM_Roar + if_effect EFFECT_TOXIC, AI_CBM_Toxic + if_effect EFFECT_LIGHT_SCREEN, AI_CBM_LightScreen + if_effect EFFECT_OHKO, AI_CBM_OneHitKO + if_effect EFFECT_RAZOR_WIND, AI_CBM_HighRiskForDamage + if_effect EFFECT_SUPER_FANG, AI_CBM_HighRiskForDamage + if_effect EFFECT_MIST, AI_CBM_Mist + if_effect EFFECT_FOCUS_ENERGY, AI_CBM_FocusEnergy + if_effect EFFECT_CONFUSE, AI_CBM_Confuse + if_effect EFFECT_ATTACK_UP_2, AI_CBM_AttackUp + if_effect EFFECT_DEFENSE_UP_2, AI_CBM_DefenseUp + if_effect EFFECT_SPEED_UP_2, AI_CBM_SpeedUp + if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CBM_SpAtkUp + if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CBM_SpDefUp + if_effect EFFECT_ACCURACY_UP_2, AI_CBM_AccUp + if_effect EFFECT_EVASION_UP_2, AI_CBM_EvasionUp + if_effect EFFECT_ATTACK_DOWN_2, AI_CBM_AttackDown + if_effect EFFECT_DEFENSE_DOWN_2, AI_CBM_DefenseDown + if_effect EFFECT_SPEED_DOWN_2, AI_CBM_SpeedDown + if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CBM_SpAtkDown + if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CBM_SpDefDown + if_effect EFFECT_ACCURACY_DOWN_2, AI_CBM_AccDown + if_effect EFFECT_EVASION_DOWN_2, AI_CBM_EvasionDown + if_effect EFFECT_REFLECT, AI_CBM_Reflect + if_effect EFFECT_POISON, AI_CBM_Toxic + if_effect EFFECT_PARALYZE, AI_CBM_Paralyze + if_effect EFFECT_SUBSTITUTE, AI_CBM_Substitute + if_effect EFFECT_RECHARGE, AI_CBM_HighRiskForDamage + if_effect EFFECT_LEECH_SEED, AI_CBM_LeechSeed + if_effect EFFECT_DISABLE, AI_CBM_Disable + if_effect EFFECT_LEVEL_DAMAGE, AI_CBM_HighRiskForDamage + if_effect EFFECT_PSYWAVE, AI_CBM_HighRiskForDamage + if_effect EFFECT_COUNTER, AI_CBM_HighRiskForDamage + if_effect EFFECT_ENCORE, AI_CBM_Encore + if_effect EFFECT_SNORE, AI_CBM_DamageDuringSleep + if_effect EFFECT_SLEEP_TALK, AI_CBM_DamageDuringSleep + if_effect EFFECT_FLAIL, AI_CBM_HighRiskForDamage + if_effect EFFECT_MEAN_LOOK, AI_CBM_CantEscape + if_effect EFFECT_NIGHTMARE, AI_CBM_Nightmare + if_effect EFFECT_MINIMIZE, AI_CBM_EvasionUp + if_effect EFFECT_CURSE, AI_CBM_Curse + if_effect EFFECT_SPIKES, AI_CBM_Spikes + if_effect EFFECT_FORESIGHT, AI_CBM_Foresight + if_effect EFFECT_PERISH_SONG, AI_CBM_PerishSong + if_effect EFFECT_SANDSTORM, AI_CBM_Sandstorm + if_effect EFFECT_SWAGGER, AI_CBM_Confuse + if_effect EFFECT_ATTRACT, AI_CBM_Attract + if_effect EFFECT_RETURN, AI_CBM_HighRiskForDamage + if_effect EFFECT_PRESENT, AI_CBM_HighRiskForDamage + if_effect EFFECT_FRUSTRATION, AI_CBM_HighRiskForDamage + if_effect EFFECT_SAFEGUARD, AI_CBM_Safeguard + if_effect EFFECT_MAGNITUDE, AI_CBM_Magnitude + if_effect EFFECT_BATON_PASS, AI_CBM_BatonPass + if_effect EFFECT_SONICBOOM, AI_CBM_HighRiskForDamage + if_effect EFFECT_RAIN_DANCE, AI_CBM_RainDance + if_effect EFFECT_SUNNY_DAY, AI_CBM_SunnyDay + if_effect EFFECT_BELLY_DRUM, AI_CBM_BellyDrum + if_effect EFFECT_PSYCH_UP, AI_CBM_Haze + if_effect EFFECT_MIRROR_COAT, AI_CBM_HighRiskForDamage + if_effect EFFECT_SKULL_BASH, AI_CBM_HighRiskForDamage + if_effect EFFECT_FUTURE_SIGHT, AI_CBM_FutureSight if_effect EFFECT_TELEPORT, Score_Minus10 - if_effect EFFECT_DEFENSE_CURL, BattleAIScript_82DC351 - if_effect EFFECT_FAKE_OUT, BattleAIScript_82DC680 - if_effect EFFECT_STOCKPILE, BattleAIScript_82DC689 - if_effect EFFECT_SPIT_UP, BattleAIScript_82DC692 - if_effect EFFECT_SWALLOW, BattleAIScript_82DC692 - if_effect EFFECT_HAIL, BattleAIScript_82DC6A1 - if_effect EFFECT_TORMENT, BattleAIScript_82DC6A9 - if_effect EFFECT_FLATTER, BattleAIScript_82DC51D - if_effect EFFECT_WILL_O_WISP, BattleAIScript_82DC6B4 - if_effect EFFECT_MEMENTO, BattleAIScript_82DC640 - if_effect EFFECT_FOCUS_PUNCH, BattleAIScript_82DC4ED - if_effect EFFECT_HELPING_HAND, BattleAIScript_82DC6E3 - if_effect EFFECT_TRICK, BattleAIScript_82DC6EB - if_effect EFFECT_INGRAIN, BattleAIScript_82DC6F4 - if_effect EFFECT_SUPERPOWER, BattleAIScript_82DC4ED - if_effect EFFECT_RECYCLE, BattleAIScript_82DC6FF - if_effect EFFECT_KNOCK_OFF, BattleAIScript_82DC6EB - if_effect EFFECT_ENDEAVOR, BattleAIScript_82DC4ED - if_effect EFFECT_IMPRISON, BattleAIScript_82DC708 - if_effect EFFECT_REFRESH, BattleAIScript_82DC713 - if_effect EFFECT_LOW_KICK, BattleAIScript_82DC4ED - if_effect EFFECT_MUD_SPORT, BattleAIScript_82DC71E - if_effect EFFECT_TICKLE, BattleAIScript_82DC729 - if_effect EFFECT_COSMIC_POWER, BattleAIScript_82DC73A - if_effect EFFECT_BULK_UP, BattleAIScript_82DC74B - if_effect EFFECT_WATER_SPORT, BattleAIScript_82DC75C - if_effect EFFECT_CALM_MIND, BattleAIScript_82DC767 - if_effect EFFECT_DRAGON_DANCE, BattleAIScript_82DC778 - end - -BattleAIScript_82DC2D4: + if_effect EFFECT_DEFENSE_CURL, AI_CBM_DefenseUp + if_effect EFFECT_FAKE_OUT, AI_CBM_FakeOut + if_effect EFFECT_STOCKPILE, AI_CBM_Stockpile + if_effect EFFECT_SPIT_UP, AI_CBM_SpitUpAndSwallow + if_effect EFFECT_SWALLOW, AI_CBM_SpitUpAndSwallow + if_effect EFFECT_HAIL, AI_CBM_Hail + if_effect EFFECT_TORMENT, AI_CBM_Torment + if_effect EFFECT_FLATTER, AI_CBM_Confuse + if_effect EFFECT_WILL_O_WISP, AI_CBM_WillOWisp + if_effect EFFECT_MEMENTO, AI_CBM_Memento + if_effect EFFECT_FOCUS_PUNCH, AI_CBM_HighRiskForDamage + if_effect EFFECT_HELPING_HAND, AI_CBM_HelpingHand + if_effect EFFECT_TRICK, AI_CBM_TrickAndKnockOff + if_effect EFFECT_INGRAIN, AI_CBM_Ingrain + if_effect EFFECT_SUPERPOWER, AI_CBM_HighRiskForDamage + if_effect EFFECT_RECYCLE, AI_CBM_Recycle + if_effect EFFECT_KNOCK_OFF, AI_CBM_TrickAndKnockOff + if_effect EFFECT_ENDEAVOR, AI_CBM_HighRiskForDamage + if_effect EFFECT_IMPRISON, AI_CBM_Imprison + if_effect EFFECT_REFRESH, AI_CBM_Refresh + if_effect EFFECT_LOW_KICK, AI_CBM_HighRiskForDamage + if_effect EFFECT_MUD_SPORT, AI_CBM_MudSport + if_effect EFFECT_TICKLE, AI_CBM_Tickle + if_effect EFFECT_COSMIC_POWER, AI_CBM_CosmicPower + if_effect EFFECT_BULK_UP, AI_CBM_BulkUp + if_effect EFFECT_WATER_SPORT, AI_CBM_WaterSport + if_effect EFFECT_CALM_MIND, AI_CBM_CalmMind + if_effect EFFECT_DRAGON_DANCE, AI_CBM_DragonDance + end + +AI_CBM_Sleep: @ 82DC2D4 get_ability AI_TARGET if_equal ABILITY_INSOMNIA, Score_Minus10 if_equal ABILITY_VITAL_SPIRIT, Score_Minus10 @@ -222,126 +222,126 @@ BattleAIScript_82DC2D4: if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 end -BattleAIScript_82DC2F7: +AI_CBM_Explosion: @ 82DC2F7 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_DAMP, Score_Minus10 count_usable_party_mons AI_USER - if_not_equal 0, BattleAIScript_82DC31A + if_not_equal 0, AI_CBM_Explosion_End count_usable_party_mons AI_TARGET if_not_equal 0, Score_Minus10 goto Score_Minus1 -BattleAIScript_82DC31A: +AI_CBM_Explosion_End: @ 82DC31A end -BattleAIScript_82DC31B: +AI_CBM_Nightmare: @ 82DC31B if_status2 AI_TARGET, STATUS2_NIGHTMARE, Score_Minus10 if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8 end -BattleAIScript_82DC330: +AI_CBM_DreamEater: @ 82DC330 if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 end -BattleAIScript_82DC341: +AI_CBM_BellyDrum: @ 82DC341 if_hp_less_than AI_USER, 51, Score_Minus10 -BattleAIScript_82DC348: +AI_CBM_AttackUp: @ 82DC348 if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 end -BattleAIScript_82DC351: +AI_CBM_DefenseUp: @ 82DC351 if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10 end -BattleAIScript_82DC35A: +AI_CBM_SpeedUp: @ 82DC35A if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus10 end -BattleAIScript_82DC363: +AI_CBM_SpAtkUp: @ 82DC363 if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10 end -BattleAIScript_82DC36C: +AI_CBM_SpDefUp: @ 82DC36C if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus10 end -BattleAIScript_82DC375: +AI_CBM_AccUp: @ 82DC375 if_stat_level_equal AI_USER, STAT_ACC, 12, Score_Minus10 end -BattleAIScript_82DC37E: +AI_CBM_EvasionUp: @ 82DC37E if_stat_level_equal AI_USER, STAT_EVASION, 12, Score_Minus10 end -BattleAIScript_82DC387: +AI_CBM_AttackDown: @ 82DC387 if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_HYPER_CUTTER, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC39C: +AI_CBM_DefenseDown: @ 82DC39C if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC3A9: +AI_CBM_SpeedDown: @ 82DC3A9 if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10 if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC3BF: +AI_CBM_SpAtkDown: @ 82DC3BF if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC3CC: +AI_CBM_SpDefDown: @ 82DC3CC if_stat_level_equal AI_TARGET, STAT_SPDEF, 0, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC3D9: +AI_CBM_AccDown: @ 82DC3D9 if_stat_level_equal AI_TARGET, STAT_ACC, 0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_KEEN_EYE, Score_Minus10 - goto BattleAIScript_82DC3F6 + goto CheckIfAbilityBlocksStatChange -BattleAIScript_82DC3EE: +AI_CBM_EvasionDown: @ 82DC3EE if_stat_level_equal AI_TARGET, STAT_EVASION, 0, Score_Minus10 -BattleAIScript_82DC3F6: +CheckIfAbilityBlocksStatChange: @ 82DC3F6 get_ability AI_TARGET if_equal ABILITY_CLEAR_BODY, Score_Minus10 if_equal ABILITY_WHITE_SMOKE, Score_Minus10 end -BattleAIScript_82DC405: - if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_DEF, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_SPEED, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_SPATK, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_SPDEF, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_ACC, 6, BattleAIScript_82DC47A - if_stat_level_less_than AI_USER, STAT_EVASION, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_ATK, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_DEF, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_ACC, 6, BattleAIScript_82DC47A - if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, BattleAIScript_82DC47A +AI_CBM_Haze: @ 82DC405 + if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_DEF, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPEED, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPATK, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_SPDEF, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_ACC, 6, AI_CBM_Haze_End + if_stat_level_less_than AI_USER, STAT_EVASION, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_ATK, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_DEF, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_ACC, 6, AI_CBM_Haze_End + if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, AI_CBM_Haze_End goto Score_Minus10 -BattleAIScript_82DC47A: +AI_CBM_Haze_End: @ 82DC47A end -BattleAIScript_82DC47B: +AI_CBM_Roar: @ 82DC47B count_usable_party_mons AI_TARGET if_equal 0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_SUCTION_CUPS, Score_Minus10 end -BattleAIScript_82DC48C: +AI_CBM_Toxic: @ 82DC48C get_target_type1 if_equal TYPE_STEEL, Score_Minus10 if_equal TYPE_POISON, Score_Minus10 @@ -354,51 +354,51 @@ BattleAIScript_82DC48C: if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 end -BattleAIScript_82DC4C5: +AI_CBM_LightScreen: @ 82DC4C5 if_side_affecting AI_USER, SIDE_STATUS_LIGHTSCREEN, Score_Minus8 end -BattleAIScript_82DC4D0: +AI_CBM_OneHitKO: @ 82DC4D0 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_STURDY, Score_Minus10 if_level_cond 1, Score_Minus10 end -BattleAIScript_82DC4E5: +AI_CBM_Magnitude: @ 82DC4E5 get_ability AI_TARGET if_equal ABILITY_LEVITATE, Score_Minus10 -BattleAIScript_82DC4ED: +AI_CBM_HighRiskForDamage: @ 82DC4ED if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_ability AI_TARGET - if_not_equal ABILITY_WONDER_GUARD, BattleAIScript_82DC506 - if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DC506 + if_not_equal ABILITY_WONDER_GUARD, AI_CBM_HighRiskForDamage_End + if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CBM_HighRiskForDamage_End goto Score_Minus10 -BattleAIScript_82DC506: +AI_CBM_HighRiskForDamage_End: @ 82DC506 end -BattleAIScript_82DC507: +AI_CBM_Mist: @ 82DC507 if_side_affecting AI_USER, SIDE_STATUS_MIST, Score_Minus8 end -BattleAIScript_82DC512: +AI_CBM_FocusEnergy: @ 82DC512 if_status2 AI_USER, STATUS2_FOCUS_ENERGY, Score_Minus10 end -BattleAIScript_82DC51D: +AI_CBM_Confuse: @ 82DC51D if_status2 AI_TARGET, STATUS2_CONFUSION, Score_Minus5 get_ability AI_TARGET if_equal ABILITY_OWN_TEMPO, Score_Minus10 if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 end -BattleAIScript_82DC53A: +AI_CBM_Reflect: @ 82DC53A if_side_affecting AI_USER, SIDE_STATUS_REFLECT, Score_Minus8 end -BattleAIScript_82DC545: +AI_CBM_Paralyze: @ 82DC545 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_LIMBER, Score_Minus10 @@ -406,12 +406,12 @@ BattleAIScript_82DC545: if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 end -BattleAIScript_82DC568: +AI_CBM_Substitute: @ 82DC568 if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Minus8 if_hp_less_than AI_USER, 26, Score_Minus10 end -BattleAIScript_82DC57A: +AI_CBM_LeechSeed: @ 82DC57A if_status3 AI_TARGET, STATUS3_LEECHSEED, Score_Minus10 get_target_type1 if_equal TYPE_GRASS, Score_Minus10 @@ -419,121 +419,121 @@ BattleAIScript_82DC57A: if_equal TYPE_GRASS, Score_Minus10 end -BattleAIScript_82DC595: +AI_CBM_Disable: @ 82DC595 if_any_move_disabled AI_TARGET, Score_Minus8 end -BattleAIScript_82DC59D: +AI_CBM_Encore: @ 82DC59D if_any_move_encored AI_TARGET, Score_Minus8 end -BattleAIScript_82DC5A5: +AI_CBM_DamageDuringSleep: @ 82DC5A5 if_not_status AI_USER, STATUS1_SLEEP, Score_Minus8 end -BattleAIScript_82DC5B0: +AI_CBM_CantEscape: @ 82DC5B0 if_status2 AI_TARGET, STATUS2_ESCAPE_PREVENTION, Score_Minus10 end -BattleAIScript_82DC5BB: +AI_CBM_Curse: @ 82DC5BB if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8 end -BattleAIScript_82DC5CC: +AI_CBM_Spikes: @ 82DC5CC if_side_affecting AI_TARGET, SIDE_STATUS_SPIKES, Score_Minus10 end -BattleAIScript_82DC5D7: +AI_CBM_Foresight: @ 82DC5D7 if_status2 AI_TARGET, STATUS2_FORESIGHT, Score_Minus10 end -BattleAIScript_82DC5E2: +AI_CBM_PerishSong: @ 82DC5E2 if_status3 AI_TARGET, STATUS3_PERISH_SONG, Score_Minus10 end -BattleAIScript_82DC5ED: +AI_CBM_Sandstorm: @ 82DC5ED get_weather if_equal AI_WEATHER_SANDSTORM, Score_Minus8 end -BattleAIScript_82DC5F5: +AI_CBM_Attract: @ 82DC5F5 if_status2 AI_TARGET, STATUS2_INFATUATION, Score_Minus10 get_ability AI_TARGET if_equal ABILITY_OBLIVIOUS, Score_Minus10 get_gender AI_USER - if_equal 0, BattleAIScript_82DC61A - if_equal 254, BattleAIScript_82DC627 + if_equal 0, AI_CBM_Attract_CheckIfTargetIsFemale + if_equal 254, AI_CBM_Attract_CheckIfTargetIsMale goto Score_Minus10 -BattleAIScript_82DC61A: +AI_CBM_Attract_CheckIfTargetIsFemale: @ 82DC61A get_gender AI_TARGET - if_equal 254, BattleAIScript_82DC634 + if_equal 254, AI_CBM_Attract_End goto Score_Minus10 -BattleAIScript_82DC627: +AI_CBM_Attract_CheckIfTargetIsMale: @ 82DC627 get_gender AI_TARGET - if_equal 0, BattleAIScript_82DC634 + if_equal 0, AI_CBM_Attract_End goto Score_Minus10 -BattleAIScript_82DC634: +AI_CBM_Attract_End: @ 82DC634 end -BattleAIScript_82DC635: +AI_CBM_Safeguard: @ 82DC635 if_side_affecting AI_USER, SIDE_STATUS_SAFEGUARD, Score_Minus8 end -BattleAIScript_82DC640: +AI_CBM_Memento: @ 82DC640 if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus8 -BattleAIScript_82DC650: +AI_CBM_BatonPass: @ 82DC650 count_usable_party_mons AI_USER if_equal 0, Score_Minus10 end -BattleAIScript_82DC659: +AI_CBM_RainDance: @ 82DC659 get_weather if_equal AI_WEATHER_RAIN, Score_Minus8 end -BattleAIScript_82DC661: +AI_CBM_SunnyDay: @ 82DC661 get_weather if_equal AI_WEATHER_SUN, Score_Minus8 end -BattleAIScript_82DC669: +AI_CBM_FutureSight: @ 82DC669 if_side_affecting AI_TARGET, SIDE_STATUS_FUTUREATTACK, Score_Minus12 if_side_affecting AI_USER, SIDE_STATUS_FUTUREATTACK, Score_Minus12 score +5 end -BattleAIScript_82DC680: +AI_CBM_FakeOut: @ 82DC680 is_first_turn_for AI_USER if_equal 0, Score_Minus10 end -BattleAIScript_82DC689: +AI_CBM_Stockpile: @ 82DC689 get_stockpile_count AI_USER if_equal 3, Score_Minus10 end -BattleAIScript_82DC692: +AI_CBM_SpitUpAndSwallow: @ 82DC692 if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10 get_stockpile_count AI_USER if_equal 0, Score_Minus10 end -BattleAIScript_82DC6A1: +AI_CBM_Hail: @ 82DC6A1 get_weather if_equal AI_WEATHER_HAIL, Score_Minus8 end -BattleAIScript_82DC6A9: +AI_CBM_Torment: @ 82DC6A9 if_status2 AI_TARGET, STATUS2_TORMENT, Score_Minus10 end -BattleAIScript_82DC6B4: +AI_CBM_WillOWisp: @ 82DC6B4 get_ability AI_TARGET if_equal ABILITY_WATER_VEIL, Score_Minus10 if_status AI_TARGET, STATUS1_ANY, Score_Minus10 @@ -543,61 +543,61 @@ BattleAIScript_82DC6B4: if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10 end -BattleAIScript_82DC6E3: +AI_CBM_HelpingHand: @ 82DC6E3 if_not_double_battle Score_Minus10 end -BattleAIScript_82DC6EB: +AI_CBM_TrickAndKnockOff: @ 82DC6EB get_ability AI_TARGET if_equal ABILITY_STICKY_HOLD, Score_Minus10 end -BattleAIScript_82DC6F4: +AI_CBM_Ingrain: @ 82DC6F4 if_status3 AI_USER, STATUS3_ROOTED, Score_Minus10 end -BattleAIScript_82DC6FF: +AI_CBM_Recycle: @ 82DC6FF get_used_held_item AI_USER if_equal 0, Score_Minus10 end -BattleAIScript_82DC708: +AI_CBM_Imprison: @ 82DC708 if_status3 AI_USER, STATUS3_IMPRISONED_OTHERS, Score_Minus10 end -BattleAIScript_82DC713: +AI_CBM_Refresh: @ 82DC713 if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, Score_Minus10 end -BattleAIScript_82DC71E: +AI_CBM_MudSport: @ 82DC71E if_status3 AI_USER, STATUS3_MUDSPORT, Score_Minus10 end -BattleAIScript_82DC729: +AI_CBM_Tickle: @ 82DC729 if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10 if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus8 end -BattleAIScript_82DC73A: +AI_CBM_CosmicPower: @ 82DC73A if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10 if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8 end -BattleAIScript_82DC74B: +AI_CBM_BulkUp: @ 82DC74B if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus8 end -BattleAIScript_82DC75C: +AI_CBM_WaterSport: @ 82DC75C if_status3 AI_USER, STATUS3_WATERSPORT, Score_Minus10 end -BattleAIScript_82DC767: +AI_CBM_CalmMind: @ 82DC767 if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10 if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus8 end -BattleAIScript_82DC778: +AI_CBM_DragonDance: @ 82DC778 if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10 if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus8 end @@ -656,214 +656,214 @@ Score_Plus10: AI_TryToFaint: if_target_is_ally AI_Ret - if_effect EFFECT_SLEEP, BattleAIScript_82DCA92 - if_effect EFFECT_ABSORB, BattleAIScript_82DCAAE - if_effect EFFECT_EXPLOSION, BattleAIScript_82DCAC8 - if_effect EFFECT_DREAM_EATER, BattleAIScript_82DCB26 - if_effect EFFECT_MIRROR_MOVE, BattleAIScript_82DCB3A - if_effect EFFECT_ATTACK_UP, BattleAIScript_82DCBBC - if_effect EFFECT_DEFENSE_UP, BattleAIScript_82DCBF7 - if_effect EFFECT_SPEED_UP, BattleAIScript_82DCC5D - if_effect EFFECT_SPECIAL_ATTACK_UP, BattleAIScript_82DCC73 - if_effect EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DCCAE - if_effect EFFECT_ACCURACY_UP, BattleAIScript_82DCD14 - if_effect EFFECT_EVASION_UP, BattleAIScript_82DCD2E - if_effect EFFECT_ALWAYS_HIT, BattleAIScript_82DCDC8 - if_effect EFFECT_ATTACK_DOWN, BattleAIScript_82DCDF8 - if_effect EFFECT_DEFENSE_DOWN, BattleAIScript_82DCE4A - if_effect EFFECT_SPEED_DOWN, BattleAIScript_82DCE81 - if_effect EFFECT_SPECIAL_ATTACK_DOWN, BattleAIScript_82DCE97 - if_effect EFFECT_SPECIAL_DEFENSE_DOWN, BattleAIScript_82DCEEB - if_effect EFFECT_ACCURACY_DOWN, BattleAIScript_82DCF0C - if_effect EFFECT_EVASION_DOWN, BattleAIScript_82DCFA0 - if_effect EFFECT_HAZE, BattleAIScript_82DCFC1 - if_effect EFFECT_BIDE, BattleAIScript_82DD084 - if_effect EFFECT_ROAR, BattleAIScript_82DD08E - if_effect EFFECT_CONVERSION, BattleAIScript_82DD0C6 - if_effect EFFECT_RESTORE_HP, BattleAIScript_82DD0F7 - if_effect EFFECT_TOXIC, BattleAIScript_82DD150 - if_effect EFFECT_LIGHT_SCREEN, BattleAIScript_82DD18F - if_effect EFFECT_REST, BattleAIScript_82DD1BE - if_effect EFFECT_OHKO, BattleAIScript_82DD21E - if_effect EFFECT_RAZOR_WIND, BattleAIScript_82DDA0B - if_effect EFFECT_SUPER_FANG, BattleAIScript_82DD21F - if_effect EFFECT_TRAP, BattleAIScript_82DD229 - if_effect EFFECT_HIGH_CRITICAL, BattleAIScript_82DD25F - if_effect EFFECT_CONFUSE, BattleAIScript_82DD296 - if_effect EFFECT_ATTACK_UP_2, BattleAIScript_82DCBBC - if_effect EFFECT_DEFENSE_UP_2, BattleAIScript_82DCBF7 - if_effect EFFECT_SPEED_UP_2, BattleAIScript_82DCC5D - if_effect EFFECT_SPECIAL_ATTACK_UP_2, BattleAIScript_82DCC73 - if_effect EFFECT_SPECIAL_DEFENSE_UP_2, BattleAIScript_82DCCAE - if_effect EFFECT_ACCURACY_UP_2, BattleAIScript_82DCD14 - if_effect EFFECT_EVASION_UP_2, BattleAIScript_82DCD2E - if_effect EFFECT_ATTACK_DOWN_2, BattleAIScript_82DCDF8 - if_effect EFFECT_DEFENSE_DOWN_2, BattleAIScript_82DCE4A - if_effect EFFECT_SPEED_DOWN_2, BattleAIScript_82DCE81 - if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, BattleAIScript_82DCE97 - if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, BattleAIScript_82DCEEB - if_effect EFFECT_ACCURACY_DOWN_2, BattleAIScript_82DCF0C - if_effect EFFECT_EVASION_DOWN_2, BattleAIScript_82DCFA0 - if_effect EFFECT_REFLECT, BattleAIScript_82DD2D3 - if_effect EFFECT_POISON, BattleAIScript_82DD303 - if_effect EFFECT_PARALYZE, BattleAIScript_82DD314 + if_effect EFFECT_SLEEP, AI_CV_Sleep + if_effect EFFECT_ABSORB, AI_CV_Absorb + if_effect EFFECT_EXPLOSION, AI_CV_SelfKO + if_effect EFFECT_DREAM_EATER, AI_CV_DreamEater + if_effect EFFECT_MIRROR_MOVE, AI_CV_MirrorMove + if_effect EFFECT_ATTACK_UP, AI_CV_AttackUp + if_effect EFFECT_DEFENSE_UP, AI_CV_DefenseUp + if_effect EFFECT_SPEED_UP, AI_CV_SpeedUp + if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CV_SpAtkUp + if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CV_SpDefUp + if_effect EFFECT_ACCURACY_UP, AI_CV_AccuracyUp + if_effect EFFECT_EVASION_UP, AI_CV_EvasionUp + if_effect EFFECT_ALWAYS_HIT, AI_CV_AlwaysHit + if_effect EFFECT_ATTACK_DOWN, AI_CV_AttackDown + if_effect EFFECT_DEFENSE_DOWN, AI_CV_DefenseDown + if_effect EFFECT_SPEED_DOWN, AI_CV_SpeedDown + if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CV_SpAtkDown + if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CV_SpDefDown + if_effect EFFECT_ACCURACY_DOWN, AI_CV_AccuracyDown + if_effect EFFECT_EVASION_DOWN, AI_CV_EvasionDown + if_effect EFFECT_HAZE, AI_CV_Haze + if_effect EFFECT_BIDE, AI_CV_Bide + if_effect EFFECT_ROAR, AI_CV_Roar + if_effect EFFECT_CONVERSION, AI_CV_Conversion + if_effect EFFECT_RESTORE_HP, AI_CV_Heal + if_effect EFFECT_TOXIC, AI_CV_Toxic + if_effect EFFECT_LIGHT_SCREEN, AI_CV_LightScreen + if_effect EFFECT_REST, AI_CV_Rest + if_effect EFFECT_OHKO, AI_CV_OneHitKO + if_effect EFFECT_RAZOR_WIND, AI_CV_ChargeUpMove + if_effect EFFECT_SUPER_FANG, AI_CV_SuperFang + if_effect EFFECT_TRAP, AI_CV_Trap + if_effect EFFECT_HIGH_CRITICAL, AI_CV_HighCrit + if_effect EFFECT_CONFUSE, AI_CV_Confuse + if_effect EFFECT_ATTACK_UP_2, AI_CV_AttackUp + if_effect EFFECT_DEFENSE_UP_2, AI_CV_DefenseUp + if_effect EFFECT_SPEED_UP_2, AI_CV_SpeedUp + if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CV_SpAtkUp + if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CV_SpDefUp + if_effect EFFECT_ACCURACY_UP_2, AI_CV_AccuracyUp + if_effect EFFECT_EVASION_UP_2, AI_CV_EvasionUp + if_effect EFFECT_ATTACK_DOWN_2, AI_CV_AttackDown + if_effect EFFECT_DEFENSE_DOWN_2, AI_CV_DefenseDown + if_effect EFFECT_SPEED_DOWN_2, AI_CV_SpeedDown + if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CV_SpAtkDown + if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CV_SpDefDown + if_effect EFFECT_ACCURACY_DOWN_2, AI_CV_AccuracyDown + if_effect EFFECT_EVASION_DOWN_2, AI_CV_EvasionDown + if_effect EFFECT_REFLECT, AI_CV_Reflect + if_effect EFFECT_POISON, AI_CV_Poison + if_effect EFFECT_PARALYZE, AI_CV_Paralyze if_effect EFFECT_SWAGGER, BattleAIScript_82DD286 - if_effect EFFECT_SPEED_DOWN_HIT, BattleAIScript_82DCE6B - if_effect EFFECT_SKY_ATTACK, BattleAIScript_82DDA0B - if_effect EFFECT_VITAL_THROW, BattleAIScript_82DD331 - if_effect EFFECT_SUBSTITUTE, BattleAIScript_82DD354 - if_effect EFFECT_RECHARGE, BattleAIScript_82DD3EA - if_effect EFFECT_LEECH_SEED, BattleAIScript_82DD150 - if_effect EFFECT_DISABLE, BattleAIScript_82DD412 - if_effect EFFECT_COUNTER, BattleAIScript_82DD431 - if_effect EFFECT_ENCORE, BattleAIScript_82DD4E3 - if_effect EFFECT_PAIN_SPLIT, BattleAIScript_82DD54B - if_effect EFFECT_SNORE, BattleAIScript_82DD577 - if_effect EFFECT_LOCK_ON, BattleAIScript_82DD57A - if_effect EFFECT_SLEEP_TALK, BattleAIScript_82DD583 - if_effect EFFECT_DESTINY_BOND, BattleAIScript_82DD590 - if_effect EFFECT_FLAIL, BattleAIScript_82DD5C6 - if_effect EFFECT_HEAL_BELL, BattleAIScript_82DD60B - if_effect EFFECT_THIEF, BattleAIScript_82DD622 - if_effect EFFECT_MEAN_LOOK, BattleAIScript_82DD229 - if_effect EFFECT_MINIMIZE, BattleAIScript_82DCD2E - if_effect EFFECT_CURSE, BattleAIScript_82DD645 - if_effect EFFECT_PROTECT, BattleAIScript_82DD694 - if_effect EFFECT_FORESIGHT, BattleAIScript_82DD75D - if_effect EFFECT_ENDURE, BattleAIScript_82DD78B - if_effect EFFECT_BATON_PASS, BattleAIScript_82DD7A9 - if_effect EFFECT_PURSUIT, BattleAIScript_82DD845 - if_effect EFFECT_MORNING_SUN, BattleAIScript_82DD0DD - if_effect EFFECT_SYNTHESIS, BattleAIScript_82DD0DD - if_effect EFFECT_MOONLIGHT, BattleAIScript_82DD0DD - if_effect EFFECT_RAIN_DANCE, BattleAIScript_82DD87B - if_effect EFFECT_SUNNY_DAY, BattleAIScript_82DD8BA - if_effect EFFECT_BELLY_DRUM, BattleAIScript_82DD8E3 - if_effect EFFECT_PSYCH_UP, BattleAIScript_82DD8F2 - if_effect EFFECT_MIRROR_COAT, BattleAIScript_82DD95A - if_effect EFFECT_SKULL_BASH, BattleAIScript_82DDA0B - if_effect EFFECT_SOLARBEAM, BattleAIScript_82DDA0B - if_effect EFFECT_SEMI_INVULNERABLE, BattleAIScript_82DDA2F - if_effect EFFECT_SOFTBOILED, BattleAIScript_82DD0F7 - if_effect EFFECT_FAKE_OUT, BattleAIScript_82DDAB9 - if_effect EFFECT_SPIT_UP, BattleAIScript_82DDABC - if_effect EFFECT_SWALLOW, BattleAIScript_82DD0F7 - if_effect EFFECT_HAIL, BattleAIScript_82DDACD - if_effect EFFECT_FLATTER, BattleAIScript_82DD28E - if_effect EFFECT_MEMENTO, BattleAIScript_82DCAC8 - if_effect EFFECT_FACADE, BattleAIScript_82DDAF6 - if_effect EFFECT_FOCUS_PUNCH, BattleAIScript_82DDB03 - if_effect EFFECT_SMELLINGSALT, BattleAIScript_82DDB5C - if_effect EFFECT_TRICK, BattleAIScript_82DDB6E - if_effect EFFECT_ROLE_PLAY, BattleAIScript_82DDBB9 - if_effect EFFECT_SUPERPOWER, BattleAIScript_82DDBF0 - if_effect EFFECT_MAGIC_COAT, BattleAIScript_82DDC20 - if_effect EFFECT_RECYCLE, BattleAIScript_82DDC53 - if_effect EFFECT_REVENGE, BattleAIScript_82DDC72 - if_effect EFFECT_BRICK_BREAK, BattleAIScript_82DDCA0 - if_effect EFFECT_KNOCK_OFF, BattleAIScript_82DDCB2 - if_effect EFFECT_ENDEAVOR, BattleAIScript_82DDCCA - if_effect EFFECT_ERUPTION, BattleAIScript_82DDCF6 - if_effect EFFECT_SKILL_SWAP, BattleAIScript_82DDBB9 - if_effect EFFECT_IMPRISON, BattleAIScript_82DDD1E - if_effect EFFECT_REFRESH, BattleAIScript_82DDD2F - if_effect EFFECT_SNATCH, BattleAIScript_82DDD3E - if_effect EFFECT_BLAZE_KICK, BattleAIScript_82DD25F - if_effect EFFECT_MUD_SPORT, BattleAIScript_82DDDA8 - if_effect EFFECT_OVERHEAT, BattleAIScript_82DDDCE - if_effect EFFECT_TICKLE, BattleAIScript_82DCE4A - if_effect EFFECT_COSMIC_POWER, BattleAIScript_82DCCAE - if_effect EFFECT_BULK_UP, BattleAIScript_82DCBF7 - if_effect EFFECT_POISON_TAIL, BattleAIScript_82DD25F - if_effect EFFECT_WATER_SPORT, BattleAIScript_82DDDF6 - if_effect EFFECT_CALM_MIND, BattleAIScript_82DCCAE - if_effect EFFECT_DRAGON_DANCE, BattleAIScript_82DDE1C - end - -BattleAIScript_82DCA92: - if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, BattleAIScript_82DCAA5 - if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, BattleAIScript_82DCAA5 - goto BattleAIScript_82DCAAD - -BattleAIScript_82DCAA5: - if_random_less_than 128, BattleAIScript_82DCAAD + if_effect EFFECT_SPEED_DOWN_HIT, AI_CV_SpeedDownFromChance + if_effect EFFECT_SKY_ATTACK, AI_CV_ChargeUpMove + if_effect EFFECT_VITAL_THROW, AI_CV_VitalThrow + if_effect EFFECT_SUBSTITUTE, AI_CV_Substitute + if_effect EFFECT_RECHARGE, AI_CV_Recharge + if_effect EFFECT_LEECH_SEED, AI_CV_Toxic + if_effect EFFECT_DISABLE, AI_CV_Disable + if_effect EFFECT_COUNTER, AI_CV_Counter + if_effect EFFECT_ENCORE, AI_CV_Encore + if_effect EFFECT_PAIN_SPLIT, AI_CV_PainSplit + if_effect EFFECT_SNORE, AI_CV_Snore + if_effect EFFECT_LOCK_ON, AI_CV_LockOn + if_effect EFFECT_SLEEP_TALK, AI_CV_SleepTalk + if_effect EFFECT_DESTINY_BOND, AI_CV_DestinyBond + if_effect EFFECT_FLAIL, AI_CV_Flail + if_effect EFFECT_HEAL_BELL, AI_CV_HealBell + if_effect EFFECT_THIEF, AI_CV_Thief + if_effect EFFECT_MEAN_LOOK, AI_CV_Trap + if_effect EFFECT_MINIMIZE, AI_CV_EvasionUp + if_effect EFFECT_CURSE, AI_CV_Curse + if_effect EFFECT_PROTECT, AI_CV_Protect + if_effect EFFECT_FORESIGHT, AI_CV_Foresight + if_effect EFFECT_ENDURE, AI_CV_Endure + if_effect EFFECT_BATON_PASS, AI_CV_BatonPass + if_effect EFFECT_PURSUIT, AI_CV_Pursuit + if_effect EFFECT_MORNING_SUN, AI_CV_HealWeather + if_effect EFFECT_SYNTHESIS, AI_CV_HealWeather + if_effect EFFECT_MOONLIGHT, AI_CV_HealWeather + if_effect EFFECT_RAIN_DANCE, AI_CV_RainDance + if_effect EFFECT_SUNNY_DAY, AI_CV_SunnyDay + if_effect EFFECT_BELLY_DRUM, AI_CV_BellyDrum + if_effect EFFECT_PSYCH_UP, AI_CV_PsychUp + if_effect EFFECT_MIRROR_COAT, AI_CV_MirrorCoat + if_effect EFFECT_SKULL_BASH, AI_CV_ChargeUpMove + if_effect EFFECT_SOLARBEAM, AI_CV_ChargeUpMove + if_effect EFFECT_SEMI_INVULNERABLE, AI_CV_Fly + if_effect EFFECT_SOFTBOILED, AI_CV_Heal + if_effect EFFECT_FAKE_OUT, AI_CV_FakeOut + if_effect EFFECT_SPIT_UP, AI_CV_SpitUp + if_effect EFFECT_SWALLOW, AI_CV_Heal + if_effect EFFECT_HAIL, AI_CV_Hail + if_effect EFFECT_FLATTER, AI_CV_Flatter + if_effect EFFECT_MEMENTO, AI_CV_SelfKO + if_effect EFFECT_FACADE, AI_CV_Facade + if_effect EFFECT_FOCUS_PUNCH, AI_CV_FocusPunch + if_effect EFFECT_SMELLINGSALT, AI_CV_SmellingSalt + if_effect EFFECT_TRICK, AI_CV_Trick + if_effect EFFECT_ROLE_PLAY, AI_CV_ChangeSelfAbility + if_effect EFFECT_SUPERPOWER, AI_CV_Superpower + if_effect EFFECT_MAGIC_COAT, AI_CV_MagicCoat + if_effect EFFECT_RECYCLE, AI_CV_Recycle + if_effect EFFECT_REVENGE, AI_CV_Revenge + if_effect EFFECT_BRICK_BREAK, AI_CV_BrickBreak + if_effect EFFECT_KNOCK_OFF, AI_CV_KnockOff + if_effect EFFECT_ENDEAVOR, AI_CV_Endeavor + if_effect EFFECT_ERUPTION, AI_CV_Eruption + if_effect EFFECT_SKILL_SWAP, AI_CV_ChangeSelfAbility + if_effect EFFECT_IMPRISON, AI_CV_Imprison + if_effect EFFECT_REFRESH, AI_CV_Refresh + if_effect EFFECT_SNATCH, AI_CV_Snatch + if_effect EFFECT_BLAZE_KICK, AI_CV_HighCrit + if_effect EFFECT_MUD_SPORT, AI_CV_MudSport + if_effect EFFECT_OVERHEAT, AI_CV_Overheat + if_effect EFFECT_TICKLE, AI_CV_DefenseDown + if_effect EFFECT_COSMIC_POWER, AI_CV_SpDefUp + if_effect EFFECT_BULK_UP, AI_CV_DefenseUp + if_effect EFFECT_POISON_TAIL, AI_CV_HighCrit + if_effect EFFECT_WATER_SPORT, AI_CV_WaterSport + if_effect EFFECT_CALM_MIND, AI_CV_SpDefUp + if_effect EFFECT_DRAGON_DANCE, AI_CV_DragonDance + end + +AI_CV_Sleep: @ 82DCA92 + if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, AI_CV_SleepEncourageSlpDamage + if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, AI_CV_SleepEncourageSlpDamage + goto AI_CV_Sleep_End + +AI_CV_SleepEncourageSlpDamage: @ 82DCAA5 + if_random_less_than 128, AI_CV_Sleep_End score +1 -BattleAIScript_82DCAAD: +AI_CV_Sleep_End: @ 82DCAAD end -BattleAIScript_82DCAAE: - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DCABF - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DCABF - goto BattleAIScript_82DCAC7 +AI_CV_Absorb: @ 82DCAAE + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_AbsorbEncourageMaybe + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_AbsorbEncourageMaybe + goto AI_CV_Absorb_End -BattleAIScript_82DCABF: - if_random_less_than 50, BattleAIScript_82DCAC7 +AI_CV_AbsorbEncourageMaybe: @ 82DCABF + if_random_less_than 50, AI_CV_Absorb_End score -3 -BattleAIScript_82DCAC7: +AI_CV_Absorb_End: @ 82DCAC7 end -BattleAIScript_82DCAC8: - if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, BattleAIScript_82DCAE2 +AI_CV_SelfKO: @ 82DCAC8 + if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, AI_CV_SelfKO_Encourage1 score -1 - if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCAE2 - if_random_less_than 128, BattleAIScript_82DCAE2 + if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, AI_CV_SelfKO_Encourage1 + if_random_less_than 128, AI_CV_SelfKO_Encourage1 score -1 -BattleAIScript_82DCAE2: - if_hp_less_than AI_USER, 80, BattleAIScript_82DCAFA - if_target_faster BattleAIScript_82DCAFA - if_random_less_than 50, BattleAIScript_82DCB25 +AI_CV_SelfKO_Encourage1: @ 82DCAE2 + if_hp_less_than AI_USER, 80, AI_CV_SelfKO_Encourage2 + if_target_faster AI_CV_SelfKO_Encourage2 + if_random_less_than 50, AI_CV_SelfKO_End goto Score_Minus3 -BattleAIScript_82DCAFA: - if_hp_more_than AI_USER, 50, BattleAIScript_82DCB1D - if_random_less_than 128, BattleAIScript_82DCB09 +AI_CV_SelfKO_Encourage2: @ 82DCAFA + if_hp_more_than AI_USER, 50, AI_CV_SelfKO_Encourage4 + if_random_less_than 128, AI_CV_SelfKO_Encourage3 score +1 -BattleAIScript_82DCB09: - if_hp_more_than AI_USER, 30, BattleAIScript_82DCB25 - if_random_less_than 50, BattleAIScript_82DCB25 +AI_CV_SelfKO_Encourage3: @ 82DCB09 + if_hp_more_than AI_USER, 30, AI_CV_SelfKO_End + if_random_less_than 50, AI_CV_SelfKO_End score +1 - goto BattleAIScript_82DCB25 + goto AI_CV_SelfKO_End -BattleAIScript_82DCB1D: - if_random_less_than 50, BattleAIScript_82DCB25 +AI_CV_SelfKO_Encourage4: @ 82DCB1D + if_random_less_than 50, AI_CV_SelfKO_End score -1 -BattleAIScript_82DCB25: +AI_CV_SelfKO_End: @ 82DCB25 end -BattleAIScript_82DCB26: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DCB37 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DCB37 - goto BattleAIScript_82DCB39 +AI_CV_DreamEater: @ 82DCB26 + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_DreamEater_ScoreDown1 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_DreamEater_ScoreDown1 + goto AI_CV_DreamEater_End -BattleAIScript_82DCB37: +AI_CV_DreamEater_ScoreDown1: @ 82DCB37 score -1 -BattleAIScript_82DCB39: +AI_CV_DreamEater_End: @ 82DCB39 end -BattleAIScript_82DCB3A: - if_target_faster BattleAIScript_82DCB58 +AI_CV_MirrorMove: @ 82DCB3A + if_target_faster AI_CV_MirrorMove2 get_last_used_bank_move AI_TARGET - if_not_in_hwords sMovesTable_82DCB6C, BattleAIScript_82DCB58 - if_random_less_than 128, BattleAIScript_82DCB6B + if_not_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove2 + if_random_less_than 128, AI_CV_MirrorMove_End score +2 - goto BattleAIScript_82DCB6B + goto AI_CV_MirrorMove_End -BattleAIScript_82DCB58: +AI_CV_MirrorMove2: @ 82DCB58 get_last_used_bank_move AI_TARGET - if_in_hwords sMovesTable_82DCB6C, BattleAIScript_82DCB6B - if_random_less_than 80, BattleAIScript_82DCB6B + if_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove_End + if_random_less_than 80, AI_CV_MirrorMove_End score -1 -BattleAIScript_82DCB6B: +AI_CV_MirrorMove_End: @ 82DCB6B end -sMovesTable_82DCB6C: +AI_CV_MirrorMove_EncouragedMovesToMirror: @ 82DCB6C .2byte MOVE_SLEEP_POWDER .2byte MOVE_LOVELY_KISS .2byte MOVE_SPORE @@ -905,63 +905,63 @@ sMovesTable_82DCB6C: .2byte MOVE_SKILL_SWAP .2byte -1 -BattleAIScript_82DCBBC: - if_stat_level_less_than AI_USER, STAT_ATK, 9, BattleAIScript_82DCBD1 - if_random_less_than 100, BattleAIScript_82DCBE0 +AI_CV_AttackUp: @ 82DCBBC + if_stat_level_less_than AI_USER, STAT_ATK, 9, AI_CV_AttackUp2 + if_random_less_than 100, AI_CV_AttackUp3 score -1 - goto BattleAIScript_82DCBE0 + goto AI_CV_AttackUp3 -BattleAIScript_82DCBD1: - if_hp_not_equal AI_USER, 100, BattleAIScript_82DCBE0 - if_random_less_than 128, BattleAIScript_82DCBE0 +AI_CV_AttackUp2: @ 82DCBD1 + if_hp_not_equal AI_USER, 100, AI_CV_AttackUp3 + if_random_less_than 128, AI_CV_AttackUp3 score +2 -BattleAIScript_82DCBE0: - if_hp_more_than AI_USER, 70, BattleAIScript_82DCBF6 - if_hp_less_than AI_USER, 40, BattleAIScript_82DCBF4 - if_random_less_than 40, BattleAIScript_82DCBF6 +AI_CV_AttackUp3: @ 82DCBE0 + if_hp_more_than AI_USER, 70, AI_CV_AttackUp_End + if_hp_less_than AI_USER, 40, AI_CV_AttackUp_ScoreDown2 + if_random_less_than 40, AI_CV_AttackUp_End -BattleAIScript_82DCBF4: +AI_CV_AttackUp_ScoreDown2: @ 82DCBF4 score -2 -BattleAIScript_82DCBF6: +AI_CV_AttackUp_End: @ 82DCBF6 end -BattleAIScript_82DCBF7: - if_stat_level_less_than AI_USER, STAT_DEF, 9, BattleAIScript_82DCC0C - if_random_less_than 100, BattleAIScript_82DCC1B +AI_CV_DefenseUp: @ 82DCBF7 + if_stat_level_less_than AI_USER, STAT_DEF, 9, AI_CV_DefenseUp2 + if_random_less_than 100, AI_CV_DefenseUp3 score -1 - goto BattleAIScript_82DCC1B + goto AI_CV_DefenseUp3 -BattleAIScript_82DCC0C: - if_hp_not_equal AI_USER, 100, BattleAIScript_82DCC1B - if_random_less_than 128, BattleAIScript_82DCC1B +AI_CV_DefenseUp2: @ 82DCC0C + if_hp_not_equal AI_USER, 100, AI_CV_DefenseUp3 + if_random_less_than 128, AI_CV_DefenseUp3 score +2 -BattleAIScript_82DCC1B: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCC28 - if_random_less_than 200, BattleAIScript_82DCC52 +AI_CV_DefenseUp3: @ 82DCC1B + if_hp_less_than AI_USER, 70, AI_CV_DefenseUp4 + if_random_less_than 200, AI_CV_DefenseUp_End -BattleAIScript_82DCC28: - if_hp_less_than AI_USER, 40, BattleAIScript_82DCC50 +AI_CV_DefenseUp4: @ 82DCC28 + if_hp_less_than AI_USER, 40, AI_CV_DefenseUp_ScoreDown2 get_last_used_bank_move AI_TARGET get_move_power_from_result - if_equal 0, BattleAIScript_82DCC4A + if_equal 0, AI_CV_DefenseUp5 get_last_used_bank_move AI_TARGET get_move_type_from_result - if_not_in_bytes sTypesTable_82DCC53, BattleAIScript_82DCC50 - if_random_less_than 60, BattleAIScript_82DCC52 + if_not_in_bytes AI_CV_DefenseUp_PhysicalTypes, AI_CV_DefenseUp_ScoreDown2 + if_random_less_than 60, AI_CV_DefenseUp_End -BattleAIScript_82DCC4A: - if_random_less_than 60, BattleAIScript_82DCC52 +AI_CV_DefenseUp5: @ 82DCC4A + if_random_less_than 60, AI_CV_DefenseUp_End -BattleAIScript_82DCC50: +AI_CV_DefenseUp_ScoreDown2: @ 82DCC50 score -2 -BattleAIScript_82DCC52: +AI_CV_DefenseUp_End: @ 82DCC52 end -sTypesTable_82DCC53: +AI_CV_DefenseUp_PhysicalTypes: @ 82DCC53 .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_POISON @@ -973,75 +973,75 @@ sTypesTable_82DCC53: .byte TYPE_STEEL .byte -1 -BattleAIScript_82DCC5D: - if_target_faster BattleAIScript_82DCC6A +AI_CV_SpeedUp: @ 82DCC5D + if_target_faster AI_CV_SpeedUp2 score -3 - goto BattleAIScript_82DCC72 + goto AI_CV_SpeedUp_End -BattleAIScript_82DCC6A: - if_random_less_than 70, BattleAIScript_82DCC72 +AI_CV_SpeedUp2: @ 82DCC6A + if_random_less_than 70, AI_CV_SpeedUp_End score +3 -BattleAIScript_82DCC72: +AI_CV_SpeedUp_End: @ 82DCC72 end -BattleAIScript_82DCC73: - if_stat_level_less_than AI_USER, STAT_SPATK, 9, BattleAIScript_82DCC88 - if_random_less_than 100, BattleAIScript_82DCC97 +AI_CV_SpAtkUp: @ 82DCC73 + if_stat_level_less_than AI_USER, STAT_SPATK, 9, AI_CV_SpAtkUp2 + if_random_less_than 100, AI_CV_SpAtkUp3 score -1 - goto BattleAIScript_82DCC97 + goto AI_CV_SpAtkUp3 -BattleAIScript_82DCC88: - if_hp_not_equal AI_USER, 100, BattleAIScript_82DCC97 - if_random_less_than 128, BattleAIScript_82DCC97 +AI_CV_SpAtkUp2: @ 82DCC88 + if_hp_not_equal AI_USER, 100, AI_CV_SpAtkUp3 + if_random_less_than 128, AI_CV_SpAtkUp3 score +2 -BattleAIScript_82DCC97: - if_hp_more_than AI_USER, 70, BattleAIScript_82DCCAD - if_hp_less_than AI_USER, 40, BattleAIScript_82DCCAB - if_random_less_than 70, BattleAIScript_82DCCAD +AI_CV_SpAtkUp3: @ 82DCC97 + if_hp_more_than AI_USER, 70, AI_CV_SpAtkUp_End + if_hp_less_than AI_USER, 40, AI_CV_SpAtkUp_ScoreDown2 + if_random_less_than 70, AI_CV_SpAtkUp_End -BattleAIScript_82DCCAB: +AI_CV_SpAtkUp_ScoreDown2: @ 82DCCAB score -2 -BattleAIScript_82DCCAD: +AI_CV_SpAtkUp_End: @ 82DCCAD end -BattleAIScript_82DCCAE: - if_stat_level_less_than AI_USER, STAT_SPDEF, 9, BattleAIScript_82DCCC3 - if_random_less_than 100, BattleAIScript_82DCCD2 +AI_CV_SpDefUp: @ 82DCCAE + if_stat_level_less_than AI_USER, STAT_SPDEF, 9, AI_CV_SpDefUp2 + if_random_less_than 100, AI_CV_SpDefUp3 score -1 - goto BattleAIScript_82DCCD2 + goto AI_CV_SpDefUp3 -BattleAIScript_82DCCC3: - if_hp_not_equal AI_USER, 100, BattleAIScript_82DCCD2 - if_random_less_than 128, BattleAIScript_82DCCD2 +AI_CV_SpDefUp2: @ 82DCCC3 + if_hp_not_equal AI_USER, 100, AI_CV_SpDefUp3 + if_random_less_than 128, AI_CV_SpDefUp3 score +2 -BattleAIScript_82DCCD2: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCCDF - if_random_less_than 200, BattleAIScript_82DCD09 +AI_CV_SpDefUp3: @ 82DCCD2 + if_hp_less_than AI_USER, 70, AI_CV_SpDefUp4 + if_random_less_than 200, AI_CV_SpDefUp_End -BattleAIScript_82DCCDF: - if_hp_less_than AI_USER, 40, BattleAIScript_82DCD07 +AI_CV_SpDefUp4: @ 82DCCDF + if_hp_less_than AI_USER, 40, AI_CV_SpDefUp_ScoreDown2 get_last_used_bank_move AI_TARGET get_move_power_from_result - if_equal 0, BattleAIScript_82DCD01 + if_equal 0, AI_CV_SpDefUp5 get_last_used_bank_move AI_TARGET get_move_type_from_result - if_in_bytes sTypesTable_82DCD0A, BattleAIScript_82DCD07 - if_random_less_than 60, BattleAIScript_82DCD09 + if_in_bytes AI_CV_SpDefUp_PhysicalTypes, AI_CV_SpDefUp_ScoreDown2 + if_random_less_than 60, AI_CV_SpDefUp_End -BattleAIScript_82DCD01: - if_random_less_than 60, BattleAIScript_82DCD09 +AI_CV_SpDefUp5: @ 82DCD01 + if_random_less_than 60, AI_CV_SpDefUp_End -BattleAIScript_82DCD07: +AI_CV_SpDefUp_ScoreDown2: @ 82DCD07 score -2 -BattleAIScript_82DCD09: +AI_CV_SpDefUp_End: @ 82DCD09 end -sTypesTable_82DCD0A: +AI_CV_SpDefUp_PhysicalTypes: @ 82DCD0A .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_POISON @@ -1053,109 +1053,109 @@ sTypesTable_82DCD0A: .byte TYPE_STEEL .byte -1 -BattleAIScript_82DCD14: - if_stat_level_less_than AI_USER, STAT_ACC, 9, BattleAIScript_82DCD24 - if_random_less_than 50, BattleAIScript_82DCD24 +AI_CV_AccuracyUp: + if_stat_level_less_than AI_USER, STAT_ACC, 9, AI_CV_AccuracyUp2 + if_random_less_than 50, AI_CV_AccuracyUp2 score -2 -BattleAIScript_82DCD24: - if_hp_more_than AI_USER, 70, BattleAIScript_82DCD2D +AI_CV_AccuracyUp2: + if_hp_more_than AI_USER, 70, AI_CV_AccuracyUp_End score -2 -BattleAIScript_82DCD2D: +AI_CV_AccuracyUp_End: end -BattleAIScript_82DCD2E: - if_hp_less_than AI_USER, 90, BattleAIScript_82DCD3D - if_random_less_than 100, BattleAIScript_82DCD3D +AI_CV_EvasionUp: + if_hp_less_than AI_USER, 90, AI_CV_EvasionUp2 + if_random_less_than 100, AI_CV_EvasionUp2 score +3 -BattleAIScript_82DCD3D: - if_stat_level_less_than AI_USER, STAT_EVASION, 9, BattleAIScript_82DCD4D - if_random_less_than 128, BattleAIScript_82DCD4D +AI_CV_EvasionUp2: + if_stat_level_less_than AI_USER, STAT_EVASION, 9, AI_CV_EvasionUp3 + if_random_less_than 128, AI_CV_EvasionUp3 score -1 -BattleAIScript_82DCD4D: - if_not_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DCD6C - if_hp_more_than AI_USER, 50, BattleAIScript_82DCD64 - if_random_less_than 80, BattleAIScript_82DCD6C +AI_CV_EvasionUp3: + if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_EvasionUp5 + if_hp_more_than AI_USER, 50, AI_CV_EvasionUp4 + if_random_less_than 80, AI_CV_EvasionUp5 -BattleAIScript_82DCD64: - if_random_less_than 50, BattleAIScript_82DCD6C +AI_CV_EvasionUp4: + if_random_less_than 50, AI_CV_EvasionUp5 score +3 -BattleAIScript_82DCD6C: - if_not_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DCD7E - if_random_less_than 70, BattleAIScript_82DCD7E +AI_CV_EvasionUp5: + if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_EvasionUp6 + if_random_less_than 70, AI_CV_EvasionUp6 score +3 -BattleAIScript_82DCD7E: - if_not_status3 AI_USER, STATUS3_ROOTED, BattleAIScript_82DCD90 - if_random_less_than 128, BattleAIScript_82DCD90 +AI_CV_EvasionUp6: + if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_EvasionUp7 + if_random_less_than 128, AI_CV_EvasionUp7 score +2 -BattleAIScript_82DCD90: - if_not_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DCDA2 - if_random_less_than 70, BattleAIScript_82DCDA2 +AI_CV_EvasionUp7: + if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_EvasionUp8 + if_random_less_than 70, AI_CV_EvasionUp8 score +3 -BattleAIScript_82DCDA2: - if_hp_more_than AI_USER, 70, BattleAIScript_82DCDC7 - if_stat_level_equal AI_USER, STAT_EVASION, 6, BattleAIScript_82DCDC7 - if_hp_less_than AI_USER, 40, BattleAIScript_82DCDC5 - if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCDC5 - if_random_less_than 70, BattleAIScript_82DCDC7 +AI_CV_EvasionUp8: + if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End + if_stat_level_equal AI_USER, STAT_EVASION, 6, AI_CV_EvasionUp_End + if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2 + if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2 + if_random_less_than 70, AI_CV_EvasionUp_End -BattleAIScript_82DCDC5: +AI_CV_EvasionUp_ScoreDown2: score -2 -BattleAIScript_82DCDC7: +AI_CV_EvasionUp_End: end -BattleAIScript_82DCDC8: - if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCDED - if_stat_level_less_than AI_USER, STAT_ACC, 2, BattleAIScript_82DCDED - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DCDEF - if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCDEF - goto BattleAIScript_82DCDF7 +AI_CV_AlwaysHit: + if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, AI_CV_AlwaysHit_ScoreUp1 + if_stat_level_less_than AI_USER, STAT_ACC, 2, AI_CV_AlwaysHit_ScoreUp1 + if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_AlwaysHit2 + if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_AlwaysHit2 + goto AI_CV_AlwaysHit_End -BattleAIScript_82DCDED: +AI_CV_AlwaysHit_ScoreUp1: score +1 -BattleAIScript_82DCDEF: - if_random_less_than 100, BattleAIScript_82DCDF7 +AI_CV_AlwaysHit2: + if_random_less_than 100, AI_CV_AlwaysHit_End score +1 -BattleAIScript_82DCDF7: +AI_CV_AlwaysHit_End: end -BattleAIScript_82DCDF8: - if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCE1B +AI_CV_AttackDown: @ 82DCDF8 + if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_AttackDown3 score -1 - if_hp_more_than AI_USER, 90, BattleAIScript_82DCE0B + if_hp_more_than AI_USER, 90, AI_CV_AttackDown2 score -1 -BattleAIScript_82DCE0B: - if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DCE1B - if_random_less_than 50, BattleAIScript_82DCE1B +AI_CV_AttackDown2: @ 82DCE0B + if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_AttackDown3 + if_random_less_than 50, AI_CV_AttackDown3 score -2 -BattleAIScript_82DCE1B: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCE24 +AI_CV_AttackDown3: @ 82DCE1B + if_hp_more_than AI_TARGET, 70, AI_CV_AttackDown4 score -2 -BattleAIScript_82DCE24: +AI_CV_AttackDown4: @ 82DCE24 get_target_type1 - if_in_bytes sTypesTable_82DCE43, BattleAIScript_82DCE42 + if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End get_target_type2 - if_in_bytes sTypesTable_82DCE43, BattleAIScript_82DCE42 - if_random_less_than 50, BattleAIScript_82DCE42 + if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End + if_random_less_than 50, AI_CV_AttackDown_End score -2 -BattleAIScript_82DCE42: +AI_CV_AttackDown_End: @ 82DCE42 end -sTypesTable_82DCE43: +AI_CV_AttackDown_UnknownTypeList: .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_GROUND @@ -1164,66 +1164,66 @@ sTypesTable_82DCE43: .byte TYPE_STEEL .byte -1 -BattleAIScript_82DCE4A: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCE59 - if_stat_level_more_than AI_TARGET, STAT_DEF, 3, BattleAIScript_82DCE61 +AI_CV_DefenseDown: + if_hp_less_than AI_USER, 70, AI_CV_DefenseDown2 + if_stat_level_more_than AI_TARGET, STAT_DEF, 3, AI_CV_DefenseDown3 -BattleAIScript_82DCE59: - if_random_less_than 50, BattleAIScript_82DCE61 +AI_CV_DefenseDown2: + if_random_less_than 50, AI_CV_DefenseDown3 score -2 -BattleAIScript_82DCE61: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCE6A +AI_CV_DefenseDown3: + if_hp_more_than AI_TARGET, 70, AI_CV_DefenseDown_End score -2 -BattleAIScript_82DCE6A: +AI_CV_DefenseDown_End: end -BattleAIScript_82DCE6B: - if_move MOVE_ICY_WIND, BattleAIScript_82DCE81 - if_move MOVE_ROCK_TOMB, BattleAIScript_82DCE81 - if_move MOVE_MUD_SHOT, BattleAIScript_82DCE81 +AI_CV_SpeedDownFromChance: @ 82DCE6B + if_move MOVE_ICY_WIND, AI_CV_SpeedDown + if_move MOVE_ROCK_TOMB, AI_CV_SpeedDown + if_move MOVE_MUD_SHOT, AI_CV_SpeedDown end -BattleAIScript_82DCE81: - if_target_faster BattleAIScript_82DCE8E +AI_CV_SpeedDown: @ 82DCE81 + if_target_faster AI_CV_SpeedDown2 score -3 - goto BattleAIScript_82DCE96 + goto AI_CV_SpeedDown_End -BattleAIScript_82DCE8E: - if_random_less_than 70, BattleAIScript_82DCE96 +AI_CV_SpeedDown2: @ 82DCE8E + if_random_less_than 70, AI_CV_SpeedDown_End score +2 -BattleAIScript_82DCE96: +AI_CV_SpeedDown_End: @ 82DCE96 end -BattleAIScript_82DCE97: - if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCEBA +AI_CV_SpAtkDown: + if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_SpAtkDown3 score -1 - if_hp_more_than AI_USER, 90, BattleAIScript_82DCEAA + if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2 score -1 -BattleAIScript_82DCEAA: - if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, BattleAIScript_82DCEBA - if_random_less_than 50, BattleAIScript_82DCEBA +AI_CV_SpAtkDown2: + if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, AI_CV_SpAtkDown3 + if_random_less_than 50, AI_CV_SpAtkDown3 score -2 -BattleAIScript_82DCEBA: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCEC3 +AI_CV_SpAtkDown3: + if_hp_more_than AI_TARGET, 70, AI_CV_SpAtkDown4 score -2 -BattleAIScript_82DCEC3: +AI_CV_SpAtkDown4: get_target_type1 - if_in_bytes sTypesTable_82DCEE2, BattleAIScript_82DCEE1 + if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End get_target_type2 - if_in_bytes sTypesTable_82DCEE2, BattleAIScript_82DCEE1 - if_random_less_than 50, BattleAIScript_82DCEE1 + if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End + if_random_less_than 50, AI_CV_SpAtkDown_End score -2 -BattleAIScript_82DCEE1: +AI_CV_SpAtkDown_End: @ 82DCEE1 end -sTypesTable_82DCEE2: +AI_CV_SpAtkDown_SpecialTypeList: @ 82DCEE2 .byte TYPE_FIRE .byte TYPE_WATER .byte TYPE_GRASS @@ -1234,236 +1234,236 @@ sTypesTable_82DCEE2: .byte TYPE_DARK .byte -1 -BattleAIScript_82DCEEB: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCEFA - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, BattleAIScript_82DCF02 +AI_CV_SpDefDown: @ 82DCEEB + if_hp_less_than AI_USER, 70, AI_CV_SpDefDown2 + if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, AI_CV_SpDefDown3 -BattleAIScript_82DCEFA: - if_random_less_than 50, BattleAIScript_82DCF02 +AI_CV_SpDefDown2: @ 82DCEFA + if_random_less_than 50, AI_CV_SpDefDown3 score -2 -BattleAIScript_82DCF02: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCF0B +AI_CV_SpDefDown3: @ 82DCF02 + if_hp_more_than AI_TARGET, 70, AI_CV_SpDefDown_End score -2 -BattleAIScript_82DCF0B: +AI_CV_SpDefDown_End: @ 82DCF0B end -BattleAIScript_82DCF0C: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCF1A - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCF22 +AI_CV_AccuracyDown: @ 82DCF0C + if_hp_less_than AI_USER, 70, AI_CV_AccuracyDown2 + if_hp_more_than AI_TARGET, 70, AI_CV_AccuracyDown3 -BattleAIScript_82DCF1A: - if_random_less_than 100, BattleAIScript_82DCF22 +AI_CV_AccuracyDown2: + if_random_less_than 100, AI_CV_AccuracyDown3 score -1 -BattleAIScript_82DCF22: - if_stat_level_more_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCF32 - if_random_less_than 80, BattleAIScript_82DCF32 +AI_CV_AccuracyDown3: + if_stat_level_more_than AI_USER, STAT_ACC, 4, AI_CV_AccuracyDown4 + if_random_less_than 80, AI_CV_AccuracyDown4 score -2 -BattleAIScript_82DCF32: - if_not_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DCF44 - if_random_less_than 70, BattleAIScript_82DCF44 +AI_CV_AccuracyDown4: + if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_AccuracyDown5 + if_random_less_than 70, AI_CV_AccuracyDown5 score +2 -BattleAIScript_82DCF44: - if_not_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DCF56 - if_random_less_than 70, BattleAIScript_82DCF56 +AI_CV_AccuracyDown5: + if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_AccuracyDown6 + if_random_less_than 70, AI_CV_AccuracyDown6 score +2 -BattleAIScript_82DCF56: - if_not_status3 AI_USER, STATUS3_ROOTED, BattleAIScript_82DCF68 - if_random_less_than 128, BattleAIScript_82DCF68 +AI_CV_AccuracyDown6: + if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_AccuracyDown7 + if_random_less_than 128, AI_CV_AccuracyDown7 score +1 -BattleAIScript_82DCF68: - if_not_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DCF7A - if_random_less_than 70, BattleAIScript_82DCF7A +AI_CV_AccuracyDown7: + if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_AccuracyDown8 + if_random_less_than 70, AI_CV_AccuracyDown8 score +2 -BattleAIScript_82DCF7A: - if_hp_more_than AI_USER, 70, BattleAIScript_82DCF9F - if_stat_level_equal AI_TARGET, STAT_ACC, 6, BattleAIScript_82DCF9F - if_hp_less_than AI_USER, 40, BattleAIScript_82DCF9D - if_hp_less_than AI_TARGET, 40, BattleAIScript_82DCF9D - if_random_less_than 70, BattleAIScript_82DCF9F +AI_CV_AccuracyDown8: + if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End + if_stat_level_equal AI_TARGET, STAT_ACC, 6, AI_CV_AccuracyDown_End + if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2 + if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2 + if_random_less_than 70, AI_CV_AccuracyDown_End -BattleAIScript_82DCF9D: +AI_CV_AccuracyDown_ScoreDown2: score -2 -BattleAIScript_82DCF9F: +AI_CV_AccuracyDown_End: end -BattleAIScript_82DCFA0: - if_hp_less_than AI_USER, 70, BattleAIScript_82DCFAF - if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, BattleAIScript_82DCFB7 +AI_CV_EvasionDown: + if_hp_less_than AI_USER, 70, AI_CV_EvasionDown2 + if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, AI_CV_EvasionDown3 -BattleAIScript_82DCFAF: - if_random_less_than 50, BattleAIScript_82DCFB7 +AI_CV_EvasionDown2: + if_random_less_than 50, AI_CV_EvasionDown3 score -2 -BattleAIScript_82DCFB7: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCFC0 +AI_CV_EvasionDown3: + if_hp_more_than AI_TARGET, 70, AI_CV_EvasionDown_End score -2 -BattleAIScript_82DCFC0: +AI_CV_EvasionDown_End: end -BattleAIScript_82DCFC1: - if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD016 - if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD016 - if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD016 - if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD016 - if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD016 - if_stat_level_less_than AI_TARGET, STAT_ATK, 4, BattleAIScript_82DD016 - if_stat_level_less_than AI_TARGET, STAT_DEF, 4, BattleAIScript_82DD016 - if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, BattleAIScript_82DD016 - if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, BattleAIScript_82DD016 - if_stat_level_less_than AI_TARGET, STAT_ACC, 4, BattleAIScript_82DD016 - goto BattleAIScript_82DD01E +AI_CV_Haze: + if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_Haze2 + if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_Haze2 + if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_Haze2 + if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_Haze2 + if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Haze2 + if_stat_level_less_than AI_TARGET, STAT_ATK, 4, AI_CV_Haze2 + if_stat_level_less_than AI_TARGET, STAT_DEF, 4, AI_CV_Haze2 + if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, AI_CV_Haze2 + if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, AI_CV_Haze2 + if_stat_level_less_than AI_TARGET, STAT_ACC, 4, AI_CV_Haze2 + goto AI_CV_Haze3 -BattleAIScript_82DD016: - if_random_less_than 50, BattleAIScript_82DD01E +AI_CV_Haze2: + if_random_less_than 50, AI_CV_Haze3 score -3 -BattleAIScript_82DD01E: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD07B - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD07B - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD07B - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD07B - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD07B - if_stat_level_less_than AI_USER, STAT_ATK, 4, BattleAIScript_82DD07B - if_stat_level_less_than AI_USER, STAT_DEF, 4, BattleAIScript_82DD07B - if_stat_level_less_than AI_USER, STAT_SPATK, 4, BattleAIScript_82DD07B - if_stat_level_less_than AI_USER, STAT_SPDEF, 4, BattleAIScript_82DD07B - if_stat_level_less_than AI_USER, STAT_ACC, 4, BattleAIScript_82DD07B - if_random_less_than 50, BattleAIScript_82DD083 +AI_CV_Haze3: + if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Haze4 + if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Haze4 + if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Haze4 + if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Haze4 + if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Haze4 + if_stat_level_less_than AI_USER, STAT_ATK, 4, AI_CV_Haze4 + if_stat_level_less_than AI_USER, STAT_DEF, 4, AI_CV_Haze4 + if_stat_level_less_than AI_USER, STAT_SPATK, 4, AI_CV_Haze4 + if_stat_level_less_than AI_USER, STAT_SPDEF, 4, AI_CV_Haze4 + if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_Haze4 + if_random_less_than 50, AI_CV_Haze_End score -1 - goto BattleAIScript_82DD083 + goto AI_CV_Haze_End -BattleAIScript_82DD07B: - if_random_less_than 50, BattleAIScript_82DD083 +AI_CV_Haze4: + if_random_less_than 50, AI_CV_Haze_End score +3 -BattleAIScript_82DD083: +AI_CV_Haze_End: end -BattleAIScript_82DD084: - if_hp_more_than AI_USER, 90, BattleAIScript_82DD08D +AI_CV_Bide: + if_hp_more_than AI_USER, 90, AI_CV_Bide_End score -2 -BattleAIScript_82DD08D: +AI_CV_Bide_End: end -BattleAIScript_82DD08E: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD0BD - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD0BD - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD0BD - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD0BD - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD0BD +AI_CV_Roar: + if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Roar2 + if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Roar2 + if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Roar2 + if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Roar2 + if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Roar2 score -3 - goto BattleAIScript_82DD0C5 + goto AI_CV_Roar_End -BattleAIScript_82DD0BD: - if_random_less_than 128, BattleAIScript_82DD0C5 +AI_CV_Roar2: + if_random_less_than 128, AI_CV_Roar_End score +2 -BattleAIScript_82DD0C5: +AI_CV_Roar_End: end -BattleAIScript_82DD0C6: - if_hp_more_than AI_USER, 90, BattleAIScript_82DD0CF +AI_CV_Conversion: + if_hp_more_than AI_USER, 90, AI_CV_Conversion2 score -2 -BattleAIScript_82DD0CF: +AI_CV_Conversion2: get_turn_count - if_equal 0, BattleAIScript_82DD0DC + if_equal 0, AI_CV_Conversion_End if_random_less_than 200, Score_Minus2 -BattleAIScript_82DD0DC: +AI_CV_Conversion_End: end -BattleAIScript_82DD0DD: +AI_CV_HealWeather: get_weather - if_equal AI_WEATHER_HAIL, BattleAIScript_82DD0F5 - if_equal AI_WEATHER_RAIN, BattleAIScript_82DD0F5 - if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD0F5 - goto BattleAIScript_82DD0F7 + if_equal AI_WEATHER_HAIL, AI_CV_HealWeather_ScoreDown2 + if_equal AI_WEATHER_RAIN, AI_CV_HealWeather_ScoreDown2 + if_equal AI_WEATHER_SANDSTORM, AI_CV_HealWeather_ScoreDown2 + goto AI_CV_Heal -BattleAIScript_82DD0F5: +AI_CV_HealWeather_ScoreDown2: score -2 -BattleAIScript_82DD0F7: - if_hp_equal AI_USER, 100, BattleAIScript_82DD11F - if_target_faster BattleAIScript_82DD126 +AI_CV_Heal: + if_hp_equal AI_USER, 100, AI_CV_Heal3 + if_target_faster AI_CV_Heal4 score -8 - goto BattleAIScript_82DD14F + goto AI_CV_Heal_End AI_CV_Heal2: - if_hp_less_than AI_USER, 50, BattleAIScript_82DD13A - if_hp_more_than AI_USER, 80, BattleAIScript_82DD11F - if_random_less_than 70, BattleAIScript_82DD13A + if_hp_less_than AI_USER, 50, AI_CV_Heal5 + if_hp_more_than AI_USER, 80, AI_CV_Heal3 + if_random_less_than 70, AI_CV_Heal5 -BattleAIScript_82DD11F: +AI_CV_Heal3: score -3 - goto BattleAIScript_82DD14F + goto AI_CV_Heal_End -BattleAIScript_82DD126: - if_hp_less_than AI_USER, 70, BattleAIScript_82DD13A - if_random_less_than 30, BattleAIScript_82DD13A +AI_CV_Heal4: + if_hp_less_than AI_USER, 70, AI_CV_Heal5 + if_random_less_than 30, AI_CV_Heal5 score -3 - goto BattleAIScript_82DD14F + goto AI_CV_Heal_End -BattleAIScript_82DD13A: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, BattleAIScript_82DD147 - if_random_less_than 100, BattleAIScript_82DD14F +AI_CV_Heal5: + if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Heal6 + if_random_less_than 100, AI_CV_Heal_End -BattleAIScript_82DD147: - if_random_less_than 20, BattleAIScript_82DD14F +AI_CV_Heal6: + if_random_less_than 20, AI_CV_Heal_End score +2 -BattleAIScript_82DD14F: +AI_CV_Heal_End: end -BattleAIScript_82DD150: - if_user_has_no_attacking_moves BattleAIScript_82DD173 - if_hp_more_than AI_USER, 50, BattleAIScript_82DD164 - if_random_less_than 50, BattleAIScript_82DD164 +AI_CV_Toxic: + if_user_has_no_attacking_moves AI_CV_Toxic3 + if_hp_more_than AI_USER, 50, AI_CV_Toxic2 + if_random_less_than 50, AI_CV_Toxic2 score -3 -BattleAIScript_82DD164: - if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD173 - if_random_less_than 50, BattleAIScript_82DD173 +AI_CV_Toxic2: + if_hp_more_than AI_TARGET, 50, AI_CV_Toxic3 + if_random_less_than 50, AI_CV_Toxic3 score -3 -BattleAIScript_82DD173: - if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DD186 - if_has_move_with_effect AI_USER, EFFECT_PROTECT, BattleAIScript_82DD186 - goto BattleAIScript_82DD18E +AI_CV_Toxic3: + if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, AI_CV_Toxic4 + if_has_move_with_effect AI_USER, EFFECT_PROTECT, AI_CV_Toxic4 + goto AI_CV_Toxic_End -BattleAIScript_82DD186: - if_random_less_than 60, BattleAIScript_82DD18E +AI_CV_Toxic4: + if_random_less_than 60, AI_CV_Toxic_End score +2 -BattleAIScript_82DD18E: +AI_CV_Toxic_End: end -BattleAIScript_82DD18F: - if_hp_less_than AI_USER, 50, BattleAIScript_82DD1B2 +AI_CV_LightScreen: + if_hp_less_than AI_USER, 50, AI_CV_LightScreen_ScoreDown2 get_target_type1 - if_in_bytes sTypesTable_82DD1B5, BattleAIScript_82DD1B4 + if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End get_target_type2 - if_in_bytes sTypesTable_82DD1B5, BattleAIScript_82DD1B4 - if_random_less_than 50, BattleAIScript_82DD1B4 + if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End + if_random_less_than 50, AI_CV_LightScreen_End -BattleAIScript_82DD1B2: +AI_CV_LightScreen_ScoreDown2: score -2 -BattleAIScript_82DD1B4: +AI_CV_LightScreen_End: end -sTypesTable_82DD1B5: +AI_CV_LightScreen_SpecialTypeList: .byte TYPE_FIRE .byte TYPE_WATER .byte TYPE_GRASS @@ -1474,98 +1474,98 @@ sTypesTable_82DD1B5: .byte TYPE_DARK .byte -1 -BattleAIScript_82DD1BE: - if_target_faster BattleAIScript_82DD1ED - if_hp_not_equal AI_USER, 100, BattleAIScript_82DD1D2 +AI_CV_Rest: + if_target_faster AI_CV_Rest4 + if_hp_not_equal AI_USER, 100, AI_CV_Rest2 score -8 - goto BattleAIScript_82DD21D + goto AI_CV_Rest_End -BattleAIScript_82DD1D2: - if_hp_less_than AI_USER, 40, BattleAIScript_82DD208 - if_hp_more_than AI_USER, 50, BattleAIScript_82DD1E6 - if_random_less_than 70, BattleAIScript_82DD208 +AI_CV_Rest2: + if_hp_less_than AI_USER, 40, AI_CV_Rest6 + if_hp_more_than AI_USER, 50, AI_CV_Rest3 + if_random_less_than 70, AI_CV_Rest6 -BattleAIScript_82DD1E6: +AI_CV_Rest3: score -3 - goto BattleAIScript_82DD21D + goto AI_CV_Rest_End -BattleAIScript_82DD1ED: - if_hp_less_than AI_USER, 60, BattleAIScript_82DD208 - if_hp_more_than AI_USER, 70, BattleAIScript_82DD201 - if_random_less_than 50, BattleAIScript_82DD208 +AI_CV_Rest4: + if_hp_less_than AI_USER, 60, AI_CV_Rest6 + if_hp_more_than AI_USER, 70, AI_CV_Rest5 + if_random_less_than 50, AI_CV_Rest6 -BattleAIScript_82DD201: +AI_CV_Rest5: score -3 - goto BattleAIScript_82DD21D + goto AI_CV_Rest_End -BattleAIScript_82DD208: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, BattleAIScript_82DD215 - if_random_less_than 50, BattleAIScript_82DD21D +AI_CV_Rest6: + if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Rest7 + if_random_less_than 50, AI_CV_Rest_End -BattleAIScript_82DD215: - if_random_less_than 10, BattleAIScript_82DD21D +AI_CV_Rest7: + if_random_less_than 10, AI_CV_Rest_End score +3 -BattleAIScript_82DD21D: +AI_CV_Rest_End: end -BattleAIScript_82DD21E: +AI_CV_OneHitKO: end -BattleAIScript_82DD21F: - if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD228 +AI_CV_SuperFang: + if_hp_more_than AI_TARGET, 50, AI_CV_SuperFang_End score -1 -BattleAIScript_82DD228: +AI_CV_SuperFang_End: end -BattleAIScript_82DD229: - if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DD256 - if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DD256 - if_status3 AI_TARGET, STATUS3_PERISH_SONG, BattleAIScript_82DD256 - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD256 - goto BattleAIScript_82DD25E +AI_CV_Trap: + if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Trap2 + if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Trap2 + if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Trap2 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Trap2 + goto AI_CV_Trap_End -BattleAIScript_82DD256: - if_random_less_than 128, BattleAIScript_82DD25E +AI_CV_Trap2: + if_random_less_than 128, AI_CV_Trap_End score +1 -BattleAIScript_82DD25E: +AI_CV_Trap_End: end -BattleAIScript_82DD25F: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DD285 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DD285 - if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DD27D - if_type_effectiveness AI_EFFECTIVENESS_x4, BattleAIScript_82DD27D - if_random_less_than 128, BattleAIScript_82DD285 +AI_CV_HighCrit: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_HighCrit_End + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_HighCrit_End + if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CV_HighCrit2 + if_type_effectiveness AI_EFFECTIVENESS_x4, AI_CV_HighCrit2 + if_random_less_than 128, AI_CV_HighCrit_End -BattleAIScript_82DD27D: - if_random_less_than 128, BattleAIScript_82DD285 +AI_CV_HighCrit2: + if_random_less_than 128, AI_CV_HighCrit_End score +1 -BattleAIScript_82DD285: +AI_CV_HighCrit_End: end BattleAIScript_82DD286: if_has_move AI_USER, MOVE_PSYCH_UP, BattleAIScript_82DD2B8 -BattleAIScript_82DD28E: - if_random_less_than 128, BattleAIScript_82DD296 +AI_CV_Flatter: + if_random_less_than 128, AI_CV_Confuse score +1 -BattleAIScript_82DD296: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DD2B7 - if_random_less_than 128, BattleAIScript_82DD2A5 +AI_CV_Confuse: + if_hp_more_than AI_TARGET, 70, AI_CV_Confuse_End + if_random_less_than 128, AI_CV_Confuse2 score -1 -BattleAIScript_82DD2A5: - if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD2B7 +AI_CV_Confuse2: + if_hp_more_than AI_TARGET, 50, AI_CV_Confuse_End score -1 - if_hp_more_than AI_TARGET, 30, BattleAIScript_82DD2B7 + if_hp_more_than AI_TARGET, 30, AI_CV_Confuse_End score -1 -BattleAIScript_82DD2B7: +AI_CV_Confuse_End: end BattleAIScript_82DD2B8: @@ -1582,21 +1582,21 @@ BattleAIScript_82DD2D0: BattleAIScript_82DD2D2: end -BattleAIScript_82DD2D3: - if_hp_less_than AI_USER, 50, BattleAIScript_82DD2F6 +AI_CV_Reflect: + if_hp_less_than AI_USER, 50, AI_CV_Reflect_ScoreDown2 get_target_type1 - if_in_bytes sTypesTable_82DD2F9, BattleAIScript_82DD2F8 + if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End get_target_type2 - if_in_bytes sTypesTable_82DD2F9, BattleAIScript_82DD2F8 - if_random_less_than 50, BattleAIScript_82DD2F8 + if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End + if_random_less_than 50, AI_CV_Reflect_End -BattleAIScript_82DD2F6: +AI_CV_Reflect_ScoreDown2: score -2 -BattleAIScript_82DD2F8: +AI_CV_Reflect_End: end -sTypesTable_82DD2F9: +AI_CV_Reflect_PhysicalTypeList: .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_FLYING @@ -1608,160 +1608,160 @@ sTypesTable_82DD2F9: .byte TYPE_STEEL .byte -1 -BattleAIScript_82DD303: - if_hp_less_than AI_USER, 50, BattleAIScript_82DD311 - if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD313 +AI_CV_Poison: + if_hp_less_than AI_USER, 50, AI_CV_Poison_ScoreDown1 + if_hp_more_than AI_TARGET, 50, AI_CV_Poison_End -BattleAIScript_82DD311: +AI_CV_Poison_ScoreDown1: score -1 -BattleAIScript_82DD313: +AI_CV_Poison_End: end -BattleAIScript_82DD314: - if_target_faster BattleAIScript_82DD328 - if_hp_more_than AI_USER, 70, BattleAIScript_82DD330 +AI_CV_Paralyze: + if_target_faster AI_CV_Paralyze2 + if_hp_more_than AI_USER, 70, AI_CV_Paralyze_End score -1 - goto BattleAIScript_82DD330 + goto AI_CV_Paralyze_End -BattleAIScript_82DD328: - if_random_less_than 20, BattleAIScript_82DD330 +AI_CV_Paralyze2: + if_random_less_than 20, AI_CV_Paralyze_End score +3 -BattleAIScript_82DD330: +AI_CV_Paralyze_End: end -BattleAIScript_82DD331: - if_target_faster BattleAIScript_82DD353 - if_hp_more_than AI_USER, 60, BattleAIScript_82DD353 - if_hp_less_than AI_USER, 40, BattleAIScript_82DD34B - if_random_less_than 180, BattleAIScript_82DD353 +AI_CV_VitalThrow: + if_target_faster AI_CV_VitalThrow_End + if_hp_more_than AI_USER, 60, AI_CV_VitalThrow_End + if_hp_less_than AI_USER, 40, AI_CV_VitalThrow2 + if_random_less_than 180, AI_CV_VitalThrow_End -BattleAIScript_82DD34B: - if_random_less_than 50, BattleAIScript_82DD353 +AI_CV_VitalThrow2: + if_random_less_than 50, AI_CV_VitalThrow_End score -1 -BattleAIScript_82DD353: +AI_CV_VitalThrow_End: end -BattleAIScript_82DD354: - if_hp_more_than AI_USER, 90, BattleAIScript_82DD381 - if_hp_more_than AI_USER, 70, BattleAIScript_82DD379 - if_hp_more_than AI_USER, 50, BattleAIScript_82DD371 - if_random_less_than 100, BattleAIScript_82DD371 +AI_CV_Substitute: + if_hp_more_than AI_USER, 90, AI_CV_Substitute4 + if_hp_more_than AI_USER, 70, AI_CV_Substitute3 + if_hp_more_than AI_USER, 50, AI_CV_Substitute2 + if_random_less_than 100, AI_CV_Substitute2 score -1 -BattleAIScript_82DD371: - if_random_less_than 100, BattleAIScript_82DD379 +AI_CV_Substitute2: + if_random_less_than 100, AI_CV_Substitute3 score -1 -BattleAIScript_82DD379: - if_random_less_than 100, BattleAIScript_82DD381 +AI_CV_Substitute3: + if_random_less_than 100, AI_CV_Substitute4 score -1 -BattleAIScript_82DD381: - if_target_faster BattleAIScript_82DD3E9 +AI_CV_Substitute4: + if_target_faster AI_CV_Substitute_End get_last_used_bank_move AI_TARGET get_move_effect_from_result - if_equal EFFECT_SLEEP, BattleAIScript_82DD3B9 - if_equal EFFECT_TOXIC, BattleAIScript_82DD3B9 - if_equal EFFECT_POISON, BattleAIScript_82DD3B9 - if_equal EFFECT_PARALYZE, BattleAIScript_82DD3B9 - if_equal EFFECT_WILL_O_WISP, BattleAIScript_82DD3B9 - if_equal EFFECT_CONFUSE, BattleAIScript_82DD3C8 - if_equal EFFECT_LEECH_SEED, BattleAIScript_82DD3D7 - goto BattleAIScript_82DD3E9 - -BattleAIScript_82DD3B9: - if_not_status AI_TARGET, STATUS1_ANY, BattleAIScript_82DD3E1 - goto BattleAIScript_82DD3E9 - -BattleAIScript_82DD3C8: - if_not_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD3E1 - goto BattleAIScript_82DD3E9 - -BattleAIScript_82DD3D7: - if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DD3E9 - -BattleAIScript_82DD3E1: - if_random_less_than 100, BattleAIScript_82DD3E9 + if_equal EFFECT_SLEEP, AI_CV_Substitute5 + if_equal EFFECT_TOXIC, AI_CV_Substitute5 + if_equal EFFECT_POISON, AI_CV_Substitute5 + if_equal EFFECT_PARALYZE, AI_CV_Substitute5 + if_equal EFFECT_WILL_O_WISP, AI_CV_Substitute5 + if_equal EFFECT_CONFUSE, AI_CV_Substitute6 + if_equal EFFECT_LEECH_SEED, AI_CV_Substitute7 + goto AI_CV_Substitute_End + +AI_CV_Substitute5: + if_not_status AI_TARGET, STATUS1_ANY, AI_CV_Substitute8 + goto AI_CV_Substitute_End + +AI_CV_Substitute6: + if_not_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Substitute8 + goto AI_CV_Substitute_End + +AI_CV_Substitute7: + if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Substitute_End + +AI_CV_Substitute8: + if_random_less_than 100, AI_CV_Substitute_End score +1 -BattleAIScript_82DD3E9: +AI_CV_Substitute_End: end -BattleAIScript_82DD3EA: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DD40F - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DD40F - if_target_faster BattleAIScript_82DD408 - if_hp_more_than AI_USER, 40, BattleAIScript_82DD40F - goto BattleAIScript_82DD411 +AI_CV_Recharge: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Recharge_ScoreDown1 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Recharge_ScoreDown1 + if_target_faster AI_CV_Recharge2 + if_hp_more_than AI_USER, 40, AI_CV_Recharge_ScoreDown1 + goto AI_CV_Recharge_End -BattleAIScript_82DD408: - if_hp_less_than AI_USER, 60, BattleAIScript_82DD411 +AI_CV_Recharge2: + if_hp_less_than AI_USER, 60, AI_CV_Recharge_End -BattleAIScript_82DD40F: +AI_CV_Recharge_ScoreDown1: score -1 -BattleAIScript_82DD411: +AI_CV_Recharge_End: end -BattleAIScript_82DD412: - if_target_faster BattleAIScript_82DD430 +AI_CV_Disable: + if_target_faster AI_CV_Disable_End get_last_used_bank_move AI_TARGET get_move_power_from_result - if_equal 0, BattleAIScript_82DD428 + if_equal 0, AI_CV_Disable2 score +1 - goto BattleAIScript_82DD430 + goto AI_CV_Disable_End -BattleAIScript_82DD428: - if_random_less_than 100, BattleAIScript_82DD430 +AI_CV_Disable2: + if_random_less_than 100, AI_CV_Disable_End score -1 -BattleAIScript_82DD430: +AI_CV_Disable_End: end -BattleAIScript_82DD431: - if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DD4D6 - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD4D6 - if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD4D6 - if_hp_more_than AI_USER, 30, BattleAIScript_82DD45E - if_random_less_than 10, BattleAIScript_82DD45E +AI_CV_Counter: + if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Counter_ScoreDown1 + if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Counter_ScoreDown1 + if_hp_more_than AI_USER, 30, AI_CV_Counter2 + if_random_less_than 10, AI_CV_Counter2 score -1 -BattleAIScript_82DD45E: - if_hp_more_than AI_USER, 50, BattleAIScript_82DD46D - if_random_less_than 100, BattleAIScript_82DD46D +AI_CV_Counter2: + if_hp_more_than AI_USER, 50, AI_CV_Counter3 + if_random_less_than 100, AI_CV_Counter3 score -1 -BattleAIScript_82DD46D: +AI_CV_Counter3: if_has_move AI_USER, MOVE_MIRROR_COAT, BattleAIScript_82DD4CD get_last_used_bank_move AI_TARGET get_move_power_from_result - if_equal 0, BattleAIScript_82DD4A4 - if_target_not_taunted BattleAIScript_82DD48B - if_random_less_than 100, BattleAIScript_82DD48B + if_equal 0, AI_CV_Counter5 + if_target_not_taunted AI_CV_Counter4 + if_random_less_than 100, AI_CV_Counter4 score +1 -BattleAIScript_82DD48B: +AI_CV_Counter4: get_last_used_bank_move AI_TARGET get_move_type_from_result - if_not_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D6 - if_random_less_than 100, BattleAIScript_82DD4D8 + if_not_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_ScoreDown1 + if_random_less_than 100, AI_CV_Counter_End score +1 - goto BattleAIScript_82DD4D8 + goto AI_CV_Counter_End -BattleAIScript_82DD4A4: - if_target_not_taunted BattleAIScript_82DD4B1 - if_random_less_than 100, BattleAIScript_82DD4B1 +AI_CV_Counter5: + if_target_not_taunted AI_CV_Counter6 + if_random_less_than 100, AI_CV_Counter6 score +1 -BattleAIScript_82DD4B1: +AI_CV_Counter6: get_target_type1 - if_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D8 + if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End get_target_type2 - if_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D8 - if_random_less_than 50, BattleAIScript_82DD4D8 + if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End + if_random_less_than 50, AI_CV_Counter_End BattleAIScript_82DD4CD: if_random_less_than 100, BattleAIScript_82DD4D5 @@ -1770,13 +1770,13 @@ BattleAIScript_82DD4CD: BattleAIScript_82DD4D5: end -BattleAIScript_82DD4D6: +AI_CV_Counter_ScoreDown1: score -1 -BattleAIScript_82DD4D8: +AI_CV_Counter_End: end -sTypesTable_82DD4D9: +AI_CV_Counter_PhysicalTypeList: .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_FLYING @@ -1788,25 +1788,25 @@ sTypesTable_82DD4D9: .byte TYPE_STEEL .byte -1 -BattleAIScript_82DD4E3: - if_any_move_disabled AI_TARGET, BattleAIScript_82DD4FC - if_target_faster BattleAIScript_82DD509 +AI_CV_Encore: + if_any_move_disabled AI_TARGET, AI_CV_Encore2 + if_target_faster AI_CV_Encore_ScoreDown2 get_last_used_bank_move AI_TARGET get_move_effect_from_result - if_not_in_bytes sMoveEffectsTable_82DD50C, BattleAIScript_82DD509 + if_not_in_bytes AI_CV_Encore_EncouragedMovesToEncore, AI_CV_Encore_ScoreDown2 -BattleAIScript_82DD4FC: - if_random_less_than 30, BattleAIScript_82DD50B +AI_CV_Encore2: + if_random_less_than 30, AI_CV_Encore_End score +3 - goto BattleAIScript_82DD50B + goto AI_CV_Encore_End -BattleAIScript_82DD509: +AI_CV_Encore_ScoreDown2: score -2 -BattleAIScript_82DD50B: +AI_CV_Encore_End: end -sMoveEffectsTable_82DD50C: +AI_CV_Encore_EncouragedMovesToEncore: .byte EFFECT_DREAM_EATER .byte EFFECT_ATTACK_UP .byte EFFECT_DEFENSE_UP @@ -1871,108 +1871,108 @@ sMoveEffectsTable_82DD50C: .byte EFFECT_CAMOUFLAGE .byte -1 -BattleAIScript_82DD54B: - if_hp_less_than AI_TARGET, 80, BattleAIScript_82DD574 - if_target_faster BattleAIScript_82DD566 - if_hp_more_than AI_USER, 40, BattleAIScript_82DD574 +AI_CV_PainSplit: + if_hp_less_than AI_TARGET, 80, AI_CV_PainSplit_ScoreDown1 + if_target_faster AI_CV_PainSplit2 + if_hp_more_than AI_USER, 40, AI_CV_PainSplit_ScoreDown1 score +1 - goto BattleAIScript_82DD576 + goto AI_CV_PainSplit_End -BattleAIScript_82DD566: - if_hp_more_than AI_USER, 60, BattleAIScript_82DD574 +AI_CV_PainSplit2: + if_hp_more_than AI_USER, 60, AI_CV_PainSplit_ScoreDown1 score +1 - goto BattleAIScript_82DD576 + goto AI_CV_PainSplit_End -BattleAIScript_82DD574: +AI_CV_PainSplit_ScoreDown1: score -1 -BattleAIScript_82DD576: +AI_CV_PainSplit_End: end -BattleAIScript_82DD577: +AI_CV_Snore: score +2 end -BattleAIScript_82DD57A: - if_random_less_than 128, BattleAIScript_82DD582 +AI_CV_LockOn: + if_random_less_than 128, AI_CV_LockOn_End score +2 -BattleAIScript_82DD582: +AI_CV_LockOn_End: end -BattleAIScript_82DD583: +AI_CV_SleepTalk: if_status AI_USER, STATUS1_SLEEP, Score_Plus10 score -5 end -BattleAIScript_82DD590: +AI_CV_DestinyBond: score -1 - if_target_faster BattleAIScript_82DD5C5 - if_hp_more_than AI_USER, 70, BattleAIScript_82DD5C5 - if_random_less_than 128, BattleAIScript_82DD5A7 + if_target_faster AI_CV_DestinyBond_End + if_hp_more_than AI_USER, 70, AI_CV_DestinyBond_End + if_random_less_than 128, AI_CV_DestinyBond2 score +1 -BattleAIScript_82DD5A7: - if_hp_more_than AI_USER, 50, BattleAIScript_82DD5C5 - if_random_less_than 128, BattleAIScript_82DD5B6 +AI_CV_DestinyBond2: + if_hp_more_than AI_USER, 50, AI_CV_DestinyBond_End + if_random_less_than 128, AI_CV_DestinyBond3 score +1 -BattleAIScript_82DD5B6: - if_hp_more_than AI_USER, 30, BattleAIScript_82DD5C5 - if_random_less_than 100, BattleAIScript_82DD5C5 +AI_CV_DestinyBond3: + if_hp_more_than AI_USER, 30, AI_CV_DestinyBond_End + if_random_less_than 100, AI_CV_DestinyBond_End score +2 -BattleAIScript_82DD5C5: +AI_CV_DestinyBond_End: end -BattleAIScript_82DD5C6: - if_target_faster BattleAIScript_82DD5E6 - if_hp_more_than AI_USER, 33, BattleAIScript_82DD608 - if_hp_more_than AI_USER, 20, BattleAIScript_82DD60A - if_hp_less_than AI_USER, 8, BattleAIScript_82DD5F9 - goto BattleAIScript_82DD5FB +AI_CV_Flail: + if_target_faster AI_CV_Flail2 + if_hp_more_than AI_USER, 33, AI_CV_Flail_ScoreDown1 + if_hp_more_than AI_USER, 20, AI_CV_Flail_End + if_hp_less_than AI_USER, 8, AI_CV_Flail_ScoreUp1 + goto AI_CV_Flail3 -BattleAIScript_82DD5E6: - if_hp_more_than AI_USER, 60, BattleAIScript_82DD608 - if_hp_more_than AI_USER, 40, BattleAIScript_82DD60A - goto BattleAIScript_82DD5FB +AI_CV_Flail2: + if_hp_more_than AI_USER, 60, AI_CV_Flail_ScoreDown1 + if_hp_more_than AI_USER, 40, AI_CV_Flail_End + goto AI_CV_Flail3 -BattleAIScript_82DD5F9: +AI_CV_Flail_ScoreUp1: score +1 -BattleAIScript_82DD5FB: - if_random_less_than 100, BattleAIScript_82DD60A +AI_CV_Flail3: + if_random_less_than 100, AI_CV_Flail_End score +1 - goto BattleAIScript_82DD60A + goto AI_CV_Flail_End -BattleAIScript_82DD608: +AI_CV_Flail_ScoreDown1: score -1 -BattleAIScript_82DD60A: +AI_CV_Flail_End: end -BattleAIScript_82DD60B: - if_status AI_TARGET, STATUS1_ANY, BattleAIScript_82DD621 - if_status_in_party AI_TARGET, STATUS1_ANY, BattleAIScript_82DD621 +AI_CV_HealBell: + if_status AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End + if_status_in_party AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End score -5 -BattleAIScript_82DD621: +AI_CV_HealBell_End: end -BattleAIScript_82DD622: +AI_CV_Thief: get_hold_effect AI_TARGET - if_not_in_bytes sHoldEffectsTable_82DD63D, BattleAIScript_82DD63A - if_random_less_than 50, BattleAIScript_82DD63C + if_not_in_bytes AI_CV_Thief_EncourageItemsToSteal, AI_CV_Thief_ScoreDown2 + if_random_less_than 50, AI_CV_Thief_End score +1 - goto BattleAIScript_82DD63C + goto AI_CV_Thief_End -BattleAIScript_82DD63A: +AI_CV_Thief_ScoreDown2: score -2 -BattleAIScript_82DD63C: +AI_CV_Thief_End: end -sHoldEffectsTable_82DD63D: +AI_CV_Thief_EncourageItemsToSteal: .byte HOLD_EFFECT_CURE_SLP .byte HOLD_EFFECT_CURE_STATUS .byte HOLD_EFFECT_RESTORE_HP @@ -1982,317 +1982,317 @@ sHoldEffectsTable_82DD63D: .byte HOLD_EFFECT_THICK_CLUB .byte -1 -BattleAIScript_82DD645: +AI_CV_Curse: get_user_type1 - if_equal TYPE_GHOST, BattleAIScript_82DD68A + if_equal TYPE_GHOST, AI_CV_Curse4 get_user_type2 - if_equal TYPE_GHOST, BattleAIScript_82DD68A - if_stat_level_more_than AI_USER, STAT_DEF, 9, BattleAIScript_82DD693 - if_random_less_than 128, BattleAIScript_82DD665 + if_equal TYPE_GHOST, AI_CV_Curse4 + if_stat_level_more_than AI_USER, STAT_DEF, 9, AI_CV_Curse_End + if_random_less_than 128, AI_CV_Curse2 score +1 -BattleAIScript_82DD665: - if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD693 - if_random_less_than 128, BattleAIScript_82DD675 +AI_CV_Curse2: + if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_Curse_End + if_random_less_than 128, AI_CV_Curse3 score +1 -BattleAIScript_82DD675: - if_stat_level_more_than AI_USER, STAT_DEF, 6, BattleAIScript_82DD693 - if_random_less_than 128, BattleAIScript_82DD693 +AI_CV_Curse3: + if_stat_level_more_than AI_USER, STAT_DEF, 6, AI_CV_Curse_End + if_random_less_than 128, AI_CV_Curse_End score +1 - goto BattleAIScript_82DD693 + goto AI_CV_Curse_End -BattleAIScript_82DD68A: - if_hp_more_than AI_USER, 80, BattleAIScript_82DD693 +AI_CV_Curse4: + if_hp_more_than AI_USER, 80, AI_CV_Curse_End score -1 -BattleAIScript_82DD693: +AI_CV_Curse_End: end -BattleAIScript_82DD694: +AI_CV_Protect: get_protect_count AI_USER - if_more_than 1, BattleAIScript_82DD75A - if_status AI_USER, STATUS1_TOXIC_POISON, BattleAIScript_82DD751 - if_status2 AI_USER, STATUS2_CURSED, BattleAIScript_82DD751 - if_status3 AI_USER, STATUS3_PERISH_SONG, BattleAIScript_82DD751 - if_status2 AI_USER, STATUS2_INFATUATION, BattleAIScript_82DD751 - if_status3 AI_USER, STATUS3_LEECHSEED, BattleAIScript_82DD751 - if_status3 AI_USER, STATUS3_YAWN, BattleAIScript_82DD751 - if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, BattleAIScript_82DD751 - if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, BattleAIScript_82DD751 - if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DD730 - if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DD730 - if_status3 AI_TARGET, STATUS3_PERISH_SONG, BattleAIScript_82DD730 - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD730 - if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DD730 - if_status3 AI_TARGET, STATUS3_YAWN, BattleAIScript_82DD730 + if_more_than 1, AI_CV_Protect_ScoreDown2 + if_status AI_USER, STATUS1_TOXIC_POISON, AI_CV_Protect3 + if_status2 AI_USER, STATUS2_CURSED, AI_CV_Protect3 + if_status3 AI_USER, STATUS3_PERISH_SONG, AI_CV_Protect3 + if_status2 AI_USER, STATUS2_INFATUATION, AI_CV_Protect3 + if_status3 AI_USER, STATUS3_LEECHSEED, AI_CV_Protect3 + if_status3 AI_USER, STATUS3_YAWN, AI_CV_Protect3 + if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Protect3 + if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Protect3 + if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Protect_ScoreUp2 + if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Protect_ScoreUp2 + if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Protect_ScoreUp2 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Protect_ScoreUp2 + if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Protect_ScoreUp2 + if_status3 AI_TARGET, STATUS3_YAWN, AI_CV_Protect_ScoreUp2 get_last_used_bank_move AI_TARGET get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DD730 - goto BattleAIScript_82DD732 + if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_ScoreUp2 + goto AI_CV_Protect2 -BattleAIScript_82DD730: +AI_CV_Protect_ScoreUp2: score +2 -BattleAIScript_82DD732: - if_random_less_than 128, BattleAIScript_82DD73A +AI_CV_Protect2: + if_random_less_than 128, AI_CV_Protect4 score -1 - -BattleAIScript_82DD73A: + +AI_CV_Protect4: get_protect_count AI_USER - if_equal 0, BattleAIScript_82DD75C + if_equal 0, AI_CV_Protect_End score -1 - if_random_less_than 128, BattleAIScript_82DD75C + if_random_less_than 128, AI_CV_Protect_End score -1 - goto BattleAIScript_82DD75C - -BattleAIScript_82DD751: + goto AI_CV_Protect_End + +AI_CV_Protect3: get_last_used_bank_move AI_TARGET get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DD75C + if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_End -BattleAIScript_82DD75A: +AI_CV_Protect_ScoreDown2: score -2 -BattleAIScript_82DD75C: +AI_CV_Protect_End: end -BattleAIScript_82DD75D: +AI_CV_Foresight: get_user_type1 - if_equal TYPE_GHOST, BattleAIScript_82DD77C + if_equal TYPE_GHOST, AI_CV_Foresight2 get_user_type2 - if_equal TYPE_GHOST, BattleAIScript_82DD77C - if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD782 + if_equal TYPE_GHOST, AI_CV_Foresight2 + if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Foresight3 score -2 - goto BattleAIScript_82DD78A + goto AI_CV_Foresight_End -BattleAIScript_82DD77C: - if_random_less_than 80, BattleAIScript_82DD78A +AI_CV_Foresight2: + if_random_less_than 80, AI_CV_Foresight_End -BattleAIScript_82DD782: - if_random_less_than 80, BattleAIScript_82DD78A +AI_CV_Foresight3: + if_random_less_than 80, AI_CV_Foresight_End score +2 -BattleAIScript_82DD78A: +AI_CV_Foresight_End: end -BattleAIScript_82DD78B: - if_hp_less_than AI_USER, 4, BattleAIScript_82DD799 - if_hp_less_than AI_USER, 35, BattleAIScript_82DD7A0 +AI_CV_Endure: + if_hp_less_than AI_USER, 4, AI_CV_Endure2 + if_hp_less_than AI_USER, 35, AI_CV_Endure3 -BattleAIScript_82DD799: +AI_CV_Endure2: score -1 - goto BattleAIScript_82DD7A8 + goto AI_CV_Endure_End -BattleAIScript_82DD7A0: - if_random_less_than 70, BattleAIScript_82DD7A8 +AI_CV_Endure3: + if_random_less_than 70, AI_CV_Endure_End score +1 -BattleAIScript_82DD7A8: +AI_CV_Endure_End: end -BattleAIScript_82DD7A9: - if_stat_level_more_than AI_USER, STAT_ATK, 8, BattleAIScript_82DD7D6 - if_stat_level_more_than AI_USER, STAT_DEF, 8, BattleAIScript_82DD7D6 - if_stat_level_more_than AI_USER, STAT_SPATK, 8, BattleAIScript_82DD7D6 - if_stat_level_more_than AI_USER, STAT_SPDEF, 8, BattleAIScript_82DD7D6 - if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD7D6 - goto BattleAIScript_82DD7FC +AI_CV_BatonPass: + if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_BatonPass2 + if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_BatonPass2 + if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_BatonPass2 + if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_BatonPass2 + if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_BatonPass2 + goto AI_CV_BatonPass5 -BattleAIScript_82DD7D6: - if_target_faster BattleAIScript_82DD7E8 - if_hp_more_than AI_USER, 60, BattleAIScript_82DD844 - goto BattleAIScript_82DD7EF +AI_CV_BatonPass2: + if_target_faster AI_CV_BatonPass3 + if_hp_more_than AI_USER, 60, AI_CV_BatonPass_End + goto AI_CV_BatonPass4 -BattleAIScript_82DD7E8: - if_hp_more_than AI_USER, 70, BattleAIScript_82DD844 +AI_CV_BatonPass3: + if_hp_more_than AI_USER, 70, AI_CV_BatonPass_End -BattleAIScript_82DD7EF: - if_random_less_than 80, BattleAIScript_82DD844 +AI_CV_BatonPass4: + if_random_less_than 80, AI_CV_BatonPass_End score +2 - goto BattleAIScript_82DD844 + goto AI_CV_BatonPass_End -BattleAIScript_82DD7FC: - if_stat_level_more_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD829 - if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD829 - if_stat_level_more_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD829 - if_stat_level_more_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD829 - if_stat_level_more_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD829 - goto BattleAIScript_82DD842 +AI_CV_BatonPass5: + if_stat_level_more_than AI_USER, STAT_ATK, 7, AI_CV_BatonPass7 + if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_BatonPass7 + if_stat_level_more_than AI_USER, STAT_SPATK, 7, AI_CV_BatonPass7 + if_stat_level_more_than AI_USER, STAT_SPDEF, 7, AI_CV_BatonPass7 + if_stat_level_more_than AI_USER, STAT_EVASION, 7, AI_CV_BatonPass7 + goto AI_CV_BatonPass_ScoreDown2 -BattleAIScript_82DD829: - if_target_faster BattleAIScript_82DD83B - if_hp_more_than AI_USER, 60, BattleAIScript_82DD842 - goto BattleAIScript_82DD844 +AI_CV_BatonPass7: + if_target_faster AI_CV_BatonPass8 + if_hp_more_than AI_USER, 60, AI_CV_BatonPass_ScoreDown2 + goto AI_CV_BatonPass_End -BattleAIScript_82DD83B: - if_hp_less_than AI_USER, 70, BattleAIScript_82DD844 +AI_CV_BatonPass8: + if_hp_less_than AI_USER, 70, AI_CV_BatonPass_End -BattleAIScript_82DD842: +AI_CV_BatonPass_ScoreDown2: score -2 -BattleAIScript_82DD844: +AI_CV_BatonPass_End: end -BattleAIScript_82DD845: +AI_CV_Pursuit: is_first_turn_for AI_USER - if_not_equal 0, BattleAIScript_82DD87A + if_not_equal 0, AI_CV_Pursuit_End get_target_type1 - if_equal TYPE_GHOST, BattleAIScript_82DD872 + if_equal TYPE_GHOST, AI_CV_Pursuit2 get_target_type1 - if_equal TYPE_PSYCHIC, BattleAIScript_82DD872 + if_equal TYPE_PSYCHIC, AI_CV_Pursuit2 get_target_type2 - if_equal TYPE_GHOST, BattleAIScript_82DD872 + if_equal TYPE_GHOST, AI_CV_Pursuit2 get_target_type2 - if_equal TYPE_PSYCHIC, BattleAIScript_82DD872 - goto BattleAIScript_82DD87A + if_equal TYPE_PSYCHIC, AI_CV_Pursuit2 + goto AI_CV_Pursuit_End -BattleAIScript_82DD872: - if_random_less_than 128, BattleAIScript_82DD87A +AI_CV_Pursuit2: + if_random_less_than 128, AI_CV_Pursuit_End score +1 -BattleAIScript_82DD87A: +AI_CV_Pursuit_End: end -BattleAIScript_82DD87B: - if_user_faster BattleAIScript_82DD889 +AI_CV_RainDance: + if_user_faster AI_CV_RainDance2 get_ability AI_USER - if_equal ABILITY_SWIFT_SWIM, BattleAIScript_82DD8B0 + if_equal ABILITY_SWIFT_SWIM, AI_CV_RainDance3 -BattleAIScript_82DD889: - if_hp_less_than AI_USER, 40, BattleAIScript_82DD8B7 +AI_CV_RainDance2: + if_hp_less_than AI_USER, 40, AI_CV_RainDance_ScoreDown1 get_weather - if_equal AI_WEATHER_HAIL, BattleAIScript_82DD8B0 - if_equal AI_WEATHER_SUN, BattleAIScript_82DD8B0 - if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD8B0 + if_equal AI_WEATHER_HAIL, AI_CV_RainDance3 + if_equal AI_WEATHER_SUN, AI_CV_RainDance3 + if_equal AI_WEATHER_SANDSTORM, AI_CV_RainDance3 get_ability AI_USER - if_equal ABILITY_RAIN_DISH, BattleAIScript_82DD8B0 - goto BattleAIScript_82DD8B9 + if_equal ABILITY_RAIN_DISH, AI_CV_RainDance3 + goto AI_CV_RainDance_End -BattleAIScript_82DD8B0: +AI_CV_RainDance3: score +1 - goto BattleAIScript_82DD8B9 + goto AI_CV_RainDance_End -BattleAIScript_82DD8B7: +AI_CV_RainDance_ScoreDown1: score -1 -BattleAIScript_82DD8B9: +AI_CV_RainDance_End: end -BattleAIScript_82DD8BA: - if_hp_less_than AI_USER, 40, BattleAIScript_82DD8E0 +AI_CV_SunnyDay: + if_hp_less_than AI_USER, 40, AI_CV_SunnyDay_ScoreDown1 get_weather - if_equal AI_WEATHER_HAIL, BattleAIScript_82DD8D9 - if_equal AI_WEATHER_RAIN, BattleAIScript_82DD8D9 - if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD8D9 - goto BattleAIScript_82DD8E2 + if_equal AI_WEATHER_HAIL, AI_CV_SunnyDay2 + if_equal AI_WEATHER_RAIN, AI_CV_SunnyDay2 + if_equal AI_WEATHER_SANDSTORM, AI_CV_SunnyDay2 + goto AI_CV_SunnyDay_End -BattleAIScript_82DD8D9: +AI_CV_SunnyDay2: score +1 - goto BattleAIScript_82DD8E2 + goto AI_CV_SunnyDay_End -BattleAIScript_82DD8E0: +AI_CV_SunnyDay_ScoreDown1: score -1 -BattleAIScript_82DD8E2: +AI_CV_SunnyDay_End: end -BattleAIScript_82DD8E3: - if_hp_less_than AI_USER, 90, BattleAIScript_82DD8EF - goto BattleAIScript_82DD8F1 +AI_CV_BellyDrum: + if_hp_less_than AI_USER, 90, AI_CV_BellyDrum_ScoreDown2 + goto AI_CV_BellyDrum_End -BattleAIScript_82DD8EF: +AI_CV_BellyDrum_ScoreDown2: score -2 -BattleAIScript_82DD8F1: +AI_CV_BellyDrum_End: end -BattleAIScript_82DD8F2: - if_stat_level_more_than AI_TARGET, STAT_ATK, 8, BattleAIScript_82DD91F - if_stat_level_more_than AI_TARGET, STAT_DEF, 8, BattleAIScript_82DD91F - if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, BattleAIScript_82DD91F - if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, BattleAIScript_82DD91F - if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, BattleAIScript_82DD91F - goto BattleAIScript_82DD957 +AI_CV_PsychUp: + if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_PsychUp2 + if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_PsychUp2 + if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_PsychUp2 + if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_PsychUp2 + if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_PsychUp2 + goto AI_CV_PsychUp_ScoreDown2 -BattleAIScript_82DD91F: - if_stat_level_less_than AI_USER, STAT_ATK, 7, BattleAIScript_82DD954 - if_stat_level_less_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD954 - if_stat_level_less_than AI_USER, STAT_SPATK, 7, BattleAIScript_82DD954 - if_stat_level_less_than AI_USER, STAT_SPDEF, 7, BattleAIScript_82DD954 - if_stat_level_less_than AI_USER, STAT_EVASION, 7, BattleAIScript_82DD952 - if_random_less_than 50, BattleAIScript_82DD959 - goto BattleAIScript_82DD957 +AI_CV_PsychUp2: + if_stat_level_less_than AI_USER, STAT_ATK, 7, AI_CV_PsychUp3 + if_stat_level_less_than AI_USER, STAT_DEF, 7, AI_CV_PsychUp3 + if_stat_level_less_than AI_USER, STAT_SPATK, 7, AI_CV_PsychUp3 + if_stat_level_less_than AI_USER, STAT_SPDEF, 7, AI_CV_PsychUp3 + if_stat_level_less_than AI_USER, STAT_EVASION, 7, AI_CV_PsychUp_ScoreUp1 + if_random_less_than 50, AI_CV_PsychUp_End + goto AI_CV_PsychUp_ScoreDown2 -BattleAIScript_82DD952: +AI_CV_PsychUp_ScoreUp1: score +1 -BattleAIScript_82DD954: +AI_CV_PsychUp3: score +1 end -BattleAIScript_82DD957: +AI_CV_PsychUp_ScoreDown2: score -2 -BattleAIScript_82DD959: +AI_CV_PsychUp_End: end -BattleAIScript_82DD95A: - if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DD9FF - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD9FF - if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD9FF - if_hp_more_than AI_USER, 30, BattleAIScript_82DD987 - if_random_less_than 10, BattleAIScript_82DD987 +AI_CV_MirrorCoat: + if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_MirrorCoat_ScoreDown1 + if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_MirrorCoat_ScoreDown1 + if_hp_more_than AI_USER, 30, AI_CV_MirrorCoat2 + if_random_less_than 10, AI_CV_MirrorCoat2 score -1 -BattleAIScript_82DD987: - if_hp_more_than AI_USER, 50, BattleAIScript_82DD996 - if_random_less_than 100, BattleAIScript_82DD996 +AI_CV_MirrorCoat2: + if_hp_more_than AI_USER, 50, AI_CV_MirrorCoat3 + if_random_less_than 100, AI_CV_MirrorCoat3 score -1 -BattleAIScript_82DD996: - if_has_move AI_USER, MOVE_COUNTER, BattleAIScript_82DD9F6 +AI_CV_MirrorCoat3: + if_has_move AI_USER, MOVE_COUNTER, AI_CV_MirrorCoat_ScoreUp4 get_last_used_bank_move AI_TARGET get_move_power_from_result - if_equal 0, BattleAIScript_82DD9CD - if_target_not_taunted BattleAIScript_82DD9B4 - if_random_less_than 100, BattleAIScript_82DD9B4 + if_equal 0, AI_CV_MirrorCoat5 + if_target_not_taunted AI_CV_MirrorCoat4 + if_random_less_than 100, AI_CV_MirrorCoat4 score +1 -BattleAIScript_82DD9B4: +AI_CV_MirrorCoat4: get_last_used_bank_move AI_TARGET get_move_type_from_result - if_not_in_bytes sTypesTable_82DDA02, BattleAIScript_82DD9FF - if_random_less_than 100, BattleAIScript_82DDA01 + if_not_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_ScoreDown1 + if_random_less_than 100, AI_CV_MirrorCoat_End score +1 - goto BattleAIScript_82DDA01 + goto AI_CV_MirrorCoat_End -BattleAIScript_82DD9CD: - if_target_not_taunted BattleAIScript_82DD9DA - if_random_less_than 100, BattleAIScript_82DD9DA +AI_CV_MirrorCoat5: + if_target_not_taunted AI_CV_MirrorCoat6 + if_random_less_than 100, AI_CV_MirrorCoat6 score +1 -BattleAIScript_82DD9DA: +AI_CV_MirrorCoat6: get_target_type1 - if_in_bytes sTypesTable_82DDA02, BattleAIScript_82DDA01 + if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End get_target_type2 - if_in_bytes sTypesTable_82DDA02, BattleAIScript_82DDA01 - if_random_less_than 50, BattleAIScript_82DDA01 + if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End + if_random_less_than 50, AI_CV_MirrorCoat_End -BattleAIScript_82DD9F6: - if_random_less_than 100, BattleAIScript_82DD9FE +AI_CV_MirrorCoat_ScoreUp4: + if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End score +4 -BattleAIScript_82DD9FE: +AI_CV_MirrorCoat_ScoreUp4_End: end -BattleAIScript_82DD9FF: +AI_CV_MirrorCoat_ScoreDown1: score -1 -BattleAIScript_82DDA01: +AI_CV_MirrorCoat_End: end -sTypesTable_82DDA02: +AI_CV_MirrorCoat_SpecialTypeList: .byte TYPE_FIRE .byte TYPE_WATER .byte TYPE_GRASS @@ -2303,166 +2303,166 @@ sTypesTable_82DDA02: .byte TYPE_DARK .byte -1 -BattleAIScript_82DDA0B: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDA2C - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDA2C - if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, BattleAIScript_82DDA2C - if_hp_more_than AI_USER, 38, BattleAIScript_82DDA2E +AI_CV_ChargeUpMove: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_ChargeUpMove_ScoreDown2 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_ChargeUpMove_ScoreDown2 + if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_ChargeUpMove_ScoreDown2 + if_hp_more_than AI_USER, 38, AI_CV_ChargeUpMove_End score -1 - goto BattleAIScript_82DDA2E + goto AI_CV_ChargeUpMove_End -BattleAIScript_82DDA2C: +AI_CV_ChargeUpMove_ScoreDown2: score -2 -BattleAIScript_82DDA2E: +AI_CV_ChargeUpMove_End: end -BattleAIScript_82DDA2F: - if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, BattleAIScript_82DDA3D +AI_CV_Fly: + if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_Fly2 score -1 - goto BattleAIScript_82DDAB4 + goto AI_CV_Fly_End -BattleAIScript_82DDA3D: - if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DDAAC - if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DDAAC - if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DDAAC +AI_CV_Fly2: + if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Fly6 + if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Fly6 + if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Fly6 get_weather - if_equal AI_WEATHER_HAIL, BattleAIScript_82DDA6D - if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DDA88 - goto BattleAIScript_82DDA98 + if_equal AI_WEATHER_HAIL, AI_CV_Fly3 + if_equal AI_WEATHER_SANDSTORM, AI_CV_Fly4 + goto AI_CV_Fly5 -BattleAIScript_82DDA6D: +AI_CV_Fly3: get_user_type1 - if_in_bytes sTypesTable_82DDAB5, BattleAIScript_82DDAAC + if_in_bytes AI_CV_Fly_TypesToEncourage, AI_CV_Fly6 get_user_type2 - if_in_bytes sTypesTable_82DDAB5, BattleAIScript_82DDAAC - goto BattleAIScript_82DDA98 + if_in_bytes AI_CV_Fly_TypesToEncourage, AI_CV_Fly6 + goto AI_CV_Fly5 -BattleAIScript_82DDA88: +AI_CV_Fly4: get_user_type1 - if_equal TYPE_ICE, BattleAIScript_82DDAAC + if_equal TYPE_ICE, AI_CV_Fly6 get_user_type2 - if_equal TYPE_ICE, BattleAIScript_82DDAAC + if_equal TYPE_ICE, AI_CV_Fly6 -BattleAIScript_82DDA98: - if_target_faster BattleAIScript_82DDAB4 +AI_CV_Fly5: + if_target_faster AI_CV_Fly_End get_last_used_bank_move AI_TARGET get_move_effect_from_result - if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DDAAC - goto BattleAIScript_82DDAB4 + if_not_equal EFFECT_LOCK_ON, AI_CV_Fly6 + goto AI_CV_Fly_End -BattleAIScript_82DDAAC: - if_random_less_than 80, BattleAIScript_82DDAB4 +AI_CV_Fly6: + if_random_less_than 80, AI_CV_Fly_End score +1 -BattleAIScript_82DDAB4: +AI_CV_Fly_End: end -sTypesTable_82DDAB5: +AI_CV_Fly_TypesToEncourage: .byte TYPE_GROUND .byte TYPE_ROCK .byte TYPE_STEEL .byte -1 -BattleAIScript_82DDAB9: +AI_CV_FakeOut: score +2 end -BattleAIScript_82DDABC: +AI_CV_SpitUp: get_stockpile_count AI_USER - if_less_than 2, BattleAIScript_82DDACC - if_random_less_than 80, BattleAIScript_82DDACC + if_less_than 2, AI_CV_SpitUp_End + if_random_less_than 80, AI_CV_SpitUp_End score +2 -BattleAIScript_82DDACC: +AI_CV_SpitUp_End: end -BattleAIScript_82DDACD: - if_hp_less_than AI_USER, 40, BattleAIScript_82DDAF3 +AI_CV_Hail: + if_hp_less_than AI_USER, 40, AI_CV_Hail_ScoreDown1 get_weather - if_equal AI_WEATHER_SUN, BattleAIScript_82DDAEC - if_equal AI_WEATHER_RAIN, BattleAIScript_82DDAEC - if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DDAEC - goto BattleAIScript_82DDAF5 + if_equal AI_WEATHER_SUN, AI_CV_Hail2 + if_equal AI_WEATHER_RAIN, AI_CV_Hail2 + if_equal AI_WEATHER_SANDSTORM, AI_CV_Hail2 + goto AI_CV_Hail_End -BattleAIScript_82DDAEC: +AI_CV_Hail2: score +1 - goto BattleAIScript_82DDAF5 + goto AI_CV_Hail_End -BattleAIScript_82DDAF3: +AI_CV_Hail_ScoreDown1: score -1 -BattleAIScript_82DDAF5: +AI_CV_Hail_End: end -BattleAIScript_82DDAF6: - if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleAIScript_82DDB02 +AI_CV_Facade: + if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End score +1 -BattleAIScript_82DDB02: +AI_CV_Facade_End: end -BattleAIScript_82DDB03: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDB42 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDB42 - if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DDB59 - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DDB49 - if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DDB49 +AI_CV_FocusPunch: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_FocusPunch2 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_FocusPunch2 + if_status AI_TARGET, STATUS1_SLEEP, AI_CV_FocusPunch_ScoreUp1 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_FocusPunch3 + if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_FocusPunch3 is_first_turn_for AI_USER - if_not_equal 0, BattleAIScript_82DDB5B - if_random_less_than 100, BattleAIScript_82DDB5B + if_not_equal 0, AI_CV_FocusPunch_End + if_random_less_than 100, AI_CV_FocusPunch_End score +1 - goto BattleAIScript_82DDB5B + goto AI_CV_FocusPunch_End -BattleAIScript_82DDB42: +AI_CV_FocusPunch2: score -1 - goto BattleAIScript_82DDB5B + goto AI_CV_FocusPunch_End -BattleAIScript_82DDB49: - if_random_less_than 100, BattleAIScript_82DDB5B +AI_CV_FocusPunch3: + if_random_less_than 100, AI_CV_FocusPunch_End if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Plus5 -BattleAIScript_82DDB59: +AI_CV_FocusPunch_ScoreUp1: score +1 -BattleAIScript_82DDB5B: +AI_CV_FocusPunch_End: end -BattleAIScript_82DDB5C: - if_status AI_TARGET, STATUS1_PARALYSIS, BattleAIScript_82DDB6B - goto BattleAIScript_82DDB6D +AI_CV_SmellingSalt: + if_status AI_TARGET, STATUS1_PARALYSIS, AI_CV_SmellingSalt_ScoreUp1 + goto AI_CV_SmellingSalt_End -BattleAIScript_82DDB6B: +AI_CV_SmellingSalt_ScoreUp1: score +1 -BattleAIScript_82DDB6D: +AI_CV_SmellingSalt_End: end -BattleAIScript_82DDB6E: +AI_CV_Trick: get_hold_effect AI_USER - if_in_bytes sHoldEffectsTable_82DDBB7, BattleAIScript_82DDB89 - if_in_bytes sHoldEffectsTable_82DDBAF, BattleAIScript_82DDB9B + if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick3 + if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick4 -BattleAIScript_82DDB82: +AI_CV_Trick2: score -3 - goto BattleAIScript_82DDBAE + goto AI_CV_Trick_End -BattleAIScript_82DDB89: +AI_CV_Trick3: get_hold_effect AI_TARGET - if_in_bytes sHoldEffectsTable_82DDBB7, BattleAIScript_82DDB82 + if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick2 score +5 - goto BattleAIScript_82DDBAE + goto AI_CV_Trick_End -BattleAIScript_82DDB9B: +AI_CV_Trick4: get_hold_effect AI_TARGET - if_in_bytes sHoldEffectsTable_82DDBAF, BattleAIScript_82DDB82 - if_random_less_than 50, BattleAIScript_82DDBAE + if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick2 + if_random_less_than 50, AI_CV_Trick_End score +2 -BattleAIScript_82DDBAE: +AI_CV_Trick_End: end -sHoldEffectsTable_82DDBAF: +AI_CV_Trick_EffectsToEncourage: .byte HOLD_EFFECT_CONFUSE_SPICY .byte HOLD_EFFECT_CONFUSE_DRY .byte HOLD_EFFECT_CONFUSE_SWEET @@ -2472,28 +2472,28 @@ sHoldEffectsTable_82DDBAF: .byte HOLD_EFFECT_CHOICE_BAND .byte -1 -sHoldEffectsTable_82DDBB7: +AI_CV_Trick_EffectsToEncourage2: .byte HOLD_EFFECT_CHOICE_BAND .byte -1 -BattleAIScript_82DDBB9: +AI_CV_ChangeSelfAbility: get_ability AI_USER - if_in_bytes sAbilitiesTable_82DDBDF, BattleAIScript_82DDBCF + if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility2 get_ability AI_TARGET - if_in_bytes sAbilitiesTable_82DDBDF, BattleAIScript_82DDBD6 + if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility3 -BattleAIScript_82DDBCF: +AI_CV_ChangeSelfAbility2: score -1 - goto BattleAIScript_82DDBDE + goto AI_CV_ChangeSelfAbility_End -BattleAIScript_82DDBD6: - if_random_less_than 50, BattleAIScript_82DDBDE +AI_CV_ChangeSelfAbility3: + if_random_less_than 50, AI_CV_ChangeSelfAbility_End score +2 -BattleAIScript_82DDBDE: +AI_CV_ChangeSelfAbility_End: end -sAbilitiesTable_82DDBDF: +AI_CV_ChangeSelfAbility_AbilitiesToEncourage: .byte ABILITY_SPEED_BOOST .byte ABILITY_BATTLE_ARMOR .byte ABILITY_SAND_VEIL @@ -2512,287 +2512,287 @@ sAbilitiesTable_82DDBDF: .byte ABILITY_SHIELD_DUST .byte -1 -BattleAIScript_82DDBF0: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDC1D - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDC1D - if_stat_level_less_than AI_USER, STAT_ATK, 6, BattleAIScript_82DDC1D - if_target_faster BattleAIScript_82DDC16 - if_hp_more_than AI_USER, 40, BattleAIScript_82DDC1D - goto BattleAIScript_82DDC1F +AI_CV_Superpower: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Superpower_ScoreDown1 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Superpower_ScoreDown1 + if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CV_Superpower_ScoreDown1 + if_target_faster AI_CV_Superpower2 + if_hp_more_than AI_USER, 40, AI_CV_Superpower_ScoreDown1 + goto AI_CV_Superpower_End -BattleAIScript_82DDC16: - if_hp_less_than AI_USER, 60, BattleAIScript_82DDC1F +AI_CV_Superpower2: + if_hp_less_than AI_USER, 60, AI_CV_Superpower_End -BattleAIScript_82DDC1D: +AI_CV_Superpower_ScoreDown1: score -1 -BattleAIScript_82DDC1F: +AI_CV_Superpower_End: end -BattleAIScript_82DDC20: - if_hp_more_than AI_TARGET, 30, BattleAIScript_82DDC2F - if_random_less_than 100, BattleAIScript_82DDC2F +AI_CV_MagicCoat: + if_hp_more_than AI_TARGET, 30, AI_CV_MagicCoat2 + if_random_less_than 100, AI_CV_MagicCoat2 score -1 -BattleAIScript_82DDC2F: +AI_CV_MagicCoat2: is_first_turn_for AI_USER - if_equal 0, BattleAIScript_82DDC4A - if_random_less_than 150, BattleAIScript_82DDC52 + if_equal 0, AI_CV_MagicCoat4 + if_random_less_than 150, AI_CV_MagicCoat_End score +1 - goto BattleAIScript_82DDC52 + goto AI_CV_MagicCoat_End AI_CV_MagicCoat3: - if_random_less_than 50, BattleAIScript_82DDC52 + if_random_less_than 50, AI_CV_MagicCoat_End -BattleAIScript_82DDC4A: - if_random_less_than 30, BattleAIScript_82DDC52 +AI_CV_MagicCoat4: + if_random_less_than 30, AI_CV_MagicCoat_End score -1 -BattleAIScript_82DDC52: +AI_CV_MagicCoat_End: end -BattleAIScript_82DDC53: +AI_CV_Recycle: get_used_held_item AI_USER - if_not_in_bytes sItemsTable_82DDC6E, BattleAIScript_82DDC6B - if_random_less_than 50, BattleAIScript_82DDC6D + if_not_in_bytes AI_CV_Recycle_ItemsToEncourage, AI_CV_Recycle_ScoreDown2 + if_random_less_than 50, AI_CV_Recycle_End score +1 - goto BattleAIScript_82DDC6D + goto AI_CV_Recycle_End -BattleAIScript_82DDC6B: +AI_CV_Recycle_ScoreDown2: score -2 -BattleAIScript_82DDC6D: +AI_CV_Recycle_End: end -sItemsTable_82DDC6E: +AI_CV_Recycle_ItemsToEncourage: .byte ITEM_CHESTO_BERRY .byte ITEM_LUM_BERRY .byte ITEM_STARF_BERRY .byte -1 -BattleAIScript_82DDC72: - if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DDC9D - if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DDC9D - if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DDC9D - if_random_less_than 180, BattleAIScript_82DDC9D +AI_CV_Revenge: + if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Revenge_ScoreDown2 + if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Revenge_ScoreDown2 + if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Revenge_ScoreDown2 + if_random_less_than 180, AI_CV_Revenge_ScoreDown2 score +2 - goto BattleAIScript_82DDC9F + goto AI_CV_Revenge_End -BattleAIScript_82DDC9D: +AI_CV_Revenge_ScoreDown2: score -2 -BattleAIScript_82DDC9F: +AI_CV_Revenge_End: end -BattleAIScript_82DDCA0: - if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, BattleAIScript_82DDCAF - goto BattleAIScript_82DDCB1 +AI_CV_BrickBreak: + if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, AI_CV_BrickBreak_ScoreUp1 + goto AI_CV_BrickBreak_End -BattleAIScript_82DDCAF: +AI_CV_BrickBreak_ScoreUp1: score +1 -BattleAIScript_82DDCB1: +AI_CV_BrickBreak_End: end -BattleAIScript_82DDCB2: - if_hp_less_than AI_TARGET, 30, BattleAIScript_82DDCC9 +AI_CV_KnockOff: + if_hp_less_than AI_TARGET, 30, AI_CV_KnockOff_End is_first_turn_for AI_USER - if_more_than 0, BattleAIScript_82DDCC9 - if_random_less_than 180, BattleAIScript_82DDCC9 + if_more_than 0, AI_CV_KnockOff_End + if_random_less_than 180, AI_CV_KnockOff_End score +1 -BattleAIScript_82DDCC9: +AI_CV_KnockOff_End: end -BattleAIScript_82DDCCA: - if_hp_less_than AI_TARGET, 70, BattleAIScript_82DDCF3 - if_target_faster BattleAIScript_82DDCE5 - if_hp_more_than AI_USER, 40, BattleAIScript_82DDCF3 +AI_CV_Endeavor: + if_hp_less_than AI_TARGET, 70, AI_CV_Endeavor_ScoreDown1 + if_target_faster AI_CV_Endeavor2 + if_hp_more_than AI_USER, 40, AI_CV_Endeavor_ScoreDown1 score +1 - goto BattleAIScript_82DDCF5 + goto AI_CV_Endeavor_End -BattleAIScript_82DDCE5: - if_hp_more_than AI_USER, 50, BattleAIScript_82DDCF3 +AI_CV_Endeavor2: + if_hp_more_than AI_USER, 50, AI_CV_Endeavor_ScoreDown1 score +1 - goto BattleAIScript_82DDCF5 + goto AI_CV_Endeavor_End -BattleAIScript_82DDCF3: +AI_CV_Endeavor_ScoreDown1: score -1 -BattleAIScript_82DDCF5: +AI_CV_Endeavor_End: end -BattleAIScript_82DDCF6: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDD1B - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDD1B - if_target_faster BattleAIScript_82DDD14 - if_hp_more_than AI_TARGET, 50, BattleAIScript_82DDD1D - goto BattleAIScript_82DDD1B +AI_CV_Eruption: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Eruption_ScoreDown1 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Eruption_ScoreDown1 + if_target_faster AI_CV_Eruption2 + if_hp_more_than AI_TARGET, 50, AI_CV_Eruption_End + goto AI_CV_Eruption_ScoreDown1 -BattleAIScript_82DDD14: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DDD1D +AI_CV_Eruption2: + if_hp_more_than AI_TARGET, 70, AI_CV_Eruption_End -BattleAIScript_82DDD1B: +AI_CV_Eruption_ScoreDown1: score -1 -BattleAIScript_82DDD1D: +AI_CV_Eruption_End: end -BattleAIScript_82DDD1E: +AI_CV_Imprison: is_first_turn_for AI_USER - if_more_than 0, BattleAIScript_82DDD2E - if_random_less_than 100, BattleAIScript_82DDD2E + if_more_than 0, AI_CV_Imprison_End + if_random_less_than 100, AI_CV_Imprison_End score +2 -BattleAIScript_82DDD2E: +AI_CV_Imprison_End: end -BattleAIScript_82DDD2F: - if_hp_less_than AI_TARGET, 50, BattleAIScript_82DDD3B - goto BattleAIScript_82DDD3D +AI_CV_Refresh: + if_hp_less_than AI_TARGET, 50, AI_CV_Refresh_ScoreDown1 + goto AI_CV_Refresh_End -BattleAIScript_82DDD3B: +AI_CV_Refresh_ScoreDown1: score -1 -BattleAIScript_82DDD3D: +AI_CV_Refresh_End: end -BattleAIScript_82DDD3E: +AI_CV_Snatch: is_first_turn_for AI_USER - if_equal 1, BattleAIScript_82DDD85 - if_random_less_than 30, BattleAIScript_82DDDA7 - if_target_faster BattleAIScript_82DDD6B - if_hp_not_equal AI_USER, 100, BattleAIScript_82DDD9F - if_hp_less_than AI_TARGET, 70, BattleAIScript_82DDD9F - if_random_less_than 60, BattleAIScript_82DDDA7 - goto BattleAIScript_82DDD9F - -BattleAIScript_82DDD6B: - if_hp_more_than AI_TARGET, 25, BattleAIScript_82DDD9F - if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, BattleAIScript_82DDD85 - if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, BattleAIScript_82DDD85 - goto BattleAIScript_82DDD92 - -BattleAIScript_82DDD85: - if_random_less_than 150, BattleAIScript_82DDDA7 + if_equal 1, AI_CV_Snatch3 + if_random_less_than 30, AI_CV_Snatch_End + if_target_faster AI_CV_Snatch2 + if_hp_not_equal AI_USER, 100, AI_CV_Snatch5 + if_hp_less_than AI_TARGET, 70, AI_CV_Snatch5 + if_random_less_than 60, AI_CV_Snatch_End + goto AI_CV_Snatch5 + +AI_CV_Snatch2: + if_hp_more_than AI_TARGET, 25, AI_CV_Snatch5 + if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Snatch3 + if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Snatch3 + goto AI_CV_Snatch4 + +AI_CV_Snatch3: + if_random_less_than 150, AI_CV_Snatch_End score +2 - goto BattleAIScript_82DDDA7 + goto AI_CV_Snatch_End -BattleAIScript_82DDD92: - if_random_less_than 230, BattleAIScript_82DDD9F +AI_CV_Snatch4: + if_random_less_than 230, AI_CV_Snatch5 score +1 - goto BattleAIScript_82DDDA7 + goto AI_CV_Snatch_End -BattleAIScript_82DDD9F: - if_random_less_than 30, BattleAIScript_82DDDA7 +AI_CV_Snatch5: + if_random_less_than 30, AI_CV_Snatch_End score -2 -BattleAIScript_82DDDA7: +AI_CV_Snatch_End: end -BattleAIScript_82DDDA8: - if_hp_less_than AI_USER, 50, BattleAIScript_82DDDCB +AI_CV_MudSport: + if_hp_less_than AI_USER, 50, AI_CV_MudSport_ScoreDown1 get_target_type1 - if_equal TYPE_ELECTRIC, BattleAIScript_82DDDC4 + if_equal TYPE_ELECTRIC, AI_CV_MudSport2 get_target_type2 - if_equal TYPE_ELECTRIC, BattleAIScript_82DDDC4 - goto BattleAIScript_82DDDCB + if_equal TYPE_ELECTRIC, AI_CV_MudSport2 + goto AI_CV_MudSport_ScoreDown1 -BattleAIScript_82DDDC4: +AI_CV_MudSport2: score +1 - goto BattleAIScript_82DDDCD + goto AI_CV_MudSport_End -BattleAIScript_82DDDCB: +AI_CV_MudSport_ScoreDown1: score -1 -BattleAIScript_82DDDCD: +AI_CV_MudSport_End: end -BattleAIScript_82DDDCE: - if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDDF3 - if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDDF3 - if_target_faster BattleAIScript_82DDDEC - if_hp_more_than AI_USER, 60, BattleAIScript_82DDDF5 - goto BattleAIScript_82DDDF3 +AI_CV_Overheat: + if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Overheat_ScoreDown1 + if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Overheat_ScoreDown1 + if_target_faster AI_CV_Overheat2 + if_hp_more_than AI_USER, 60, AI_CV_Overheat_End + goto AI_CV_Overheat_ScoreDown1 -BattleAIScript_82DDDEC: - if_hp_more_than AI_USER, 80, BattleAIScript_82DDDF5 +AI_CV_Overheat2: + if_hp_more_than AI_USER, 80, AI_CV_Overheat_End -BattleAIScript_82DDDF3: +AI_CV_Overheat_ScoreDown1: score -1 -BattleAIScript_82DDDF5: +AI_CV_Overheat_End: end -BattleAIScript_82DDDF6: - if_hp_less_than AI_USER, 50, BattleAIScript_82DDE19 +AI_CV_WaterSport: + if_hp_less_than AI_USER, 50, AI_CV_WaterSport_ScoreDown1 get_target_type1 - if_equal TYPE_FIRE, BattleAIScript_82DDE12 + if_equal TYPE_FIRE, AI_CV_WaterSport2 get_target_type2 - if_equal TYPE_FIRE, BattleAIScript_82DDE12 - goto BattleAIScript_82DDE19 + if_equal TYPE_FIRE, AI_CV_WaterSport2 + goto AI_CV_WaterSport_ScoreDown1 -BattleAIScript_82DDE12: +AI_CV_WaterSport2: score +1 - goto BattleAIScript_82DDE1B + goto AI_CV_WaterSport_End -BattleAIScript_82DDE19: +AI_CV_WaterSport_ScoreDown1: score -1 -BattleAIScript_82DDE1B: +AI_CV_WaterSport_End: end -BattleAIScript_82DDE1C: - if_target_faster BattleAIScript_82DDE36 - if_hp_more_than AI_USER, 50, BattleAIScript_82DDE3E - if_random_less_than 70, BattleAIScript_82DDE3E +AI_CV_DragonDance: + if_target_faster AI_CV_DragonDance2 + if_hp_more_than AI_USER, 50, AI_CV_DragonDance_End + if_random_less_than 70, AI_CV_DragonDance_End score -1 - goto BattleAIScript_82DDE3E + goto AI_CV_DragonDance_End -BattleAIScript_82DDE36: - if_random_less_than 128, BattleAIScript_82DDE3E +AI_CV_DragonDance2: + if_random_less_than 128, AI_CV_DragonDance_End score +1 -BattleAIScript_82DDE3E: +AI_CV_DragonDance_End: end AI_CheckViability: if_target_is_ally AI_Ret - if_can_faint BattleAIScript_82DDE60 + if_can_faint AI_TryToFaint_TryToEncourageQuickAttack get_how_powerful_move_is if_equal 1, Score_Minus1 if_type_effectiveness AI_EFFECTIVENESS_x4, BattleAIScript_82DDE57 end BattleAIScript_82DDE57: - if_random_less_than 80, BattleAIScript_82DDE70 + if_random_less_than 80, AI_TryToFaint_End score +2 end -BattleAIScript_82DDE60: - if_effect EFFECT_EXPLOSION, BattleAIScript_82DDE70 - if_not_effect EFFECT_QUICK_ATTACK, BattleAIScript_82DDE6E +AI_TryToFaint_TryToEncourageQuickAttack: + if_effect EFFECT_EXPLOSION, AI_TryToFaint_End + if_not_effect EFFECT_QUICK_ATTACK, AI_TryToFaint_ScoreUp4 score +2 -BattleAIScript_82DDE6E: +AI_TryToFaint_ScoreUp4: score +4 -BattleAIScript_82DDE70: +AI_TryToFaint_End: end AI_SetupFirstTurn: if_target_is_ally AI_Ret get_turn_count - if_not_equal 0, BattleAIScript_82DDE8F + if_not_equal 0, AI_SetupFirstTurn_End get_considered_move_effect - if_not_in_bytes sMoveEffectsTable_82DDE90, BattleAIScript_82DDE8F - if_random_less_than 80, BattleAIScript_82DDE8F + if_not_in_bytes AI_SetupFirstTurn_SetupEffectsToEncourage, AI_SetupFirstTurn_End + if_random_less_than 80, AI_SetupFirstTurn_End score +2 -BattleAIScript_82DDE8F: +AI_SetupFirstTurn_End: end -sMoveEffectsTable_82DDE90: +AI_SetupFirstTurn_SetupEffectsToEncourage: .byte EFFECT_ATTACK_UP .byte EFFECT_DEFENSE_UP .byte EFFECT_SPEED_UP @@ -2853,24 +2853,24 @@ sMoveEffectsTable_82DDE90: AI_PreferStrongestMove: if_target_is_ally AI_Ret get_how_powerful_move_is - if_not_equal 0, BattleAIScript_82DDEDC - if_random_less_than 100, BattleAIScript_82DDEDC + if_not_equal 0, AI_PreferStrongestMove_End + if_random_less_than 100, AI_PreferStrongestMove_End score +2 -BattleAIScript_82DDEDC: +AI_PreferStrongestMove_End: end AI_Risky: if_target_is_ally AI_Ret get_considered_move_effect - if_not_in_bytes sMoveEffectsTable_82DDEF5, BattleAIScript_82DDEF4 - if_random_less_than 128, BattleAIScript_82DDEF4 + if_not_in_bytes AI_Risky_EffectsToEncourage, AI_Risky_End + if_random_less_than 128, AI_Risky_End score +2 -BattleAIScript_82DDEF4: +AI_Risky_End: end -sMoveEffectsTable_82DDEF5: +AI_Risky_EffectsToEncourage: .byte EFFECT_SLEEP .byte EFFECT_EXPLOSION .byte EFFECT_MIRROR_MOVE @@ -2898,25 +2898,25 @@ AI_PreferBatonPass: if_equal 0, BattleAIScript_82DDFB3 get_how_powerful_move_is if_not_equal 0, BattleAIScript_82DDFB3 - if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, BattleAIScript_82DDF2A - if_random_less_than 80, BattleAIScript_82DDEF4 - -BattleAIScript_82DDF2A: - if_move MOVE_SWORDS_DANCE, BattleAIScript_82DDF54 - if_move MOVE_DRAGON_DANCE, BattleAIScript_82DDF54 - if_move MOVE_CALM_MIND, BattleAIScript_82DDF54 - if_effect EFFECT_PROTECT, BattleAIScript_82DDF67 + if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass + if_random_less_than 80, AI_Risky_End + +AI_PreferBatonPass_GoForBatonPass: + if_move MOVE_SWORDS_DANCE, AI_PreferBatonPass2 + if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2 + if_move MOVE_CALM_MIND, AI_PreferBatonPass2 + if_effect EFFECT_PROTECT, AI_PreferBatonPass_End if_move MOVE_BATON_PASS, BattleAIScript_82DDF7B - if_random_less_than 20, BattleAIScript_82DDEF4 + if_random_less_than 20, AI_Risky_End score +3 -BattleAIScript_82DDF54: +AI_PreferBatonPass2: get_turn_count if_equal 0, Score_Plus5 if_hp_less_than AI_USER, 60, Score_Minus10 goto Score_Plus1 -BattleAIScript_82DDF67: +AI_PreferBatonPass_End: get_last_used_bank_move AI_USER if_in_hwords sMovesTable_82DDF75, Score_Minus2 score +2 @@ -3085,51 +3085,51 @@ Score_Minus30_: AI_HPAware: if_target_is_ally AI_TryOnAlly - if_hp_more_than AI_USER, 70, BattleAIScript_82DE1B5 - if_hp_more_than AI_USER, 30, BattleAIScript_82DE1C4 + if_hp_more_than AI_USER, 70, AI_HPAware_UserHasHighHP + if_hp_more_than AI_USER, 30, AI_HPAware_UserHasMediumHP get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE258, BattleAIScript_82DE1D3 - goto BattleAIScript_82DE1DB + if_in_bytes AI_HPAware_DiscouragedEffectsWhenLowHP, AI_HPAware_TryToDiscourage + goto AI_HPAware_ConsiderTarget -BattleAIScript_82DE1B5: +AI_HPAware_UserHasHighHP: get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE21F, BattleAIScript_82DE1D3 - goto BattleAIScript_82DE1DB + if_in_bytes AI_HPAware_DiscouragedEffectsWhenHighHP, AI_HPAware_TryToDiscourage + goto AI_HPAware_ConsiderTarget -BattleAIScript_82DE1C4: +AI_HPAware_UserHasMediumHP: get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE22D, BattleAIScript_82DE1D3 - goto BattleAIScript_82DE1DB + if_in_bytes AI_HPAware_DiscouragedEffectsWhenMediumHP, AI_HPAware_TryToDiscourage + goto AI_HPAware_ConsiderTarget -BattleAIScript_82DE1D3: - if_random_less_than 50, BattleAIScript_82DE1DB +AI_HPAware_TryToDiscourage: + if_random_less_than 50, AI_HPAware_ConsiderTarget score -2 -BattleAIScript_82DE1DB: - if_hp_more_than AI_TARGET, 70, BattleAIScript_82DE1F8 - if_hp_more_than AI_TARGET, 30, BattleAIScript_82DE207 +AI_HPAware_ConsiderTarget: + if_hp_more_than AI_TARGET, 70, AI_HPAware_TargetHasHighHP + if_hp_more_than AI_TARGET, 30, AI_HPAware_TargetHasMediumHP get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE2B1, BattleAIScript_82DE216 - goto BattleAIScript_82DE21E + if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetLowHP, AI_HPAware_TargetTryToDiscourage + goto AI_HPAware_End -BattleAIScript_82DE1F8: +AI_HPAware_TargetHasHighHP: get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE288, BattleAIScript_82DE216 - goto BattleAIScript_82DE21E + if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetHighHP, AI_HPAware_TargetTryToDiscourage + goto AI_HPAware_End -BattleAIScript_82DE207: +AI_HPAware_TargetHasMediumHP: get_considered_move_effect - if_in_bytes sMoveEffectsTable_82DE289, BattleAIScript_82DE216 - goto BattleAIScript_82DE21E + if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetMediumHP, AI_HPAware_TargetTryToDiscourage + goto AI_HPAware_End -BattleAIScript_82DE216: - if_random_less_than 50, BattleAIScript_82DE21E +AI_HPAware_TargetTryToDiscourage: + if_random_less_than 50, AI_HPAware_End score -2 -BattleAIScript_82DE21E: +AI_HPAware_End: end -sMoveEffectsTable_82DE21F: +AI_HPAware_DiscouragedEffectsWhenHighHP: @ 82DE21F .byte EFFECT_EXPLOSION .byte EFFECT_RESTORE_HP .byte EFFECT_REST @@ -3145,7 +3145,7 @@ sMoveEffectsTable_82DE21F: .byte EFFECT_OVERHEAT .byte -1 -sMoveEffectsTable_82DE22D: +AI_HPAware_DiscouragedEffectsWhenMediumHP: @ 82DE22D .byte EFFECT_EXPLOSION .byte EFFECT_ATTACK_UP .byte EFFECT_DEFENSE_UP @@ -3190,7 +3190,7 @@ sMoveEffectsTable_82DE22D: .byte EFFECT_DRAGON_DANCE .byte -1 -sMoveEffectsTable_82DE258: +AI_HPAware_DiscouragedEffectsWhenLowHP: @ 82DE258 .byte EFFECT_ATTACK_UP .byte EFFECT_DEFENSE_UP .byte EFFECT_SPEED_UP @@ -3240,10 +3240,10 @@ sMoveEffectsTable_82DE258: .byte EFFECT_DRAGON_DANCE .byte -1 -sMoveEffectsTable_82DE288: +AI_HPAware_DiscouragedEffectsWhenTargetHighHP: @ 82DE288 .byte -1 -sMoveEffectsTable_82DE289: +AI_HPAware_DiscouragedEffectsWhenTargetMediumHP: @ 82DE289 .byte EFFECT_ATTACK_UP .byte EFFECT_DEFENSE_UP .byte EFFECT_SPEED_UP @@ -3285,7 +3285,7 @@ sMoveEffectsTable_82DE289: .byte EFFECT_DRAGON_DANCE .byte -1 -sMoveEffectsTable_82DE2B1: +AI_HPAware_DiscouragedEffectsWhenTargetLowHP: @ 82DE2B1 .byte EFFECT_SLEEP .byte EFFECT_EXPLOSION .byte EFFECT_ATTACK_UP @@ -3349,36 +3349,36 @@ sMoveEffectsTable_82DE2B1: AI_Unknown: if_target_is_ally AI_TryOnAlly - if_not_effect EFFECT_SUNNY_DAY, BattleAIScript_82DE308 - if_equal 0, BattleAIScript_82DE308 + if_not_effect EFFECT_SUNNY_DAY, AI_Unknown_End + if_equal 0, AI_Unknown_End is_first_turn_for AI_USER - if_equal 0, BattleAIScript_82DE308 + if_equal 0, AI_Unknown_End score +5 -BattleAIScript_82DE308: +AI_Unknown_End: @ 82DE308 end AI_Roaming: - if_status2 AI_USER, STATUS2_WRAPPED, BattleAIScript_82DE336 - if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, BattleAIScript_82DE336 + if_status2 AI_USER, STATUS2_WRAPPED, AI_Roaming_End + if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, AI_Roaming_End get_ability AI_TARGET - if_equal ABILITY_SHADOW_TAG, BattleAIScript_82DE336 + if_equal ABILITY_SHADOW_TAG, AI_Roaming_End get_ability AI_USER - if_equal ABILITY_LEVITATE, BattleAIScript_82DE335 + if_equal ABILITY_LEVITATE, AI_Roaming_Flee get_ability AI_TARGET - if_equal ABILITY_ARENA_TRAP, BattleAIScript_82DE336 + if_equal ABILITY_ARENA_TRAP, AI_Roaming_End -BattleAIScript_82DE335: +AI_Roaming_Flee: @ 82DE335 flee -BattleAIScript_82DE336: +AI_Roaming_End: @ 82DE336 end AI_Safari: - if_random_safari_flee BattleAIScript_82DE33D + if_random_safari_flee AI_Safari_Flee watch -BattleAIScript_82DE33D: +AI_Safari_Flee: flee AI_FirstBattle: diff --git a/data/event_scripts.s b/data/event_scripts.s index 4f4173c83..22c44bee3 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -835,7 +835,7 @@ SlateportCity_BattleTentLobby_EventScript_27134F:: @ 827134F SootopolisCity_MysteryEventsHouse_1F_EventScript_27134F:: @ 827134F TrainerHill_Entrance_EventScript_27134F:: @ 827134F VerdanturfTown_BattleTentLobby_EventScript_27134F:: @ 827134F - special sub_809FF80 + special SaveGame waitstate return diff --git a/data/graphics/berries/berry_pic_table.inc b/data/graphics/berries/berry_pic_table.inc deleted file mode 100644 index 12d4267a0..000000000 --- a/data/graphics/berries/berry_pic_table.inc +++ /dev/null @@ -1,45 +0,0 @@ - .align 2 -gBerryPicTable:: @ 857FC94 - .4byte gBerryPic_Cheri, gBerryPalette_Cheri - .4byte gBerryPic_Chesto, gBerryPalette_Chesto - .4byte gBerryPic_Pecha, gBerryPalette_Pecha - .4byte gBerryPic_Rawst, gBerryPalette_Rawst - .4byte gBerryPic_Aspear, gBerryPalette_Aspear - .4byte gBerryPic_Leppa, gBerryPalette_Leppa - .4byte gBerryPic_Oran, gBerryPalette_Oran - .4byte gBerryPic_Persim, gBerryPalette_Persim - .4byte gBerryPic_Lum, gBerryPalette_Lum - .4byte gBerryPic_Sitrus, gBerryPalette_Sitrus - .4byte gBerryPic_Figy, gBerryPalette_Figy - .4byte gBerryPic_Wiki, gBerryPalette_Wiki - .4byte gBerryPic_Mago, gBerryPalette_Mago - .4byte gBerryPic_Aguav, gBerryPalette_Aguav - .4byte gBerryPic_Iapapa, gBerryPalette_Iapapa - .4byte gBerryPic_Razz, gBerryPalette_Razz - .4byte gBerryPic_Bluk, gBerryPalette_Bluk - .4byte gBerryPic_Nanab, gBerryPalette_Nanab - .4byte gBerryPic_Wepear, gBerryPalette_Wepear - .4byte gBerryPic_Pinap, gBerryPalette_Pinap - .4byte gBerryPic_Pomeg, gBerryPalette_Pomeg - .4byte gBerryPic_Kelpsy, gBerryPalette_Kelpsy - .4byte gBerryPic_Qualot, gBerryPalette_Qualot - .4byte gBerryPic_Hondew, gBerryPalette_Hondew - .4byte gBerryPic_Grepa, gBerryPalette_Grepa - .4byte gBerryPic_Tamato, gBerryPalette_Tamato - .4byte gBerryPic_Cornn, gBerryPalette_Cornn - .4byte gBerryPic_Magost, gBerryPalette_Magost - .4byte gBerryPic_Rabuta, gBerryPalette_Rabuta - .4byte gBerryPic_Nomel, gBerryPalette_Nomel - .4byte gBerryPic_Spelon, gBerryPalette_Spelon - .4byte gBerryPic_Pamtre, gBerryPalette_Pamtre - .4byte gBerryPic_Watmel, gBerryPalette_Watmel - .4byte gBerryPic_Durin, gBerryPalette_Durin - .4byte gBerryPic_Belue, gBerryPalette_Belue - .4byte gBerryPic_Liechi, gBerryPalette_Liechi - .4byte gBerryPic_Ganlon, gBerryPalette_Ganlon - .4byte gBerryPic_Salac, gBerryPalette_Salac - .4byte gBerryPic_Petaya, gBerryPalette_Petaya - .4byte gBerryPic_Apicot, gBerryPalette_Apicot - .4byte gBerryPic_Lansat, gBerryPalette_Lansat - .4byte gBerryPic_Starf, gBerryPalette_Starf - .4byte gBerryPic_Enigma, gBerryPalette_Enigma diff --git a/data/item_menu_icons.s b/data/item_menu_icons.s index 36f339b09..30cb7e66b 100644 --- a/data/item_menu_icons.s +++ b/data/item_menu_icons.s @@ -4,219 +4,6 @@ .section .rodata - .align 2 -gUnknown_0857F564:: @ 857F564 - .incbin "graphics/interface/bag_spinner.gbapal" - - .align 2 -gUnknown_0857F584:: @ 857F584 - .incbin "graphics/interface/bag_spinner.4bpp" - - .align 2 -gUnknown_0857F604:: @ 857F604 - .incbin "graphics/unused/cherry.4bpp" - - .align 2 -gUnknown_0857FA84:: @ 857FA84 - .incbin "graphics/unused/cherry.gbapal" - - .align 2 -gOamData_857FAA4:: @ 857FAA4 - .2byte 0x0100, 0xc000, 0x0400, 0x0000 - - .align 2 -gSpriteAnim_857FAAC:: @ 857FAAC - .2byte 0x0000, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnim_857FAB4:: @ 857FAB4 - .2byte 0x0040, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnim_857FABC:: @ 857FABC - .2byte 0x0080, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnim_857FAC4:: @ 857FAC4 - .2byte 0x00c0, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnim_857FACC:: @ 857FACC - .2byte 0x0100, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnim_857FAD4:: @ 857FAD4 - .2byte 0x0140, 0x0004, 0xffff, 0x0000 - - .align 2 -gSpriteAnimTable_857FADC:: @ 857FADC - .4byte gSpriteAnim_857FAAC - .4byte gSpriteAnim_857FAB4 - .4byte gSpriteAnim_857FAC4 - .4byte gSpriteAnim_857FACC - .4byte gSpriteAnim_857FAD4 - .4byte gSpriteAnim_857FABC - - .align 2 -gSpriteAffineAnim_857FAF4:: @ 857FAF4 - .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000 - - .align 2 -gSpriteAffineAnim_857FB04:: @ 857FB04 - .2byte 0x0000, 0x0000, 0x02fe, 0x0000, 0x0000, 0x0000, 0x0402, 0x0000, 0x0000, 0x0000, 0x04fe, 0x0000, 0x0000, 0x0000, 0x0202, 0x0000 - .2byte 0x7fff, 0x0000, 0x0000, 0x0000 - - .align 2 -gSpriteAffineAnimTable_857FB2C:: @ 857FB2C - .4byte gSpriteAffineAnim_857FAF4 - .4byte gSpriteAffineAnim_857FB04 - - .align 2 -gUnknown_0857FB34:: @ 857FB34 - obj_tiles gBagMaleTiles, 0x3000, 0x0064 - - .align 2 -gUnknown_0857FB3C:: @ 857FB3C - obj_tiles gBagFemaleTiles, 0x3000, 0x0064 - - .align 2 -gUnknown_0857FB44:: @ 857FB44 - obj_pal gBagPalette, 0x0064 - - .align 2 -gUnknown_0857FB4C:: @ 857FB4C - spr_template 0x0064, 0x0064, gOamData_857FAA4, gSpriteAnimTable_857FADC, NULL, gSpriteAffineAnimTable_857FB2C, SpriteCallbackDummy - - .align 2 -gOamData_857FB64:: @ 857FB64 - .2byte 0x0000, 0x4800, 0x0800, 0x0000 - - .align 2 -gSpriteAnim_857FB6C:: @ 857FB6C - .2byte 0x0000, 0x0000, 0xffff, 0x0000 - - .align 2 -gSpriteAnimTable_857FB74:: @ 857FB74 - .4byte gSpriteAnim_857FB6C - - .align 2 -gSpriteAffineAnim_857FB78:: @ 857FB78 - .2byte 0x0000, 0x0000, 0x1008, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000 - - .align 2 -gSpriteAffineAnim_857FB88:: @ 857FB88 - .2byte 0x0000, 0x0000, 0x10f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000 - - .align 2 -gUnknown_0857FB98:: @ 857FB98 - .4byte gSpriteAffineAnim_857FB78 - - .align 2 -gUnknown_0857FB9C:: @ 857FB9C - .4byte gSpriteAffineAnim_857FB88 - - .align 2 -gUnknown_0857FBA0:: @ 857FBA0 - obj_tiles gUnknown_0857F584, 0x0080, 0x0065 - - .align 2 -gUnknown_0857FBA8:: @ 857FBA8 - obj_pal gUnknown_0857F564, 0x0065 - - .align 2 -gUnknown_0857FBB0:: @ 857FBB0 - spr_template 0x0065, 0x0065, gOamData_857FB64, gSpriteAnimTable_857FB74, NULL, gUnknown_0857FB98, ObjectCB_SwitchPocketRotatingBallInit - - .align 2 -gOamData_857FBC8:: @ 857FBC8 - .2byte 0x0000, 0xc000, 0x7400, 0x0000 - - .align 2 -gOamData_857FBD0:: @ 857FBD0 - .2byte 0x0300, 0xc000, 0x7000, 0x0000 - - .align 2 -gSpriteAnim_857FBD8:: @ 857FBD8 - .2byte 0x0000, 0x0000, 0xffff, 0x0000 - - .align 2 -gSpriteAnimTable_857FBE0:: @ 857FBE0 - .4byte gSpriteAnim_857FBD8 - - .align 2 -gOamData_857FBE4:: @ 857FBE4 - .2byte 0xc000, 0x0201, 0x0800, 0x0000 - - .align 2 -gUnknown_0857FBEC:: @ 857FBEC - spr_template 0xffff, 0x7544, gOamData_857FBC8, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteAffineAnim_857FC04:: @ 857FC04 - .2byte 0xffff, 0xffff, 0x60fd, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x40ff, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000 - .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000 - - .align 2 -gSpriteAffineAnim_857FC3C:: @ 857FC3C - .2byte 0xffff, 0xffff, 0x6003, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x4001, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000 - .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000 - - .align 2 -gSpriteAffineAnimTable_857FC74:: @ 857FC74 - .4byte gSpriteAffineAnim_857FC04 - .4byte gSpriteAffineAnim_857FC3C - - .align 2 -gUnknown_0857FC7C:: @ 857FC7C - spr_template 0xffff, 0x7544, gOamData_857FBD0, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gSpriteAffineAnimTable_857FC74, SpriteCallbackDummy - -@ 857FC94 - .include "data/graphics/berries/berry_pic_table.inc" - - .align 2 -gUnknown_0857FDEC:: @ 857FDEC - obj_tiles gBerryCheckCircle_Gfx, 0x0800, 0x2710 - - .align 2 -gUnknown_0857FDF4:: @ 857FDF4 - obj_pal gUnknown_08D9BEF0, 0x2710 - - .align 2 -gOamData_857FDFC:: @ 857FDFC - .2byte 0x0000, 0xc000, 0x0400, 0x0000 - - .align 2 -gSpriteAnim_857FE04:: @ 857FE04 - .2byte 0x0000, 0x0000, 0xffff, 0x0000 - - .align 2 -gSpriteAnimTable_857FE0C:: @ 857FE0C - .4byte gSpriteAnim_857FE04 - - .align 2 -gUnknown_0857FE10:: @ 857FE10 - spr_template 0x2710, 0x2710, gOamData_857FDFC, gSpriteAnimTable_857FE0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_0857FE28:: @ 857FE28 - spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5860 - - .align 2 -gUnknown_0857FE40:: @ 857FE40 - spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58F8 - - .align 2 -gUnknown_0857FE58:: @ 857FE58 - spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5968 - - .align 2 -gUnknown_0857FE70:: @ 857FE70 - spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5A94 - - .align 2 -gUnknown_0857FE88:: @ 857FE88 - spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5B48 - @ 857FEA0 .include "data/text/item_descriptions.inc" diff --git a/data/rom_8011DC0.s b/data/rom_8011DC0.s index df212a640..bcc7dcd1b 100644 --- a/data/rom_8011DC0.s +++ b/data/rom_8011DC0.s @@ -2506,13 +2506,13 @@ gUnknown_082F2D40:: @ 82F2D40 .4byte gText_RegisteredTextChanged .byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00 - .4byte gText_AlreadySavedFile + .4byte gText_AlreadySavedFile_Unused .byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00 - .4byte gText_SavingDontTurnOff + .4byte gText_SavingDontTurnOff_Unused .byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00 - .4byte gText_PlayerSavedGame + .4byte gText_PlayerSavedGame_Unused .byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00 .4byte gText_IfLeaderLeavesChatEnds diff --git a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc index c2b70944b..b7dc59257 100644 --- a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc +++ b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc @@ -180,12 +180,12 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88:: @ 8252C88 BattleFrontier_BattlePyramidEmptySquare_Text_252C8D: @ 8252C8D .string "This is a sample message.$" -BattleFrontier_BattlePyramidEmptySquare_Text_252CA7:: @ 8252CA7 +gText_BattlePyramidConfirmRest:: @ 8252CA7 .string "Your BATTLE PYRAMID quest will be\n" .string "saved so that you may quit for now.\l" .string "Is that okay?$" -BattleFrontier_BattlePyramidEmptySquare_Text_252CFB:: @ 8252CFB +gText_BattlePyramidConfirmRetire:: @ 8252CFB .string "Are you sure you want to quit your\n" .string "PYRAMID quest?$" diff --git a/data/specials.inc b/data/specials.inc index 48f602418..8b83702ad 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -104,7 +104,7 @@ gSpecials:: @ 81DBA64 def_special sub_80F8D24 def_special sub_80F8C7C def_special sub_80B3000 - def_special sub_809FF80 + def_special SaveGame def_special sub_80FAFF8 def_special easy_chat_input_maybe def_special sub_811EECC diff --git a/data/strings.s b/data/strings.s index 20c4af22e..631eb8c19 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3704,13 +3704,13 @@ gText_LeaderLeftEndingChat:: @ 85ED2FA gText_RegisteredTextChanged:: @ 85ED325 .string "The registered text has been changed.\nIs it okay to save the game?$" -gText_AlreadySavedFile:: @ 85ED368 +gText_AlreadySavedFile_Unused:: @ 85ED368 .string "There is already a saved file.\nIs it okay to overwrite it?$" -gText_SavingDontTurnOff:: @ 85ED3A3 +gText_SavingDontTurnOff_Unused:: @ 85ED3A3 .string "SAVING…\nDON’T TURN OFF THE POWER.$" -gText_PlayerSavedGame:: @ 85ED3C5 +gText_PlayerSavedGame_Unused:: @ 85ED3C5 .string "{SPECIAL_F7 0x00} saved the game.$" gText_IfLeaderLeavesChatEnds:: @ 85ED3D8 diff --git a/data/text/save.inc b/data/text/save.inc index d909489ac..b252d61eb 100644 --- a/data/text/save.inc +++ b/data/text/save.inc @@ -1,18 +1,18 @@ -gUnknown_082C87B4:: @ 82C87B4 +gText_ConfirmSave:: @ 82C87B4 .string "Would you like to save the game?$" -gUnknown_082C87D5:: @ 82C87D5 +gText_AlreadySavedFile:: @ 82C87D5 .string "There is already a saved file.\n" .string "Is it okay to overwrite it?$" -gUnknown_082C8810:: @ 82C8810 +gText_SavingDontTurnOff:: @ 82C8810 .string "SAVING…\n" .string "DON’T TURN OFF THE POWER.$" -gUnknown_082C8832:: @ 82C8832 +gText_PlayerSavedGame:: @ 82C8832 .string "{PLAYER} saved the game.$" -gUnknown_082C8845:: @ 82C8845 +gText_DifferentSaveFile:: @ 82C8845 .string "WARNING!\p" .string "There is a different game file that\n" .string "is already saved.\p" @@ -22,7 +22,7 @@ gUnknown_082C8845:: @ 82C8845 .string "Are you sure you want to save now\n" .string "and overwrite the other save file?$" -gUnknown_082C892A:: @ 82C892A +gText_SaveError:: @ 82C892A .string "Save error.\p" .string "Please exchange the\n" .string "backup memory.$" diff --git a/include/battle.h b/include/battle.h index b0554a914..ae8a1c98a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -563,6 +563,14 @@ struct BattleStruct #define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) #define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) +#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0)) + +#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type)) +#define SET_BATTLER_TYPE(battlerId, type) \ +{ \ + gBattleMons[battlerId].type1 = type; \ + gBattleMons[battlerId].type2 = type; \ +} #define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 #define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 diff --git a/include/battle_message.h b/include/battle_message.h index a68ad1551..bf9b590af 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -229,13 +229,62 @@ extern const u8* const gPokeblockWasTooXStringTable[]; extern const u8* const gRefereeStringsTable[]; extern const u8* const gStatNamesTable2[]; +extern const u8 gText_PkmnIsEvolving[]; +extern const u8 gText_CongratsPkmnEvolved[]; +extern const u8 gText_PkmnStoppedEvolving[]; +extern const u8 gText_EllipsisQuestionMark[]; +extern const u8 gText_WhatWillPkmnDo[]; +extern const u8 gText_WhatWillPkmnDo2[]; +extern const u8 gText_WhatWillWallyDo[]; +extern const u8 gText_LinkStandby[]; +extern const u8 gText_BattleMenu[]; +extern const u8 gText_SafariZoneMenu[]; +extern const u8 gText_MoveInterfacePP[]; +extern const u8 gText_MoveInterfaceType[]; +extern const u8 gText_MoveInterfacePpType[]; +extern const u8 gText_MoveInterfaceDynamicColors[]; +extern const u8 gText_WhichMoveToForget4[]; +extern const u8 gText_BattleYesNoChoice[]; +extern const u8 gText_BattleSwitchWhich[]; +extern const u8 gText_BattleSwitchWhich2[]; +extern const u8 gText_BattleSwitchWhich3[]; +extern const u8 gText_BattleSwitchWhich4[]; +extern const u8 gText_BattleSwitchWhich5[]; +extern const u8 gText_SafariBalls[]; +extern const u8 gText_SafariBallLeft[]; +extern const u8 gText_SpaceAndSpace[]; +extern const u8 gText_CommaSpace[]; +extern const u8 gText_Space2[]; +extern const u8 gText_ScrollTextUp[]; +extern const u8 gText_NewLine[]; +extern const u8 gText_Are[]; +extern const u8 gText_Are2[]; extern const u8 gText_BadEgg[]; +extern const u8 gText_BattleWallyName[]; +extern const u8 gText_Win[]; +extern const u8 gText_Loss[]; +extern const u8 gText_Draw[]; extern const u8 gText_StatRose[]; extern const u8 gText_PkmnsStatChanged2[]; extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; -extern const u8 gText_BattleWallyName[]; extern const u8 gText_PkmnsXPreventsSwitching[]; +extern const u8 gText_TheGreatNewHope[]; +extern const u8 gText_WillChampinshipDreamComeTrue[]; +extern const u8 gText_AFormerChampion[]; +extern const u8 gText_ThePreviousChampion[]; +extern const u8 gText_TheUnbeatenChampion[]; +extern const u8 gText_PlayerMon1Name[]; +extern const u8 gText_Vs[]; +extern const u8 gText_OpponentMon1Name[]; +extern const u8 gText_Mind[]; +extern const u8 gText_Skill[]; +extern const u8 gText_Body[]; +extern const u8 gText_Judgement[]; +extern const u8 gText_EmptyString3[]; +extern const u8 gText_RecordBattleToPass[]; +extern const u8 gText_BattleRecordedOnPass[]; +extern const u8 gText_BattleTourney[]; extern const u16 gMissStringIds[]; extern const u16 gTrappingMoves[]; diff --git a/include/battle_util.h b/include/battle_util.h index d992faa47..e5c1aaf18 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -49,36 +49,36 @@ void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move); void PressurePPLoseOnUsingPerishSong(u8 bankAtk); void PressurePPLoseOnUsingImprision(u8 bankAtk); void MarkAllBattlersForControllerExec(void); // unused -void MarkBattlerForControllerExec(u8 bank); +void MarkBattlerForControllerExec(u8 battlerId); void sub_803F850(u8 arg0); -void CancelMultiTurnMoves(u8 bank); -bool8 WasUnableToUseMove(u8 bank); -void PrepareStringBattle(u16 stringId, u8 bank); +void CancelMultiTurnMoves(u8 battlerId); +bool8 WasUnableToUseMove(u8 battlerId); +void PrepareStringBattle(u16 stringId, u8 battlerId); void ResetSentPokesToOpponentValue(void); -void sub_803F9EC(u8 bank); -void sub_803FA70(u8 bank); +void sub_803F9EC(u8 battlerId); +void sub_803FA70(u8 battlerId); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); u8 TrySetCantSelectMoveBattleScript(void); -u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check); +u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check); bool8 AreAllMovesUnusable(void); -u8 GetImprisonedMovesCount(u8 bank, u16 move); +u8 GetImprisonedMovesCount(u8 battlerId, u16 move); u8 UpdateTurnCounters(void); u8 TurnBasedEffects(void); bool8 HandleWishPerishSongOnTurnEnd(void); bool8 HandleFaintedMonActions(void); void TryClearRageStatuses(void); u8 AtkCanceller_UnableToUseMove(void); -bool8 sub_80423F4(u8 bank, u8 r1, u8 r2); -u8 CastformDataTypeChange(u8 bank); -u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg); +bool8 sub_80423F4(u8 battlerId, u8 r1, u8 r2); +u8 CastformDataTypeChange(u8 battlerId); +u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg); void BattleScriptExecute(const u8* BS_ptr); void BattleScriptPushCursorAndCallback(const u8* BS_ptr); -u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn); -void ClearFuryCutterDestinyBondGrudge(u8 bank); +u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn); +void ClearFuryCutterDestinyBondGrudge(u8 battlerId); void HandleAction_RunBattleScript(void); -u8 GetMoveTarget(u16 move, u8 useMoveTarget); +u8 GetMoveTarget(u16 move, u8 setTarget); u8 IsMonDisobedient(void); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/event_scripts.h b/include/event_scripts.h index 4c5dfd544..ba137cf3b 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -382,6 +382,8 @@ extern const u8 SecretBase_RedCave1_Text_2751E1[]; extern const u8 SecretBase_RedCave1_Text_2754F6[]; extern const u8 SecretBase_RedCave1_Text_2758CC[]; +extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88[]; + //field effects extern const u8 FieryPath_EventScript_2908FD[]; extern const u8 EventScript_290CAE[]; diff --git a/include/graphics.h b/include/graphics.h index e0c9431ac..9afcb75ad 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2719,12 +2719,18 @@ extern const u16 gFireRedMenuElements2_Pal[16]; extern const u16 gFireRedMenuElements3_Pal[16]; extern const u8 gFireRedMenuElements_Gfx[]; -//item menu graphics +// item menu graphics extern const u8 gBagScreen_Gfx[]; extern const u16 gBagScreenFemale_Pal[]; extern const u16 gBagScreenMale_Pal[]; extern const u8 gBagMenuHMIcon_Gfx[]; +// item menu icons graphics +extern const u8 gBagMaleTiles[]; +extern const u8 gBagFemaleTiles[]; +extern const u8 gBagPalette[]; +extern const u8 gBerryCheckCircle_Gfx[]; + //intro graphics extern const u8 gIntro1SparkleGfx[]; extern const u8 gIntro1FlygonGfx[]; @@ -2767,6 +2773,94 @@ extern const u16 gIntro2BrendanNoTurnPal[]; extern const u16 gIntro2FlygonPal[]; extern const u8 gIntro2FlygonGfx[]; +// berry pics +extern const u8 gBerryPic_Cheri[]; +extern const u8 gBerryPalette_Cheri[]; +extern const u8 gBerryPic_Chesto[]; +extern const u8 gBerryPalette_Chesto[]; +extern const u8 gBerryPic_Pecha[]; +extern const u8 gBerryPalette_Pecha[]; +extern const u8 gBerryPic_Rawst[]; +extern const u8 gBerryPalette_Rawst[]; +extern const u8 gBerryPic_Aspear[]; +extern const u8 gBerryPalette_Aspear[]; +extern const u8 gBerryPic_Leppa[]; +extern const u8 gBerryPalette_Leppa[]; +extern const u8 gBerryPic_Oran[]; +extern const u8 gBerryPalette_Oran[]; +extern const u8 gBerryPic_Persim[]; +extern const u8 gBerryPalette_Persim[]; +extern const u8 gBerryPic_Lum[]; +extern const u8 gBerryPalette_Lum[]; +extern const u8 gBerryPic_Sitrus[]; +extern const u8 gBerryPalette_Sitrus[]; +extern const u8 gBerryPic_Figy[]; +extern const u8 gBerryPalette_Figy[]; +extern const u8 gBerryPic_Wiki[]; +extern const u8 gBerryPalette_Wiki[]; +extern const u8 gBerryPic_Mago[]; +extern const u8 gBerryPalette_Mago[]; +extern const u8 gBerryPic_Aguav[]; +extern const u8 gBerryPalette_Aguav[]; +extern const u8 gBerryPic_Iapapa[]; +extern const u8 gBerryPalette_Iapapa[]; +extern const u8 gBerryPic_Razz[]; +extern const u8 gBerryPalette_Razz[]; +extern const u8 gBerryPic_Bluk[]; +extern const u8 gBerryPalette_Bluk[]; +extern const u8 gBerryPic_Nanab[]; +extern const u8 gBerryPalette_Nanab[]; +extern const u8 gBerryPic_Wepear[]; +extern const u8 gBerryPalette_Wepear[]; +extern const u8 gBerryPic_Pinap[]; +extern const u8 gBerryPalette_Pinap[]; +extern const u8 gBerryPic_Pomeg[]; +extern const u8 gBerryPalette_Pomeg[]; +extern const u8 gBerryPic_Kelpsy[]; +extern const u8 gBerryPalette_Kelpsy[]; +extern const u8 gBerryPic_Qualot[]; +extern const u8 gBerryPalette_Qualot[]; +extern const u8 gBerryPic_Hondew[]; +extern const u8 gBerryPalette_Hondew[]; +extern const u8 gBerryPic_Grepa[]; +extern const u8 gBerryPalette_Grepa[]; +extern const u8 gBerryPic_Tamato[]; +extern const u8 gBerryPalette_Tamato[]; +extern const u8 gBerryPic_Cornn[]; +extern const u8 gBerryPalette_Cornn[]; +extern const u8 gBerryPic_Magost[]; +extern const u8 gBerryPalette_Magost[]; +extern const u8 gBerryPic_Rabuta[]; +extern const u8 gBerryPalette_Rabuta[]; +extern const u8 gBerryPic_Nomel[]; +extern const u8 gBerryPalette_Nomel[]; +extern const u8 gBerryPic_Spelon[]; +extern const u8 gBerryPalette_Spelon[]; +extern const u8 gBerryPic_Pamtre[]; +extern const u8 gBerryPalette_Pamtre[]; +extern const u8 gBerryPic_Watmel[]; +extern const u8 gBerryPalette_Watmel[]; +extern const u8 gBerryPic_Durin[]; +extern const u8 gBerryPalette_Durin[]; +extern const u8 gBerryPic_Belue[]; +extern const u8 gBerryPalette_Belue[]; +extern const u8 gBerryPic_Liechi[]; +extern const u8 gBerryPalette_Liechi[]; +extern const u8 gBerryPic_Ganlon[]; +extern const u8 gBerryPalette_Ganlon[]; +extern const u8 gBerryPic_Salac[]; +extern const u8 gBerryPalette_Salac[]; +extern const u8 gBerryPic_Petaya[]; +extern const u8 gBerryPalette_Petaya[]; +extern const u8 gBerryPic_Apicot[]; +extern const u8 gBerryPalette_Apicot[]; +extern const u8 gBerryPic_Lansat[]; +extern const u8 gBerryPalette_Lansat[]; +extern const u8 gBerryPic_Starf[]; +extern const u8 gBerryPalette_Starf[]; +extern const u8 gBerryPic_Enigma[]; +extern const u8 gBerryPalette_Enigma[]; + //credits extern const u8 gCreditsCopyrightEnd_Gfx[]; diff --git a/include/item_menu.h b/include/item_menu.h index 5c1b26faa..e49aeb861 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -4,17 +4,48 @@ // Exported type declarations struct BagStruct { - void *func; - u8 unk4; + void (*bagCallback)(void); + u8 location; u8 pocket; u8 unk6[2]; - u16 unk8[5]; - u16 unk12[5]; - void *unk1C; + u16 cursorPosition[5]; + u16 scrollPosition[5]; }; extern struct BagStruct gUnknown_0203CE58; +struct UnkBagStruct +{ + void (*unk0)(void); + u8 unk4[0x800]; + u8 unk804[12]; + u8 unk810[7]; + u8 unk817; + u8 unk818; + u8 unk819; + u8 unk81A; + u8 unk81B:4; + u8 unk81B_1:2; + u8 unk81B_3:1; + u8 unk81B_2:1; + u8 filler3[2]; + u8 unk81E; + u8 unk81F; + const u8* unk820; + u8 unk824; + u8 unk825; + u8 filler[2]; + u8 unk828; + u8 unk829[5]; + u8 unk82E[6]; + s16 unk834; + u8 filler4[0xE]; + u8 unk844[32][32]; + u8 filler2[4]; +}; + +extern struct UnkBagStruct *gUnknown_0203CE54; + // Exported RAM declarations extern u16 gSpecialVar_ItemId; @@ -24,4 +55,6 @@ void sub_81AAC50(void); void sub_81AAC70(void); void bag_menu_mail_related(void); +void CB2_BagMenuFromStartMenu(void); + #endif //GUARD_item_menu_H diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index 56e012421..aee7599df 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -1,16 +1,25 @@ #ifndef GUARD_ITEM_MENU_ICONS #define GUARD_ITEM_MENU_ICONS +extern const struct CompressedSpriteSheet gUnknown_0857FB34; +extern const struct CompressedSpriteSheet gUnknown_0857FB3C; +extern const struct CompressedSpritePalette gUnknown_0857FB44; extern const struct CompressedSpriteSheet gUnknown_0857FDEC; extern const struct CompressedSpritePalette gUnknown_0857FDF4; -u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3); +void RemoveBagSprite(u8 id); +void AddBagVisualSprite(u8 bagPocketId); +void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets); +void ShakeBagVisual(void); +void AddSwitchPocketRotatingBallSprite(s16 rotationDirection); +void AddBagItemIconSprite(u16 itemId, u8 id); +void RemoveBagItemIconSprite(u8 id); +void sub_80D4FAC(void); +void sub_80D4FC8(u8 arg0); +void sub_80D4FEC(u8 arg0); u8 CreateBerryTagSprite(u8 id, s16 x, s16 y); void FreeBerryTagSpritePalette(void); +u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine); u8 CreateBerryFlavorCircleSprite(s16 x); -void sub_80D4FAC(void); -void RemoveBagItemIconObject(u8); -void sub_80D4FEC(u8); -void sub_80D4FC8(u8); #endif // GUARD_ITEM_MENU_ICONS diff --git a/include/link.h b/include/link.h index 0fa4d39c2..051370897 100644 --- a/include/link.h +++ b/include/link.h @@ -257,6 +257,7 @@ void sub_800AAF4(void); void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); void sub_800B348(void); void sub_800B3A4(u32 who); +bool32 sub_800A07C(void); extern u16 gLinkPartnersHeldKeys[6]; extern u32 gLinkDebugSeed; diff --git a/include/list_menu.h b/include/list_menu.h index 77d00bf97..0aa66a524 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -4,9 +4,11 @@ #define LIST_NOTHING_CHOSEN -1 #define LIST_B_PRESSED -2 -// Exported type declarations +#define LIST_NO_MULTIPLE_SCROLL 0 +#define LIST_MULTIPLE_SCROLL_DPAD 1 +#define LIST_MULTIPLE_SCROLL_L_R 2 -// Exported RAM declarations +struct ListMenu; struct ListMenuItem { @@ -14,33 +16,31 @@ struct ListMenuItem s32 id; }; -struct ListMenu; - struct ListMenuTemplate { const struct ListMenuItem *items; - void (* moveCursorFunc)(u32, bool8, struct ListMenu *); - void (* unk_08)(u8, s32, u8); + void (* moveCursorFunc)(s32, bool8, struct ListMenu *); + void (* unk_08)(u8 windowId, s32 itemId, u8 y); u16 totalItems; u16 maxShowed; - u8 unk_10; + u8 windowId; u8 unk_11; u8 unk_12; - u8 cursor_Y; - u32 upText_Y:4; // x1, x2, x4, x8 = xF - u32 cursorColor:4; // x10, x20, x40, x80 = xF0 - u32 fillColor:4; // x100, x200, x400, x800 = xF00 - u32 cursorShadowColor:4; // x1000, x2000, x4000, x8000 = xF000 - u32 unk_16_0:1; // x10000 - u32 spaceBetweenItems:6; // x20000, x40000, x80000, x100000, x200000, x400000 = x7E0000 - u32 unk_16_7:1; // x800000 - u32 unk_17_0:6; // x1000000, x2000000, x4000000, x8000000, x10000000, x20000000 = x3F000000 - u32 cursorKind:2; // x40000000, x80000000 + u8 cursor_X; + u8 upText_Y:4; // x1, x2, x4, x8 = xF + u8 cursorPal:4; // x10, x20, x40, x80 = xF0 + u8 fillValue:4; // x1, x2, x4, x8 = xF + u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0 + u8 lettersSpacing:3; + u8 unk_16_3:3; + u8 scrollMultiple:2; // x40, x80 = xC0 + u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F + u8 cursorKind:2; // x40, x80 }; struct ListMenu { - struct ListMenuTemplate _template; + struct ListMenuTemplate template; u16 scrollOffset; u16 selectedRow; u8 unk_1C; @@ -49,14 +49,30 @@ struct ListMenu u8 unk_1F; }; -extern struct ListMenuTemplate gMultiuseListMenuTemplate; +struct UnknownListMenuWindowStruct +{ + u8 x; + u8 y; + u8 width; + u8 height; + u8 palNum; +}; -// Exported ROM declarations +extern struct ListMenuTemplate gMultiuseListMenuTemplate; -u8 ListMenuInit(struct ListMenuTemplate *template, u16 cursorPage, u16 cursorPosition); +s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); +u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); +u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow); s32 ListMenuHandleInputGetItemId(u8 listTaskId); -void sub_81AE860(u8 listTaskId, u16 *a1, u16 *a2); -void sub_81AE6C8(u8 listTaskId, u16 *a1, u16 *a2); -u8 ListMenuGetYCoordForPrintingArrowCursor(u8); +void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +void sub_81AE70C(u8 listTaskId); +void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal); +void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y); +s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow); +void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId); +void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow); +u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId); +void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal); +void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list); #endif //GUARD_LIST_MENU_H diff --git a/include/load_save.h b/include/load_save.h index 92c99fd90..460cdf6f3 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -21,5 +21,7 @@ void LoadSerializedGame(void); void LoadPlayerBag(void); void SavePlayerBag(void); void SetSaveBlocksPointers(u16); +void sub_8076D5C(void); +void sav2_gender2_inplace_and_xFE(void); #endif // GUARD_LOAD_SAVE_H diff --git a/include/menu.h b/include/menu.h index c2f15422a..cec2f018d 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,3 +1,4 @@ + #ifndef GUARD_MENU_H #define GUARD_MENU_H @@ -27,8 +28,9 @@ void NewMenuHelpers_DrawDialogueFrame(u8, u8); void sub_819746C(u8 windowId, bool8 copyToVram); void NewMenuHelpers_DrawStdWindowFrame(u8, u8); u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor); +void PrintPlayerNameOnWindow(u8, const u8*, u16, u16); void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback); -void sub_8197434(u8 a0, u8 a1); +void sub_8197434(u8 windowId, bool8 copyToVram); void SetStandardWindowBorderStyle(u8 a0, u8 a1); void sub_8197930(void); u8 GetPlayerTextSpeed(void); @@ -67,6 +69,16 @@ void AddItemMenuActionTextPrinters (u8, u8, u8, u8, u8, u8, u8, const struct Men void sub_8198DBC(u8, u8, u8, u8, u8, u8, u8, const struct MenuAction*, const u8*); u8 sub_8199944(u8, u8, u8, u8, u8); u8 sub_8199134(s8, s8); +u8 GetStartMenuWindowId(void); void sub_819A2BC(u8, u8); +u8 MoveMenuCursor(s8 cursorDelta); +void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); +u8 sub_81979C4(u8 a1); +u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos); +void sub_819786C(u8 windowId, bool8 copyToVram); +void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress); +void RemoveStartMenuWindow(void); +void sub_8197948(u8 initialCursorPos); +void sub_819A344(u8 a0, u8 *dest, u8 color); #endif // GUARD_MENU_H diff --git a/include/menu_indicators.h b/include/menu_indicators.h index b82e48725..a099cffab 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -7,16 +7,31 @@ // Exported ROM declarations -struct ArrowStruct { +struct ArrowStruct +{ u8 unk0[6]; u16 unk6[4]; u8 unkE; }; +struct CursorStruct +{ + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u16 unk6; + u16 unk8; + u8 unkA; +}; + void Task_ScrollIndicatorArrowPairOnMainMenu(u8); u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *); void RemoveScrollIndicatorArrowPair(u8); u8 AddScrollIndicatorArrowPair(const struct ArrowStruct*, void*); void sub_81AF15C(u8, u8, u8); +void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); +void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); +u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); #endif //GUARD_MENU_INDICATORS_H diff --git a/include/start_menu.h b/include/start_menu.h index 6c7cb3237..5551b149d 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -1,6 +1,16 @@ #ifndef GUARD_START_MENU_H #define GUARD_START_MENU_H +extern bool8 (*gMenuCallback)(void); // Defined in sym_common.txt + +void sub_809FA18(void); +void sub_809FA34(u8 taskId); +void ShowStartMenu(void); +void sub_809FDD4(void); +void SaveGame(void); +void sub_80A0514(void); +void sub_80A08CC(void); +void HideStartMenu(void); void AppendToList(u8* list, u8* pos, u8 newEntry); #endif // GUARD_START_MENU_H diff --git a/include/strings.h b/include/strings.h index 70b2777e1..cb76279f8 100644 --- a/include/strings.h +++ b/include/strings.h @@ -112,9 +112,6 @@ extern const u8 gText_Cancel4[]; extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted3[]; extern const u8 gText_Coins[]; -extern const u8 gText_Draw[]; -extern const u8 gText_Loss[]; -extern const u8 gText_Win[]; extern const u8 gText_Var1AteTheVar2[]; extern const u8 gText_Var1HappilyAteVar2[]; @@ -200,6 +197,23 @@ extern const u8 gText_Peak[]; extern const u8 gText_SafariBallStock[]; extern const u8 gText_BattlePyramidFloor[]; +// save menu texts +extern const u8 gText_ConfirmSave[]; +extern const u8 gText_DifferentSaveFile[]; +extern const u8 gText_AlreadySavedFile[]; +extern const u8 gText_SavingDontTurnOff[]; +extern const u8 gText_PlayerSavedGame[]; +extern const u8 gText_SaveError[]; +extern const u8 gText_SavingDontTurnOffPower[]; +extern const u8 gText_SavingPlayer[]; +extern const u8 gText_SavingBadges[]; +extern const u8 gText_SavingPokedex[]; +extern const u8 gText_SavingTime[]; + +// Battle pyramid menu texts +extern const u8 gText_BattlePyramidConfirmRest[]; +extern const u8 gText_BattlePyramidConfirmRetire[]; + // option menu texts extern const u8 gText_TextSpeedSlow[]; extern const u8 gText_TextSpeedMid[]; diff --git a/include/text.h b/include/text.h index 81c066426..2566b51b7 100644 --- a/include/text.h +++ b/include/text.h @@ -82,6 +82,12 @@ #define TEXT_COLOR_TRANSPARENT 0x0 #define TEXT_COLOR_WHITE 0x1 #define TEXT_COLOR_DARK_GREY 0x2 +// 0x3 +#define TEXT_COLOR_RED 0x4 +// 0x5 +#define TEXT_COLOR_GREEN 0x6 +// 0x7 +#define TEXT_COLOR_BLUE 0x8 // battle placeholders are located in battle_message.h diff --git a/ld_script.txt b/ld_script.txt index e50f17ef3..cd30c8461 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,7 +107,6 @@ SECTIONS { src/clock.o(.text); src/reset_rtc_screen.o(.text); src/start_menu.o(.text); - asm/start_menu.o(.text); src/tileset_anims.o(.text); src/palette.o(.text); src/sound.o(.text); @@ -136,7 +135,7 @@ SECTIONS { asm/fldeff_cut.o(.text); src/mail_data.o(.text); asm/map_name_popup.o(.text); - asm/item_menu_icons.o(.text); + src/item_menu_icons.o(.text); asm/battle_anim_80D51AC.o(.text); src/item.o(.text); asm/item.o(.text); @@ -247,7 +246,7 @@ SECTIONS { src/menu.o(.text); asm/battle_frontier_2.o(.text); src/item_menu.o(.text); - asm/list_menu.o(.text); + src/list_menu.o(.text); asm/menu_indicators.o(.text); src/unk_text_util.o(.text); src/save_location.o(.text); @@ -435,6 +434,7 @@ SECTIONS { src/pokemon_icon.o(.rodata); data/fldeff_cut.o(.rodata); data/map_name_popup.o(.rodata); + src/item_menu_icons.o(.rodata); data/item_menu_icons.o(.rodata); data/contest.o(.rodata); data/shop.o(.rodata); diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 46fe7a89c..e1a9168a9 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -12,10 +12,6 @@ #include "util.h" #include "constants/battle_ai.h" -#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8) -#define AIScriptReadPtr(ptr) (const u8*) AIScriptRead32(ptr) - #define AI_ACTION_DONE 0x0001 #define AI_ACTION_FLEE 0x0002 #define AI_ACTION_WATCH 0x0004 @@ -652,7 +648,7 @@ static void BattleAICmd_if_random_less_than(void) u16 random = Random(); if (random % 256 < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -662,7 +658,7 @@ static void BattleAICmd_if_random_greater_than(void) u16 random = Random(); if (random % 256 > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -672,7 +668,7 @@ static void BattleAICmd_if_random_equal(void) u16 random = Random(); if (random % 256 == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -682,7 +678,7 @@ static void BattleAICmd_if_random_not_equal(void) u16 random = Random(); if (random % 256 != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -707,7 +703,7 @@ static void BattleAICmd_if_hp_less_than(void) battlerId = gBattlerTarget; if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -722,7 +718,7 @@ static void BattleAICmd_if_hp_more_than(void) battlerId = gBattlerTarget; if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -737,7 +733,7 @@ static void BattleAICmd_if_hp_equal(void) battlerId = gBattlerTarget; if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -752,7 +748,7 @@ static void BattleAICmd_if_hp_not_equal(void) battlerId = gBattlerTarget; if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } @@ -767,10 +763,10 @@ static void BattleAICmd_if_status(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[battlerId].status1 & status) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -785,10 +781,10 @@ static void BattleAICmd_if_not_status(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[battlerId].status1 & status) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -803,10 +799,10 @@ static void BattleAICmd_if_status2(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[battlerId].status2 & status) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -821,10 +817,10 @@ static void BattleAICmd_if_not_status2(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gBattleMons[battlerId].status2 & status) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -839,10 +835,10 @@ static void BattleAICmd_if_status3(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gStatuses3[battlerId] & status) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -857,10 +853,10 @@ static void BattleAICmd_if_not_status3(void) else battlerId = gBattlerTarget; - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gStatuses3[battlerId] & status) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -876,10 +872,10 @@ static void BattleAICmd_if_side_affecting(void) battlerId = gBattlerTarget; side = GET_BATTLER_SIDE(battlerId); - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gSideStatuses[side] & status) != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -895,10 +891,10 @@ static void BattleAICmd_if_not_side_affecting(void) battlerId = gBattlerTarget; side = GET_BATTLER_SIDE(battlerId); - status = AIScriptRead32(gAIScriptPtr + 2); + status = T1_READ_32(gAIScriptPtr + 2); if ((gSideStatuses[side] & status) == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); else gAIScriptPtr += 10; } @@ -906,7 +902,7 @@ static void BattleAICmd_if_not_side_affecting(void) static void BattleAICmd_if_less_than(void) { if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -914,7 +910,7 @@ static void BattleAICmd_if_less_than(void) static void BattleAICmd_if_more_than(void) { if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -922,7 +918,7 @@ static void BattleAICmd_if_more_than(void) static void BattleAICmd_if_equal(void) { if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -930,80 +926,80 @@ static void BattleAICmd_if_equal(void) static void BattleAICmd_if_not_equal(void) { if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } static void BattleAICmd_if_less_than_ptr(void) { - const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult < *value) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_more_than_ptr(void) { - const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult > *value) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_equal_ptr(void) { - const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult == *value) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_not_equal_ptr(void) { - const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *value = T1_READ_PTR(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult != *value) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); else gAIScriptPtr += 9; } static void BattleAICmd_if_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = T1_READ_16(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } static void BattleAICmd_if_not_move(void) { - u16 move = AIScriptRead16(gAIScriptPtr + 1); + u16 move = T1_READ_16(gAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); else gAIScriptPtr += 7; } static void BattleAICmd_if_in_bytes(void) { - const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); return; } ptr++; @@ -1013,7 +1009,7 @@ static void BattleAICmd_if_in_bytes(void) static void BattleAICmd_if_not_in_bytes(void) { - const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1); + const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFF) { @@ -1024,18 +1020,18 @@ static void BattleAICmd_if_not_in_bytes(void) } ptr++; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); } static void BattleAICmd_if_in_hwords(void) { - const u16 *ptr = (const u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); return; } ptr++; @@ -1045,7 +1041,7 @@ static void BattleAICmd_if_in_hwords(void) static void BattleAICmd_if_not_in_hwords(void) { - const u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1); + const u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); while (*ptr != 0xFFFF) { @@ -1056,7 +1052,7 @@ static void BattleAICmd_if_not_in_hwords(void) } ptr++; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); } static void BattleAICmd_if_user_has_attacking_move(void) @@ -1072,7 +1068,7 @@ static void BattleAICmd_if_user_has_attacking_move(void) if (i == 4) gAIScriptPtr += 5; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_if_user_has_no_attacking_moves(void) @@ -1088,7 +1084,7 @@ static void BattleAICmd_if_user_has_no_attacking_moves(void) if (i != 4) gAIScriptPtr += 5; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_get_turn_count(void) @@ -1237,7 +1233,7 @@ static void BattleAICmd_get_last_used_bank_move(void) static void BattleAICmd_if_equal_(void) // same as if_equal { if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1245,7 +1241,7 @@ static void BattleAICmd_if_equal_(void) // same as if_equal static void BattleAICmd_if_not_equal_(void) // same as if_not_equal { if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1253,7 +1249,7 @@ static void BattleAICmd_if_not_equal_(void) // same as if_not_equal static void BattleAICmd_if_user_goes(void) { if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1261,7 +1257,7 @@ static void BattleAICmd_if_user_goes(void) static void BattleAICmd_if_user_doesnt_go(void) { if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1527,7 +1523,7 @@ static void BattleAICmd_if_type_effectiveness(void) damageVar = gBattleMoveDamage; if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1559,7 +1555,7 @@ static void BattleAICmd_if_status_in_party(void) party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); for (i = 0; i < PARTY_SIZE; i++) { @@ -1569,7 +1565,7 @@ static void BattleAICmd_if_status_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); return; } } @@ -1596,7 +1592,7 @@ static void BattleAICmd_if_status_not_in_party(void) party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); for (i = 0; i < PARTY_SIZE; i++) { @@ -1610,7 +1606,7 @@ static void BattleAICmd_if_status_not_in_party(void) } } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); } static void BattleAICmd_get_weather(void) @@ -1630,7 +1626,7 @@ static void BattleAICmd_get_weather(void) static void BattleAICmd_if_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1638,7 +1634,7 @@ static void BattleAICmd_if_effect(void) static void BattleAICmd_if_not_effect(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } @@ -1653,7 +1649,7 @@ static void BattleAICmd_if_stat_level_less_than(void) battlerId = gBattlerTarget; if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1668,7 +1664,7 @@ static void BattleAICmd_if_stat_level_more_than(void) battlerId = gBattlerTarget; if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1683,7 +1679,7 @@ static void BattleAICmd_if_stat_level_equal(void) battlerId = gBattlerTarget; if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1698,7 +1694,7 @@ static void BattleAICmd_if_stat_level_not_equal(void) battlerId = gBattlerTarget; if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -1727,7 +1723,7 @@ static void BattleAICmd_if_can_faint(void) gBattleMoveDamage = 1; if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -1754,7 +1750,7 @@ static void BattleAICmd_if_cant_faint(void) // this macro is missing the damage 0 = 1 assumption. if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -1779,7 +1775,7 @@ static void BattleAICmd_if_has_move(void) } else { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); return; } case AI_USER_PARTNER: @@ -1803,7 +1799,7 @@ static void BattleAICmd_if_has_move(void) } else { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); return; } case AI_TARGET: @@ -1820,7 +1816,7 @@ static void BattleAICmd_if_has_move(void) } else { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); return; } } @@ -1847,7 +1843,7 @@ static void BattleAICmd_if_doesnt_have_move(void) } else { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); return; } case AI_TARGET: @@ -1864,7 +1860,7 @@ static void BattleAICmd_if_doesnt_have_move(void) } else { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); return; } } @@ -1886,7 +1882,7 @@ static void BattleAICmd_if_has_move_with_effect(void) if (i == 4) gAIScriptPtr += 7; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); break; case AI_TARGET: case AI_TARGET_PARTNER: @@ -1899,7 +1895,7 @@ static void BattleAICmd_if_has_move_with_effect(void) if (i == 4) gAIScriptPtr += 7; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); break; } } @@ -1920,7 +1916,7 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void) if (i != 4) gAIScriptPtr += 7; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); break; case AI_TARGET: case AI_TARGET_PARTNER: @@ -1932,7 +1928,7 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void) if (i != 4) gAIScriptPtr += 7; else - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); break; } } @@ -1953,7 +1949,7 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void) gAIScriptPtr += 7; return; } - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); return; } else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. @@ -1963,7 +1959,7 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void) } else if (gDisableStructs[battlerId].encoredMove != 0) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); return; } gAIScriptPtr += 7; @@ -1976,7 +1972,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void) case 0: if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -1984,7 +1980,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void) case 1: if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2005,7 +2001,7 @@ static void BattleAICmd_if_random_safari_flee(void) u8 safariFleeRate = gBattleStruct->field_7B * 5; // safari flee rate, from 0-20 if ((u8)(Random() % 100) < safariFleeRate) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2048,7 +2044,7 @@ static void BattleAICmd_if_holds_item(void) var1 = gAIScriptPtr[3]; if ((var1 | var2) == item) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); else gAIScriptPtr += 8; } @@ -2183,12 +2179,12 @@ static void BattleAICmd_nullsub_57(void) static void BattleAICmd_call(void) { AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_goto(void) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); } static void BattleAICmd_end(void) @@ -2204,7 +2200,7 @@ static void BattleAICmd_if_level_cond(void) case 0: // greater than if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2212,7 +2208,7 @@ static void BattleAICmd_if_level_cond(void) case 1: // less than if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2220,7 +2216,7 @@ static void BattleAICmd_if_level_cond(void) case 2: // equal if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); return; } gAIScriptPtr += 6; @@ -2231,7 +2227,7 @@ static void BattleAICmd_if_level_cond(void) static void BattleAICmd_if_target_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer1 != 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2239,7 +2235,7 @@ static void BattleAICmd_if_target_taunted(void) static void BattleAICmd_if_target_not_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer1 == 0) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2247,7 +2243,7 @@ static void BattleAICmd_if_target_not_taunted(void) static void BattleAICmd_if_target_is_ally(void) { if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE)) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); else gAIScriptPtr += 5; } @@ -2257,7 +2253,7 @@ static void BattleAICmd_if_flash_fired(void) u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]); if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE) - gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5426cc774..83ad2b4fd 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -9,8 +9,6 @@ #include "util.h" #include "constants/items.h" -extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared - // this file's functions static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng); static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent); diff --git a/src/battle_anim.c b/src/battle_anim.c index 7606f701d..7a5197740 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -19,10 +19,6 @@ // sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. #define GET_TRUE_SPRITE_INDEX(i) ((i - 10000)) -#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) -#define SCRIPT_READ_32(ptr) (((ptr)[0]) + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define SCRIPT_READ_PTR(ptr) ((const u8*)(SCRIPT_READ_32(ptr))) - #define ANIM_SPRITE_INDEX_COUNT 8 extern u16 gBattle_WIN0H; @@ -352,7 +348,7 @@ static void ScriptCmd_loadspritegfx(void) u16 index; sBattleAnimScriptPtr++; - index = SCRIPT_READ_16(sBattleAnimScriptPtr); + index = T1_READ_16(sBattleAnimScriptPtr); LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); sBattleAnimScriptPtr += 2; @@ -366,7 +362,7 @@ static void ScriptCmd_unloadspritegfx(void) u16 index; sBattleAnimScriptPtr++; - index = SCRIPT_READ_16(sBattleAnimScriptPtr); + index = T1_READ_16(sBattleAnimScriptPtr); FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); sBattleAnimScriptPtr += 2; @@ -382,7 +378,7 @@ static void ScriptCmd_createsprite(void) s16 subpriority; sBattleAnimScriptPtr++; - template = (const struct SpriteTemplate *)(SCRIPT_READ_32(sBattleAnimScriptPtr)); + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); sBattleAnimScriptPtr += 4; argVar = sBattleAnimScriptPtr[0]; @@ -392,7 +388,7 @@ static void ScriptCmd_createsprite(void) sBattleAnimScriptPtr++; for (i = 0; i < argsCount; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } @@ -433,7 +429,7 @@ static void ScriptCmd_createvisualtask(void) sBattleAnimScriptPtr++; - taskFunc = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr); + taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 4; taskPriority = sBattleAnimScriptPtr[0]; @@ -444,7 +440,7 @@ static void ScriptCmd_createvisualtask(void) for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } @@ -542,26 +538,26 @@ static void ScriptCmd_end(void) static void ScriptCmd_playse(void) { sBattleAnimScriptPtr++; - PlaySE(SCRIPT_READ_16(sBattleAnimScriptPtr)); + PlaySE(T1_READ_16(sBattleAnimScriptPtr)); sBattleAnimScriptPtr += 2; } -#define t1_MONBG_BANK 0 +#define t1_MONBG_BATTLER 0 #define t1_MON_IN_BG2 1 #define t1_CREATE_ANOTHER_TASK 2 #define t1_IS_SECONDMON_BG 3 -#define t2_BANK_SPRITE_ID 0 +#define t2_BATTLER_SPRITE_ID 0 #define t2_MON_IN_BG2 5 -#define t2_MONBG_BANK 6 +#define t2_MONBG_BATTLER 6 static void sub_80A40F4(u8 taskId) { u8 newTaskId; s16 *selfData = gTasks[taskId].data; - u8 bankSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BANK]]; - gSprites[bankSpriteId].invisible = 1; + u8 battlerSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BATTLER]]; + gSprites[battlerSpriteId].invisible = 1; if (!selfData[t1_CREATE_ANOTHER_TASK]) { @@ -570,9 +566,9 @@ static void sub_80A40F4(u8 taskId) } newTaskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); - gTasks[newTaskId].data[t2_BANK_SPRITE_ID] = bankSpriteId; - gTasks[newTaskId].data[1] = gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x; - gTasks[newTaskId].data[2] = gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y; + gTasks[newTaskId].data[t2_BATTLER_SPRITE_ID] = battlerSpriteId; + gTasks[newTaskId].data[1] = gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x; + gTasks[newTaskId].data[2] = gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y; if (!selfData[t1_MON_IN_BG2]) { @@ -586,7 +582,7 @@ static void sub_80A40F4(u8 taskId) } gTasks[newTaskId].data[t2_MON_IN_BG2] = selfData[t1_MON_IN_BG2]; - gTasks[newTaskId].data[t2_MONBG_BANK] = selfData[t1_MONBG_BANK]; + gTasks[newTaskId].data[t2_MONBG_BATTLER] = selfData[t1_MONBG_BATTLER]; sMonAnimTaskIdArray[selfData[t1_IS_SECONDMON_BG]] = newTaskId; DestroyAnimVisualTask(taskId); } @@ -595,48 +591,48 @@ static void ScriptCmd_monbg(void) { bool8 toBG_2; u8 taskId; - u8 bank; + u8 battlerId; u8 animBank; sBattleAnimScriptPtr++; animBank = sBattleAnimScriptPtr[0]; if (animBank & ANIM_TARGET) - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; else - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; - if (IsBattlerSpriteVisible(bank)) + if (IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(bank); + u8 position = GetBattlerPosition(battlerId); if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) toBG_2 = FALSE; else toBG_2 = TRUE; - sub_80A438C(bank, toBG_2, FALSE); + sub_80A438C(battlerId, toBG_2, FALSE); taskId = CreateTask(sub_80A40F4, 10); gAnimVisualTaskCount++; - gTasks[taskId].data[t1_MONBG_BANK] = bank; + gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId; gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2; gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0; } - bank ^= BIT_FLANK; - if (IsBattlerSpriteVisible(bank)) + battlerId ^= BIT_FLANK; + if (IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(bank); + u8 position = GetBattlerPosition(battlerId); if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) toBG_2 = FALSE; else toBG_2 = TRUE; - sub_80A438C(bank, toBG_2, FALSE); + sub_80A438C(battlerId, toBG_2, FALSE); taskId = CreateTask(sub_80A40F4, 10); gAnimVisualTaskCount++; - gTasks[taskId].data[0] = bank; + gTasks[taskId].data[0] = battlerId; gTasks[taskId].data[1] = toBG_2; gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE; gTasks[taskId].data[t1_IS_SECONDMON_BG] = 1; @@ -647,33 +643,33 @@ static void ScriptCmd_monbg(void) gAnimScriptCallback = WaitAnimFrameCount; } -bool8 IsBattlerSpriteVisible(u8 bank) +bool8 IsBattlerSpriteVisible(u8 battlerId) { if (IsContest()) { - if (bank == gBattleAnimAttacker) + if (battlerId == gBattleAnimAttacker) return TRUE; else return FALSE; } - if (!IsBattlerSpritePresent(bank)) + if (!IsBattlerSpritePresent(battlerId)) return FALSE; if (IsContest()) return TRUE; // this line wont ever be reached. - if (!gBattleSpritesDataPtr->battlerData[bank].invisible || !gSprites[gBattlerSpriteIds[bank]].invisible) + if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible) return TRUE; return FALSE; } -void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible) +void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible) { struct UnknownAnimStruct2 unknownStruct; - u8 bankSpriteId; + u8 battlerSpriteId; if (!toBG_2) { - u8 bankIdentity; + u8 battlerPosition; if (IsContest() == TRUE) { @@ -694,28 +690,28 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible) SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0); - bankSpriteId = gBattlerSpriteIds[bank]; + battlerSpriteId = gBattlerSpriteIds[battlerId]; - gBattle_BG1_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20; + gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20; if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->field_0)) gBattle_BG1_X--; - gBattle_BG1_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20; + gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20; if (setSpriteInvisible) - gSprites[gBattlerSpriteIds[bank]].invisible = 1; + gSprites[gBattlerSpriteIds[battlerId]].invisible = 1; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], unknownStruct.unk8 * 16, 0x20); - CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20); + LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], unknownStruct.unk8 * 16, 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20); if (IsContest()) - bankIdentity = 0; + battlerPosition = 0; else - bankIdentity = GetBattlerPosition(bank); + battlerPosition = GetBattlerPosition(battlerId); - sub_8118FBC(1, 0, 0, bankIdentity, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA); + sub_8118FBC(1, 0, 0, battlerPosition, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA); if (IsContest()) sub_80A46A0(); @@ -731,21 +727,21 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible) SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1); SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0); - bankSpriteId = gBattlerSpriteIds[bank]; + battlerSpriteId = gBattlerSpriteIds[battlerId]; - gBattle_BG2_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20; - gBattle_BG2_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20; + gBattle_BG2_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20; + gBattle_BG2_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20; if (setSpriteInvisible) - gSprites[gBattlerSpriteIds[bank]].invisible = 1; + gSprites[gBattlerSpriteIds[battlerId]].invisible = 1; SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); - LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], 0x90, 0x20); - CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + 0x120), 0x20); + LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20); + CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20); - sub_8118FBC(2, 0, 0, GetBattlerPosition(bank), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA); + sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA); } } @@ -852,7 +848,7 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) static void ScriptCmd_clearmonbg(void) { u8 animBankId; - u8 bank; + u8 battlerId; u8 taskId; sBattleAnimScriptPtr++; @@ -864,20 +860,20 @@ static void ScriptCmd_clearmonbg(void) animBankId = ANIM_DEF_PARTNER; if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; else - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; if (sMonAnimTaskIdArray[0] != 0xFF) - gSprites[gBattlerSpriteIds[bank]].invisible = 0; + gSprites[gBattlerSpriteIds[battlerId]].invisible = 0; if (animBankId > 1 && sMonAnimTaskIdArray[1] != 0xFF) - gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0; + gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0; else animBankId = 0; taskId = CreateTask(sub_80A4980, 5); gTasks[taskId].data[0] = animBankId; - gTasks[taskId].data[2] = bank; + gTasks[taskId].data[2] = battlerId; sBattleAnimScriptPtr++; } @@ -913,7 +909,7 @@ static void sub_80A4980(u8 taskId) static void ScriptCmd_monbg_22(void) { bool8 toBG_2; - u8 bank; + u8 battlerId; u8 animBankId; sBattleAnimScriptPtr++; @@ -926,31 +922,31 @@ static void ScriptCmd_monbg_22(void) animBankId = ANIM_DEF_PARTNER; if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; else - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; - if (IsBattlerSpriteVisible(bank)) + if (IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(bank); + u8 position = GetBattlerPosition(battlerId); if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) toBG_2 = FALSE; else toBG_2 = TRUE; - sub_80A438C(bank, toBG_2, FALSE); + sub_80A438C(battlerId, toBG_2, FALSE); } - bank ^= BIT_FLANK; - if (animBankId > 1 && IsBattlerSpriteVisible(bank)) + battlerId ^= BIT_FLANK; + if (animBankId > 1 && IsBattlerSpriteVisible(battlerId)) { - u8 position = GetBattlerPosition(bank); + u8 position = GetBattlerPosition(battlerId); if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) toBG_2 = FALSE; else toBG_2 = TRUE; - sub_80A438C(bank, toBG_2, FALSE); + sub_80A438C(battlerId, toBG_2, FALSE); } sBattleAnimScriptPtr++; @@ -959,7 +955,7 @@ static void ScriptCmd_monbg_22(void) static void ScriptCmd_clearmonbg_23(void) { u8 animBankId; - u8 bank; + u8 battlerId; u8 taskId; sBattleAnimScriptPtr++; @@ -971,20 +967,20 @@ static void ScriptCmd_clearmonbg_23(void) animBankId = ANIM_DEF_PARTNER; if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER) - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; else - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; - if (IsBattlerSpriteVisible(bank)) - gSprites[gBattlerSpriteIds[bank]].invisible = 0; - if (animBankId > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK)) - gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0; + if (IsBattlerSpriteVisible(battlerId)) + gSprites[gBattlerSpriteIds[battlerId]].invisible = 0; + if (animBankId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) + gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0; else animBankId = 0; taskId = CreateTask(sub_80A4BB0, 5); gTasks[taskId].data[0] = animBankId; - gTasks[taskId].data[2] = bank; + gTasks[taskId].data[2] = battlerId; sBattleAnimScriptPtr++; } @@ -995,30 +991,30 @@ static void sub_80A4BB0(u8 taskId) if (gTasks[taskId].data[1] != 1) { bool8 toBG_2; - u8 bank = gTasks[taskId].data[2]; - u8 position = GetBattlerPosition(bank); + u8 battlerId = gTasks[taskId].data[2]; + u8 position = GetBattlerPosition(battlerId); if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest()) toBG_2 = FALSE; else toBG_2 = TRUE; - if (IsBattlerSpriteVisible(bank)) + if (IsBattlerSpriteVisible(battlerId)) sub_80A477C(toBG_2); - if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK)) + if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) sub_80A477C(toBG_2 ^ 1); DestroyTask(taskId); } } -#undef t1_MONBG_BANK +#undef t1_MONBG_BATTLER #undef t1_MON_IN_BG2 #undef t1_CREATE_ANOTHER_TASK #undef t1_IS_SECONDMON_BG -#undef t2_BANK_SPRITE_ID +#undef t2_BATTLER_SPRITE_ID #undef t2_MON_IN_BG2 -#undef t2_MONBG_BANK +#undef t2_MONBG_BATTLER static void ScriptCmd_setalpha(void) { @@ -1052,7 +1048,7 @@ static void ScriptCmd_call(void) { sBattleAnimScriptPtr++; sBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4; - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } static void ScriptCmd_return(void) @@ -1069,7 +1065,7 @@ static void ScriptCmd_setarg(void) sBattleAnimScriptPtr++; argId = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - value = SCRIPT_READ_16(sBattleAnimScriptPtr); + value = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr = addr + 4; gBattleAnimArgs[argId] = value; } @@ -1079,7 +1075,7 @@ static void ScriptCmd_choosetwoturnanim(void) sBattleAnimScriptPtr++; if (gAnimMoveTurn & 1) sBattleAnimScriptPtr += 4; - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } static void ScriptCmd_jumpifmoveturn(void) @@ -1090,7 +1086,7 @@ static void ScriptCmd_jumpifmoveturn(void) sBattleAnimScriptPtr++; if (toCheck == gAnimMoveTurn) - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); else sBattleAnimScriptPtr += 4; } @@ -1098,7 +1094,7 @@ static void ScriptCmd_jumpifmoveturn(void) static void ScriptCmd_goto(void) { sBattleAnimScriptPtr++; - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } // Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior. @@ -1354,7 +1350,7 @@ static void ScriptCmd_playsewithpan(void) s8 pan; sBattleAnimScriptPtr++; - songId = SCRIPT_READ_16(sBattleAnimScriptPtr); + songId = T1_READ_16(sBattleAnimScriptPtr); pan = sBattleAnimScriptPtr[2]; PlaySE12WithPanning(songId, BattleAnimAdjustPanning(pan)); sBattleAnimScriptPtr += 3; @@ -1385,7 +1381,7 @@ static void ScriptCmd_panse_1B(void) u8 taskId; sBattleAnimScriptPtr++; - songNum = SCRIPT_READ_16(sBattleAnimScriptPtr); + songNum = T1_READ_16(sBattleAnimScriptPtr); currentPanArg = sBattleAnimScriptPtr[2]; incrementPan = sBattleAnimScriptPtr[3]; incrementPanArg = sBattleAnimScriptPtr[4]; @@ -1457,7 +1453,7 @@ static void ScriptCmd_panse_26(void) u8 taskId; sBattleAnimScriptPtr++; - songId = SCRIPT_READ_16(sBattleAnimScriptPtr); + songId = T1_READ_16(sBattleAnimScriptPtr); currentPan = sBattleAnimScriptPtr[2]; targetPan = sBattleAnimScriptPtr[3]; incrementPan = sBattleAnimScriptPtr[4]; @@ -1484,7 +1480,7 @@ static void ScriptCmd_panse_27(void) u8 taskId; sBattleAnimScriptPtr++; - songId = SCRIPT_READ_16(sBattleAnimScriptPtr); + songId = T1_READ_16(sBattleAnimScriptPtr); currentPanArg = sBattleAnimScriptPtr[2]; targetPanArg = sBattleAnimScriptPtr[3]; incrementPanArg = sBattleAnimScriptPtr[4]; @@ -1528,7 +1524,7 @@ static void ScriptCmd_loopsewithpan(void) u8 taskId; sBattleAnimScriptPtr++; - songId = SCRIPT_READ_16(sBattleAnimScriptPtr); + songId = T1_READ_16(sBattleAnimScriptPtr); panningArg = sBattleAnimScriptPtr[2]; framesToWait = sBattleAnimScriptPtr[3]; numberOfPlays = sBattleAnimScriptPtr[4]; @@ -1585,7 +1581,7 @@ static void ScriptCmd_waitplaysewithpan(void) u8 taskId; sBattleAnimScriptPtr++; - songId = SCRIPT_READ_16(sBattleAnimScriptPtr); + songId = T1_READ_16(sBattleAnimScriptPtr); panningArg = sBattleAnimScriptPtr[2]; framesToWait = sBattleAnimScriptPtr[3]; panning = BattleAnimAdjustPanning(panningArg); @@ -1620,13 +1616,13 @@ static void ScriptCmd_createsoundtask(void) s32 i; sBattleAnimScriptPtr++; - func = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr); + func = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 4; numArgs = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr); + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } taskId = CreateTask(func, 1); @@ -1669,10 +1665,10 @@ static void ScriptCmd_jumpargeq(void) sBattleAnimScriptPtr++; argId = sBattleAnimScriptPtr[0]; - valueToCheck = SCRIPT_READ_16(sBattleAnimScriptPtr + 1); + valueToCheck = T1_READ_16(sBattleAnimScriptPtr + 1); if (valueToCheck == gBattleAnimArgs[argId]) - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr + 3); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr + 3); else sBattleAnimScriptPtr += 7; } @@ -1681,7 +1677,7 @@ static void ScriptCmd_jumpifcontest(void) { sBattleAnimScriptPtr++; if (IsContest()) - sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); else sBattleAnimScriptPtr += 4; } @@ -1689,19 +1685,19 @@ static void ScriptCmd_jumpifcontest(void) static void ScriptCmd_monbgprio_28(void) { u8 wantedBank; - u8 bank; - u8 bankIdentity; + u8 battlerId; + u8 battlerPosition; wantedBank = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; if (wantedBank != ANIM_ATTACKER) - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; else - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; - bankIdentity = GetBattlerPosition(bank); - if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT)) + battlerPosition = GetBattlerPosition(battlerId); + if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) { SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); @@ -1721,20 +1717,20 @@ static void ScriptCmd_monbgprio_29(void) static void ScriptCmd_monbgprio_2A(void) { u8 wantedBank; - u8 bankIdentity; - u8 bank; + u8 battlerPosition; + u8 battlerId; wantedBank = sBattleAnimScriptPtr[1]; sBattleAnimScriptPtr += 2; if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget)) { if (wantedBank != ANIM_ATTACKER) - bank = gBattleAnimTarget; + battlerId = gBattleAnimTarget; else - bank = gBattleAnimAttacker; + battlerId = gBattleAnimAttacker; - bankIdentity = GetBattlerPosition(bank); - if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT)) + battlerPosition = GetBattlerPosition(battlerId); + if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT)) { SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); diff --git a/src/battle_bg.c b/src/battle_bg.c index f493bafea..d4bfd297a 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -14,7 +14,6 @@ #include "trig.h" #include "sound.h" #include "constants/songs.h" -#include "strings.h" #include "window.h" #include "text_window.h" #include "menu.h" diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index cc6528f5f..a4aac55e2 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -33,7 +33,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); extern void sub_81851A8(u8 *); extern u16 sub_8068B48(void); @@ -103,7 +103,7 @@ static void LinkOpponentBufferExecCompleted(void); static void sub_8064DD0(void); static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst); static void SetLinkOpponentMonData(u8 monId); -static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit); +static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void LinkOpponentDoMoveAnimation(void); static void sub_8067618(u8 taskId); @@ -1159,36 +1159,36 @@ static void LinkOpponentHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_8064F40; } -static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit) +static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite( + gBattlerSpriteIds[battlerId] = CreateSprite( &gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); } static void LinkOpponentHandleReturnMonToBall(void) @@ -1337,7 +1337,7 @@ static void LinkOpponentHandleTrainerSlide(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC; - gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle bank function + gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle battlerId function LinkOpponentBufferExecCompleted(); } @@ -1548,11 +1548,11 @@ static void LinkOpponentHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 6ca50dc5c..d742d5df2 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -32,7 +32,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); extern void sub_81851A8(u8 *); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); @@ -101,7 +101,7 @@ static void LinkPartnerBufferExecCompleted(void); static void sub_814B554(void); static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst); static void SetLinkPartnerMonData(u8 monId); -static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit); +static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void LinkPartnerDoMoveAnimation(void); static void sub_814DCCC(u8 taskId); @@ -1045,35 +1045,35 @@ static void LinkPartnerHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_814B69C; } -static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit) +static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite( + gBattlerSpriteIds[battlerId] = CreateSprite( &gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void LinkPartnerHandleReturnMonToBall(void) @@ -1372,11 +1372,11 @@ static void LinkPartnerHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index e88b586b1..64cf16b86 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -36,9 +36,9 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); -extern void sub_81A57E4(u8 bank, u16 stringId); +extern void sub_81A57E4(u8 battlerId, u16 stringId); extern u8 sub_81A4CB0(void); extern u8 sub_81D5588(u16 trainerId); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); @@ -108,7 +108,7 @@ static void OpponentBufferExecCompleted(void); static void sub_805FC80(void); static u32 GetOpponentMonData(u8 monId, u8 *dst); static void SetOpponentMonData(u8 monId); -static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit); +static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void OpponentDoMoveAnimation(void); static void sub_806280C(struct Sprite *sprite); @@ -1153,36 +1153,36 @@ static void OpponentHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_805FDF0; } -static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit) +static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); } static void OpponentHandleReturnMonToBall(void) @@ -1697,11 +1697,11 @@ static void OpponentHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 3a6aa4a6e..e0694029a 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -43,19 +43,11 @@ extern struct SpriteTemplate gUnknown_0202499C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; -extern const u8 gText_BattleSwitchWhich[]; -extern const u8 gText_MoveInterfacePP[]; -extern const u8 gText_MoveInterfaceType[]; -extern const u8 gText_LinkStandby[]; -extern const u8 gText_BattleMenu[]; -extern const u8 gText_WhatWillPkmnDo[]; -extern const u8 gText_BattleYesNoChoice[]; - -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_81B89AC(u8 arg0); extern void sub_81AABB0(void); extern void sub_806A068(u16, u8); -extern void sub_81A57E4(u8 bank, u16 stringId); +extern void sub_81A57E4(u8 battlerId, u16 stringId); extern void sub_81851A8(u8 *); // this file's functions @@ -138,7 +130,7 @@ static void sub_80595A4(u8 taskId); static void PrintLinkStandbyMsg(void); static u32 CopyPlayerMonData(u8 monId, u8 *dst); static void SetPlayerMonData(u8 monId); -static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit); +static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); static void task05_08033660(u8 taskId); @@ -1157,10 +1149,10 @@ static void CompleteOnInactiveTextPrinter(void) static void Task_GiveExpToMon(u8 taskId) { u32 monId = (u8)(gTasks[taskId].tExpTask_monId); - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar + if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar { struct Pokemon *mon = &gPlayerParty[monId]; u16 species = GetMonData(mon, MON_DATA_SPECIES); @@ -1176,12 +1168,12 @@ static void Task_GiveExpToMon(u8 taskId) CalculateMonStats(mon); gainedExp -= nextLvlExp - currExp; savedActiveBank = gActiveBattler; - gActiveBattler = bank; + gActiveBattler = battlerId; BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); gActiveBattler = savedActiveBank; if (IsDoubleBattle() == TRUE - && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK])) + && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) gTasks[taskId].func = sub_8059544; else gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; @@ -1190,7 +1182,7 @@ static void Task_GiveExpToMon(u8 taskId) { currExp += gainedExp; SetMonData(mon, MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } } @@ -1204,7 +1196,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; struct Pokemon *mon = &gPlayerParty[monIndex]; u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); @@ -1214,7 +1206,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) exp -= currLvlExp; expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; - SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp); + SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = sub_8059400; } @@ -1229,11 +1221,11 @@ static void sub_8059400(u8 taskId) { u8 monId = gTasks[taskId].tExpTask_monId; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; s16 r4; - r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]); + r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); if (r4 == -1) { u8 level; @@ -1255,7 +1247,7 @@ static void sub_8059400(u8 taskId) CalculateMonStats(&gPlayerParty[monId]); gainedExp -= expOnNextLvl - currExp; savedActiveBank = gActiveBattler; - gActiveBattler = bank; + gActiveBattler = battlerId; BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); gActiveBattler = savedActiveBank; gTasks[taskId].func = sub_8059544; @@ -1264,7 +1256,7 @@ static void sub_8059400(u8 taskId) { currExp += gainedExp; SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } } @@ -1273,30 +1265,30 @@ static void sub_8059400(u8 taskId) static void sub_8059544(u8 taskId) { - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; u8 monIndex = gTasks[taskId].tExpTask_monId; - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK]) - bank ^= BIT_FLANK; + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + battlerId ^= BIT_FLANK; - InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP); + InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP); gTasks[taskId].func = sub_80595A4; } static void sub_80595A4(u8 taskId) { - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; - if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive) { u8 monIndex = gTasks[taskId].tExpTask_monId; GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK]) - UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); else - UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL); gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; } @@ -1305,12 +1297,12 @@ static void sub_80595A4(u8 taskId) static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) { u8 monIndex; - u8 bank; + u8 battlerId; monIndex = gTasks[taskId].tExpTask_monId; GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - bank = gTasks[taskId].tExpTask_bank; - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + battlerId = gTasks[taskId].tExpTask_bank; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } @@ -2199,35 +2191,35 @@ static void PlayerHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_805902C; } -static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit) +static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite( + gBattlerSpriteIds[battlerId] = CreateSprite( &gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void PlayerHandleReturnMonToBall(void) @@ -2749,11 +2741,11 @@ static void PlayerHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } @@ -2962,13 +2954,13 @@ static void PlayerHandleIntroTrainerBallThrow(void) void sub_805CC00(struct Sprite *sprite) { - u8 bank = sprite->data[5]; + u8 battlerId = sprite->data[5]; FreeSpriteOamMatrix(sprite); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); DestroySprite(sprite); - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], 0); + BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); } static void task05_08033660(u8 taskId) diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 7569604d8..f18f582f7 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -33,7 +33,7 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; extern void sub_81358F4(void); -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); @@ -107,7 +107,7 @@ static void sub_81BB688(u8 taskId); static void sub_81BB9A0(void); static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst); static void SetPlayerPartnerMonData(u8 monId); -static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit); +static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void PlayerPartnerDoMoveAnimation(void); static void sub_81BE2C8(u8 taskId); @@ -324,10 +324,10 @@ static void CompleteOnInactiveTextPrinter(void) static void Task_GiveExpToMon(u8 taskId) { u32 monId = (u8)(gTasks[taskId].tExpTask_monId); - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar + if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar { struct Pokemon *mon = &gPlayerParty[monId]; u16 species = GetMonData(mon, MON_DATA_SPECIES); @@ -343,12 +343,12 @@ static void Task_GiveExpToMon(u8 taskId) CalculateMonStats(mon); gainedExp -= nextLvlExp - currExp; savedActiveBank = gActiveBattler; - gActiveBattler = bank; + gActiveBattler = battlerId; BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); gActiveBattler = savedActiveBank; if (IsDoubleBattle() == TRUE - && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK])) + && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) gTasks[taskId].func = sub_81BB628; else gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; @@ -357,7 +357,7 @@ static void Task_GiveExpToMon(u8 taskId) { currExp += gainedExp; SetMonData(mon, MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } } @@ -371,7 +371,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; s32 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; struct Pokemon *mon = &gPlayerParty[monIndex]; u8 level = GetMonData(mon, MON_DATA_LEVEL); u16 species = GetMonData(mon, MON_DATA_SPECIES); @@ -381,7 +381,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) exp -= currLvlExp; expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; - SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp); + SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); gTasks[taskId].func = sub_81BB4E4; } @@ -396,11 +396,11 @@ static void sub_81BB4E4(u8 taskId) { u8 monId = gTasks[taskId].tExpTask_monId; s16 gainedExp = gTasks[taskId].tExpTask_gainedExp; - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; s16 r4; - r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0); - SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]); + r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0); + SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]); if (r4 == -1) { u8 level; @@ -422,7 +422,7 @@ static void sub_81BB4E4(u8 taskId) CalculateMonStats(&gPlayerParty[monId]); gainedExp -= expOnNextLvl - currExp; savedActiveBank = gActiveBattler; - gActiveBattler = bank; + gActiveBattler = battlerId; BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp); gActiveBattler = savedActiveBank; gTasks[taskId].func = sub_81BB628; @@ -431,7 +431,7 @@ static void sub_81BB4E4(u8 taskId) { currExp += gainedExp; SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp); - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } } @@ -440,30 +440,30 @@ static void sub_81BB4E4(u8 taskId) static void sub_81BB628(u8 taskId) { - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; u8 monIndex = gTasks[taskId].tExpTask_monId; - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK]) - bank ^= BIT_FLANK; + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + battlerId ^= BIT_FLANK; - InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP); + InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP); gTasks[taskId].func = sub_81BB688; } static void sub_81BB688(u8 taskId) { - u8 bank = gTasks[taskId].tExpTask_bank; + u8 battlerId = gTasks[taskId].tExpTask_bank; - if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive) { u8 monIndex = gTasks[taskId].tExpTask_monId; GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK]) - UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); + if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); else - UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL); + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL); gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; } @@ -472,12 +472,12 @@ static void sub_81BB688(u8 taskId) static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) { u8 monIndex; - u8 bank; + u8 battlerId; monIndex = gTasks[taskId].tExpTask_monId; GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value - bank = gTasks[taskId].tExpTask_bank; - gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter; + battlerId = gTasks[taskId].tExpTask_bank; + gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter; DestroyTask(taskId); } @@ -1232,35 +1232,35 @@ static void PlayerPartnerHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_81BBAE8; } -static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit) +static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite( + gBattlerSpriteIds[battlerId] = CreateSprite( &gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void PlayerPartnerHandleReturnMonToBall(void) @@ -1625,11 +1625,11 @@ static void PlayerPartnerHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index ded65828b..4d1ccbaca 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -35,7 +35,7 @@ extern u8 gUnknown_0203C7B4; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); extern u16 sub_8068B48(void); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); @@ -104,7 +104,7 @@ static void RecordedOpponentBufferExecCompleted(void); static void sub_8186F14(void); static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst); static void SetRecordedOpponentMonData(u8 monId); -static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit); +static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void RecordedOpponentDoMoveAnimation(void); static void sub_8189548(u8 taskId); @@ -1144,35 +1144,35 @@ static void RecordedOpponentHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_8187084; } -static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit) +static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); } static void RecordedOpponentHandleReturnMonToBall(void) @@ -1490,11 +1490,11 @@ static void RecordedOpponentHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index c1e5447a4..b16c3f307 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -35,7 +35,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); @@ -103,7 +103,7 @@ static void RecordedPlayerBufferExecCompleted(void); static void sub_818A328(void); static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst); static void SetRecordedPlayerMonData(u8 monId); -static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit); +static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void RecordedPlayerDoMoveAnimation(void); static void sub_818CC24(u8 taskId); @@ -1129,35 +1129,35 @@ static void RecordedPlayerHandleSwitchInAnim(void) gBattlerControllerFuncs[gActiveBattler] = sub_818A470; } -static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit) +static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; - ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit); - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - sub_806A068(species, GetBattlerPosition(bank)); + ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + sub_806A068(species, GetBattlerPosition(battlerId)); - gBattlerSpriteIds[bank] = CreateSprite( + gBattlerSpriteIds[battlerId] = CreateSprite( &gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void RecordedPlayerHandleReturnMonToBall(void) @@ -1512,11 +1512,11 @@ static void RecordedPlayerHandleStatusIconUpdate(void) { if (!mplay_80342A4(gActiveBattler)) { - u8 bank; + u8 battlerId; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON); - bank = gActiveBattler; - gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0; + battlerId = gActiveBattler; + gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0; gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation; } } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 39eab24ee..09776f150 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -23,15 +23,11 @@ #include "pokeblock.h" #include "item_use.h" -extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT]; extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; -extern const u8 gText_SafariZoneMenu[]; -extern const u8 gText_WhatWillPkmnDo2[]; - extern void sub_81358F4(void); // this file's functions diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 0d18de0e4..ca7b2fd44 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -37,10 +37,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; -extern const u8 gText_WhatWillWallyDo[]; -extern const u8 gText_BattleMenu[]; - -extern void sub_8172EF0(u8 bank, struct Pokemon *mon); +extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon); extern void sub_806A068(u16, u8); // this file's functions @@ -1460,31 +1457,31 @@ static void WallyHandleIntroTrainerBallThrow(void) gBattlerControllerFuncs[gActiveBattler] = nullsub_21; } -static void sub_816AA80(u8 bank) +static void sub_816AA80(u8 battlerId) { u16 species; - gBattleSpritesDataPtr->battlerData[bank].transformSpecies = 0; - gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); - gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714); - sub_806A068(species, GetBattlerPosition(bank)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C, - GetBattlerSpriteCoord(bank, 2), - GetBattlerSpriteDefault_Y(bank), - sub_80A82E4(bank)); - - gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank]; - gSprites[gUnknown_03005D7C[bank]].data[2] = bank; - - gSprites[gBattlerSpriteIds[bank]].data[0] = bank; - gSprites[gBattlerSpriteIds[bank]].data[2] = species; - gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; - - StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); - gSprites[gBattlerSpriteIds[bank]].invisible = TRUE; - gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; - gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0; + gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714); + sub_806A068(species, GetBattlerPosition(battlerId)); + gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C, + GetBattlerSpriteCoord(battlerId, 2), + GetBattlerSpriteDefault_Y(battlerId), + sub_80A82E4(battlerId)); + + gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId; + + gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; + gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; + gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; + + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); + gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; + gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; + gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void sub_816AC04(u8 taskId) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 8bd654c29..2b918d018 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -12,33 +12,14 @@ #include "constants/abilities.h" #include "battle_message.h" -extern u32 gBattleExecBuffer; -extern void (*gBattleBankFunc[4])(void); -extern u8 gBanksByIdentity[4]; -extern u8 gActionSelectionCursor[4]; -extern u8 gMoveSelectionCursor[4]; -extern u8 gNoOfAllBanks; -extern u8 gActiveBank; -extern u16 gBattlePartyID[4]; -extern u8 gBattleBufferA[4][0x200]; -extern u8 gBattleBufferB[4][0x200]; extern u8 gUnknown_02022D08; extern u8 gUnknown_02022D09; extern u8 gUnknown_02022D0A; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gAbsentBankFlags; -extern u8 gEffectBank; -extern struct BattlePokemon gBattleMons[4]; -extern u16 gLastUsedMove; -extern u8 gStringBank; -extern u8 gBattleBuffersTransferData[0x100]; static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {}; - extern void task00_08081A90(u8 taskId); // cable_club -extern void sub_81B8D64(u8 bank, u8 arg1); // party_menu +extern void sub_81B8D64(u8 battlerId, u8 arg1); // party_menu // this file's funcionts static void CreateTasksForSendRecvLinkBuffers(void); @@ -885,7 +866,7 @@ void sub_8033648(void) static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) { u16 blockSize; - u8 bank; + u8 battlerId; u8 var; if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) @@ -896,17 +877,17 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[15] = 0; } - bank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK]; + battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK]; blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8); switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) { case 0: - if (gBattleControllerExecFlags & gBitTable[bank]) + if (gBattleControllerExecFlags & gBitTable[battlerId]) return; - memcpy(gBattleBufferA[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize); - sub_803F850(bank); + memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize); + sub_803F850(battlerId); if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) { @@ -917,11 +898,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) } break; case 1: - memcpy(gBattleBufferB[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize); + memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize); break; case 2: var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA]; - gBattleControllerExecFlags &= ~(gBitTable[bank] << (var * 4)); + gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4)); break; } diff --git a/src/battle_interface.c b/src/battle_interface.c index 96462ec04..0a8bf3ed7 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -21,6 +21,7 @@ #include "safari_zone.h" #include "battle_anim.h" #include "constants/rgb.h" +#include "data2.h" struct TestingBar { @@ -154,7 +155,6 @@ enum }; extern const u8 * const gNatureNamePointers[]; -extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; // strings extern const u8 gText_Slash[]; @@ -162,8 +162,6 @@ extern const u8 gText_HighlightDarkGrey[]; extern const u8 gText_DynColor2[]; extern const u8 gText_DynColor2Male[]; extern const u8 gText_DynColor1Female[]; -extern const u8 gText_SafariBalls[]; -extern const u8 gText_SafariBallLeft[]; // graphics extern const u8 gBattleInterface_BallStatusBarGfx[]; @@ -198,10 +196,10 @@ static void SpriteCB_StatusSummaryBar(struct Sprite *sprite); static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite); static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite); -static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank); +static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId); static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale); -static void sub_8074B9C(u8 bank, u8 whichBar); +static void sub_8074B9C(u8 battlerId, u8 whichBar); static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5); static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2); @@ -1034,13 +1032,13 @@ static void sub_8072924(struct Sprite *sprite) sprite->pos2.y = gSprites[otherSpriteId].pos2.y; } -void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue) +void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue) { - gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId = healthboxSpriteId; - gBattleSpritesDataPtr->battleBars[bank].maxValue = maxVal; - gBattleSpritesDataPtr->battleBars[bank].currentValue = currVal; - gBattleSpritesDataPtr->battleBars[bank].receivedValue = receivedValue; - gBattleSpritesDataPtr->battleBars[bank].field_10 = -32768; + gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId; + gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal; + gBattleSpritesDataPtr->battleBars[battlerId].currentValue = currVal; + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue; + gBattleSpritesDataPtr->battleBars[battlerId].field_10 = -32768; } void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) @@ -1281,12 +1279,12 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 } else { - u8 bank; + u8 battlerId; memcpy(text, sUnknown_0832C3D8, sizeof(sUnknown_0832C3D8)); - bank = gSprites[healthboxSpriteId].data[6]; + battlerId = gSprites[healthboxSpriteId].data[6]; - if (gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars) // don't print text if only bars are visible + if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible { u8 var = 4; u8 r7; @@ -1327,7 +1325,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 } else { - if (GetBattlerSide(bank) == B_SIDE_PLAYER) // impossible to reach part, because the bank is from the opponent's side + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // impossible to reach part, because the battlerId is from the opponent's side { CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116), (void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * 32), @@ -1469,7 +1467,7 @@ void SwapHpBarsWithHpText(void) } } -u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) { bool8 isOpponent; s16 bar_X, bar_Y, bar_pos2_X, bar_data0; @@ -1478,9 +1476,9 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar u8 ballIconSpritesIds[6]; u8 taskId; - if (!arg2 || GetBattlerPosition(bank) != B_POSITION_OPPONENT_RIGHT) + if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) { - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { isOpponent = FALSE; bar_X = 136, bar_Y = 96; @@ -1559,7 +1557,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar gSprites[ballIconSpritesIds[i]].data[2] = isOpponent; } - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { @@ -1658,7 +1656,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar } taskId = CreateTask(TaskDummy, 5); - gTasks[taskId].data[0] = bank; + gTasks[taskId].data[0] = battlerId; gTasks[taskId].data[1] = barSpriteId; for (i = 0; i < 6; i++) @@ -1680,12 +1678,12 @@ void sub_8073C30(u8 taskId) u8 sp[6]; u8 r7; u8 r10; - u8 bank; + u8 battlerId; s32 i; r7 = gTasks[taskId].data[10]; r10 = gTasks[taskId].data[1]; - bank = gTasks[taskId].data[0]; + battlerId = gTasks[taskId].data[0]; for (i = 0; i < 6; i++) sp[i] = gTasks[taskId].data[3 + i]; @@ -1704,7 +1702,7 @@ void sub_8073C30(u8 taskId) { for (i = 0; i < 6; i++) { - if (GetBattlerSide(bank) != B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { gSprites[sp[5 - i]].data[1] = 7 * i; gSprites[sp[5 - i]].data[3] = 0; @@ -1752,7 +1750,7 @@ static void sub_8073E64(u8 taskId) u8 sp[6]; s32 i; - u8 bank = gTasks[taskId].data[0]; + u8 battlerId = gTasks[taskId].data[0]; gTasks[taskId].data[15]--; if (gTasks[taskId].data[15] == -1) { @@ -1780,7 +1778,7 @@ static void sub_8073E64(u8 taskId) } else if (gTasks[taskId].data[15] == -3) { - gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); DestroyTask(taskId); @@ -1792,7 +1790,7 @@ static void sub_8073F98(u8 taskId) u8 sp[6]; s32 i; - u8 bank = gTasks[taskId].data[0]; + u8 battlerId = gTasks[taskId].data[0]; gTasks[taskId].data[15]--; if (gTasks[taskId].data[15] >= 0) { @@ -1813,7 +1811,7 @@ static void sub_8073F98(u8 taskId) } else if (gTasks[taskId].data[15] == -3) { - gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); DestroyTask(taskId); @@ -1976,17 +1974,17 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon) static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) { - u8 bank, healthboxSpriteId_2; + u8 battlerId, healthboxSpriteId_2; if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) return; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) return; - bank = gSprites[healthboxSpriteId].data[6]; - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + battlerId = gSprites[healthboxSpriteId].data[6]; + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) return; - if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT)) + if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT)) return; healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5]; @@ -2000,17 +1998,17 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus) static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) { s32 i; - u8 bank, healthboxSpriteId_2; + u8 battlerId, healthboxSpriteId_2; u32 status, pltAdder; const u8 *statusGfxPtr; s16 tileNumAdder; u8 statusPalId; - bank = gSprites[healthboxSpriteId].data[6]; + battlerId = gSprites[healthboxSpriteId].data[6]; healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5]; - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { - status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS); + status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); if (!IsDoubleBattle()) tileNumAdder = 0x1A; else @@ -2018,33 +2016,33 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) } else { - status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS); + status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS); tileNumAdder = 0x11; } if (status & STATUS1_SLEEP) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, bank)); + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, battlerId)); statusPalId = PAL_STATUS_SLP; } else if (status & STATUS1_PSN_ANY) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, bank)); + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, battlerId)); statusPalId = PAL_STATUS_PSN; } else if (status & STATUS1_BURN) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, bank)); + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, battlerId)); statusPalId = PAL_STATUS_BRN; } else if (status & STATUS1_FREEZE) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, bank)); + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, battlerId)); statusPalId = PAL_STATUS_FRZ; } else if (status & STATUS1_PARALYSIS) { - statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, bank)); + statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, battlerId)); statusPalId = PAL_STATUS_PAR; } else @@ -2054,7 +2052,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) for (i = 0; i < 3; i++) CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32); - if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars) + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 64); TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE); @@ -2062,14 +2060,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) } pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16; - pltAdder += bank + 12; + pltAdder += battlerId + 12; FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2); CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2); CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96); - if (IsDoubleBattle() == TRUE || GetBattlerSide(bank) == B_SIDE_OPPONENT) + if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT) { - if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars) + if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) { CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 32); CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 1) * 32), 32); @@ -2078,58 +2076,58 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId) TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE); } -static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank) +static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId) { u8 ret = statusElementId; switch (statusElementId) { case HEALTHBOX_GFX_STATUS_PSN_BANK0: - if (bank == 0) + if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_PSN_BANK0; - else if (bank == 1) + else if (battlerId == 1) ret = HEALTHBOX_GFX_STATUS_PSN_BANK1; - else if (bank == 2) + else if (battlerId == 2) ret = HEALTHBOX_GFX_STATUS_PSN_BANK2; else ret = HEALTHBOX_GFX_STATUS_PSN_BANK3; break; case HEALTHBOX_GFX_STATUS_PRZ_BANK0: - if (bank == 0) + if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_PRZ_BANK0; - else if (bank == 1) + else if (battlerId == 1) ret = HEALTHBOX_GFX_STATUS_PRZ_BANK1; - else if (bank == 2) + else if (battlerId == 2) ret = HEALTHBOX_GFX_STATUS_PRZ_BANK2; else ret = HEALTHBOX_GFX_STATUS_PRZ_BANK3; break; case HEALTHBOX_GFX_STATUS_SLP_BANK0: - if (bank == 0) + if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_SLP_BANK0; - else if (bank == 1) + else if (battlerId == 1) ret = HEALTHBOX_GFX_STATUS_SLP_BANK1; - else if (bank == 2) + else if (battlerId == 2) ret = HEALTHBOX_GFX_STATUS_SLP_BANK2; else ret = HEALTHBOX_GFX_STATUS_SLP_BANK3; break; case HEALTHBOX_GFX_STATUS_FRZ_BANK0: - if (bank == 0) + if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_FRZ_BANK0; - else if (bank == 1) + else if (battlerId == 1) ret = HEALTHBOX_GFX_STATUS_FRZ_BANK1; - else if (bank == 2) + else if (battlerId == 2) ret = HEALTHBOX_GFX_STATUS_FRZ_BANK2; else ret = HEALTHBOX_GFX_STATUS_FRZ_BANK3; break; case HEALTHBOX_GFX_STATUS_BRN_BANK0: - if (bank == 0) + if (battlerId == 0) ret = HEALTHBOX_GFX_STATUS_BRN_BANK0; - else if (bank == 1) + else if (battlerId == 1) ret = HEALTHBOX_GFX_STATUS_BRN_BANK1; - else if (bank == 2) + else if (battlerId == 2) ret = HEALTHBOX_GFX_STATUS_BRN_BANK2; else ret = HEALTHBOX_GFX_STATUS_BRN_BANK3; @@ -2170,10 +2168,10 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId) void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId) { s32 maxHp, currHp; - u8 bank = gSprites[healthboxSpriteId].data[6]; + u8 battlerId = gSprites[healthboxSpriteId].data[6]; if (elementId == HEALTHBOX_ALL && !IsDoubleBattle()) - GetBattlerSide(bank); // pointless function call + GetBattlerSide(battlerId); // pointless function call if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER) { @@ -2190,8 +2188,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem LoadBattleBarGfx(0); maxHp = GetMonData(mon, MON_DATA_MAX_HP); currHp = GetMonData(mon, MON_DATA_HP); - SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0); - sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0); } isDoubles = IsDoubleBattle(); if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL)) @@ -2208,8 +2206,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level]; currExpBarValue = exp - currLevelExp; maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp; - SetBattleBarStruct(bank, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); - sub_8074AA0(bank, healthboxSpriteId, EXP_BAR, 0); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles); + sub_8074AA0(battlerId, healthboxSpriteId, EXP_BAR, 0); } if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) UpdateNickInHealthbox(healthboxSpriteId, mon); @@ -2229,8 +2227,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem LoadBattleBarGfx(0); maxHp = GetMonData(mon, MON_DATA_MAX_HP); currHp = GetMonData(mon, MON_DATA_HP); - SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0); - sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0); + SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0); + sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0); } if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL) UpdateNickInHealthbox(healthboxSpriteId, mon); @@ -2239,44 +2237,44 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem } } -s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3) +s32 sub_8074AA0(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 arg3) { s32 var; if (whichBar == HEALTH_BAR) // health bar { - var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue, - gBattleSpritesDataPtr->battleBars[bank].currentValue, - gBattleSpritesDataPtr->battleBars[bank].receivedValue, - &gBattleSpritesDataPtr->battleBars[bank].field_10, + var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].currentValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].field_10, 6, 1); } else // exp bar { - u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[bank].currentValue, - gBattleSpritesDataPtr->battleBars[bank].receivedValue, - gBattleSpritesDataPtr->battleBars[bank].maxValue, 8); + u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].currentValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8); if (expFraction == 0) expFraction = 1; - expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].receivedValue / expFraction); + expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction); - var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue, - gBattleSpritesDataPtr->battleBars[bank].currentValue, - gBattleSpritesDataPtr->battleBars[bank].receivedValue, - &gBattleSpritesDataPtr->battleBars[bank].field_10, + var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].currentValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].field_10, 8, expFraction); } - if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars)) - sub_8074B9C(bank, whichBar); + if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)) + sub_8074B9C(battlerId, whichBar); if (var == -1) - gBattleSpritesDataPtr->battleBars[bank].field_10 = 0; + gBattleSpritesDataPtr->battleBars[battlerId].field_10 = 0; return var; } -static void sub_8074B9C(u8 bank, u8 whichBar) +static void sub_8074B9C(u8 battlerId, u8 whichBar) { u8 array[8]; u8 subRet, level; @@ -2286,10 +2284,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar) switch (whichBar) { case HEALTH_BAR: - subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue, - gBattleSpritesDataPtr->battleBars[bank].currentValue, - gBattleSpritesDataPtr->battleBars[bank].receivedValue, - &gBattleSpritesDataPtr->battleBars[bank].field_10, + subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].currentValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].field_10, array, 6); barElementId = 3; if (subRet <= 0x18) @@ -2300,7 +2298,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar) } for (i = 0; i < 6; i++) { - u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].data[5]; + u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].data[5]; if (i < 2) CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + i) * 32), 32); @@ -2310,12 +2308,12 @@ static void sub_8074B9C(u8 bank, u8 whichBar) } break; case EXP_BAR: - sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue, - gBattleSpritesDataPtr->battleBars[bank].currentValue, - gBattleSpritesDataPtr->battleBars[bank].receivedValue, - &gBattleSpritesDataPtr->battleBars[bank].field_10, + sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue, + gBattleSpritesDataPtr->battleBars[battlerId].currentValue, + gBattleSpritesDataPtr->battleBars[battlerId].receivedValue, + &gBattleSpritesDataPtr->battleBars[battlerId].field_10, array, 8); - level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_LEVEL); + level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL); if (level == MAX_MON_LEVEL) { for (i = 0; i < 8; i++) @@ -2325,10 +2323,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar) { if (i < 4) CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32); + (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32); else CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32, - (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum) * 32), 32); + (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * 32), 32); } break; } diff --git a/src/battle_main.c b/src/battle_main.c index 9715221ba..70eebed85 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -94,12 +94,8 @@ extern const struct ScanlineEffectParams gUnknown_0831AC70; // strings extern const u8 gText_LinkStandby3[]; -extern const u8 gText_RecordBattleToPass[]; -extern const u8 gText_BattleYesNoChoice[]; extern const u8 gText_BattleRecordCouldntBeSaved[]; -extern const u8 gText_BattleRecordedOnPass[]; extern const u8 gText_ShedinjaJapaneseName[]; -extern const u8 gText_EmptyString3[]; extern const u8 gText_Poison[]; extern const u8 gText_Sleep[]; extern const u8 gText_Paralysis[]; @@ -3594,7 +3590,6 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) gBattleMainFunc = BattleIntroRecordMonsToDex; } - #else ASM_DIRECT static void BattleIntroOpponent1SendsOutMonAnimation(void) @@ -3681,7 +3676,6 @@ _0803B2F2:\n\ .pool\n\ .syntax divided"); } - #endif // NONMATCHING static void BattleIntroRecordMonsToDex(void) @@ -4042,8 +4036,7 @@ u8 IsRunningFromBattleImpossible(void) } if (side != GetBattlerSide(i) && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE - && gBattleMons[gActiveBattler].type1 != TYPE_FLYING - && gBattleMons[gActiveBattler].type2 != TYPE_FLYING + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) && gBattleMons[i].ability == ABILITY_ARENA_TRAP) { gBattleScripting.battler = i; @@ -4053,7 +4046,7 @@ u8 IsRunningFromBattleImpossible(void) } } i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0); - if (i != 0 && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL || gBattleMons[gActiveBattler].type2 == TYPE_STEEL)) + if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)) { gBattleScripting.battler = i - 1; gLastUsedAbility = gBattleMons[i - 1].ability; @@ -4240,12 +4233,10 @@ static void HandleTurnActionSelectionState(void) } else if ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0)) || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0)) - && gBattleMons[gActiveBattler].type1 != TYPE_FLYING - && gBattleMons[gActiveBattler].type2 != TYPE_FLYING + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) - && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL - || gBattleMons[gActiveBattler].type2 == TYPE_STEEL))) + && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) { BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | 4, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); } diff --git a/src/battle_message.c b/src/battle_message.c index 8351b84d8..1f338db92 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -57,832 +57,832 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0}; // const rom data // todo: make some of those names less vague: attacker/target vs pkmn, etc. -const u8 gText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); -const u8 gText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p"); -const u8 gText_EmptyString4[] = _(""); -const u8 gText_ABoosted[] = _(" a boosted"); -const u8 gText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p"); -const u8 gText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p"); -const u8 gText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p"); -const u8 gText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p"); -const u8 gText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?"); -const u8 gText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); -const u8 gText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?"); -const u8 gText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); -const u8 gText_UseNextPkmn[] = _("Use next POKéMON?"); -const u8 gText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!"); -const u8 gText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); -const u8 gText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); -const u8 gText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); -const u8 gText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); -const u8 gText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…"); -const u8 gText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); -const u8 gText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); -const u8 gText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); -const u8 gText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); -const u8 gText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); -const u8 gText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); -const u8 gText_CantEscape2[] = _("Can’t escape!\p"); -const u8 gText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!"); -const u8 gText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); -const u8 gText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -const u8 gText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); -const u8 gText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); -const u8 gText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); -const u8 gText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!"); -const u8 gText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -const u8 gText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); -const u8 gText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); -const u8 gText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); -const u8 gText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); -const u8 gText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); -const u8 gText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); -const u8 gText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); -const u8 gText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -const u8 gText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); -const u8 gText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); -const u8 gText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); -const u8 gText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); -const u8 gText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); -const u8 gText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -const u8 gText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); -const u8 gText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!"); -const u8 gText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -const u8 gText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); -const u8 gText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!"); -const u8 gText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!"); -const u8 gText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!"); -const u8 gText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!"); -const u8 gText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!"); -const u8 gText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -const u8 gText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!"); -const u8 gText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); -const u8 gText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); -const u8 gText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); -const u8 gText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); -const u8 gText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); -const u8 gText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -const u8 gText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!"); -const u8 gText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!"); -const u8 gText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!"); -const u8 gText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!"); -const u8 gText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); -const u8 gText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!"); -const u8 gText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); -const u8 gText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!"); -const u8 gText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!"); -const u8 gText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!"); -const u8 gText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); -const u8 gText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); -const u8 gText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); -const u8 gText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!"); -const u8 gText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!"); -const u8 gText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!"); -const u8 gText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); -const u8 gText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); -const u8 gText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); -const u8 gText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -const u8 gText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!"); -const u8 gText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); -const u8 gText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); -const u8 gText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); -const u8 gText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); -const u8 gText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); +static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); +static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p"); +static const u8 sText_EmptyString4[] = _(""); +static const u8 sText_ABoosted[] = _(" a boosted"); +static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p"); +static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p"); +static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p"); +static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p"); +static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?"); +static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?"); +static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); +static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?"); +static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!"); +static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); +static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); +static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); +static const u8 sText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…"); +static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); +static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); +static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); +static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); +static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); +static const u8 sText_CantEscape2[] = _("Can’t escape!\p"); +static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!"); +static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); +static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); +static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); +static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); +static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!"); +static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); +static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); +static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); +static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); +static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); +static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); +static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); +static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); +static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); +static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); +static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); +static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); +static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!"); +static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); +static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!"); +static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!"); +static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!"); +static const u8 sText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!"); +static const u8 sText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!"); +static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!"); +static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); +static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); +static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); +static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); +static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); +static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); +static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!"); +static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!"); +static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!"); +static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!"); +static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); +static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!"); +static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!"); +static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); +static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); +static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); +static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!"); +static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!"); +static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!"); +static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); +static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); +static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); +static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!"); +static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); +static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); +static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!"); -const u8 gText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!"); +static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!"); const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!"); -const u8 gText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!"); -const u8 gText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); -const u8 gText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); -const u8 gText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!"); -const u8 gText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!"); -const u8 gText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); -const u8 gText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!"); -const u8 gText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!"); -const u8 gText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); -const u8 gText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); -const u8 gText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!"); -const u8 gText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!"); -const u8 gText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!"); -const u8 gText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); -const u8 gText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); -const u8 gText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); -const u8 gText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!"); -const u8 gText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!"); -const u8 gText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); -const u8 gText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); -const u8 gText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); -const u8 gText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); -const u8 gText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); -const u8 gText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -const u8 gText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); -const u8 gText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); -const u8 gText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); -const u8 gText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); -const u8 gText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!"); -const u8 gText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); -const u8 gText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p"); -const u8 gText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); -const u8 gText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!"); -const u8 gText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!"); -const u8 gText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!"); -const u8 gText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!"); -const u8 gText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!"); -const u8 gText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!"); -const u8 gText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!"); -const u8 gText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!"); -const u8 gText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!"); -const u8 gText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); -const u8 gText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!"); -const u8 gText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!"); -const u8 gText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); -const u8 gText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -const u8 gText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!"); -const u8 gText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!"); -const u8 gText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!"); -const u8 gText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); -const u8 gText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!"); -const u8 gText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!"); -const u8 gText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!"); -const u8 gText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!"); -const u8 gText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!"); -const u8 gText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); -const u8 gText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!"); -const u8 gText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); -const u8 gText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); -const u8 gText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); -const u8 gText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); -const u8 gText_PkmnAttack[] = _("{B_BUFF1}’s attack!"); -const u8 gText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!"); -const u8 gText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); -const u8 gText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); -const u8 gText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!"); -const u8 gText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!"); -const u8 gText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); -const u8 gText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!"); -const u8 gText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); -const u8 gText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); -const u8 gText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -const u8 gText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -const u8 gText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!"); -const u8 gText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!"); -const u8 gText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!"); -const u8 gText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); -const u8 gText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); -const u8 gText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); -const u8 gText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!"); -const u8 gText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); -const u8 gText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!"); -const u8 gText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!"); -const u8 gText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!"); -const u8 gText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!"); -const u8 gText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!"); -const u8 gText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!"); -const u8 gText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); -const u8 gText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!"); -const u8 gText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!"); -const u8 gText_FireWeakened[] = _("Fire’s power was\nweakened!"); -const u8 gText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); -const u8 gText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); -const u8 gText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}"); -const u8 gText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); -const u8 gText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); -const u8 gText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!"); -const u8 gText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); -const u8 gText_TheWallShattered[] = _("The wall shattered!"); -const u8 gText_ButNoEffect[] = _("But it had no effect!"); -const u8 gText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); -const u8 gText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p"); -const u8 gText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p"); -const u8 gText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p"); -const u8 gText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p"); -const u8 gText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); -const u8 gText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); -const u8 gText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); -const u8 gText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); -const u8 gText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); -const u8 gText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); -const u8 gText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); -const u8 gText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!"); -const u8 gText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!"); -const u8 gText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!"); -const u8 gText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!"); -const u8 gText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!"); -const u8 gText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); -const u8 gText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!"); -const u8 gText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); -const u8 gText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!"); -const u8 gText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!"); -const u8 gText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -const u8 gText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -const u8 gText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!"); -const u8 gText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); -const u8 gText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!"); -const u8 gText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); -const u8 gText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); -const u8 gText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); -const u8 gText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -const u8 gText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!"); -const u8 gText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -const u8 gText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!"); +static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!"); +static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); +static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); +static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!"); +static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!"); +static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); +static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!"); +static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!"); +static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); +static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); +static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!"); +static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!"); +static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); +static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); +static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!"); +static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!"); +static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); +static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); +static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); +static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); +static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); +static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); +static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); +static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); +static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!"); +static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); +static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p"); +static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); +static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!"); +static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!"); +static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!"); +static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!"); +static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!"); +static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!"); +static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!"); +static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!"); +static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); +static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!"); +static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!"); +static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); +static const u8 sText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!"); +static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!"); +static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!"); +static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); +static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!"); +static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!"); +static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!"); +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!"); +static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!"); +static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); +static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); +static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); +static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); +static const u8 sText_PkmnAttack[] = _("{B_BUFF1}’s attack!"); +static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!"); +static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); +static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); +static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!"); +static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!"); +static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); +static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!"); +static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); +static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); +static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); +static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); +static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!"); +static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!"); +static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!"); +static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); +static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); +static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); +static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!"); +static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!"); +static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!"); +static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!"); +static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!"); +static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!"); +static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); +static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!"); +static const u8 sText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!"); +static const u8 sText_FireWeakened[] = _("Fire’s power was\nweakened!"); +static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); +static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); +static const u8 sText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}"); +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); +static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!"); +static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); +static const u8 sText_TheWallShattered[] = _("The wall shattered!"); +static const u8 sText_ButNoEffect[] = _("But it had no effect!"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); +static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); +static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!"); +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!"); +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!"); +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!"); +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!"); +static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!"); +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); +static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!"); +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!"); +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!"); +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!"); +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); +static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!"); +static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!"); const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}’s {B_LAST_ABILITY}\nprevents switching!\p"); -const u8 gText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!"); -const u8 gText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); -const u8 gText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!"); -const u8 gText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!"); -const u8 gText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -const u8 gText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); -const u8 gText_StatSharply[] = _("sharply "); +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!"); +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!"); +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); -const u8 gText_StatHarshly[] = _("harshly "); -const u8 gText_StatFell[] = _("fell!"); -const u8 gText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); +static const u8 sText_StatHarshly[] = _("harshly "); +static const u8 sText_StatFell[] = _("fell!"); +static const u8 sText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); const u8 gText_PkmnsStatChanged2[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); -const u8 gText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}"); -const u8 gText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); -const u8 gText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); -const u8 gText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!"); -const u8 gText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!"); -const u8 gText_CriticalHit[] = _("A critical hit!"); -const u8 gText_OneHitKO[] = _("It’s a one-hit KO!"); -const u8 gText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p"); -const u8 gText_AndEllipsis[] = _("And…\p"); -const u8 gText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p"); -const u8 gText_NotVeryEffective[] = _("It’s not very effective…"); -const u8 gText_SuperEffective[] = _("It’s super effective!"); -const u8 gText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p"); -const u8 gText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); -const u8 gText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); -const u8 gText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!"); -const u8 gText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!"); -const u8 gText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!"); -const u8 gText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!"); -const u8 gText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!"); -const u8 gText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!"); -const u8 gText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!"); -const u8 gText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!"); -const u8 gText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!"); -const u8 gText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p"); -const u8 gText_CantEscape[] = _("Can’t escape!\p"); -const u8 gText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p"); -const u8 gText_ButNothingHappened[] = _("But nothing happened!"); -const u8 gText_ButItFailed[] = _("But it failed!"); -const u8 gText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); -const u8 gText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!"); -const u8 gText_StartedToRain[] = _("It started to rain!"); -const u8 gText_DownpourStarted[] = _("A downpour started!"); -const u8 gText_RainContinues[] = _("Rain continues to fall."); -const u8 gText_DownpourContinues[] = _("The downpour continues."); -const u8 gText_RainStopped[] = _("The rain stopped."); -const u8 gText_SandstormBrewed[] = _("A sandstorm brewed!"); -const u8 gText_SandstormRages[] = _("The sandstorm rages."); -const u8 gText_SandstormSubsided[] = _("The sandstorm subsided."); -const u8 gText_SunlightGotBright[] = _("The sunlight got bright!"); -const u8 gText_SunlightStrong[] = _("The sunlight is strong."); -const u8 gText_SunlightFaded[] = _("The sunlight faded."); -const u8 gText_StartedHail[] = _("It started to hail!"); -const u8 gText_HailContinues[] = _("Hail continues to fall."); -const u8 gText_HailStopped[] = _("The hail stopped."); -const u8 gText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!"); -const u8 gText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!"); -const u8 gText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); -const u8 gText_StatChangesGone[] = _("All stat changes were\neliminated!"); -const u8 gText_CoinsScattered[] = _("Coins scattered everywhere!"); -const u8 gText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!"); -const u8 gText_SharedPain[] = _("The battlers shared\ntheir pain!"); -const u8 gText_BellChimed[] = _("A bell chimed!"); -const u8 gText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!"); -const u8 gText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p"); -const u8 gText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); -const u8 gText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); -const u8 gText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); -const u8 gText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); -const u8 gText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); -const u8 gText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!"); -const u8 gText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); -const u8 gText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); -const u8 gText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); -const u8 gText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); -const u8 gText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); -const u8 gText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); -const u8 gText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!"); -const u8 gText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); -const u8 gText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); -const u8 gText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); -const u8 gText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); -const u8 gText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); -const u8 gText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p"); -const u8 gText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); -const u8 gText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -const u8 gText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -const u8 gText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); -const u8 gText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); -const u8 gText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); -const u8 gText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!"); -const u8 gText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!"); -const u8 gText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); -const u8 gText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -const u8 gText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); -const u8 gText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!"); -const u8 gText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -const u8 gText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!"); -const u8 gText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!"); -const u8 gText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!"); -const u8 gText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); -const u8 gText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); -const u8 gText_GoPkmn2[] = _("Go! {B_BUFF1}!"); -const u8 gText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); -const u8 gText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); -const u8 gText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!"); -const u8 gText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -const u8 gText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!"); -const u8 gText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); -const u8 gText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); -const u8 gText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); -const u8 gText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); -const u8 gText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!"); -const u8 gText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!"); -const u8 gText_WildPkmnPrefix[] = _("Wild "); -const u8 gText_FoePkmnPrefix[] = _("Foe "); -const u8 gText_EmptyString8[] = _( ""); -const u8 gText_FoePkmnPrefix2[] = _("Foe"); -const u8 gText_AllyPkmnPrefix[] = _("Ally"); -const u8 gText_FoePkmnPrefix3[] = _("Foe"); -const u8 gText_AllyPkmnPrefix2[] = _("Ally"); -const u8 gText_FoePkmnPrefix4[] = _("Foe"); -const u8 gText_AllyPkmnPrefix3[] = _("Ally"); -const u8 gText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}"); -const u8 gText_ExclamationMark[] = _("!"); -const u8 gText_ExclamationMark2[] = _("!"); -const u8 gText_ExclamationMark3[] = _("!"); -const u8 gText_ExclamationMark4[] = _("!"); -const u8 gText_ExclamationMark5[] = _("!"); -const u8 gText_HP2[] = _("HP"); -const u8 gText_Attack2[] = _("ATTACK"); -const u8 gText_Defense2[] = _("DEFENSE"); -const u8 gText_Speed[] = _("SPEED"); -const u8 gText_SpAtk2[] = _("SP. ATK"); -const u8 gText_SpDef2[] = _("SP. DEF"); -const u8 gText_Accuracy[] = _("accuracy"); -const u8 gText_Evasiveness[] = _("evasiveness"); +static const u8 sText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}"); +static const u8 sText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); +static const u8 sText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}"); +static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!"); +static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!"); +static const u8 sText_CriticalHit[] = _("A critical hit!"); +static const u8 sText_OneHitKO[] = _("It’s a one-hit KO!"); +static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p"); +static const u8 sText_AndEllipsis[] = _("And…\p"); +static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p"); +static const u8 sText_NotVeryEffective[] = _("It’s not very effective…"); +static const u8 sText_SuperEffective[] = _("It’s super effective!"); +static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p"); +static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); +static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); +static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!"); +static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!"); +static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!"); +static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!"); +static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!"); +static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!"); +static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!"); +static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!"); +static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!"); +static const u8 sText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p"); +static const u8 sText_CantEscape[] = _("Can’t escape!\p"); +static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p"); +static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); +static const u8 sText_ButItFailed[] = _("But it failed!"); +static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); +static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!"); +static const u8 sText_StartedToRain[] = _("It started to rain!"); +static const u8 sText_DownpourStarted[] = _("A downpour started!"); +static const u8 sText_RainContinues[] = _("Rain continues to fall."); +static const u8 sText_DownpourContinues[] = _("The downpour continues."); +static const u8 sText_RainStopped[] = _("The rain stopped."); +static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); +static const u8 sText_SandstormRages[] = _("The sandstorm rages."); +static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided."); +static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); +static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); +static const u8 sText_SunlightFaded[] = _("The sunlight faded."); +static const u8 sText_StartedHail[] = _("It started to hail!"); +static const u8 sText_HailContinues[] = _("Hail continues to fall."); +static const u8 sText_HailStopped[] = _("The hail stopped."); +static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!"); +static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!"); +static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); +static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); +static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); +static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!"); +static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); +static const u8 sText_BellChimed[] = _("A bell chimed!"); +static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!"); +static const u8 sText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p"); +static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); +static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); +static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); +static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); +static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); +static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!"); +static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); +static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); +static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); +static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); +static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); +static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!"); +static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); +static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); +static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); +static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); +static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p"); +static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); +static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); +static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); +static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!"); +static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!"); +static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); +static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!"); +static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!"); +static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!"); +static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!"); +static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); +static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); +static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); +static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); +static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); +static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!"); +static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); +static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!"); +static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); +static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); +static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); +static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); +static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!"); +static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!"); +static const u8 sText_WildPkmnPrefix[] = _("Wild "); +static const u8 sText_FoePkmnPrefix[] = _("Foe "); +static const u8 sText_EmptyString8[] = _( ""); +static const u8 sText_FoePkmnPrefix2[] = _("Foe"); +static const u8 sText_AllyPkmnPrefix[] = _("Ally"); +static const u8 sText_FoePkmnPrefix3[] = _("Foe"); +static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); +static const u8 sText_FoePkmnPrefix4[] = _("Foe"); +static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); +static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}"); +static const u8 sText_ExclamationMark[] = _("!"); +static const u8 sText_ExclamationMark2[] = _("!"); +static const u8 sText_ExclamationMark3[] = _("!"); +static const u8 sText_ExclamationMark4[] = _("!"); +static const u8 sText_ExclamationMark5[] = _("!"); +static const u8 sText_HP2[] = _("HP"); +static const u8 sText_Attack2[] = _("ATTACK"); +static const u8 sText_Defense2[] = _("DEFENSE"); +static const u8 sText_Speed[] = _("SPEED"); +static const u8 sText_SpAtk2[] = _("SP. ATK"); +static const u8 sText_SpDef2[] = _("SP. DEF"); +static const u8 sText_Accuracy[] = _("accuracy"); +static const u8 sText_Evasiveness[] = _("evasiveness"); const u8 * const gStatNamesTable[] = { - gText_HP2, gText_Attack2, gText_Defense2, - gText_Speed, gText_SpAtk2, gText_SpDef2, - gText_Accuracy, gText_Evasiveness + sText_HP2, sText_Attack2, sText_Defense2, + sText_Speed, sText_SpAtk2, sText_SpDef2, + sText_Accuracy, sText_Evasiveness }; -const u8 gText_PokeblockWasTooSpicy[] = _("was too spicy!"); -const u8 gText_PokeblockWasTooDry[] = _("was too dry!"); -const u8 gText_PokeblockWasTooSweet[] = _("was too sweet!"); -const u8 gText_PokeblockWasTooBitter[] = _("was too bitter!"); -const u8 gText_PokeblockWasTooSour[] = _("was too sour!"); +static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!"); +static const u8 sText_PokeblockWasTooDry[] = _("was too dry!"); +static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!"); +static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!"); +static const u8 sText_PokeblockWasTooSour[] = _("was too sour!"); const u8 * const gPokeblockWasTooXStringTable[] = { - gText_PokeblockWasTooSpicy, gText_PokeblockWasTooDry, - gText_PokeblockWasTooSweet, gText_PokeblockWasTooBitter, - gText_PokeblockWasTooSour + sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry, + sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter, + sText_PokeblockWasTooSour }; -const u8 gText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); -const u8 gText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); -const u8 gText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); -const u8 gText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); -const u8 gText_DontBeAThief[] = _("Don’t be a thief!"); -const u8 gText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!"); -const u8 gText_YouMissedPkmn[] = _("You missed the POKéMON!"); -const u8 gText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); -const u8 gText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); -const u8 gText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); -const u8 gText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -const u8 gText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p"); -const u8 gText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}"); -const u8 gText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); -const u8 gText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); -const u8 gText_Someones[] = _("someone’s"); -const u8 gText_Lanettes[] = _("LANETTE’s"); -const u8 gText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p"); -const u8 gText_ItIsRaining[] = _("It is raining."); -const u8 gText_SandstormIsRaging[] = _("A sandstorm is raging."); -const u8 gText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p"); -const u8 gText_EnigmaBerry[] = _("ENIGMA BERRY"); -const u8 gText_BerrySuffix[] = _(" BERRY"); -const u8 gText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!"); -const u8 gText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!"); -const u8 gText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!"); -const u8 gText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!"); -const u8 gText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!"); -const u8 gText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!"); -const u8 gText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); -const u8 gText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!"); -const u8 gText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!"); -const u8 gText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!"); -const u8 gText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!"); -const u8 gText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!"); -const u8 gText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); -const u8 gText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); +static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); +static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); +static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); +static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); +static const u8 sText_DontBeAThief[] = _("Don’t be a thief!"); +static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!"); +static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); +static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); +static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); +static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); +static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); +static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p"); +static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}"); +static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); +static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); +static const u8 sText_Someones[] = _("someone’s"); +static const u8 sText_Lanettes[] = _("LANETTE’s"); +static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p"); +static const u8 sText_ItIsRaining[] = _("It is raining."); +static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); +static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p"); +static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); +static const u8 sText_BerrySuffix[] = _(" BERRY"); +static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!"); +static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!"); +static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!"); +static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!"); +static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!"); +static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!"); +static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); +static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!"); +static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!"); +static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!"); +static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); -const u8 gText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!"); +static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!"); // early declaration of strings -const u8 gText_PkmnIncapableOfPower[]; -const u8 gText_GlintAppearsInEye[]; -const u8 gText_PkmnGettingIntoPosition[]; -const u8 gText_PkmnBeganGrowlingDeeply[]; -const u8 gText_PkmnEagerForMore[]; -const u8 gText_DefeatedOpponentByReferee[]; -const u8 gText_LostToOpponentByReferee[]; -const u8 gText_TiedOpponentByReferee[]; -const u8 gText_QuestionForfeitMatch[]; -const u8 gText_ForfeitedMatch[]; -const u8 gText_Trainer1WinText[]; -const u8 gText_Trainer2WinText[]; -const u8 gText_TwoInGameTrainersDefeated[]; -const u8 gText_Trainer2LoseText[]; +static const u8 sText_PkmnIncapableOfPower[]; +static const u8 sText_GlintAppearsInEye[]; +static const u8 sText_PkmnGettingIntoPosition[]; +static const u8 sText_PkmnBeganGrowlingDeeply[]; +static const u8 sText_PkmnEagerForMore[]; +static const u8 sText_DefeatedOpponentByReferee[]; +static const u8 sText_LostToOpponentByReferee[]; +static const u8 sText_TiedOpponentByReferee[]; +static const u8 sText_QuestionForfeitMatch[]; +static const u8 sText_ForfeitedMatch[]; +static const u8 sText_Trainer1WinText[]; +static const u8 sText_Trainer2WinText[]; +static const u8 sText_TwoInGameTrainersDefeated[]; +static const u8 sText_Trainer2LoseText[]; const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] = { - gText_Trainer1LoseText, // 12 - gText_PkmnGainedEXP, // 13 - gText_PkmnGrewToLv, // 14 - gText_PkmnLearnedMove, // 15 - gText_TryToLearnMove1, // 16 - gText_TryToLearnMove2, // 17 - gText_TryToLearnMove3, // 18 - gText_PkmnForgotMove, // 19 - gText_StopLearningMove, // 20 - gText_DidNotLearnMove, // 21 - gText_PkmnLearnedMove2, // 22 - gText_AttackMissed, // 23 - gText_PkmnProtectedItself, // 24 - gText_StatsWontIncrease2, // 25 - gText_AvoidedDamage, // 26 - gText_ItDoesntAffect, // 27 - gText_AttackerFainted, // 28 - gText_TargetFainted, // 29 - gText_PlayerGotMoney, // 30 - gText_PlayerWhiteout, // 31 - gText_PlayerWhiteout2, // 32 - gText_PreventsEscape, // 33 - gText_HitXTimes, // 34 - gText_PkmnFellAsleep, // 35 - gText_PkmnMadeSleep, // 36 - gText_PkmnAlreadyAsleep, // 37 - gText_PkmnAlreadyAsleep2, // 38 - gText_PkmnWasntAffected, // 39 - gText_PkmnWasPoisoned, // 40 - gText_PkmnPoisonedBy, // 41 - gText_PkmnHurtByPoison, // 42 - gText_PkmnAlreadyPoisoned, // 43 - gText_PkmnBadlyPoisoned, // 44 - gText_PkmnEnergyDrained, // 45 - gText_PkmnWasBurned, // 46 - gText_PkmnBurnedBy, // 47 - gText_PkmnHurtByBurn, // 48 - gText_PkmnWasFrozen, // 49 - gText_PkmnFrozenBy, // 50 - gText_PkmnIsFrozen, // 51 - gText_PkmnWasDefrosted, // 52 - gText_PkmnWasDefrosted2, // 53 - gText_PkmnWasDefrostedBy, // 54 - gText_PkmnWasParalyzed, // 55 - gText_PkmnWasParalyzedBy, // 56 - gText_PkmnIsParalyzed, // 57 - gText_PkmnIsAlreadyParalyzed, // 58 - gText_PkmnHealedParalysis, // 59 - gText_PkmnDreamEaten, // 60 - gText_StatsWontIncrease, // 61 - gText_StatsWontDecrease, // 62 - gText_TeamStoppedWorking, // 63 - gText_FoeStoppedWorking, // 64 - gText_PkmnIsConfused, // 65 - gText_PkmnHealedConfusion, // 66 - gText_PkmnWasConfused, // 67 - gText_PkmnAlreadyConfused, // 68 - gText_PkmnFellInLove, // 69 - gText_PkmnInLove, // 70 - gText_PkmnImmobilizedByLove, // 71 - gText_PkmnBlownAway, // 72 - gText_PkmnChangedType, // 73 - gText_PkmnFlinched, // 74 - gText_PkmnRegainedHealth, // 75 - gText_PkmnHPFull, // 76 - gText_PkmnRaisedSpDef, // 77 - gText_PkmnRaisedDef, // 78 - gText_PkmnCoveredByVeil, // 79 - gText_PkmnUsedSafeguard, // 80 - gText_PkmnSafeguardExpired, // 81 - gText_PkmnWentToSleep, // 82 - gText_PkmnSleptHealthy, // 83 - gText_PkmnWhippedWhirlwind, // 84 - gText_PkmnTookSunlight, // 85 - gText_PkmnLoweredHead, // 86 - gText_PkmnIsGlowing, // 87 - gText_PkmnFlewHigh, // 88 - gText_PkmnDugHole, // 89 - gText_PkmnSqueezedByBind, // 90 - gText_PkmnTrappedInVortex, // 91 - gText_PkmnWrappedBy, // 92 - gText_PkmnClamped, // 93 - gText_PkmnHurtBy, // 94 - gText_PkmnFreedFrom, // 95 - gText_PkmnCrashed, // 96 - gText_PkmnShroudedInMist, // 97 - gText_PkmnProtectedByMist, // 98 - gText_PkmnGettingPumped, // 99 - gText_PkmnHitWithRecoil, // 100 - gText_PkmnProtectedItself2, // 101 - gText_PkmnBuffetedBySandstorm, // 102 - gText_PkmnPeltedByHail, // 103 - gText_PkmnSeeded, // 104 - gText_PkmnEvadedAttack, // 105 - gText_PkmnSappedByLeechSeed, // 106 - gText_PkmnFastAsleep, // 107 - gText_PkmnWokeUp, // 108 - gText_PkmnUproarKeptAwake, // 109 - gText_PkmnWokeUpInUproar, // 110 - gText_PkmnCausedUproar, // 111 - gText_PkmnMakingUproar, // 112 - gText_PkmnCalmedDown, // 113 - gText_PkmnCantSleepInUproar, // 114 - gText_PkmnStockpiled, // 115 - gText_PkmnCantStockpile, // 116 - gText_PkmnCantSleepInUproar2, // 117 - gText_UproarKeptPkmnAwake, // 118 - gText_PkmnStayedAwakeUsing, // 119 - gText_PkmnStoringEnergy, // 120 - gText_PkmnUnleashedEnergy, // 121 - gText_PkmnFatigueConfusion, // 122 - gText_PkmnPickedUpItem, // 123 - gText_PkmnUnaffected, // 124 - gText_PkmnTransformedInto, // 125 - gText_PkmnMadeSubstitute, // 126 - gText_PkmnHasSubstitute, // 127 - gText_SubstituteDamaged, // 128 - gText_PkmnSubstituteFaded, // 129 - gText_PkmnMustRecharge, // 130 - gText_PkmnRageBuilding, // 131 - gText_PkmnMoveWasDisabled, // 132 - gText_PkmnMoveIsDisabled, // 133 - gText_PkmnMoveDisabledNoMore, // 134 - gText_PkmnGotEncore, // 135 - gText_PkmnEncoreEnded, // 136 - gText_PkmnTookAim, // 137 - gText_PkmnSketchedMove, // 138 - gText_PkmnTryingToTakeFoe, // 139 - gText_PkmnTookFoe, // 140 - gText_PkmnReducedPP, // 141 - gText_PkmnStoleItem, // 142 - gText_TargetCantEscapeNow, // 143 - gText_PkmnFellIntoNightmare, // 144 - gText_PkmnLockedInNightmare, // 145 - gText_PkmnLaidCurse, // 146 - gText_PkmnAfflictedByCurse, // 147 - gText_SpikesScattered, // 148 - gText_PkmnHurtBySpikes, // 149 - gText_PkmnIdentified, // 150 - gText_PkmnPerishCountFell, // 151 - gText_PkmnBracedItself, // 152 - gText_PkmnEnduredHit, // 153 - gText_MagnitudeStrength, // 154 - gText_PkmnCutHPMaxedAttack, // 155 - gText_PkmnCopiedStatChanges, // 156 - gText_PkmnGotFree, // 157 - gText_PkmnShedLeechSeed, // 158 - gText_PkmnBlewAwaySpikes, // 159 - gText_PkmnFledFromBattle, // 160 - gText_PkmnForesawAttack, // 161 - gText_PkmnTookAttack, // 162 - gText_PkmnAttack, // 163 - gText_PkmnCenterAttention, // 164 - gText_PkmnChargingPower, // 165 - gText_NaturePowerTurnedInto, // 166 - gText_PkmnStatusNormal, // 167 - gText_PkmnHasNoMovesLeft, // 168 - gText_PkmnSubjectedToTorment, // 169 - gText_PkmnCantUseMoveTorment, // 170 - gText_PkmnTighteningFocus, // 171 - gText_PkmnFellForTaunt, // 172 - gText_PkmnCantUseMoveTaunt, // 173 - gText_PkmnReadyToHelp, // 174 - gText_PkmnSwitchedItems, // 175 - gText_PkmnCopiedFoe, // 176 - gText_PkmnMadeWish, // 177 - gText_PkmnWishCameTrue, // 178 - gText_PkmnPlantedRoots, // 179 - gText_PkmnAbsorbedNutrients, // 180 - gText_PkmnAnchoredItself, // 181 - gText_PkmnWasMadeDrowsy, // 182 - gText_PkmnKnockedOff, // 183 - gText_PkmnSwappedAbilities, // 184 - gText_PkmnSealedOpponentMove, // 185 - gText_PkmnCantUseMoveSealed, // 186 - gText_PkmnWantsGrudge, // 187 - gText_PkmnLostPPGrudge, // 188 - gText_PkmnShroudedItself, // 189 - gText_PkmnMoveBounced, // 190 - gText_PkmnWaitsForTarget, // 191 - gText_PkmnSnatchedMove, // 192 - gText_PkmnMadeItRain, // 193 - gText_PkmnRaisedSpeed, // 194 - gText_PkmnProtectedBy, // 195 - gText_PkmnPreventsUsage, // 196 - gText_PkmnRestoredHPUsing, // 197 - gText_PkmnChangedTypeWith, // 198 - gText_PkmnPreventsParalysisWith, // 199 - gText_PkmnPreventsRomanceWith, // 200 - gText_PkmnPreventsPoisoningWith, // 201 - gText_PkmnPreventsConfusionWith, // 202 - gText_PkmnRaisedFirePowerWith, // 203 - gText_PkmnAnchorsItselfWith, // 204 - gText_PkmnCutsAttackWith, // 205 - gText_PkmnPreventsStatLossWith, // 206 - gText_PkmnHurtsWith, // 207 - gText_PkmnTraced, // 208 - gText_StatSharply, // 209 - gText_StatRose, // 210 - gText_StatHarshly, // 211 - gText_StatFell, // 212 - gText_PkmnsStatChanged, // 213 - gText_PkmnsStatChanged2, // 214 - gText_PkmnsStatChanged3, // 215 - gText_PkmnsStatChanged4, // 216 - gText_CriticalHit, // 217 - gText_OneHitKO, // 218 - gText_123Poof, // 219 - gText_AndEllipsis, // 220 - gText_NotVeryEffective, // 221 - gText_SuperEffective, // 222 - gText_GotAwaySafely, // 223 - gText_WildPkmnFled, // 224 - gText_NoRunningFromTrainers, // 225 - gText_CantEscape, // 226 - gText_DontLeaveBirch, // 227 - gText_ButNothingHappened, // 228 - gText_ButItFailed, // 229 - gText_ItHurtConfusion, // 230 - gText_MirrorMoveFailed, // 231 - gText_StartedToRain, // 232 - gText_DownpourStarted, // 233 - gText_RainContinues, // 234 - gText_DownpourContinues, // 235 - gText_RainStopped, // 236 - gText_SandstormBrewed, // 237 - gText_SandstormRages, // 238 - gText_SandstormSubsided, // 239 - gText_SunlightGotBright, // 240 - gText_SunlightStrong, // 241 - gText_SunlightFaded, // 242 - gText_StartedHail, // 243 - gText_HailContinues, // 244 - gText_HailStopped, // 245 - gText_FailedToSpitUp, // 246 - gText_FailedToSwallow, // 247 - gText_WindBecameHeatWave, // 248 - gText_StatChangesGone, // 249 - gText_CoinsScattered, // 250 - gText_TooWeakForSubstitute, // 251 - gText_SharedPain, // 252 - gText_BellChimed, // 253 - gText_FaintInThree, // 254 - gText_NoPPLeft, // 255 - gText_ButNoPPLeft, // 256 - gText_PlayerUsedItem, // 257 - gText_WallyUsedItem, // 258 - gText_TrainerBlockedBall, // 259 - gText_DontBeAThief, // 260 - gText_ItDodgedBall, // 261 - gText_YouMissedPkmn, // 262 - gText_PkmnBrokeFree, // 263 - gText_ItAppearedCaught, // 264 - gText_AarghAlmostHadIt, // 265 - gText_ShootSoClose, // 266 - gText_GotchaPkmnCaught, // 267 - gText_GotchaPkmnCaught2, // 268 - gText_GiveNicknameCaptured, // 269 - gText_PkmnSentToPC, // 270 - gText_PkmnDataAddedToDex, // 271 - gText_ItIsRaining, // 272 - gText_SandstormIsRaging, // 273 - gText_CantEscape2, // 274 - gText_PkmnIgnoresAsleep, // 275 - gText_PkmnIgnoredOrders, // 276 - gText_PkmnBeganToNap, // 277 - gText_PkmnLoafing, // 278 - gText_PkmnWontObey, // 279 - gText_PkmnTurnedAway, // 280 - gText_PkmnPretendNotNotice, // 281 - gText_EnemyAboutToSwitchPkmn, // 282 - gText_CreptCloser, // 283 - gText_CantGetCloser, // 284 - gText_PkmnWatchingCarefully, // 285 - gText_PkmnCuriousAboutX, // 286 - gText_PkmnEnthralledByX, // 287 - gText_PkmnIgnoredX, // 288 - gText_ThrewPokeblockAtPkmn, // 289 - gText_OutOfSafariBalls, // 290 - gText_PkmnsItemCuredParalysis, // 291 - gText_PkmnsItemCuredPoison, // 292 - gText_PkmnsItemHealedBurn, // 293 - gText_PkmnsItemDefrostedIt, // 294 - gText_PkmnsItemWokeIt, // 295 - gText_PkmnsItemSnappedOut, // 296 - gText_PkmnsItemCuredProblem, // 297 - gText_PkmnsItemRestoredHealth, // 298 - gText_PkmnsItemRestoredPP, // 299 - gText_PkmnsItemRestoredStatus, // 300 - gText_PkmnsItemRestoredHPALittle, // 301 - gText_ItemAllowsOnlyYMove, // 302 - gText_PkmnHungOnWithX, // 303 - gText_EmptyString3, // 304 - gText_PkmnsXPreventsBurns, // 305 - gText_PkmnsXBlocksY, // 306 - gText_PkmnsXRestoredHPALittle2, // 307 - gText_PkmnsXWhippedUpSandstorm, // 308 - gText_PkmnsXPreventsYLoss, // 309 - gText_PkmnsXInfatuatedY, // 310 - gText_PkmnsXMadeYIneffective, // 311 - gText_PkmnsXCuredYProblem, // 312 - gText_ItSuckedLiquidOoze, // 313 - gText_PkmnTransformed, // 314 - gText_ElectricityWeakened, // 315 - gText_FireWeakened, // 316 - gText_PkmnHidUnderwater, // 317 - gText_PkmnSprangUp, // 318 - gText_HMMovesCantBeForgotten, // 319 - gText_XFoundOneY, // 320 - gText_PlayerDefeatedLinkTrainerTrainer1, // 321 - gText_SoothingAroma, // 322 - gText_ItemsCantBeUsedNow, // 323 - gText_ForXCommaYZ, // 324 - gText_UsingXTheYOfZN, // 325 - gText_PkmnUsedXToGetPumped, // 326 - gText_PkmnsXMadeYUseless, // 327 - gText_PkmnTrappedBySandTomb, // 328 - gText_EmptyString4, // 329 - gText_ABoosted, // 330 - gText_PkmnsXIntensifiedSun, // 331 - gText_PkmnMakesGroundMiss, // 332 - gText_YouThrowABallNowRight, // 333 - gText_PkmnsXTookAttack, // 334 - gText_PkmnChoseXAsDestiny, // 335 - gText_PkmnLostFocus, // 336 - gText_UseNextPkmn, // 337 - gText_PkmnFledUsingIts, // 338 - gText_PkmnFledUsing, // 339 - gText_PkmnWasDraggedOut, // 340 - gText_PreventedFromWorking, // 341 - gText_PkmnsItemNormalizedStatus, // 342 - gText_Trainer1UsedItem, // 343 - gText_BoxIsFull, // 344 - gText_PkmnAvoidedAttack, // 345 - gText_PkmnsXMadeItIneffective, // 346 - gText_PkmnsXPreventsFlinching, // 347 - gText_PkmnAlreadyHasBurn, // 348 - gText_StatsWontDecrease2, // 349 - gText_PkmnsXBlocksY2, // 350 - gText_PkmnsXWoreOff, // 351 - gText_PkmnRaisedDefALittle, // 352 - gText_PkmnRaisedSpDefALittle, // 353 - gText_TheWallShattered, // 354 - gText_PkmnsXPreventsYsZ, // 355 - gText_PkmnsXCuredItsYProblem, // 356 - gText_AttackerCantEscape, // 357 - gText_PkmnObtainedX, // 358 - gText_PkmnObtainedX2, // 359 - gText_PkmnObtainedXYObtainedZ, // 360 - gText_ButNoEffect, // 361 - gText_PkmnsXHadNoEffectOnY, // 362 - gText_TwoInGameTrainersDefeated, // 363 - gText_Trainer2LoseText, // 364 - gText_PkmnIncapableOfPower, // 365 - gText_GlintAppearsInEye, // 366 - gText_PkmnGettingIntoPosition, // 367 - gText_PkmnBeganGrowlingDeeply, // 368 - gText_PkmnEagerForMore, // 369 - gText_DefeatedOpponentByReferee, // 370 - gText_LostToOpponentByReferee, // 371 - gText_TiedOpponentByReferee, // 372 - gText_QuestionForfeitMatch, // 373 - gText_ForfeitedMatch, // 374 - gText_PkmnTransferredSomeonesPC, // 375 - gText_PkmnTransferredLanettesPC, // 376 - gText_PkmnBoxSomeonesPCFull, // 377 - gText_PkmnBoxLanettesPCFull, // 378 - gText_Trainer1WinText, // 379 - gText_Trainer2WinText, // 380 + sText_Trainer1LoseText, // 12 + sText_PkmnGainedEXP, // 13 + sText_PkmnGrewToLv, // 14 + sText_PkmnLearnedMove, // 15 + sText_TryToLearnMove1, // 16 + sText_TryToLearnMove2, // 17 + sText_TryToLearnMove3, // 18 + sText_PkmnForgotMove, // 19 + sText_StopLearningMove, // 20 + sText_DidNotLearnMove, // 21 + sText_PkmnLearnedMove2, // 22 + sText_AttackMissed, // 23 + sText_PkmnProtectedItself, // 24 + sText_StatsWontIncrease2, // 25 + sText_AvoidedDamage, // 26 + sText_ItDoesntAffect, // 27 + sText_AttackerFainted, // 28 + sText_TargetFainted, // 29 + sText_PlayerGotMoney, // 30 + sText_PlayerWhiteout, // 31 + sText_PlayerWhiteout2, // 32 + sText_PreventsEscape, // 33 + sText_HitXTimes, // 34 + sText_PkmnFellAsleep, // 35 + sText_PkmnMadeSleep, // 36 + sText_PkmnAlreadyAsleep, // 37 + sText_PkmnAlreadyAsleep2, // 38 + sText_PkmnWasntAffected, // 39 + sText_PkmnWasPoisoned, // 40 + sText_PkmnPoisonedBy, // 41 + sText_PkmnHurtByPoison, // 42 + sText_PkmnAlreadyPoisoned, // 43 + sText_PkmnBadlyPoisoned, // 44 + sText_PkmnEnergyDrained, // 45 + sText_PkmnWasBurned, // 46 + sText_PkmnBurnedBy, // 47 + sText_PkmnHurtByBurn, // 48 + sText_PkmnWasFrozen, // 49 + sText_PkmnFrozenBy, // 50 + sText_PkmnIsFrozen, // 51 + sText_PkmnWasDefrosted, // 52 + sText_PkmnWasDefrosted2, // 53 + sText_PkmnWasDefrostedBy, // 54 + sText_PkmnWasParalyzed, // 55 + sText_PkmnWasParalyzedBy, // 56 + sText_PkmnIsParalyzed, // 57 + sText_PkmnIsAlreadyParalyzed, // 58 + sText_PkmnHealedParalysis, // 59 + sText_PkmnDreamEaten, // 60 + sText_StatsWontIncrease, // 61 + sText_StatsWontDecrease, // 62 + sText_TeamStoppedWorking, // 63 + sText_FoeStoppedWorking, // 64 + sText_PkmnIsConfused, // 65 + sText_PkmnHealedConfusion, // 66 + sText_PkmnWasConfused, // 67 + sText_PkmnAlreadyConfused, // 68 + sText_PkmnFellInLove, // 69 + sText_PkmnInLove, // 70 + sText_PkmnImmobilizedByLove, // 71 + sText_PkmnBlownAway, // 72 + sText_PkmnChangedType, // 73 + sText_PkmnFlinched, // 74 + sText_PkmnRegainedHealth, // 75 + sText_PkmnHPFull, // 76 + sText_PkmnRaisedSpDef, // 77 + sText_PkmnRaisedDef, // 78 + sText_PkmnCoveredByVeil, // 79 + sText_PkmnUsedSafeguard, // 80 + sText_PkmnSafeguardExpired, // 81 + sText_PkmnWentToSleep, // 82 + sText_PkmnSleptHealthy, // 83 + sText_PkmnWhippedWhirlwind, // 84 + sText_PkmnTookSunlight, // 85 + sText_PkmnLoweredHead, // 86 + sText_PkmnIsGlowing, // 87 + sText_PkmnFlewHigh, // 88 + sText_PkmnDugHole, // 89 + sText_PkmnSqueezedByBind, // 90 + sText_PkmnTrappedInVortex, // 91 + sText_PkmnWrappedBy, // 92 + sText_PkmnClamped, // 93 + sText_PkmnHurtBy, // 94 + sText_PkmnFreedFrom, // 95 + sText_PkmnCrashed, // 96 + gText_PkmnShroudedInMist, // 97 + sText_PkmnProtectedByMist, // 98 + gText_PkmnGettingPumped, // 99 + sText_PkmnHitWithRecoil, // 100 + sText_PkmnProtectedItself2, // 101 + sText_PkmnBuffetedBySandstorm, // 102 + sText_PkmnPeltedByHail, // 103 + sText_PkmnSeeded, // 104 + sText_PkmnEvadedAttack, // 105 + sText_PkmnSappedByLeechSeed, // 106 + sText_PkmnFastAsleep, // 107 + sText_PkmnWokeUp, // 108 + sText_PkmnUproarKeptAwake, // 109 + sText_PkmnWokeUpInUproar, // 110 + sText_PkmnCausedUproar, // 111 + sText_PkmnMakingUproar, // 112 + sText_PkmnCalmedDown, // 113 + sText_PkmnCantSleepInUproar, // 114 + sText_PkmnStockpiled, // 115 + sText_PkmnCantStockpile, // 116 + sText_PkmnCantSleepInUproar2, // 117 + sText_UproarKeptPkmnAwake, // 118 + sText_PkmnStayedAwakeUsing, // 119 + sText_PkmnStoringEnergy, // 120 + sText_PkmnUnleashedEnergy, // 121 + sText_PkmnFatigueConfusion, // 122 + sText_PkmnPickedUpItem, // 123 + sText_PkmnUnaffected, // 124 + sText_PkmnTransformedInto, // 125 + sText_PkmnMadeSubstitute, // 126 + sText_PkmnHasSubstitute, // 127 + sText_SubstituteDamaged, // 128 + sText_PkmnSubstituteFaded, // 129 + sText_PkmnMustRecharge, // 130 + sText_PkmnRageBuilding, // 131 + sText_PkmnMoveWasDisabled, // 132 + sText_PkmnMoveIsDisabled, // 133 + sText_PkmnMoveDisabledNoMore, // 134 + sText_PkmnGotEncore, // 135 + sText_PkmnEncoreEnded, // 136 + sText_PkmnTookAim, // 137 + sText_PkmnSketchedMove, // 138 + sText_PkmnTryingToTakeFoe, // 139 + sText_PkmnTookFoe, // 140 + sText_PkmnReducedPP, // 141 + sText_PkmnStoleItem, // 142 + sText_TargetCantEscapeNow, // 143 + sText_PkmnFellIntoNightmare, // 144 + sText_PkmnLockedInNightmare, // 145 + sText_PkmnLaidCurse, // 146 + sText_PkmnAfflictedByCurse, // 147 + sText_SpikesScattered, // 148 + sText_PkmnHurtBySpikes, // 149 + sText_PkmnIdentified, // 150 + sText_PkmnPerishCountFell, // 151 + sText_PkmnBracedItself, // 152 + sText_PkmnEnduredHit, // 153 + sText_MagnitudeStrength, // 154 + sText_PkmnCutHPMaxedAttack, // 155 + sText_PkmnCopiedStatChanges, // 156 + sText_PkmnGotFree, // 157 + sText_PkmnShedLeechSeed, // 158 + sText_PkmnBlewAwaySpikes, // 159 + sText_PkmnFledFromBattle, // 160 + sText_PkmnForesawAttack, // 161 + sText_PkmnTookAttack, // 162 + sText_PkmnAttack, // 163 + sText_PkmnCenterAttention, // 164 + sText_PkmnChargingPower, // 165 + sText_NaturePowerTurnedInto, // 166 + sText_PkmnStatusNormal, // 167 + sText_PkmnHasNoMovesLeft, // 168 + sText_PkmnSubjectedToTorment, // 169 + sText_PkmnCantUseMoveTorment, // 170 + sText_PkmnTighteningFocus, // 171 + sText_PkmnFellForTaunt, // 172 + sText_PkmnCantUseMoveTaunt, // 173 + sText_PkmnReadyToHelp, // 174 + sText_PkmnSwitchedItems, // 175 + sText_PkmnCopiedFoe, // 176 + sText_PkmnMadeWish, // 177 + sText_PkmnWishCameTrue, // 178 + sText_PkmnPlantedRoots, // 179 + sText_PkmnAbsorbedNutrients, // 180 + sText_PkmnAnchoredItself, // 181 + sText_PkmnWasMadeDrowsy, // 182 + sText_PkmnKnockedOff, // 183 + sText_PkmnSwappedAbilities, // 184 + sText_PkmnSealedOpponentMove, // 185 + sText_PkmnCantUseMoveSealed, // 186 + sText_PkmnWantsGrudge, // 187 + sText_PkmnLostPPGrudge, // 188 + sText_PkmnShroudedItself, // 189 + sText_PkmnMoveBounced, // 190 + sText_PkmnWaitsForTarget, // 191 + sText_PkmnSnatchedMove, // 192 + sText_PkmnMadeItRain, // 193 + sText_PkmnRaisedSpeed, // 194 + sText_PkmnProtectedBy, // 195 + sText_PkmnPreventsUsage, // 196 + sText_PkmnRestoredHPUsing, // 197 + sText_PkmnChangedTypeWith, // 198 + sText_PkmnPreventsParalysisWith, // 199 + sText_PkmnPreventsRomanceWith, // 200 + sText_PkmnPreventsPoisoningWith, // 201 + sText_PkmnPreventsConfusionWith, // 202 + sText_PkmnRaisedFirePowerWith, // 203 + sText_PkmnAnchorsItselfWith, // 204 + sText_PkmnCutsAttackWith, // 205 + sText_PkmnPreventsStatLossWith, // 206 + sText_PkmnHurtsWith, // 207 + sText_PkmnTraced, // 208 + sText_StatSharply, // 209 + gText_StatRose, // 210 + sText_StatHarshly, // 211 + sText_StatFell, // 212 + sText_PkmnsStatChanged, // 213 + gText_PkmnsStatChanged2, // 214 + sText_PkmnsStatChanged3, // 215 + sText_PkmnsStatChanged4, // 216 + sText_CriticalHit, // 217 + sText_OneHitKO, // 218 + sText_123Poof, // 219 + sText_AndEllipsis, // 220 + sText_NotVeryEffective, // 221 + sText_SuperEffective, // 222 + sText_GotAwaySafely, // 223 + sText_WildPkmnFled, // 224 + sText_NoRunningFromTrainers, // 225 + sText_CantEscape, // 226 + sText_DontLeaveBirch, // 227 + sText_ButNothingHappened, // 228 + sText_ButItFailed, // 229 + sText_ItHurtConfusion, // 230 + sText_MirrorMoveFailed, // 231 + sText_StartedToRain, // 232 + sText_DownpourStarted, // 233 + sText_RainContinues, // 234 + sText_DownpourContinues, // 235 + sText_RainStopped, // 236 + sText_SandstormBrewed, // 237 + sText_SandstormRages, // 238 + sText_SandstormSubsided, // 239 + sText_SunlightGotBright, // 240 + sText_SunlightStrong, // 241 + sText_SunlightFaded, // 242 + sText_StartedHail, // 243 + sText_HailContinues, // 244 + sText_HailStopped, // 245 + sText_FailedToSpitUp, // 246 + sText_FailedToSwallow, // 247 + sText_WindBecameHeatWave, // 248 + sText_StatChangesGone, // 249 + sText_CoinsScattered, // 250 + sText_TooWeakForSubstitute, // 251 + sText_SharedPain, // 252 + sText_BellChimed, // 253 + sText_FaintInThree, // 254 + sText_NoPPLeft, // 255 + sText_ButNoPPLeft, // 256 + sText_PlayerUsedItem, // 257 + sText_WallyUsedItem, // 258 + sText_TrainerBlockedBall, // 259 + sText_DontBeAThief, // 260 + sText_ItDodgedBall, // 261 + sText_YouMissedPkmn, // 262 + sText_PkmnBrokeFree, // 263 + sText_ItAppearedCaught, // 264 + sText_AarghAlmostHadIt, // 265 + sText_ShootSoClose, // 266 + sText_GotchaPkmnCaught, // 267 + sText_GotchaPkmnCaught2, // 268 + sText_GiveNicknameCaptured, // 269 + sText_PkmnSentToPC, // 270 + sText_PkmnDataAddedToDex, // 271 + sText_ItIsRaining, // 272 + sText_SandstormIsRaging, // 273 + sText_CantEscape2, // 274 + sText_PkmnIgnoresAsleep, // 275 + sText_PkmnIgnoredOrders, // 276 + sText_PkmnBeganToNap, // 277 + sText_PkmnLoafing, // 278 + sText_PkmnWontObey, // 279 + sText_PkmnTurnedAway, // 280 + sText_PkmnPretendNotNotice, // 281 + sText_EnemyAboutToSwitchPkmn, // 282 + sText_CreptCloser, // 283 + sText_CantGetCloser, // 284 + sText_PkmnWatchingCarefully, // 285 + sText_PkmnCuriousAboutX, // 286 + sText_PkmnEnthralledByX, // 287 + sText_PkmnIgnoredX, // 288 + sText_ThrewPokeblockAtPkmn, // 289 + sText_OutOfSafariBalls, // 290 + sText_PkmnsItemCuredParalysis, // 291 + sText_PkmnsItemCuredPoison, // 292 + sText_PkmnsItemHealedBurn, // 293 + sText_PkmnsItemDefrostedIt, // 294 + sText_PkmnsItemWokeIt, // 295 + sText_PkmnsItemSnappedOut, // 296 + sText_PkmnsItemCuredProblem, // 297 + sText_PkmnsItemRestoredHealth, // 298 + sText_PkmnsItemRestoredPP, // 299 + sText_PkmnsItemRestoredStatus, // 300 + sText_PkmnsItemRestoredHPALittle, // 301 + sText_ItemAllowsOnlyYMove, // 302 + sText_PkmnHungOnWithX, // 303 + gText_EmptyString3, // 304 + sText_PkmnsXPreventsBurns, // 305 + sText_PkmnsXBlocksY, // 306 + sText_PkmnsXRestoredHPALittle2, // 307 + sText_PkmnsXWhippedUpSandstorm, // 308 + sText_PkmnsXPreventsYLoss, // 309 + sText_PkmnsXInfatuatedY, // 310 + sText_PkmnsXMadeYIneffective, // 311 + sText_PkmnsXCuredYProblem, // 312 + sText_ItSuckedLiquidOoze, // 313 + sText_PkmnTransformed, // 314 + sText_ElectricityWeakened, // 315 + sText_FireWeakened, // 316 + sText_PkmnHidUnderwater, // 317 + sText_PkmnSprangUp, // 318 + sText_HMMovesCantBeForgotten, // 319 + sText_XFoundOneY, // 320 + sText_PlayerDefeatedLinkTrainerTrainer1, // 321 + sText_SoothingAroma, // 322 + sText_ItemsCantBeUsedNow, // 323 + sText_ForXCommaYZ, // 324 + sText_UsingXTheYOfZN, // 325 + sText_PkmnUsedXToGetPumped, // 326 + sText_PkmnsXMadeYUseless, // 327 + sText_PkmnTrappedBySandTomb, // 328 + sText_EmptyString4, // 329 + sText_ABoosted, // 330 + sText_PkmnsXIntensifiedSun, // 331 + sText_PkmnMakesGroundMiss, // 332 + sText_YouThrowABallNowRight, // 333 + sText_PkmnsXTookAttack, // 334 + sText_PkmnChoseXAsDestiny, // 335 + sText_PkmnLostFocus, // 336 + sText_UseNextPkmn, // 337 + sText_PkmnFledUsingIts, // 338 + sText_PkmnFledUsing, // 339 + sText_PkmnWasDraggedOut, // 340 + sText_PreventedFromWorking, // 341 + sText_PkmnsItemNormalizedStatus, // 342 + sText_Trainer1UsedItem, // 343 + sText_BoxIsFull, // 344 + sText_PkmnAvoidedAttack, // 345 + sText_PkmnsXMadeItIneffective, // 346 + sText_PkmnsXPreventsFlinching, // 347 + sText_PkmnAlreadyHasBurn, // 348 + sText_StatsWontDecrease2, // 349 + sText_PkmnsXBlocksY2, // 350 + sText_PkmnsXWoreOff, // 351 + sText_PkmnRaisedDefALittle, // 352 + sText_PkmnRaisedSpDefALittle, // 353 + sText_TheWallShattered, // 354 + sText_PkmnsXPreventsYsZ, // 355 + sText_PkmnsXCuredItsYProblem, // 356 + sText_AttackerCantEscape, // 357 + sText_PkmnObtainedX, // 358 + sText_PkmnObtainedX2, // 359 + sText_PkmnObtainedXYObtainedZ, // 360 + sText_ButNoEffect, // 361 + sText_PkmnsXHadNoEffectOnY, // 362 + sText_TwoInGameTrainersDefeated, // 363 + sText_Trainer2LoseText, // 364 + sText_PkmnIncapableOfPower, // 365 + sText_GlintAppearsInEye, // 366 + sText_PkmnGettingIntoPosition, // 367 + sText_PkmnBeganGrowlingDeeply, // 368 + sText_PkmnEagerForMore, // 369 + sText_DefeatedOpponentByReferee, // 370 + sText_LostToOpponentByReferee, // 371 + sText_TiedOpponentByReferee, // 372 + sText_QuestionForfeitMatch, // 373 + sText_ForfeitedMatch, // 374 + gText_PkmnTransferredSomeonesPC, // 375 + gText_PkmnTransferredLanettesPC, // 376 + gText_PkmnBoxSomeonesPCFull, // 377 + gText_PkmnBoxLanettesPCFull, // 378 + sText_Trainer1WinText, // 379 + sText_Trainer2WinText, // 380 }; const u16 gMissStringIds[] = @@ -1174,16 +1174,16 @@ const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}"); const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}"); const u8 gText_BattleSwitchWhich5[] = _("-"); -const u8 gText_HP[] = _("HP"); -const u8 gText_Attack[] = _("ATTACK"); -const u8 gText_Defense[] = _("DEFENSE"); -const u8 gText_SpAtk[] = _("SP. ATK"); -const u8 gText_SpDef[] = _("SP. DEF"); +static const u8 sText_HP[] = _("HP"); +static const u8 sText_Attack[] = _("ATTACK"); +static const u8 sText_Defense[] = _("DEFENSE"); +static const u8 sText_SpAtk[] = _("SP. ATK"); +static const u8 sText_SpDef[] = _("SP. DEF"); const u8 * const gStatNamesTable2[] = { - gText_HP, gText_SpAtk, gText_Attack, - gText_SpDef, gText_Defense, gText_Speed + sText_HP, sText_SpAtk, sText_Attack, + sText_SpDef, sText_Defense, sText_Speed }; const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GREY}SAFARI BALLS"); @@ -1200,10 +1200,10 @@ const u8 gText_BattleWallyName[] = _("WALLY"); const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); -const u8 gText_SpaceIs[] = _(" is"); -const u8 gText_ApostropheS[] = _("’s"); +static const u8 sText_SpaceIs[] = _(" is"); +static const u8 sText_ApostropheS[] = _("’s"); -const u8 gText_UnknownMoveTypes[][17] = +static const u8 sATypeMove_Table[][17] = { _("a NORMAL move"), _("a FIGHTING move"), @@ -1226,17 +1226,17 @@ const u8 gText_UnknownMoveTypes[][17] = }; const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); -const u8 gText_Round1[] = _("Round 1"); -const u8 gText_Round2[] = _("Round 2"); -const u8 gText_Semifinal[] = _("Semifinal"); -const u8 gText_Final[] = _("Final"); +static const u8 sText_Round1[] = _("Round 1"); +static const u8 sText_Round2[] = _("Round 2"); +static const u8 sText_Semifinal[] = _("Semifinal"); +static const u8 sText_Final[] = _("Final"); const u8 * const gRoundsStringTable[] = { - gText_Round1, - gText_Round2, - gText_Semifinal, - gText_Final + sText_Round1, + sText_Round2, + sText_Semifinal, + sText_Final }; const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); @@ -1251,17 +1251,17 @@ const u8 gText_Mind[] = _("Mind"); const u8 gText_Skill[] = _("Skill"); const u8 gText_Body[] = _("Body"); const u8 gText_Judgement[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}"); -const u8 gText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); -const u8 gText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); -const u8 gText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p"); -const u8 gText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); -const u8 gText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p"); -const u8 gText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); -const u8 gText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); -const u8 gText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!"); -const u8 gText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!"); -const u8 gText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); -const u8 gText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); +static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); +static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p"); +static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); +static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p"); +static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); +static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); +static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!"); +static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!"); +static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); +static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); const u16 gStringIds_85CCF0A[] = { @@ -1269,43 +1269,43 @@ const u16 gStringIds_85CCF0A[] = STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE }; -const u8 gText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!"); -const u8 gText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!"); -const u8 gText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p"); -const u8 gText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p"); -const u8 gText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p"); -const u8 gText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p"); -const u8 gText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p"); -const u8 gText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p"); -const u8 gText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); -const u8 gText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); -const u8 gText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); -const u8 gText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); +static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!"); +static const u8 sText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!"); +static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p"); +static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p"); +static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p"); +static const u8 sText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p"); +static const u8 sText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p"); +static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); +static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); +static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!"); +static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); const u8 * const gRefereeStringsTable[] = { - gText_RefIfNothingIsDecided, - gText_RefThatsIt, - gText_RefJudgeMind, - gText_RefJudgeSkill, - gText_RefJudgeBody, - gText_RefJudgement1, - gText_RefJudgement2, - gText_RefJudgement3, - gText_RefCommenceBattle, + sText_RefIfNothingIsDecided, + sText_RefThatsIt, + sText_RefJudgeMind, + sText_RefJudgeSkill, + sText_RefJudgeBody, + sText_RefJudgement1, + sText_RefJudgement2, + sText_RefJudgement3, + sText_RefCommenceBattle, }; -const u8 gText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); -const u8 gText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!"); -const u8 gText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); -const u8 gText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); -const u8 gText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); -const u8 gText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -const u8 gText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); +static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!"); +static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); +static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); +static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); +static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?"); const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}’s battle result was recorded\non the FRONTIER PASS."); -const u8 gText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}"); -const u8 gText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}"); +static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}"); +static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}"); // This is four lists of moves which use a different attack string in Japanese // to the default. See the documentation for sub_814F950 for more detail. @@ -1442,45 +1442,45 @@ void BufferStringBattle(u16 stringID) { if (gBattleTypeFlags & BATTLE_TYPE_x800000) { - stringPtr = gText_TwoTrainersWantToBattle; + stringPtr = sText_TwoTrainersWantToBattle; } else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - stringPtr = gText_TwoLinkTrainersWantToBattlePause; + stringPtr = sText_TwoLinkTrainersWantToBattlePause; else - stringPtr = gText_TwoLinkTrainersWantToBattle; + stringPtr = sText_TwoLinkTrainersWantToBattle; } else { if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) - stringPtr = gText_Trainer1WantsToBattle; + stringPtr = sText_Trainer1WantsToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - stringPtr = gText_LinkTrainerWantsToBattlePause; + stringPtr = sText_LinkTrainerWantsToBattlePause; else - stringPtr = gText_LinkTrainerWantsToBattle; + stringPtr = sText_LinkTrainerWantsToBattle; } } else { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - stringPtr = gText_TwoTrainersWantToBattle; + stringPtr = sText_TwoTrainersWantToBattle; else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - stringPtr = gText_TwoTrainersWantToBattle; + stringPtr = sText_TwoTrainersWantToBattle; else - stringPtr = gText_Trainer1WantsToBattle; + stringPtr = sText_Trainer1WantsToBattle; } } else { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) - stringPtr = gText_WildPkmnAppeared2; + stringPtr = sText_WildPkmnAppeared2; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles - stringPtr = gText_TwoWildPkmnAppeared; + stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - stringPtr = gText_WildPkmnAppearedPause; + stringPtr = sText_WildPkmnAppearedPause; else - stringPtr = gText_WildPkmnAppeared; + stringPtr = sText_WildPkmnAppeared; } break; case STRINGID_INTROSENDOUT: // poke first send-out @@ -1489,17 +1489,17 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - stringPtr = gText_InGamePartnerSentOutZGoN; + stringPtr = sText_InGamePartnerSentOutZGoN; else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - stringPtr = gText_GoTwoPkmn; + stringPtr = sText_GoTwoPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gText_LinkPartnerSentOutPkmnGoPkmn; + stringPtr = sText_LinkPartnerSentOutPkmnGoPkmn; else - stringPtr = gText_GoTwoPkmn; + stringPtr = sText_GoTwoPkmn; } else { - stringPtr = gText_GoPkmn; + stringPtr = sText_GoPkmn; } } else @@ -1507,24 +1507,24 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) - stringPtr = gText_TwoTrainersSentPkmn; + stringPtr = sText_TwoTrainersSentPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_x800000) - stringPtr = gText_TwoTrainersSentPkmn; + stringPtr = sText_TwoTrainersSentPkmn; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gText_TwoLinkTrainersSentOutPkmn; + stringPtr = sText_TwoLinkTrainersSentOutPkmn; else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) - stringPtr = gText_LinkTrainerSentOutTwoPkmn; + stringPtr = sText_LinkTrainerSentOutTwoPkmn; else - stringPtr = gText_Trainer1SentOutTwoPkmn; + stringPtr = sText_Trainer1SentOutTwoPkmn; } else { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) - stringPtr = gText_Trainer1SentOutPkmn; + stringPtr = sText_Trainer1SentOutPkmn; else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) - stringPtr = gText_Trainer1SentOutPkmn; + stringPtr = sText_Trainer1SentOutPkmn; else - stringPtr = gText_LinkTrainerSentOutPkmn; + stringPtr = sText_LinkTrainerSentOutPkmn; } } break; @@ -1532,26 +1532,26 @@ void BufferStringBattle(u16 stringID) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0) - stringPtr = gText_PkmnThatsEnough; + stringPtr = sText_PkmnThatsEnough; else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - stringPtr = gText_PkmnComeBack; + stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) - stringPtr = gText_PkmnOkComeBack; + stringPtr = sText_PkmnOkComeBack; else - stringPtr = gText_PkmnGoodComeBack; + stringPtr = sText_PkmnGoodComeBack; } else { if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_800 || gBattleTypeFlags & BATTLE_TYPE_x2000000) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gText_LinkTrainer2WithdrewPkmn; + stringPtr = sText_LinkTrainer2WithdrewPkmn; else - stringPtr = gText_LinkTrainer1WithdrewPkmn; + stringPtr = sText_LinkTrainer1WithdrewPkmn; } else { - stringPtr = gText_Trainer1WithdrewPkmn; + stringPtr = sText_Trainer1WithdrewPkmn; } } break; @@ -1559,13 +1559,13 @@ void BufferStringBattle(u16 stringID) if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - stringPtr = gText_GoPkmn2; + stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) - stringPtr = gText_DoItPkmn; + stringPtr = sText_DoItPkmn; else if (*(&gBattleStruct->hpScale) == 2) - stringPtr = gText_GoForItPkmn; + stringPtr = sText_GoForItPkmn; else - stringPtr = gText_YourFoesWeakGetEmPkmn; + stringPtr = sText_YourFoesWeakGetEmPkmn; } else { @@ -1574,18 +1574,18 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_x800000) { if (gBattleScripting.battler == 1) - stringPtr = gText_Trainer1SentOutPkmn2; + stringPtr = sText_Trainer1SentOutPkmn2; else - stringPtr = gText_Trainer2SentOutPkmn; + stringPtr = sText_Trainer2SentOutPkmn; } else { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gText_LinkTrainerMultiSentOutPkmn; + stringPtr = sText_LinkTrainerMultiSentOutPkmn; else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) - stringPtr = gText_Trainer1SentOutPkmn2; + stringPtr = sText_Trainer1SentOutPkmn2; else - stringPtr = gText_LinkTrainerSentOutPkmn2; + stringPtr = sText_LinkTrainerSentOutPkmn2; } } else @@ -1593,13 +1593,13 @@ void BufferStringBattle(u16 stringID) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { if (gBattleScripting.battler == 1) - stringPtr = gText_Trainer1SentOutPkmn2; + stringPtr = sText_Trainer1SentOutPkmn2; else - stringPtr = gText_Trainer2SentOutPkmn; + stringPtr = sText_Trainer2SentOutPkmn; } else { - stringPtr = gText_Trainer1SentOutPkmn2; + stringPtr = sText_Trainer1SentOutPkmn2; } } } @@ -1608,12 +1608,12 @@ void BufferStringBattle(u16 stringID) sub_814F8F8(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names? if (gStringInfo->currentMove > LAST_MOVE_INDEX) - StringCopy(gBattleTextBuff2, gText_UnknownMoveTypes[*(&gBattleStruct->stringMoveType)]); + StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]); else StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); sub_814F950(gBattleTextBuff2); - stringPtr = gText_AttackerUsedX; + stringPtr = sText_AttackerUsedX; break; case STRINGID_BATTLEEND: // battle end if (gBattleTextBuff1[0] & B_OUTCOME_LINK_BATTLE_RAN) @@ -1623,11 +1623,11 @@ void BufferStringBattle(u16 stringID) gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON); if (gBattleTextBuff1[0] == B_OUTCOME_LOST || gBattleTextBuff1[0] == B_OUTCOME_DREW) - stringPtr = gText_GotAwaySafely; + stringPtr = sText_GotAwaySafely; else if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - stringPtr = gText_TwoWildFled; + stringPtr = sText_TwoWildFled; else - stringPtr = gText_WildFled; + stringPtr = sText_WildFled; } else { @@ -1640,15 +1640,15 @@ void BufferStringBattle(u16 stringID) { case B_OUTCOME_WON: if (gBattleTypeFlags & BATTLE_TYPE_x800000) - stringPtr = gText_TwoInGameTrainersDefeated; + stringPtr = sText_TwoInGameTrainersDefeated; else - stringPtr = gText_TwoLinkTrainersDefeated; + stringPtr = sText_TwoLinkTrainersDefeated; break; case B_OUTCOME_LOST: - stringPtr = gText_PlayerLostToTwo; + stringPtr = sText_PlayerLostToTwo; break; case B_OUTCOME_DREW: - stringPtr = gText_PlayerBattledToDrawVsTwo; + stringPtr = sText_PlayerBattledToDrawVsTwo; break; } } @@ -1657,13 +1657,13 @@ void BufferStringBattle(u16 stringID) switch (gBattleTextBuff1[0]) { case B_OUTCOME_WON: - stringPtr = gText_PlayerDefeatedLinkTrainerTrainer1; + stringPtr = sText_PlayerDefeatedLinkTrainerTrainer1; break; case B_OUTCOME_LOST: - stringPtr = gText_PlayerLostAgainstTrainer1; + stringPtr = sText_PlayerLostAgainstTrainer1; break; case B_OUTCOME_DREW: - stringPtr = gText_PlayerBattledToDrawTrainer1; + stringPtr = sText_PlayerBattledToDrawTrainer1; break; } } @@ -1672,13 +1672,13 @@ void BufferStringBattle(u16 stringID) switch (gBattleTextBuff1[0]) { case B_OUTCOME_WON: - stringPtr = gText_PlayerDefeatedLinkTrainer; + stringPtr = sText_PlayerDefeatedLinkTrainer; break; case B_OUTCOME_LOST: - stringPtr = gText_PlayerLostAgainstLinkTrainer; + stringPtr = sText_PlayerLostAgainstLinkTrainer; break; case B_OUTCOME_DREW: - stringPtr = gText_PlayerBattledToDrawLinkTrainer; + stringPtr = sText_PlayerBattledToDrawLinkTrainer; break; } } @@ -1705,7 +1705,7 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src) BattleStringExpandPlaceholders(src, gDisplayedStringBattle); } -static const u8* TryGetStatusString(u8* src) +static const u8* TryGetStatusString(u8 *src) { u32 i; u8 status[8]; @@ -1736,13 +1736,13 @@ static const u8* TryGetStatusString(u8* src) return NULL; } -#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \ - if (GetBattlerSide(bank) != B_SIDE_PLAYER) \ +#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \ + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ - toCpy = gText_FoePkmnPrefix; \ + toCpy = sText_FoePkmnPrefix; \ else \ - toCpy = gText_WildPkmnPrefix; \ + toCpy = sText_WildPkmnPrefix; \ while (*toCpy != EOS) \ { \ dst[dstID] = *toCpy; \ @@ -1758,10 +1758,10 @@ static const u8* TryGetStatusString(u8* src) StringGetEnd10(text); \ toCpy = text; -u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? - const u8* toCpy = NULL; + const u8 *toCpy = NULL; u8 text[30]; u8 multiplayerID; s32 i; @@ -1866,7 +1866,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) StringGetEnd10(text); toCpy = text; break; - case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only bank 0/1 + case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1 HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker, gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))]) break; @@ -1885,24 +1885,24 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget]) break; - case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix + case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler]) break; - case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix + case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler]) break; - case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active bank name with prefix + case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler]) break; case B_TXT_CURRENT_MOVE: // current move name if (gStringInfo->currentMove > LAST_MOVE_INDEX) - toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType]; + toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->currentMove]; break; case B_TXT_LAST_MOVE: // originally used move name if (gStringInfo->originallyUsedMove > LAST_MOVE_INDEX) - toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType]; + toCpy = sATypeMove_Table[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->originallyUsedMove]; break; @@ -1917,12 +1917,12 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) || (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE))) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); - StringAppend(text, gText_BerrySuffix); + StringAppend(text, sText_BerrySuffix); toCpy = text; } else { - toCpy = gText_EnigmaBerry; + toCpy = sText_EnigmaBerry; } } else @@ -1930,11 +1930,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); - StringAppend(text, gText_BerrySuffix); + StringAppend(text, sText_BerrySuffix); toCpy = text; } else - toCpy = gText_EnigmaBerry; + toCpy = sText_EnigmaBerry; } } else @@ -1961,7 +1961,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]]; break; - case B_TXT_EFF_ABILITY: // effect bank ability + case B_TXT_EFF_ABILITY: // effect battlerId ability toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]]; break; case B_TXT_TRAINER1_CLASS: // trainer class name @@ -2072,45 +2072,45 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) break; case B_TXT_PC_CREATOR_NAME: // lanette pc if (FlagGet(FLAG_SYS_PC_LANETTE)) - toCpy = gText_Lanettes; + toCpy = sText_Lanettes; else - toCpy = gText_Someones; + toCpy = sText_Someones; break; case B_TXT_ATK_PREFIX2: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix2; + toCpy = sText_AllyPkmnPrefix2; else - toCpy = gText_FoePkmnPrefix3; + toCpy = sText_FoePkmnPrefix3; break; case B_TXT_DEF_PREFIX2: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix2; + toCpy = sText_AllyPkmnPrefix2; else - toCpy = gText_FoePkmnPrefix3; + toCpy = sText_FoePkmnPrefix3; break; case B_TXT_ATK_PREFIX1: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix; + toCpy = sText_AllyPkmnPrefix; else - toCpy = gText_FoePkmnPrefix2; + toCpy = sText_FoePkmnPrefix2; break; case B_TXT_DEF_PREFIX1: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix; + toCpy = sText_AllyPkmnPrefix; else - toCpy = gText_FoePkmnPrefix2; + toCpy = sText_FoePkmnPrefix2; break; case B_TXT_ATK_PREFIX3: if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix3; + toCpy = sText_AllyPkmnPrefix3; else - toCpy = gText_FoePkmnPrefix4; + toCpy = sText_FoePkmnPrefix4; break; case B_TXT_DEF_PREFIX3: if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) - toCpy = gText_AllyPkmnPrefix3; + toCpy = sText_AllyPkmnPrefix3; else - toCpy = gText_FoePkmnPrefix4; + toCpy = sText_FoePkmnPrefix4; break; case B_TXT_TRAINER2_CLASS: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) @@ -2256,9 +2256,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) else { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - StringAppend(dst, gText_FoePkmnPrefix); + StringAppend(dst, sText_FoePkmnPrefix); else - StringAppend(dst, gText_WildPkmnPrefix); + StringAppend(dst, sText_WildPkmnPrefix); GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); } @@ -2299,10 +2299,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler) { StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name); - StringAppend(dst, gText_BerrySuffix); + StringAppend(dst, sText_BerrySuffix); } else - StringAppend(dst, gText_EnigmaBerry); + StringAppend(dst, sText_EnigmaBerry); } else CopyItemName(hword, dst); @@ -2335,29 +2335,29 @@ static void sub_814F8F8(u8* textBuff) if (counter >= 0) { if (counter <= 2) - StringCopy(textBuff, gText_SpaceIs); // is + StringCopy(textBuff, sText_SpaceIs); // is else if (counter <= 4) - StringCopy(textBuff, gText_ApostropheS); // 's + StringCopy(textBuff, sText_ApostropheS); // 's } } // Appends "!" to the text buffer `dst`. In the original Japanese this looked // into the table of moves at sUnknownMoveTable and varied the line accordingly. // -// gText_ExclamationMark was a plain "!", used for any attack not on the list. +// sText_ExclamationMark was a plain "!", used for any attack not on the list. // It resulted in the translation "<NAME>'s <ATTACK>!". // -// gText_ExclamationMark2 was "を つかった!". This resulted in the translation +// sText_ExclamationMark2 was "を つかった!". This resulted in the translation // "<NAME> used <ATTACK>!", which was used for all attacks in English. // -// gText_ExclamationMark3 was "した!". This was used for those moves whose +// sText_ExclamationMark3 was "した!". This was used for those moves whose // names were verbs, such as Recover, and resulted in translations like "<NAME> // recovered itself!". // -// gText_ExclamationMark4 was "を した!" This resulted in a translation of +// sText_ExclamationMark4 was "を した!" This resulted in a translation of // "<NAME> did an <ATTACK>!". // -// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of +// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of // "<NAME>'s <ATTACK> attack!". static void sub_814F950(u8* dst) { @@ -2378,19 +2378,19 @@ static void sub_814F950(u8* dst) switch (counter) { case 0: - StringCopy(dst, gText_ExclamationMark); + StringCopy(dst, sText_ExclamationMark); break; case 1: - StringCopy(dst, gText_ExclamationMark2); + StringCopy(dst, sText_ExclamationMark2); break; case 2: - StringCopy(dst, gText_ExclamationMark3); + StringCopy(dst, sText_ExclamationMark3); break; case 3: - StringCopy(dst, gText_ExclamationMark4); + StringCopy(dst, sText_ExclamationMark4); break; case 4: - StringCopy(dst, gText_ExclamationMark5); + StringCopy(dst, sText_ExclamationMark5); break; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b588970b7..d1a18e38f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -71,24 +71,8 @@ extern u8 Overworld_GetMapTypeOfSaveblockLocation(void); extern u8 sub_813B21C(void); extern u16 get_unknown_box_id(void); -// strings -extern const u8 gText_BattleYesNoChoice[]; - -// read via orr -#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -#define BSScriptRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) -#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr)) - -// read via add -#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24)) -#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) -#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) - #define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) -#define TARGET_TURN_DAMAGED (gSpecialStatuses[gBattlerTarget].physicalDmg != 0 \ - || gSpecialStatuses[gBattlerTarget].specialDmg != 0) - // this file's functions static bool8 IsTwoTurnsMove(u16 move); static void TrySetDestinyBondToHappen(void); @@ -1025,7 +1009,7 @@ static void atk00_attackcanceler(void) RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); } else if (DEFENDER_IS_PROTECTED - && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST)) + && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)))) { CancelMultiTurnMoves(gBattlerAttacker); @@ -1048,7 +1032,7 @@ static void JumpIfMoveFailed(u8 adder, u16 move) { gLastLandedMoves[gBattlerTarget] = 0; gLastHitByType[gBattlerTarget] = 0; - BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -1133,14 +1117,14 @@ static bool8 AccuracyCalcHelper(u16 move) static void atk01_accuracycheck(void) { - u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); if (move == 0xFFFE || move == 0xFFFF) { if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) gBattlescriptCurrInstr += 7; else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else if (!JumpIfMoveAffectedByProtect(0)) gBattlescriptCurrInstr += 7; } @@ -1399,7 +1383,7 @@ static void atk06_typecalc(void) GET_MOVE_TYPE(gCurrentMove, moveType); // check stab - if (gBattleMons[gBattlerAttacker].type1 == moveType || gBattleMons[gBattlerAttacker].type2 == moveType) + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) { gBattleMoveDamage = gBattleMoveDamage * 15; gBattleMoveDamage = gBattleMoveDamage / 10; @@ -1577,7 +1561,7 @@ u8 TypeCalc(u16 move, u8 attacker, u8 defender) moveType = gBattleMoves[move].type; // check stab - if (gBattleMons[attacker].type1 == moveType || gBattleMons[attacker].type2 == moveType) + if (IS_BATTLER_OF_TYPE(attacker, moveType)) { gBattleMoveDamage = gBattleMoveDamage * 15; gBattleMoveDamage = gBattleMoveDamage / 10; @@ -2158,7 +2142,7 @@ static void atk10_printstring(void) { if (gBattleControllerExecFlags == 0) { - u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 var = T2_READ_16(gBattlescriptCurrInstr + 1); PrepareStringBattle(var, gBattlerAttacker); gBattlescriptCurrInstr += 3; gBattleCommunication[MSG_DISPLAY] = 1; @@ -2169,7 +2153,7 @@ static void atk11_printselectionstring(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPrintSelectionString(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -2186,7 +2170,7 @@ static void atk12_waitmessage(void) } else { - u16 toWait = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1); if (++gPauseCounterBattle >= toWait) { gPauseCounterBattle = 0; @@ -2201,7 +2185,7 @@ static void atk13_printfromtable(void) { if (gBattleControllerExecFlags == 0) { - const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr += gBattleCommunication[MULTISTRING_CHOOSER]; PrepareStringBattle(*ptr, gBattlerAttacker); @@ -2215,7 +2199,7 @@ static void atk14_printselectionstringfromtable(void) { if (gBattleControllerExecFlags == 0) { - const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1); ptr += gBattleCommunication[MULTISTRING_CHOOSER]; gActiveBattler = gBattlerAttacker; @@ -2335,8 +2319,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } RESET_RETURN } - if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON - || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL) + if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { @@ -2346,13 +2329,9 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleCommunication[MULTISTRING_CHOOSER] = 2; RESET_RETURN } - if (gBattleMons[gEffectBattler].type1 == TYPE_POISON) - break; - if (gBattleMons[gEffectBattler].type2 == TYPE_POISON) - break; - if (gBattleMons[gEffectBattler].type1 == TYPE_STEEL) + if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON)) break; - if (gBattleMons[gEffectBattler].type2 == TYPE_STEEL) + if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) break; if (gBattleMons[gEffectBattler].status1) break; @@ -2381,8 +2360,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } RESET_RETURN } - if ((gBattleMons[gEffectBattler].type1 == TYPE_FIRE - || gBattleMons[gEffectBattler].type2 == TYPE_FIRE) + if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE) && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { @@ -2392,9 +2370,7 @@ void SetMoveEffect(bool8 primary, u8 certain) gBattleCommunication[MULTISTRING_CHOOSER] = 2; RESET_RETURN } - if (gBattleMons[gEffectBattler].type1 == TYPE_FIRE) - break; - if (gBattleMons[gEffectBattler].type2 == TYPE_FIRE) + if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE)) break; if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL) break; @@ -2406,9 +2382,7 @@ void SetMoveEffect(bool8 primary, u8 certain) case STATUS1_FREEZE: if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY) noSunCanFreeze = FALSE; - if (gBattleMons[gEffectBattler].type1 == TYPE_ICE) - break; - if (gBattleMons[gEffectBattler].type2 == TYPE_ICE) + if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE)) break; if (gBattleMons[gEffectBattler].status1) break; @@ -2470,8 +2444,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } RESET_RETURN } - if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON - || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL) + if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) && (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == TRUE || certain == MOVE_EFFECT_CERTAIN)) { @@ -2483,10 +2456,7 @@ void SetMoveEffect(bool8 primary, u8 certain) } if (gBattleMons[gEffectBattler].status1) break; - if (gBattleMons[gEffectBattler].type1 != TYPE_POISON - && gBattleMons[gEffectBattler].type2 != TYPE_POISON - && gBattleMons[gEffectBattler].type1 != TYPE_STEEL - && gBattleMons[gEffectBattler].type2 != TYPE_STEEL) + if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL)) { if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY) break; @@ -3003,7 +2973,7 @@ static void atk19_tryfaintmon(void) gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) { - BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3); BattleScriptPop(); gBattlescriptCurrInstr = BS_ptr; @@ -3113,8 +3083,8 @@ static void atk1B_cleareffectsonfaint(void) static void atk1C_jumpifstatus(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp) gBattlescriptCurrInstr = jumpPtr; @@ -3125,8 +3095,8 @@ static void atk1C_jumpifstatus(void) static void atk1D_jumpifstatus2(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp) gBattlescriptCurrInstr = jumpPtr; @@ -3138,7 +3108,7 @@ static void atk1E_jumpifability(void) { u8 battlerId; u8 ability = gBattlescriptCurrInstr[2]; - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE) { @@ -3192,8 +3162,8 @@ static void atk1F_jumpifsideaffecting(void) else side = GET_BATTLER_SIDE(gBattlerTarget); - flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2); - jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4); + flags = T2_READ_16(gBattlescriptCurrInstr + 2); + jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4); if (gSideStatuses[side] & flags) gBattlescriptCurrInstr = jumpPtr; @@ -3236,7 +3206,7 @@ static void atk20_jumpifstat(void) } if (ret) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5); else gBattlescriptCurrInstr += 9; } @@ -3247,8 +3217,8 @@ static void atk21_jumpifstatus3condition(void) const u8 *jumpPtr; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2); - jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + flags = T2_READ_32(gBattlescriptCurrInstr + 2); + jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); if (gBattlescriptCurrInstr[6]) { @@ -3270,9 +3240,9 @@ static void atk22_jumpiftype(void) { u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); u8 type = gBattlescriptCurrInstr[2]; - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); - if (gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type) + if (IS_BATTLER_OF_TYPE(battlerId, type)) gBattlescriptCurrInstr = jumpPtr; else gBattlescriptCurrInstr += 7; @@ -3620,14 +3590,14 @@ static void atk24(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (foundOpponent + foundPlayer > 1) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { if (foundOpponent != 0 && foundPlayer != 0) - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -3961,20 +3931,20 @@ static void atk27_decrementmultihit(void) if (--gMultiHitCounter == 0) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk28_goto(void) { - gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk29_jumpifbyte(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); + const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); u8 value = gBattlescriptCurrInstr[6]; - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr += 11; @@ -4010,9 +3980,9 @@ static void atk29_jumpifbyte(void) static void atk2A_jumpifhalfword(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6); - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8); + const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); gBattlescriptCurrInstr += 12; @@ -4048,9 +4018,9 @@ static void atk2A_jumpifhalfword(void) static void atk2B_jumpifword(void) { u8 caseID = gBattlescriptCurrInstr[1]; - const u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6); - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); + u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); gBattlescriptCurrInstr += 14; @@ -4085,10 +4055,10 @@ static void atk2B_jumpifword(void) static void atk2C_jumpifarrayequal(void) { - const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); u32 size = gBattlescriptCurrInstr[9]; - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) @@ -4108,10 +4078,10 @@ static void atk2C_jumpifarrayequal(void) static void atk2D_jumpifarraynotequal(void) { u8 equalBytes = 0; - const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); u32 size = gBattlescriptCurrInstr[9]; - const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10); + const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); u8 i; for (i = 0; i < size; i++) @@ -4131,7 +4101,7 @@ static void atk2D_jumpifarraynotequal(void) static void atk2E_setbyte(void) { - u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte = gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; @@ -4139,22 +4109,22 @@ static void atk2E_setbyte(void) static void atk2F_addbyte(void) { - u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte += gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void atk30_subbyte(void) { - u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte -= gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void atk31_copyarray(void) { - u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); + u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5); s32 size = gBattlescriptCurrInstr[9]; s32 i; @@ -4168,9 +4138,9 @@ static void atk31_copyarray(void) static void atk32_copyarraywithindex(void) { - u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5); - const u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9); + u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); + const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5); + const u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9); s32 size = gBattlescriptCurrInstr[13]; s32 i; @@ -4184,15 +4154,15 @@ static void atk32_copyarraywithindex(void) static void atk33_orbyte(void) { - u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte |= gBattlescriptCurrInstr[5]; gBattlescriptCurrInstr += 6; } static void atk34_orhalfword(void) { - u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *memHword |= val; gBattlescriptCurrInstr += 7; @@ -4200,8 +4170,8 @@ static void atk34_orhalfword(void) static void atk35_orword(void) { - u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *memWord |= val; gBattlescriptCurrInstr += 9; @@ -4209,15 +4179,15 @@ static void atk35_orword(void) static void atk36_bicbyte(void) { - u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); + u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); *memByte &= ~(gBattlescriptCurrInstr[5]); gBattlescriptCurrInstr += 6; } static void atk37_bichalfword(void) { - u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5); + u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); *memHword &= ~val; gBattlescriptCurrInstr += 7; @@ -4225,8 +4195,8 @@ static void atk37_bichalfword(void) static void atk38_bicword(void) { - u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1); - u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5); + u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); + u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); *memWord &= ~val; gBattlescriptCurrInstr += 9; @@ -4236,7 +4206,7 @@ static void atk39_pause(void) { if (gBattleControllerExecFlags == 0) { - u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1); + u16 value = T2_READ_16(gBattlescriptCurrInstr + 1); if (++gPauseCounterBattle >= value) { gPauseCounterBattle = 0; @@ -4295,7 +4265,7 @@ static void atk3F_end3(void) // pops the main function stack static void atk41_call(void) { BattleScriptPush(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atk42_jumpiftype2(void) @@ -4303,7 +4273,7 @@ static void atk42_jumpiftype2(void) u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); else gBattlescriptCurrInstr += 7; } @@ -4311,7 +4281,7 @@ static void atk42_jumpiftype2(void) static void atk43_jumpifabilitypresent(void) { if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -4326,7 +4296,7 @@ static void atk45_playanimation(void) const u16* argumentPtr; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3); + argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE || gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE @@ -4368,8 +4338,8 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po const u8* animationIdPtr; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - animationIdPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2); - argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6); + animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2); + argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); if (*animationIdPtr == B_ANIM_STATS_CHANGE || *animationIdPtr == B_ANIM_SNATCH_MOVE @@ -5025,7 +4995,7 @@ static void atk4F_jumpifcantswitch(void) && ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { @@ -5051,7 +5021,7 @@ static void atk4F_jumpifcantswitch(void) } if (i == lastMonId) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -5099,7 +5069,7 @@ static void atk4F_jumpifcantswitch(void) } if (i == lastMonId) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -5121,7 +5091,7 @@ static void atk4F_jumpifcantswitch(void) } if (i == lastMonId) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -5162,7 +5132,7 @@ static void atk4F_jumpifcantswitch(void) } if (i == 6) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -5187,7 +5157,7 @@ static void atk50_openpartyscreen(void) battlerId = 0; flags = 0; - jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); if (gBattlescriptCurrInstr[1] == 5) { @@ -5547,8 +5517,7 @@ static void atk52_switchineffects(void) if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) - && gBattleMons[gActiveBattler].type1 != TYPE_FLYING - && gBattleMons[gActiveBattler].type2 != TYPE_FLYING + && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING) && gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE) { u8 spikesDmg; @@ -5628,7 +5597,7 @@ static void atk53_trainerslidein(void) static void atk54_playse(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPlaySE(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1)); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -5637,7 +5606,7 @@ static void atk54_playse(void) static void atk55_fanfare(void) { gActiveBattler = gBattlerAttacker; - BtlController_EmitPlayFanfareOrBGM(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), FALSE); + BtlController_EmitPlayFanfareOrBGM(0, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 3; @@ -5672,8 +5641,8 @@ static void atk58_returntoball(void) static void atk59_handlelearnnewmove(void) { - const u8 *jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1); - const u8 *jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); while (ret == 0xFFFE) @@ -5790,7 +5759,7 @@ static void atk5A_yesnoboxlearnmove(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId) @@ -5860,7 +5829,7 @@ static void atk5B_yesnoboxstoplearningmove(void) PlaySE(SE_SELECT); if (gBattleCommunication[1] != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; @@ -5869,7 +5838,7 @@ static void atk5B_yesnoboxstoplearningmove(void) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR); } break; @@ -6094,7 +6063,7 @@ static void atk65_status2animation(void) if (gBattleControllerExecFlags == 0) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedToAnimate = BSScriptRead32(gBattlescriptCurrInstr + 2); + wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2); if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -6113,7 +6082,7 @@ static void atk66_chosenstatusanimation(void) if (gBattleControllerExecFlags == 0) { gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedStatus = BSScriptRead32(gBattlescriptCurrInstr + 3); + wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3); if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -6564,7 +6533,7 @@ static void atk71_buffermovetolearn(void) static void atk72_jumpifplayerran(void) { if (TryRunFromBattle(gBattlerFainted)) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -6893,7 +6862,7 @@ static void atk79_setatkhptozero(void) static void atk7A_jumpifnexttargetvalid(void) { - const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { @@ -6918,7 +6887,7 @@ static void atk7A_jumpifnexttargetvalid(void) static void atk7B_tryhealhalfhealth(void) { - const u8* failPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gBattlescriptCurrInstr[5] == BS_ATTACKER) gBattlerTarget = gBattlerAttacker; @@ -7028,7 +6997,7 @@ static void atk7F_setseeded(void) gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = 1; } - else if (gBattleMons[gBattlerTarget].type1 == TYPE_GRASS || gBattleMons[gBattlerTarget].type2 == TYPE_GRASS) + else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS)) { gMoveResultFlags |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = 2; @@ -7067,7 +7036,7 @@ static void atk80_manipulatedamage(void) static void atk81_trysetrest(void) { - const u8 *failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); gActiveBattler = gBattlerTarget = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1); @@ -7091,7 +7060,7 @@ static void atk81_trysetrest(void) static void atk82_jumpifnotfirstturn(void) { - const u8* failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].isFirstTurn) gBattlescriptCurrInstr += 5; @@ -7133,7 +7102,7 @@ bool8 UproarWakeUpCheck(u8 battlerId) static void atk84_jumpifcantmakeasleep(void) { - const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (UproarWakeUpCheck(gBattlerTarget)) { @@ -7173,7 +7142,7 @@ static void atk85_stockpile(void) static void atk86_stockpiletobasedamage(void) { - const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { gBattlescriptCurrInstr = jumpPtr; @@ -7199,7 +7168,7 @@ static void atk86_stockpiletobasedamage(void) static void atk87_stockpiletohpheal(void) { - const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { @@ -7409,7 +7378,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) static void atk89_statbuffchange(void) { - const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED) gBattlescriptCurrInstr += 6; } @@ -7481,7 +7450,7 @@ static bool8 TryDoForceSwitchOut(void) u16 random = Random() & 0xFF; if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); return FALSE; } *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; @@ -7611,7 +7580,7 @@ static void atk8F_forcerandomswitch(void) if (validMons <= minNeeded) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -7672,7 +7641,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type if (moveType == TYPE_MYSTERY) { - if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST) + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) moveType = TYPE_GHOST; else moveType = TYPE_NORMAL; @@ -7686,7 +7655,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type if (moveChecked == validMoves) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -7699,7 +7668,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type if (moveType == TYPE_MYSTERY) { - if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST) + if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) moveType = TYPE_GHOST; else moveType = TYPE_NORMAL; @@ -7707,10 +7676,8 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type } while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2); - gBattleMons[gBattlerAttacker].type1 = moveType; - gBattleMons[gBattlerAttacker].type2 = moveType; - - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType) + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); gBattlescriptCurrInstr += 5; } @@ -7837,7 +7804,7 @@ static void atk93_tryKO(void) gBattleCommunication[MULTISTRING_CHOOSER] = 0; else gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } } @@ -7894,8 +7861,7 @@ static void atk96_weatherdamage(void) } if (gBattleWeather & WEATHER_HAIL) { - if (gBattleMons[gBattlerAttacker].type1 != TYPE_ICE - && gBattleMons[gBattlerAttacker].type2 != TYPE_ICE + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE) && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND) && !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER)) { @@ -7955,7 +7921,7 @@ static void atk97_tryinfatuating(void) || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -8119,7 +8085,7 @@ static void atk9D_mimicattackcopy(void) || gLastMoves[gBattlerTarget] == 0 || gLastMoves[gBattlerTarget] == 0xFFFF) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -8147,7 +8113,7 @@ static void atk9D_mimicattackcopy(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } } @@ -8222,7 +8188,7 @@ static void atkA1_counterdamagecalculator(void) else { gSpecialStatuses[gBattlerAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8245,7 +8211,7 @@ static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the p else { gSpecialStatuses[gBattlerAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8270,7 +8236,7 @@ static void atkA3_disablelastusedattack(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8302,7 +8268,7 @@ static void atkA4_trysetencore(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8326,7 +8292,7 @@ static void atkA5_painsplitdmgcalc(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8335,12 +8301,12 @@ static void atkA6_settypetorandomresistance(void) // conversion 2 if (gLastLandedMoves[gBattlerAttacker] == 0 || gLastLandedMoves[gBattlerAttacker] == 0xFFFF) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker]) && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -8354,13 +8320,10 @@ static void atkA6_settypetorandomresistance(void) // conversion 2 if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker] && TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE - && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i) - && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i)) + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i))) { - gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(i); - gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(i); - - PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i)) + SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i)); gBattlescriptCurrInstr += 5; return; @@ -8377,12 +8340,9 @@ static void atkA6_settypetorandomresistance(void) // conversion 2 default: if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker] && TYPE_EFFECT_MULTIPLIER(j) <= 5 - && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i) - && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i)) + && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i))) { - gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(rands); - gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(rands); - + SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands)); PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands)) gBattlescriptCurrInstr += 5; @@ -8392,7 +8352,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2 } } - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8426,7 +8386,7 @@ static void atkA8_copymovepermanently(void) // sketch if (i != 4) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else // sketch worked { @@ -8453,7 +8413,7 @@ static void atkA8_copymovepermanently(void) // sketch } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8534,7 +8494,7 @@ static void atkA9_trychoosesleeptalkmove(void) gCurrMovePos = movePosition; gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gBattlerTarget = GetMoveTarget(gRandomMove, 0); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8619,12 +8579,12 @@ static void atkAD_tryspiteppreduce(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -8728,7 +8688,7 @@ static void atkAF_cursetarget(void) { if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -8748,7 +8708,7 @@ static void atkB0_trysetspikes(void) if (gSideTimers[targetSide].spikesAmount == 3) { gSpecialStatuses[gBattlerAttacker].flag20 = 1; - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -8787,7 +8747,7 @@ static void atkB2_trysetperishsong(void) PressurePPLoseOnUsingPerishSong(gBattlerAttacker); if (notAffectedCount == gBattlersCount) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -8831,7 +8791,7 @@ static void atkB4_jumpifconfusedandstatmaxed(void) { if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION && gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -9009,7 +8969,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9049,7 +9009,7 @@ static void atkBC_maxattackhalvehp(void) // belly drum } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9129,185 +9089,39 @@ static void atkC0_recoverbasedonsunlight(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } -#ifdef NONMATCHING static void atkC1_hiddenpowercalc(void) { - u32 powerBits = 0; - u32 typeBits = 0; + u8 powerBits; + u8 typeBits; - powerBits |= ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1); - powerBits |= ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0); - powerBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1); - powerBits |= ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2); - powerBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3); - powerBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); + powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) + | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) + | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) + | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) + | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) + | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); - typeBits |= ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0); - typeBits |= ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1); - typeBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2); - typeBits |= ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3); - typeBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4); - typeBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5); + typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0) + | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1) + | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2) + | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3) + | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4) + | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5); gDynamicBasePower = (40 * powerBits) / 63 + 30; gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1; - if (gBattleStruct->dynamicMoveType > 8) + if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) gBattleStruct->dynamicMoveType++; gBattleStruct->dynamicMoveType |= 0xC0; gBattlescriptCurrInstr++; } -#else -ASM_DIRECT -static void atkC1_hiddenpowercalc(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r2, =gBattleMons\n\ - ldr r0, =gBattlerAttacker\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - adds r4, r1, 0\n\ - muls r4, r0\n\ - adds r4, r2\n\ - ldrb r0, [r4, 0x14]\n\ - mov r10, r0\n\ - mov r7, r10\n\ - lsls r7, 27\n\ - adds r0, r7, 0\n\ - lsrs r0, 27\n\ - mov r10, r0\n\ - movs r1, 0x2\n\ - mov r2, r10\n\ - ands r2, r1\n\ - asrs r2, 1\n\ - ldrh r7, [r4, 0x14]\n\ - mov r9, r7\n\ - mov r0, r9\n\ - lsls r0, 22\n\ - mov r9, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - orrs r2, r0\n\ - ldrb r7, [r4, 0x15]\n\ - mov r8, r7\n\ - mov r0, r8\n\ - lsls r0, 25\n\ - mov r8, r0\n\ - lsrs r3, r0, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 1\n\ - orrs r2, r0\n\ - ldr r6, [r4, 0x14]\n\ - lsls r6, 12\n\ - lsrs r3, r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 2\n\ - orrs r2, r0\n\ - ldrh r5, [r4, 0x16]\n\ - lsls r5, 23\n\ - lsrs r3, r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - lsls r0, 3\n\ - orrs r2, r0\n\ - ldrb r3, [r4, 0x17]\n\ - lsls r3, 26\n\ - lsrs r0, r3, 27\n\ - ands r1, r0\n\ - lsls r1, 4\n\ - orrs r2, r1\n\ - movs r1, 0x1\n\ - adds r4, r1, 0\n\ - mov r7, r10\n\ - ands r4, r7\n\ - mov r0, r9\n\ - lsrs r0, 27\n\ - mov r9, r0\n\ - adds r0, r1, 0\n\ - mov r7, r9\n\ - ands r0, r7\n\ - lsls r0, 1\n\ - orrs r4, r0\n\ - mov r0, r8\n\ - lsrs r0, 27\n\ - mov r8, r0\n\ - adds r0, r1, 0\n\ - mov r7, r8\n\ - ands r0, r7\n\ - lsls r0, 2\n\ - orrs r4, r0\n\ - lsrs r6, 27\n\ - adds r0, r1, 0\n\ - ands r0, r6\n\ - lsls r0, 3\n\ - orrs r4, r0\n\ - lsrs r5, 27\n\ - adds r0, r1, 0\n\ - ands r0, r5\n\ - lsls r0, 4\n\ - orrs r4, r0\n\ - lsrs r3, 27\n\ - ands r1, r3\n\ - lsls r1, 5\n\ - orrs r4, r1\n\ - ldr r5, =gDynamicBasePower\n\ - lsls r0, r2, 2\n\ - adds r0, r2\n\ - lsls r0, 3\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r0, 0x1E\n\ - strh r0, [r5]\n\ - ldr r6, =gBattleStruct\n\ - ldr r5, [r6]\n\ - lsls r0, r4, 4\n\ - subs r0, r4\n\ - movs r1, 0x3F\n\ - bl __divsi3\n\ - adds r0, 0x1\n\ - strb r0, [r5, 0x13]\n\ - ldr r1, [r6]\n\ - ldrb r0, [r1, 0x13]\n\ - cmp r0, 0x8\n\ - bls _080544F0\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x13]\n\ -_080544F0:\n\ - ldr r2, [r6]\n\ - ldrb r0, [r2, 0x13]\n\ - movs r1, 0xC0\n\ - orrs r0, r1\n\ - strb r0, [r2, 0x13]\n\ - ldr r1, =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x1\n\ - str r0, [r1]\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING - static void atkC2_selectfirstvalidtarget(void) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) @@ -9324,7 +9138,7 @@ static void atkC3_trysetfutureattack(void) { if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9359,7 +9173,7 @@ static void atkC4_trydobeatup(void) if (gBattleMons[gBattlerTarget].hp == 0) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9389,9 +9203,9 @@ static void atkC4_trydobeatup(void) gBattleCommunication[0]++; } else if (beforeLoop != 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); } } @@ -9464,7 +9278,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0 && gBattleCommunication[6] != 1) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9512,7 +9326,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9520,7 +9334,7 @@ static void atkCE_settorment(void) { if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9534,7 +9348,7 @@ static void atkCF_jumpifnodamage(void) if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkD0_settaunt(void) @@ -9547,7 +9361,7 @@ static void atkD0_settaunt(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9565,7 +9379,7 @@ static void atkD1_trysethelpinghand(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9580,7 +9394,7 @@ static void atkD2_tryswapitems(void) // trick | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_x2000000)))) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9596,7 +9410,7 @@ static void atkD2_tryswapitems(void) // trick && (gWishFutureKnock.knockedOffPokes[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]] || gWishFutureKnock.knockedOffPokes[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]])) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } // can't swap if two pokemon don't have an item // or if either of them is an enigma berry or a mail @@ -9606,7 +9420,7 @@ static void atkD2_tryswapitems(void) // trick || IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item) || IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } // check if ability prevents swapping else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD) @@ -9667,7 +9481,7 @@ static void atkD3_trycopyability(void) // role play } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9684,7 +9498,7 @@ static void atkD4_trywish(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); } break; case 1: // heal effect @@ -9696,7 +9510,7 @@ static void atkD4_trywish(void) gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -9708,7 +9522,7 @@ static void atkD5_trysetroots(void) // ingrain { if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9735,7 +9549,7 @@ static void atkD7_setyawn(void) if (gStatuses3[gBattlerTarget] & STATUS3_YAWN || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9748,7 +9562,7 @@ static void atkD8_setdamagetohealthdifference(void) { if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9777,7 +9591,7 @@ static void atkDA_tryswapabilities(void) // skill swap || gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD || gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9793,7 +9607,7 @@ static void atkDB_tryimprision(void) { if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9827,7 +9641,7 @@ static void atkDB_tryimprision(void) } } if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9835,7 +9649,7 @@ static void atkDC_trysetgrudge(void) { if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9910,7 +9724,7 @@ static void atkDE_asistattackselect(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -9920,7 +9734,7 @@ static void atkDF_trysetmagiccoat(void) gSpecialStatuses[gBattlerAttacker].flag20 = 1; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9934,7 +9748,7 @@ static void atkE0_trysetsnatch(void) // snatch gSpecialStatuses[gBattlerAttacker].flag20 = 1; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -9961,7 +9775,7 @@ static void atkE1_trygetintimidatetarget(void) } if (gBattlerTarget >= gBattlersCount) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -9987,7 +9801,7 @@ static void atkE3_jumpifhasnohp(void) gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); if (gBattleMons[gActiveBattler].hp == 0) - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; } @@ -10155,7 +9969,7 @@ static void atkE8_settypebasedhalvers(void) // water and mud sport if (worked) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } static void atkE9_setweatherballtype(void) @@ -10198,25 +10012,22 @@ static void atkEA_tryrecycleitem(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } static void atkEB_settypetoterrain(void) { - if (gBattleMons[gBattlerAttacker].type1 != sTerrainToType[gBattleTerrain] - && gBattleMons[gBattlerAttacker].type2 != sTerrainToType[gBattleTerrain]) + if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain])) { - gBattleMons[gBattlerAttacker].type1 = sTerrainToType[gBattleTerrain]; - gBattleMons[gBattlerAttacker].type2 = sTerrainToType[gBattleTerrain]; - - PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]) + SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]); gBattlescriptCurrInstr += 5; } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -10238,7 +10049,7 @@ static void atkEC_pursuitrelated(void) } else { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } } @@ -10314,10 +10125,7 @@ static void atkEF_handleballthrow(void) switch (gLastUsedItem) { case ITEM_NET_BALL: - if (gBattleMons[gBattlerTarget].type1 == TYPE_WATER - || gBattleMons[gBattlerTarget].type2 == TYPE_WATER - || gBattleMons[gBattlerTarget].type1 == TYPE_BUG - || gBattleMons[gBattlerTarget].type2 == TYPE_BUG) + if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG)) ballMultiplier = 30; else ballMultiplier = 10; @@ -10464,7 +10272,7 @@ static void atkF1_trysetcaughtmondexflags(void) if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { @@ -10656,14 +10464,14 @@ static void atkF3_trygivecaughtmonnick(void) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } break; case 4: if (CalculatePlayerPartyCount() == 6) gBattlescriptCurrInstr += 5; else - gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); break; } } diff --git a/src/battle_setup.c b/src/battle_setup.c index fa1eb7edc..97e8f7041 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -32,6 +32,7 @@ #include "overworld.h" #include "field_weather.h" #include "gym_leader_rematch.h" +#include "field_map_obj_helpers.h" enum { @@ -56,18 +57,12 @@ extern bool8 InBattlePyramid(void); extern bool8 InBattlePike(void); extern bool32 InTrainerHill(void); extern bool32 FieldPoisonEffectIsRunning(void); -extern void overworld_free_bg_tilemaps(void); extern void prev_quest_postbuffer_cursor_backup_reset(void); extern void ResetPoisonStepCounter(void); extern void sub_81BE72C(void); -extern void FreezeMapObjects(void); extern void sub_808BCF4(void); extern void sub_80EECC8(void); -extern void Overworld_ClearSavedMusic(void); -extern void CB2_WhiteOut(void); extern void sub_80AF6F0(void); -extern void PlayBattleBGM(void); -extern u8 Overworld_GetFlashLevel(void); extern u16 sub_81A9AA8(u8 localId); extern u16 sub_81D6180(u8 localId); extern bool8 GetBattlePyramidTrainerFlag(u8 mapObjId); diff --git a/src/battle_util.c b/src/battle_util.c index 662e5b2a6..172ec6659 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -23,7 +23,6 @@ #include "link.h" #include "berry.h" - extern u8 weather_get_current(void); // rom const data @@ -1664,36 +1663,31 @@ u8 CastformDataTypeChange(u8 battler) u8 formChange = 0; if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0) return CASTFORM_NO_CHANGE; - if (!WEATHER_HAS_EFFECT && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL) + if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) { - gBattleMons[battler].type1 = TYPE_NORMAL; - gBattleMons[battler].type2 = TYPE_NORMAL; + SET_BATTLER_TYPE(battler, TYPE_NORMAL); return CASTFORM_TO_NORMAL; } if (!WEATHER_HAS_EFFECT) return CASTFORM_NO_CHANGE; - if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL) + if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL)) { - gBattleMons[battler].type1 = TYPE_NORMAL; - gBattleMons[battler].type2 = TYPE_NORMAL; + SET_BATTLER_TYPE(battler, TYPE_NORMAL); formChange = CASTFORM_TO_NORMAL; } - if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[battler].type1 != TYPE_FIRE && gBattleMons[battler].type2 != TYPE_FIRE) + if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)) { - gBattleMons[battler].type1 = TYPE_FIRE; - gBattleMons[battler].type2 = TYPE_FIRE; + SET_BATTLER_TYPE(battler, TYPE_FIRE); formChange = CASTFORM_TO_FIRE; } - if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[battler].type1 != TYPE_WATER && gBattleMons[battler].type2 != TYPE_WATER) + if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER)) { - gBattleMons[battler].type1 = TYPE_WATER; - gBattleMons[battler].type2 = TYPE_WATER; + SET_BATTLER_TYPE(battler, TYPE_WATER); formChange = CASTFORM_TO_WATER; } - if (gBattleWeather & WEATHER_HAIL && gBattleMons[battler].type1 != TYPE_ICE && gBattleMons[battler].type2 != TYPE_ICE) + if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)) { - gBattleMons[battler].type1 = TYPE_ICE; - gBattleMons[battler].type2 = TYPE_ICE; + SET_BATTLER_TYPE(battler, TYPE_ICE); formChange = CASTFORM_TO_ICE; } return formChange; @@ -2023,14 +2017,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && move != MOVE_STRUGGLE && gBattleMoves[move].power != 0 - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) - && gBattleMons[battler].type1 != moveType - && gBattleMons[battler].type2 != moveType + && TARGET_TURN_DAMAGED + && !IS_BATTLER_OF_TYPE(battler, moveType) && gBattleMons[battler].hp != 0) { - gBattleMons[battler].type1 = moveType; - gBattleMons[battler].type2 = moveType; - PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType) + SET_BATTLER_TYPE(battler, moveType); + PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; effect++; @@ -2040,7 +2032,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) { gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16; @@ -2055,7 +2047,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) && (Random() % 10) == 0) { @@ -2078,7 +2070,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) && (Random() % 3) == 0) { @@ -2093,7 +2085,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) && (Random() % 3) == 0) { @@ -2109,7 +2101,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (Random() % 3) == 0) { gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; @@ -2124,7 +2116,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA && gBattleMons[gBattlerAttacker].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 && (Random() % 3) == 0 && gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS @@ -3134,7 +3126,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) { case HOLD_EFFECT_FLINCH: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) - && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg) + && TARGET_TURN_DAMAGED && (Random() % 100) < atkQuality && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) @@ -3186,14 +3178,14 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); } -u8 GetMoveTarget(u16 move, u8 useMoveTarget) +u8 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBank = 0; u8 moveTarget; u8 side; - if (useMoveTarget) - moveTarget = useMoveTarget - 1; + if (setTarget) + moveTarget = setTarget - 1; else moveTarget = gBattleMoves[move].target; diff --git a/src/battle_util2.c b/src/battle_util2.c index c1bbabc85..1d2f1e95b 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -76,26 +76,26 @@ void FreeBattleResources(void) void AdjustFriendshipOnBattleFaint(u8 battlerId) { - u8 opposingBank; + u8 opposingBattlerId; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u8 opposingBank2; + u8 opposingBattlerId2; - opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - opposingBank2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - if (gBattleMons[opposingBank2].level > gBattleMons[opposingBank].level) - opposingBank = opposingBank2; + if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level) + opposingBattlerId = opposingBattlerId2; } else { - opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } - if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level) + if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level) { - if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29) + if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29) AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8); else AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6); diff --git a/src/berry_blender.c b/src/berry_blender.c index 1ac52dd6c..9e6a0fef7 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -29,6 +29,7 @@ #include "pokeblock.h" #include "trig.h" #include "tv.h" +#include "item_menu.h" #define BLENDER_SCORE_BEST 0 #define BLENDER_SCORE_GOOD 1 @@ -128,7 +129,6 @@ struct BerryBlenderData extern struct MusicPlayerInfo gMPlayInfo_SE2; extern struct MusicPlayerInfo gMPlayInfo_BGM; -extern u16 gSpecialVar_ItemId; extern u8 gInGameOpponentsNo; extern u8 gUnknown_020322D5; extern u8 gResultsWindowId; @@ -155,13 +155,11 @@ extern void sub_81978B0(u16); extern void sub_800A418(void); extern u8 sub_800A9D8(void); extern bool8 sub_800A4D8(u8); -extern void sub_8197DF8(u8 windowId, bool8 copyToVram); extern void sub_809882C(u8, u16, u8); extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8); extern void sub_81AABF0(void (*callback)(void)); extern void sub_800B4C0(void); extern void ClearLinkCallback(void); -extern void CB2_ReturnToFieldContinueScript(void); extern void sub_8153430(void); extern bool8 sub_8153474(void); extern void sub_80EECEC(void); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index f86f350bf..1a0d1bce0 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -515,7 +515,7 @@ static void Task_HandleInput(u8 taskId) static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; - s16 currPocketPosition = gUnknown_0203CE58.unk12[3] + gUnknown_0203CE58.unk8[3]; + s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3]; u32 newPocketPosition = currPocketPosition + toMove; if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(BAG_BERRIES, newPocketPosition) != 0) { @@ -533,8 +533,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) static void HandleBagCursorPositionChange(s8 toMove) { - u16 *scrollPos = &gUnknown_0203CE58.unk12[3]; - u16 *cursorPos = &gUnknown_0203CE58.unk8[3]; + u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3]; + u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3]; if (toMove > 0) { if (*cursorPos < 4 || BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + 8) == 0) diff --git a/src/birch_pc.c b/src/birch_pc.c index 0f44824f7..3148832be 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -5,10 +5,6 @@ #include "constants/species.h" #include "strings.h" -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; - bool16 ScriptGetPokedexInfo(void) { if (gSpecialVar_0x8004 == 0) // is national dex not present? diff --git a/src/daycare.c b/src/daycare.c index 36e8b208d..d567ff79a 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -41,11 +41,10 @@ extern const u8 gDaycareText_PlayOther[]; extern u8 GetCursorSelectionMonId(void); extern u16 ItemIdToBattleMoveId(u16); extern s32 ListMenuHandleInputGetItemId(u8); -extern void sub_81AE6C8(u8, u16*, u16*); +extern void DestroyListMenuTask(u8, u16*, u16*); extern void sub_819746C(u8, bool8); extern void NewMenuHelpers_DrawStdWindowFrame(u8, bool8); extern void sub_81B9328(void); -extern void sub_81AF078(u32, bool8, struct ListMenu *); extern void CB2_ReturnToField(void); // this file's functions @@ -79,18 +78,18 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate = .unk_08 = DaycarePrintMonInfo, .totalItems = 3, .maxShowed = 3, - .unk_10 = 0, + .windowId = 0, .unk_11 = 0, .unk_12 = 8, - .cursor_Y = 0, + .cursor_X = 0, .upText_Y = 1, - .cursorColor = 2, - .fillColor = 1, - .cursorShadowColor = 3, - .unk_16_0 = TRUE, - .spaceBetweenItems = 0, - .unk_16_7 = FALSE, - .unk_17_0 = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .unk_16_3 = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 1, .cursorKind = 0 }; @@ -1271,7 +1270,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) gSpecialVar_Result = 2; break; } - sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); sub_819746C(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); @@ -1280,7 +1279,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId) else if (gMain.newKeys & B_BUTTON) { gSpecialVar_Result = 2; - sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL); sub_819746C(gTasks[taskId].tWindowId, TRUE); RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); @@ -1299,7 +1298,7 @@ void ShowDaycareLevelMenu(void) NewMenuHelpers_DrawStdWindowFrame(windowId, FALSE); menuTemplate = sDaycareListMenuLevelTemplate; - menuTemplate.unk_10 = windowId; + menuTemplate.windowId = windowId; listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0); CopyWindowToVram(windowId, 3); diff --git a/src/decoration.c b/src/decoration.c index e4d867a34..ffa1c3a68 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -113,7 +113,7 @@ void sub_812719C(u8 taskId); void sub_81271CC(u8 taskId); void sub_8127268(u8 taskId); void sub_8127454(u8 *dest, u16 decorId); -void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu); +void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu); void sub_81274A0(u8 a0, s32 a1, u8 a2); void sub_8127620(u8 taskId); void sub_812764C(u8 taskId); @@ -801,7 +801,7 @@ void sub_8127330(u8 taskId) sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i]; sDecorPCBuffer->items[i].id = -2; gMultiuseListMenuTemplate = gUnknown_085A6BD0; - gMultiuseListMenuTemplate.unk_10 = sDecorMenuWindowIndices[1]; + gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIndices[1]; gMultiuseListMenuTemplate.totalItems = sDecorPCBuffer->unk_520; gMultiuseListMenuTemplate.items = sDecorPCBuffer->items; gMultiuseListMenuTemplate.maxShowed = sDecorPCBuffer->unk_521; @@ -813,7 +813,7 @@ void sub_8127454(u8 *dest, u16 decorId) StringAppend(dest, gDecorations[decorId].name); } -void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu) +void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu) { if (flag != TRUE) { @@ -892,7 +892,7 @@ void sub_812764C(u8 taskId) if (!gPaletteFade.active) { input = ListMenuHandleInputGetItemId(data[13]); - sub_81AE860(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); + ListMenuGetScrollAndRow(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); switch (input) { case -1: @@ -905,7 +905,7 @@ void sub_812764C(u8 taskId) PlaySE(SE_SELECT); gCurDecorationIndex = input; sub_8127554(); - sub_81AE6C8(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); + DestroyListMenuTask(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); sub_8126A58(1); sub_81277A8(); free(sDecorPCBuffer); @@ -1074,7 +1074,7 @@ void sub_8127A8C(u8 taskId) data = gTasks[taskId].data; sub_8127554(); sub_81277A8(); - sub_81AE6C8(data[13], NULL, NULL); + DestroyListMenuTask(data[13], NULL, NULL); free(sDecorPCBuffer); sub_8126E44(taskId); } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 1b929c9bd..74eac32de 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -49,7 +49,6 @@ extern u16 gBattle_BG2_Y; extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; extern bool8 gAffineAnimsDisabled; -extern u16 gMoveToLearn; extern const u8 gSpeciesNames[][11]; #define sEvoCursorPos gBattleCommunication[1] // when learning a new move @@ -59,11 +58,6 @@ extern const struct WindowTemplate gUnknown_0833900C; extern const struct CompressedSpriteSheet gMonFrontPicTable[]; // strings -extern const u8 gText_PkmnIsEvolving[]; -extern const u8 gText_CongratsPkmnEvolved[]; -extern const u8 gText_BattleYesNoChoice[]; -extern const u8 gText_PkmnStoppedEvolving[]; -extern const u8 gText_EllipsisQuestionMark[]; extern const u8 gText_CommunicationStandby5[]; extern void sub_80356D0(void); diff --git a/src/item_menu.c b/src/item_menu.c index 9090a39c5..8c05f0828 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "item_menu.h" #include "battle.h" #include "battle_controllers.h" #include "battle_frontier_2.h" @@ -58,7 +59,6 @@ void load_bag_item_list_buffers(u8); void bag_menu_print_pocket_names(u8*, u8*); void bag_menu_copy_pocket_name_to_window(u32); void bag_menu_draw_pocket_indicator_square(u8, u8); -void AddBagVisualObject(u8); void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void); void bag_menu_add_list_scroll_arrow_indicators_maybe(void); void bag_menu_prepare_tmhm_move_window(void); @@ -67,9 +67,8 @@ void Task_WallyTutorialBagMenu(u8); void Task_BagMenu(u8); void get_name(s8*, u16); u16 ItemIdToBattleMoveId(u16); -void ShakeBagVisual(void); u16 BagGetItemIdByPocketPosition(u8, u16); -void AddBagItemIconObject(u16, u8); +void AddBagItemIconSprite(u16, u8); void bag_menu_print_description_box_text(int); void bag_menu_print_cursor(u8, u8); void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); @@ -86,9 +85,6 @@ u8 GetSwitchBagPocketDirection(void); void SwitchBagPocket(u8, s16, u16); bool8 sub_81AC2C0(void); void bag_menu_swap_items(u8); -void SetBagVisualPocketId(u8, u8); -void RemoveBagObject(u8); -void AddSwitchPocketRotatingBallObject(s16); void sub_81AC10C(u8); void sub_81AC3C0(u8); void sub_81AC498(u8); @@ -128,7 +124,7 @@ void sub_81ABAC4(void); void sub_81ABAE0(void); u8 sub_81AB1F0(u8); void sub_81AC23C(u8); -void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu*); +void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu*); void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a); void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_Toss(u8 taskId); @@ -251,46 +247,6 @@ const struct WindowTemplate gUnknown_086141AC[] = { // .text -struct BagStruct { - void (*bagCallback)(void); - u8 location; - u8 pocket; - u8 unk6[2]; - u16 cursorPosition[5]; - u16 scrollPosition[5]; -}; - -struct UnkBagStruct { - MainCallback unk0; - u8 unk4[0x800]; - u8 unk804; - u8 unk805; - u8 unk806[10]; - u8 unk810[7]; - u8 unk817; - u8 unk818; - u8 unk819; - u8 unk81A; - u8 unk81B:4; - u8 unk81B_1:2; - u8 unk81B_3:1; - u8 unk81B_2:1; - u8 filler3[2]; - u8 unk81E; - u8 unk81F; - const u8* unk820; - u8 unk824; - u8 unk825; - u8 filler[2]; - u8 unk828; - u8 unk829[5]; - u8 unk82E[6]; - s16 unk834; - u8 filler4[0xE]; - u8 unk844[32][32]; - u8 filler2[4]; -}; - struct ListBuffer1 { struct ListMenuItem subBuffers[65]; }; @@ -319,14 +275,11 @@ void (*gFieldCallback)(void); extern u8 *gPocketNamesStringsTable[]; extern u8 gUnknown_08D9A88C[]; -extern struct CompressedSpriteSheet gUnknown_0857FB34; -extern struct CompressedSpriteSheet gUnknown_0857FB3C; -extern struct CompressedSpritePalette gUnknown_0857FB44; extern struct ListMenuTemplate gUnknown_08613F9C; -extern u8 gMoveNames[][0xD]; +extern const u8 gMoveNames[][0xD]; extern u8* gReturnToXStringsTable[]; extern u32 gUnknown_0203CE5E[]; -extern u8 EventScript_2736B3[]; +extern const u8 EventScript_2736B3[]; extern const u16 gUnknown_0860F074[]; void ResetBagScrollPositions(void) @@ -411,7 +364,7 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2) gUnknown_0203CE54->unk81A = 0xFF; gUnknown_0203CE54->unk81E = -1; gUnknown_0203CE54->unk81F = -1; - memset(&gUnknown_0203CE54->unk804, 0xFF, 12); + memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804)); memset(gUnknown_0203CE54->unk810, 0xFF, 10); SetMainCallback2(CB2_Bag); } @@ -517,7 +470,7 @@ bool8 setup_bag_menu(void) gMain.state++; break; case 15: - AddBagVisualObject(gUnknown_0203CE58.pocket); + AddBagVisualSprite(gUnknown_0203CE58.pocket); gMain.state++; break; case 16: @@ -688,7 +641,7 @@ void get_name(s8 *dest, u16 itemId) } } -void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused) +void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu *unused) { if (b != 1) { @@ -697,11 +650,11 @@ void bag_menu_change_item_callback(u32 a, bool8 b, struct ListMenu *unused) } if (gUnknown_0203CE54->unk81A == 0xFF) { - RemoveBagItemIconObject(1 ^ gUnknown_0203CE54->unk81B_1); + RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1); if (a != -2) - AddBagItemIconObject(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1); + AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1); else - AddBagItemIconObject(-1, gUnknown_0203CE54->unk81B_1); + AddBagItemIconSprite(-1, gUnknown_0203CE54->unk81B_1); gUnknown_0203CE54->unk81B_1 ^= 1; if (!gUnknown_0203CE54->unk81B_3) bag_menu_print_description_box_text(a); @@ -830,7 +783,7 @@ void task_close_bag_menu_2(u8 taskId) s16* data = gTasks[taskId].data; if (!gPaletteFade.active) { - sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); if (gUnknown_0203CE54->unk0 != 0) SetMainCallback2(gUnknown_0203CE54->unk0); else @@ -915,7 +868,7 @@ void bag_menu_inits_lists_menu(u8 taskId) u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; bag_menu_RemoveBagItem_message_window(4); - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); sub_81AB9A8(gUnknown_0203CE58.pocket); sub_81ABA88(gUnknown_0203CE58.pocket); load_bag_item_list_buffers(gUnknown_0203CE58.pocket); @@ -967,7 +920,7 @@ void Task_BagMenu(u8 taskId) { if (sub_81AC2C0() == 1) { - sub_81AE860(data[0], scrollPos, cursorPos); + ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1) { PlaySE(SE_SELECT); @@ -979,7 +932,7 @@ void Task_BagMenu(u8 taskId) else { int r4 = ListMenuHandleInputGetItemId(data[0]); - sub_81AE860(data[0], scrollPos, cursorPos); + ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); switch (r4) { case -1: @@ -1038,7 +991,6 @@ u8 GetSwitchBagPocketDirection(void) return 0; } - void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) { if (deltaBagPocketId == 1 && *bagPocketId == 4) @@ -1049,13 +1001,11 @@ void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId) *bagPocketId += deltaBagPocketId; } -#ifdef NONMATCHING void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) { s16* data = gTasks[taskId].data; u8 pocketId; - data[13] = 0; data[12] = 0; data[11] = deltaBagPocketId; @@ -1063,9 +1013,9 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) { ClearWindowTilemap(0); ClearWindowTilemap(1); - sub_81AE6C8(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); schedule_bg_copy_tilemap_to_vram(0); - gSprites[gUnknown_0203CE54->unk806[gUnknown_0203CE54->unk81B_1 ^ 1]].invisible = 1; + gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = 1; sub_81AB824(); } pocketId = gUnknown_0203CE58.pocket; @@ -1085,160 +1035,10 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); schedule_bg_copy_tilemap_to_vram(2); SetBagVisualPocketId(pocketId, 1); - RemoveBagObject(1); - AddSwitchPocketRotatingBallObject(deltaBagPocketId); + RemoveBagSprite(1); + AddSwitchPocketRotatingBallSprite(deltaBagPocketId); SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func); } -#else -__attribute__((naked)) -void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0xC\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 16\n\ - lsrs r5, r1, 16\n\ - lsls r2, 16\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - ldr r1, =gTasks + 0x8\n\ - adds r4, r0, r1\n\ - movs r0, 0\n\ - strh r0, [r4, 0x1A]\n\ - strh r0, [r4, 0x18]\n\ - strh r5, [r4, 0x16]\n\ - cmp r2, 0\n\ - bne _081AC026\n\ - movs r0, 0\n\ - bl ClearWindowTilemap\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - ldrb r0, [r4]\n\ - ldr r3, =gUnknown_0203CE58\n\ - ldrb r2, [r3, 0x5]\n\ - lsls r2, 1\n\ - adds r1, r3, 0\n\ - adds r1, 0x12\n\ - adds r1, r2, r1\n\ - adds r3, 0x8\n\ - adds r2, r3\n\ - bl sub_81AE6C8\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - ldr r3, =gSprites\n\ - ldr r0, =gUnknown_0203CE54\n\ - ldr r2, [r0]\n\ - ldr r1, =0x0000081b\n\ - adds r0, r2, r1\n\ - ldrb r1, [r0]\n\ - lsls r1, 26\n\ - lsrs r1, 30\n\ - movs r0, 0x1\n\ - eors r0, r1\n\ - adds r2, r0\n\ - ldr r0, =0x00000806\n\ - adds r2, r0\n\ - ldrb r1, [r2]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - adds r0, 0x3E\n\ - ldrb r1, [r0]\n\ - movs r2, 0x4\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - bl sub_81AB824\n\ -_081AC026:\n\ - ldr r4, =gUnknown_0203CE58\n\ - ldrb r1, [r4, 0x5]\n\ - add r0, sp, 0x8\n\ - strb r1, [r0]\n\ - lsls r1, r5, 24\n\ - asrs r1, 24\n\ - bl ChangeBagPocketId\n\ - lsls r0, r5, 16\n\ - asrs r1, r0, 16\n\ - adds r5, r0, 0\n\ - cmp r1, 0x1\n\ - bne _081AC07C\n\ - ldr r2, =gPocketNamesStringsTable\n\ - ldrb r0, [r4, 0x5]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - add r1, sp, 0x8\n\ - ldrb r1, [r1]\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldr r1, [r1]\n\ - bl bag_menu_print_pocket_names\n\ - movs r0, 0\n\ - bl bag_menu_copy_pocket_name_to_window\n\ - b _081AC09A\n\ - .pool\n\ -_081AC07C:\n\ - ldr r2, =gPocketNamesStringsTable\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - ldrb r1, [r4, 0x5]\n\ - lsls r1, 2\n\ - adds r1, r2\n\ - ldr r1, [r1]\n\ - bl bag_menu_print_pocket_names\n\ - movs r0, 0x8\n\ - bl bag_menu_copy_pocket_name_to_window\n\ -_081AC09A:\n\ - ldr r0, =gUnknown_0203CE58\n\ - ldrb r0, [r0, 0x5]\n\ - movs r1, 0\n\ - bl bag_menu_draw_pocket_indicator_square\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - movs r1, 0x1\n\ - bl bag_menu_draw_pocket_indicator_square\n\ - movs r0, 0xF\n\ - str r0, [sp]\n\ - movs r0, 0x10\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0x2\n\ - movs r1, 0xB\n\ - movs r2, 0xE\n\ - movs r3, 0x2\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - movs r0, 0x2\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - add r0, sp, 0x8\n\ - ldrb r0, [r0]\n\ - movs r1, 0x1\n\ - bl SetBagVisualPocketId\n\ - movs r0, 0x1\n\ - bl RemoveBagObject\n\ - asrs r0, r5, 16\n\ - bl AddSwitchPocketRotatingBallObject\n\ - ldr r1, =sub_81AC10C\n\ - ldr r2, =gTasks\n\ - lsls r0, r6, 2\n\ - adds r0, r6\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldr r2, [r0]\n\ - adds r0, r6, 0\n\ - bl SetTaskFuncWithFollowupFunc\n\ - add sp, 0xC\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); -} -#endif void sub_81AC10C(u8 taskId) { @@ -1340,13 +1140,13 @@ void sub_81AC3C0(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); - sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); sub_81AC498(taskId); } else { r7 = ListMenuHandleInputGetItemId(data[0]); - sub_81AE860(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); sub_80D4FC8(0); sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); switch (r7) @@ -1381,7 +1181,7 @@ void sub_81AC498(u8 taskId) { sub_80D702C(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos); gUnknown_0203CE54->unk81A = -1; - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < realPos) gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--; load_bag_item_list_buffers(gUnknown_0203CE58.pocket); @@ -1399,7 +1199,7 @@ void sub_81AC590(u8 taskId) u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; gUnknown_0203CE54->unk81A = -1; - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < (*scrollPos + *cursorPos)) gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--; load_bag_item_list_buffers(gUnknown_0203CE58.pocket); @@ -1771,7 +1571,7 @@ void Task_ActuallyToss(u8 taskId) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); sub_81AB9A8(gUnknown_0203CE58.pocket); sub_81ABA88(gUnknown_0203CE58.pocket); load_bag_item_list_buffers(gUnknown_0203CE58.pocket); @@ -1791,7 +1591,7 @@ void ItemMenu_Register(u8 taskId) gSaveBlock1Ptr->registeredItem = 0; else gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); load_bag_item_list_buffers(gUnknown_0203CE58.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); schedule_bg_copy_tilemap_to_vram(0); @@ -2039,7 +1839,7 @@ void sub_81AD8C8(u8 taskId) PlaySE(SE_REGI); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, (itemid_get_market_price(gSpecialVar_ItemId) / 2) * data[8]); - sub_81AE6C8(data[0], scrollPos, cursorPos); + DestroyListMenuTask(data[0], scrollPos, cursorPos); sub_81AB9A8(gUnknown_0203CE58.pocket); sub_81ABA88(gUnknown_0203CE58.pocket); load_bag_item_list_buffers(gUnknown_0203CE58.pocket); @@ -2212,7 +2012,7 @@ void Task_WallyTutorialBagMenu(u8 taskId) case 0x132: PlaySE(SE_SELECT); bag_menu_remove_some_window(); - sub_81AE6C8(data[0], 0, 0); + DestroyListMenuTask(data[0], 0, 0); RestoreBagAfterWallyTutorial(); unknown_ItemMenu_Confirm(taskId); break; diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c new file mode 100644 index 000000000..1d9dbb106 --- /dev/null +++ b/src/item_menu_icons.c @@ -0,0 +1,678 @@ +#include "global.h" +#include "sprite.h" +#include "decompress.h" +#include "item_menu.h" +#include "item_icon.h" +#include "item_menu_icons.h" +#include "window.h" +#include "menu_helpers.h" +#include "berry.h" +#include "graphics.h" +#include "constants/items.h" + +struct CompressedTilesPal +{ + const u8 *tiles; + const u8 *pal; +}; + +extern void sub_80D5860(struct Sprite *sprite); +extern void sub_80D58F8(struct Sprite *sprite); +extern void sub_80D5968(struct Sprite *sprite); +extern void sub_80D5A94(struct Sprite *sprite); +extern void sub_80D5B48(struct Sprite *sprite); + +// this file's functions +static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite); +static void SpriteCB_ShakeBagVisual(struct Sprite *sprite); +static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite); +static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite); + +// static const rom data +static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal"); +static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp"); +static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal"); + +static const struct OamData sOamData_857FAA4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FAAC[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAB4[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FABC[] = +{ + ANIMCMD_FRAME(128, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAC4[] = +{ + ANIMCMD_FRAME(192, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FACC[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857FAD4[] = +{ + ANIMCMD_FRAME(320, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FADC[] = +{ + sSpriteAnim_857FAAC, + sSpriteAnim_857FAB4, + sSpriteAnim_857FAC4, + sSpriteAnim_857FACC, + sSpriteAnim_857FAD4, + sSpriteAnim_857FABC +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 254, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, 254, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] = +{ + sSpriteAffineAnim_857FAF4, + sSpriteAffineAnim_857FB04 +}; + +const struct CompressedSpriteSheet gUnknown_0857FB34 = +{ + gBagMaleTiles, 0x3000, 100 +}; + +const struct CompressedSpriteSheet gUnknown_0857FB3C = +{ + gBagFemaleTiles, 0x3000, 100 +}; + +const struct CompressedSpritePalette gUnknown_0857FB44 = +{ + gBagPalette, 100 +}; + +static const struct SpriteTemplate gUnknown_0857FB4C = +{ + .tileTag = 100, + .paletteTag = 100, + .oam = &sOamData_857FAA4, + .anims = sSpriteAnimTable_857FADC, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_857FB2C, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_857FB64 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 4, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FB6C[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FB74[] = +{ + sSpriteAnim_857FB6C +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 8, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 248, 16), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] = +{ + sSpriteAffineAnim_857FB78, +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] = +{ + sSpriteAffineAnim_857FB88, +}; + +static const struct SpriteSheet gUnknown_0857FBA0 = +{ + gUnknown_0857F584, 0x80, 101 +}; + +static const struct SpritePalette gUnknown_0857FBA8 = +{ + gUnknown_0857F564, 101 +}; + +static const struct SpriteTemplate gUnknown_0857FBB0 = +{ + .tileTag = 101, + .paletteTag = 101, + .oam = &sOamData_857FB64, + .anims = sSpriteAnimTable_857FB74, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_857FB98, + .callback = SpriteCB_SwitchPocketRotatingBallInit, +}; + +static const struct OamData sOamData_857FBC8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 7, + .affineParam = 0 +}; + +static const struct OamData sOamData_857FBD0 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FBD8[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FBE0[] = +{ + sSpriteAnim_857FBD8 +}; + +static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] = +{ + {&gDecompressionBuffer[0], 0x800}, +}; + +static const struct SpriteTemplate gUnknown_0857FBEC = +{ + .tileTag = 65535, + .paletteTag = 30020, + .oam = &sOamData_857FBC8, + .anims = sSpriteAnimTable_857FBE0, + .images = sSpriteImageTable_857FBE4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 253, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 255, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] = +{ + sSpriteAffineAnim_857FC04, + sSpriteAffineAnim_857FC3C +}; + +static const struct SpriteTemplate gUnknown_0857FC7C = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x7544, + .oam = &sOamData_857FBD0, + .anims = sSpriteAnimTable_857FBE0, + .images = sSpriteImageTable_857FBE4, + .affineAnims = sSpriteAffineAnimTable_857FC74, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedTilesPal gBerryPicTable[] = +{ + {gBerryPic_Cheri, gBerryPalette_Cheri}, + {gBerryPic_Chesto, gBerryPalette_Chesto}, + {gBerryPic_Pecha, gBerryPalette_Pecha}, + {gBerryPic_Rawst, gBerryPalette_Rawst}, + {gBerryPic_Aspear, gBerryPalette_Aspear}, + {gBerryPic_Leppa, gBerryPalette_Leppa}, + {gBerryPic_Oran, gBerryPalette_Oran}, + {gBerryPic_Persim, gBerryPalette_Persim}, + {gBerryPic_Lum, gBerryPalette_Lum}, + {gBerryPic_Sitrus, gBerryPalette_Sitrus}, + {gBerryPic_Figy, gBerryPalette_Figy}, + {gBerryPic_Wiki, gBerryPalette_Wiki}, + {gBerryPic_Mago, gBerryPalette_Mago}, + {gBerryPic_Aguav, gBerryPalette_Aguav}, + {gBerryPic_Iapapa, gBerryPalette_Iapapa}, + {gBerryPic_Razz, gBerryPalette_Razz}, + {gBerryPic_Bluk, gBerryPalette_Bluk}, + {gBerryPic_Nanab, gBerryPalette_Nanab}, + {gBerryPic_Wepear, gBerryPalette_Wepear}, + {gBerryPic_Pinap, gBerryPalette_Pinap}, + {gBerryPic_Pomeg, gBerryPalette_Pomeg}, + {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, + {gBerryPic_Qualot, gBerryPalette_Qualot}, + {gBerryPic_Hondew, gBerryPalette_Hondew}, + {gBerryPic_Grepa, gBerryPalette_Grepa}, + {gBerryPic_Tamato, gBerryPalette_Tamato}, + {gBerryPic_Cornn, gBerryPalette_Cornn}, + {gBerryPic_Magost, gBerryPalette_Magost}, + {gBerryPic_Rabuta, gBerryPalette_Rabuta}, + {gBerryPic_Nomel, gBerryPalette_Nomel}, + {gBerryPic_Spelon, gBerryPalette_Spelon}, + {gBerryPic_Pamtre, gBerryPalette_Pamtre}, + {gBerryPic_Watmel, gBerryPalette_Watmel}, + {gBerryPic_Durin, gBerryPalette_Durin}, + {gBerryPic_Belue, gBerryPalette_Belue}, + {gBerryPic_Liechi, gBerryPalette_Liechi}, + {gBerryPic_Ganlon, gBerryPalette_Ganlon}, + {gBerryPic_Salac, gBerryPalette_Salac}, + {gBerryPic_Petaya, gBerryPalette_Petaya}, + {gBerryPic_Apicot, gBerryPalette_Apicot}, + {gBerryPic_Lansat, gBerryPalette_Lansat}, + {gBerryPic_Starf, gBerryPalette_Starf}, + {gBerryPic_Enigma, gBerryPalette_Enigma}, +}; + +const struct CompressedSpriteSheet gUnknown_0857FDEC = +{ + gBerryCheckCircle_Gfx, 0x800, 10000 +}; + +const struct CompressedSpritePalette gUnknown_0857FDF4 = +{ + gUnknown_08D9BEF0, 10000 +}; + +static const struct OamData sOamData_857FDFC = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_857FE04[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_857FE0C[] = +{ + sSpriteAnim_857FE04 +}; + +static const struct SpriteTemplate gUnknown_0857FE10 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &sOamData_857FDFC, + .anims = sSpriteAnimTable_857FE0C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gUnknown_0857FE28 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5860, +}; + +const struct SpriteTemplate gUnknown_0857FE40 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D58F8, +}; + +const struct SpriteTemplate gUnknown_0857FE58 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5968, +}; + +const struct SpriteTemplate gUnknown_0857FE70 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5A94, +}; + +const struct SpriteTemplate gUnknown_0857FE88 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5B48, +}; + +// code +void RemoveBagSprite(u8 id) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[id]; + if (*spriteId != 0xFF) + { + FreeSpriteTilesByTag(id + 100); + FreeSpritePaletteByTag(id + 100); + FreeSpriteOamMatrix(&gSprites[*spriteId]); + DestroySprite(&gSprites[*spriteId]); + *spriteId = 0xFF; + } +} + +void AddBagVisualSprite(u8 bagPocketId) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[0]; + *spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0); + SetBagVisualPocketId(bagPocketId, FALSE); +} + +void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) +{ + struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]]; + if (isSwitchingPockets) + { + sprite->pos2.y = -5; + sprite->callback = SpriteCB_BagVisualSwitchingPockets; + sprite->data[0] = bagPocketId + 1; + StartSpriteAnim(sprite, 0); + } + else + { + StartSpriteAnim(sprite, bagPocketId + 1); + } +} + +static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite) +{ + if (sprite->pos2.y != 0) + { + sprite->pos2.y++; + } + else + { + StartSpriteAnim(sprite, sprite->data[0]); + sprite->callback = SpriteCallbackDummy; + } +} + +void ShakeBagVisual(void) +{ + struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]]; + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = SpriteCB_ShakeBagVisual; + } +} + +static void SpriteCB_ShakeBagVisual(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } +} + +void AddSwitchPocketRotatingBallSprite(s16 rotationDirection) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[1]; + LoadSpriteSheet(&gUnknown_0857FBA0); + LoadSpritePalette(&gUnknown_0857FBA8); + *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0); + gSprites[*spriteId].data[0] = rotationDirection; +} + +static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite) +{ + sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1); + sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1); +} + +static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + if (sprite->data[0] == -1) + sprite->affineAnims = sSpriteAffineAnimTable_857FB98; + else + sprite->affineAnims = sSpriteAffineAnimTable_857FB9C; + + InitSpriteAffineAnim(sprite); + sprite->data[1] = sprite->centerToCornerVecX; + sprite->data[1] = sprite->centerToCornerVecY; + update_switch_pocket_rotating_ball_coords(sprite); + sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue; +} + +static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite) +{ + sprite->data[3]++; + update_switch_pocket_rotating_ball_coords(sprite); + if (sprite->data[3] == 16) + RemoveBagSprite(1); +} + +void AddBagItemIconSprite(u16 itemId, u8 id) +{ + u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2]; + if (*spriteId == 0xFF) + { + u8 iconSpriteId; + + FreeSpriteTilesByTag(id + 102); + FreeSpritePaletteByTag(id + 102); + iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId); + if (iconSpriteId != MAX_SPRITES) + { + *spriteId = iconSpriteId; + gSprites[iconSpriteId].pos2.x = 24; + gSprites[iconSpriteId].pos2.y = 88; + } + } +} + +void RemoveBagItemIconSprite(u8 id) +{ + RemoveBagSprite(id + 2); +} + +void sub_80D4FAC(void) +{ + sub_8122344(&gUnknown_0203CE54->unk804[4], 8); +} + +void sub_80D4FC8(u8 arg0) +{ + sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0); +} + +void sub_80D4FEC(u8 arg0) +{ + sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16); +} + +static void sub_80D5018(void *mem0, void *mem1) +{ + u8 i, j; + + memset(mem1, 0, 0x800); + mem1 += 0x100; + for (i = 0; i < 6; i++) + { + mem1 += 0x20; + for (j = 0; j < 6; j++) + { + memcpy(mem1, mem0, 0x20); + mem1 += 0x20; + mem0 += 0x20; + } + if (i != 5) + mem1 += 0x20; + } +} + +static void sub_80D5070(u8 berryId) +{ + struct CompressedSpritePalette pal; + + if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid()) + { + // unknown empty if statement + } + + pal.data = gBerryPicTable[berryId].pal; + pal.tag = 0x7544; + LoadCompressedObjectPalette(&pal); + LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]); + sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]); +} + +u8 CreateBerryTagSprite(u8 id, s16 x, s16 y) +{ + sub_80D5070(id); + return CreateSprite(&gUnknown_0857FBEC, x, y, 0); +} + +void FreeBerryTagSpritePalette(void) +{ + FreeSpritePaletteByTag(0x7544); +} + +u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine) +{ + u8 spriteId; + + FreeSpritePaletteByTag(0x7544); + sub_80D5070(berryId); + spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0); + if (startAffine == TRUE) + StartSpriteAffineAnim(&gSprites[spriteId], 1); + + return spriteId; +} + +u8 CreateBerryFlavorCircleSprite(s16 x) +{ + return CreateSprite(&gUnknown_0857FE10, x, 116, 0); +} diff --git a/src/list_menu.c b/src/list_menu.c new file mode 100644 index 000000000..c78d32bb3 --- /dev/null +++ b/src/list_menu.c @@ -0,0 +1,633 @@ +#include "global.h" +#include "menu.h" +#include "list_menu.h" +#include "window.h" +#include "text_window.h" +#include "main.h" +#include "task.h" +#include "menu_indicators.h" +#include "strings.h" +#include "sound.h" +#include "constants/songs.h" + +struct UnknownMysteryGiftLinkMenuStruct +{ + s32 field_0; + u8 field_4; + u8 field_5; + u8 field_6; +}; + +struct UnknownListMenuPals +{ + u8 cursorPal:4; + u8 fillValue:4; + u8 cursorShadowPal:4; + u8 lettersSpacing:6; + u8 field_2_2:6; // unused + u8 fontId:7; + u8 field_3_7:1; +}; + +extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84; + +// this file's functions +static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); +static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown); +static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count); +static void ListMenuDrawCursor(struct ListMenu *list); +static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2); +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind); + +// IWRAM common +struct UnknownListMenuPals gUnknown_03006300; +struct ListMenuTemplate gMultiuseListMenuTemplate; + +// code +static void ListMenuDummyTask(u8 taskId) +{ + +} + +s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +{ + switch (gUnknown_0203CE84.field_4) + { + case 0: + default: + gUnknown_0203CE84.field_5 = AddWindow(windowTemplate); + switch (arg2) + { + case 2: + sub_809882C(gUnknown_0203CE84.field_5, tileNum, palNum); + case 1: + sub_8098858(gUnknown_0203CE84.field_5, tileNum, palNum / 16); + break; + } + gMultiuseListMenuTemplate = *listMenuTemplate; + gMultiuseListMenuTemplate.windowId = gUnknown_0203CE84.field_5; + gUnknown_0203CE84.field_6 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(gUnknown_0203CE84.field_5, 1); + gUnknown_0203CE84.field_4 = 1; + break; + case 1: + gUnknown_0203CE84.field_0 = ListMenuHandleInputGetItemId(gUnknown_0203CE84.field_6); + if (gMain.newKeys & A_BUTTON) + { + gUnknown_0203CE84.field_4 = 2; + } + if (gMain.newKeys & B_BUTTON) + { + gUnknown_0203CE84.field_0 = LIST_B_PRESSED; + gUnknown_0203CE84.field_4 = 2; + } + if (gUnknown_0203CE84.field_4 == 2) + { + if (arg2 == 0) + { + ClearWindowTilemap(gUnknown_0203CE84.field_5); + } + else + { + switch (arg2) + { + case 0: // can never be reached, because of the if statement above + sub_819746C(gUnknown_0203CE84.field_5, FALSE); + break; + case 2: + case 1: + sub_819746C(gUnknown_0203CE84.field_5, FALSE); + break; + } + } + + CopyWindowToVram(gUnknown_0203CE84.field_5, 1); + } + break; + case 2: + DestroyListMenuTask(gUnknown_0203CE84.field_6, NULL, NULL); + RemoveWindow(gUnknown_0203CE84.field_5); + gUnknown_0203CE84.field_4 = 0; + return gUnknown_0203CE84.field_0; + } + + return -1; +} + +u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) +{ + u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow); + PutWindowTilemap(listMenuTemplate->windowId); + CopyWindowToVram(listMenuTemplate->windowId, 2); + + return taskId; +} + +// unused +u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow) +{ + s32 i; + + u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow); + for (i = 0; arg1[i].palNum != 0xFF; i++) + { + PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId, + arg1[i].x, + arg1[i].y, + arg1[i].width, + arg1[i].height, + arg1[i].palNum); + } + CopyWindowToVram(listMenuTemplate->windowId, 2); + + return taskId; +} + +s32 ListMenuHandleInputGetItemId(u8 listTaskId) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + if (gMain.newKeys & A_BUTTON) + { + return list->template.items[list->scrollOffset + list->selectedRow].id; + } + else if (gMain.newKeys & B_BUTTON) + { + return LIST_B_PRESSED; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + ListMenuChangeSelection(list, TRUE, 1, FALSE); + return LIST_NOTHING_CHOSEN; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + ListMenuChangeSelection(list, TRUE, 1, TRUE); + return LIST_NOTHING_CHOSEN; + } + else // try to move by one window scroll + { + bool16 rightButton, leftButton; + switch (list->template.scrollMultiple) + { + case LIST_NO_MULTIPLE_SCROLL: + default: + leftButton = FALSE; + rightButton = FALSE; + break; + case LIST_MULTIPLE_SCROLL_DPAD: + leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT; + rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT; + break; + case LIST_MULTIPLE_SCROLL_L_R: + leftButton = gMain.newAndRepeatedKeys & L_BUTTON; + rightButton = gMain.newAndRepeatedKeys & R_BUTTON; + break; + } + + if (leftButton) + { + ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE); + return LIST_NOTHING_CHOSEN; + } + else if (rightButton) + { + ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE); + return LIST_NOTHING_CHOSEN; + } + else + { + return LIST_NOTHING_CHOSEN; + } + } +} + +void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + if (scrollOffset != NULL) + *scrollOffset = list->scrollOffset; + if (selectedRow != NULL) + *selectedRow = list->selectedRow; + + if (list->unk_1E != 0xFF) + ListMenuRemoveCursorObject(list->unk_1E, list->template.cursorKind - 2); + + DestroyTask(listTaskId); +} + +void sub_81AE70C(u8 listTaskId) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + CopyWindowToVram(list->template.windowId, 2); +} + +// unused +void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + list->template.cursorPal = cursorPal; + list->template.fillValue = fillValue; + list->template.cursorShadowPal = cursorShadowPal; +} + +// unused +void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x); + SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y); +} + +// unused +s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow) +{ + struct ListMenu list; + + list.template = *template; + list.scrollOffset = scrollOffset; + list.selectedRow = selectedRow; + list.unk_1C = 0; + list.unk_1D = 0; + + if (keys == DPAD_UP) + ListMenuChangeSelection(&list, FALSE, 1, FALSE); + if (keys == DPAD_DOWN) + ListMenuChangeSelection(&list, FALSE, 1, TRUE); + + if (newScrollOffset != NULL) + *newScrollOffset = list.scrollOffset; + if (newSelectedRow != NULL) + *newSelectedRow = list.selectedRow; + + return LIST_NOTHING_CHOSEN; +} + +void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + if (arrayId != NULL) + *arrayId = list->scrollOffset + list->selectedRow; +} + +void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + if (scrollOffset != NULL) + *scrollOffset = list->scrollOffset; + if (selectedRow != NULL) + *selectedRow = list->selectedRow; +} + +u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId) +{ + struct ListMenu *list = (void*) gTasks[listTaskId].data; + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3; + + return list->selectedRow * yMultiplier + list->template.upText_Y; +} + +static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow) +{ + u8 listTaskId = CreateTask(ListMenuDummyTask, 0); + struct ListMenu *list = (void*) gTasks[listTaskId].data; + + list->template = *listMenuTemplate; + list->scrollOffset = scrollOffset; + list->selectedRow = selectedRow; + list->unk_1C = 0; + list->unk_1D = 0; + list->unk_1E = 0xFF; + list->unk_1F = 0; + + gUnknown_03006300.cursorPal = list->template.cursorPal; + gUnknown_03006300.fillValue = list->template.fillValue; + gUnknown_03006300.cursorShadowPal = list->template.cursorShadowPal; + gUnknown_03006300.lettersSpacing = list->template.lettersSpacing; + gUnknown_03006300.fontId = list->template.fontId; + gUnknown_03006300.field_3_7 = 0; + + if (list->template.totalItems < list->template.maxShowed) + list->template.maxShowed = list->template.totalItems; + + FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, 1); + + return listTaskId; +} + +static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) +{ + u8 colors[3]; + if (gUnknown_03006300.field_3_7) + { + colors[0] = gUnknown_03006300.fillValue; + colors[1] = gUnknown_03006300.cursorPal; + colors[2] = gUnknown_03006300.cursorShadowPal; + AddTextPrinterParameterized2(list->template.windowId, + gUnknown_03006300.fontId, + x, y, + gUnknown_03006300.lettersSpacing, + 0, colors, TEXT_SPEED_FF, str); + + gUnknown_03006300.field_3_7 = 0; + } + else + { + colors[0] = list->template.fillValue; + colors[1] = list->template.cursorPal; + colors[2] = list->template.cursorShadowPal; + AddTextPrinterParameterized2(list->template.windowId, + list->template.fontId, + x, y, + list->template.lettersSpacing, + 0, colors, TEXT_SPEED_FF, str); + } +} + +static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count) +{ + s32 i; + u8 x, y; + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3; + + for (i = 0; i < count; i++) + { + if (list->template.items[startIndex].id != -3) + x = list->template.unk_12; + else + x = list->template.unk_11; + + y = (yOffset + i) * yMultiplier + list->template.upText_Y; + if (list->template.unk_08 != NULL) + list->template.unk_08(list->template.windowId, list->template.items[startIndex].id, y); + + ListMenuPrint(list, list->template.items[startIndex].name, x, y); + startIndex++; + } +} + +static void ListMenuDrawCursor(struct ListMenu *list) +{ + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3; + u8 x = list->template.cursor_X; + u8 y = list->selectedRow * yMultiplier + list->template.upText_Y; + switch (list->template.cursorKind) + { + case 0: + ListMenuPrint(list, gText_SelectorArrow2, x, y); + break; + case 1: + break; + case 2: + if (list->unk_1E == 0xFF) + list->unk_1E = ListMenuAddCursorObject(list, 0); + ListMenuUpdateCursorObject(list->unk_1E, + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1, + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0); + break; + case 3: + if (list->unk_1E == 0xFF) + list->unk_1E = ListMenuAddCursorObject(list, 1); + ListMenuUpdateCursorObject(list->unk_1E, + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x, + GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1); + break; + } +} + +static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) +{ + struct CursorStruct cursor; + + cursor.unk0 = 0; + cursor.unk1 = 0xA0; + cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2; + cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2; + cursor.unk6 = 0x4000; + cursor.unk8 = 0xFFFF; + cursor.unkA = 0xF; + + return ListMenuAddCursorObjectInternal(&cursor, cursorKind); +} + +static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow) +{ + u8 cursorKind = list->template.cursorKind; + if (cursorKind == 0) + { + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3; + u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0); + u8 height = GetMenuCursorDimensionByFont(list->template.fontId, 1); + FillWindowPixelRect(list->template.windowId, + (list->template.fillValue << 4) | (list->template.fillValue), + list->template.cursor_X, + selectedRow * yMultiplier + list->template.upText_Y, + width, + height); + } +} + +static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown) +{ + u16 selectedRow = list->selectedRow; + u16 scrollOffset = list->scrollOffset; + u16 newRow; + u32 newScroll; + + if (!movingDown) + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1; + + if (scrollOffset == 0) + { + while (selectedRow != 0) + { + selectedRow--; + if (list->template.items[scrollOffset + selectedRow].id != -3) + { + list->selectedRow = selectedRow; + return 1; + } + } + + return 0; + } + else + { + while (selectedRow > newRow) + { + selectedRow--; + if (list->template.items[scrollOffset + selectedRow].id != -3) + { + list->selectedRow = selectedRow; + return 1; + } + } + + newScroll = scrollOffset - 1; + } + } + else + { + if (list->template.maxShowed == 1) + newRow = 0; + else + newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)); + + if (scrollOffset == list->template.totalItems - list->template.maxShowed) + { + while (selectedRow < list->template.maxShowed - 1) + { + selectedRow++; + if (list->template.items[scrollOffset + selectedRow].id != -3) + { + list->selectedRow = selectedRow; + return 1; + } + } + + return 0; + } + else + { + while (selectedRow < newRow) + { + selectedRow++; + if (list->template.items[scrollOffset + selectedRow].id != -3) + { + list->selectedRow = selectedRow; + return 1; + } + } + + newScroll = scrollOffset + 1; + } + } + + list->selectedRow = newRow; + list->scrollOffset = newScroll; + return 2; +} + +static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown) +{ + if (count >= list->template.maxShowed) + { + FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed); + } + else + { + u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3; + + if (!movingDown) + { + u16 y, width, height; + + ScrollWindow(list->template.windowId, 1, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset, 0, count); + + y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y; + width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8; + height = (GetWindowAttribute(list->template.windowId, WINDOW_HEIGHT) * 8) - y; + FillWindowPixelRect(list->template.windowId, + (list->template.fillValue << 4) | (list->template.fillValue), + 0, y, width, height); + } + else + { + u16 width; + + ScrollWindow(list->template.windowId, 0, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue)); + ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count); + + width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8; + FillWindowPixelRect(list->template.windowId, + (list->template.fillValue << 4) | (list->template.fillValue), + 0, 0, width, list->template.upText_Y); + } + } +} + +static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown) +{ + u16 oldSelectedRow; + u8 selectionChange, i, cursorCount; + + oldSelectedRow = list->selectedRow; + cursorCount = 0; + selectionChange = 0; + for (i = 0; i < count; i++) + { + do + { + u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown); + selectionChange |= ret; + if (ret != 2) + break; + cursorCount++; + } while (list->template.items[list->scrollOffset + list->selectedRow].id == -3); + } + + if (updateCursorAndCallCallback) + { + switch (selectionChange) + { + case 0: + default: + return TRUE; + case 1: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, 0); + CopyWindowToVram(list->template.windowId, 2); + break; + case 2: + case 3: + ListMenuErasePrintedCursor(list, oldSelectedRow); + ListMenuScroll(list, cursorCount, movingDown); + ListMenuDrawCursor(list); + ListMenuCallSelectionChangedCallback(list, 0); + CopyWindowToVram(list->template.windowId, 2); + break; + } + } + + return FALSE; +} + +static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2) +{ + if (list->template.moveCursorFunc != NULL) + list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].id, a2, list); +} + +// unused +void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal) +{ + gUnknown_03006300.cursorPal = cursorPal; + gUnknown_03006300.fillValue = fillValue; + gUnknown_03006300.cursorShadowPal = cursorShadowPal; + gUnknown_03006300.field_3_7 = 1; +} + +void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list) +{ + if (!arg1) + PlaySE(SE_SELECT); +} diff --git a/src/menu.c b/src/menu.c index b20ab5164..0aaf2d186 100644 --- a/src/menu.c +++ b/src/menu.c @@ -25,11 +25,11 @@ #define STD_WINDOW_PALETTE_NUM 14 #define STD_WINDOW_BASE_TILE_NUM 0x214 -struct SomeUnkStruct_60F0D4 +struct MoveMenuInfoIcon { - u8 unk1; - u8 unk2; - u16 unk3; + u8 width; + u8 height; + u16 offset; }; struct Menu @@ -48,7 +48,7 @@ struct Menu bool8 APressMuted; }; -static EWRAM_DATA u8 gUnknown_0203CD8C = 0; +static EWRAM_DATA u8 gStartMenuWindowId = 0; static EWRAM_DATA u8 gUnknown_0203CD8D = 0; static EWRAM_DATA struct Menu gUnknown_0203CD90 = {0}; static EWRAM_DATA u16 gUnknown_0203CD9C = 0; @@ -76,34 +76,36 @@ static const struct WindowTemplate gUnknown_0860F0A8 = const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal"); const u8 gUnknown_0860F0D0[] = { 15, 1, 2 }; -const struct SomeUnkStruct_60F0D4 gUnknown_0860F0D4[] = -{ - { 12, 12, 0x00 }, - { 32, 12, 0x20 }, - { 32, 12, 0x64 }, - { 32, 12, 0x60 }, - { 32, 12, 0x80 }, - { 32, 12, 0x48 }, - { 32, 12, 0x44 }, - { 32, 12, 0x6C }, - { 32, 12, 0x68 }, - { 32, 12, 0x88 }, - { 32, 12, 0xA4 }, - { 32, 12, 0x24 }, - { 32, 12, 0x28 }, - { 32, 12, 0x2C }, - { 32, 12, 0x40 }, - { 32, 12, 0x84 }, - { 32, 12, 0x4C }, - { 32, 12, 0xA0 }, - { 32, 12, 0x8C }, - { 42, 12, 0xA8 }, - { 42, 12, 0xC0 }, - { 42, 12, 0xC8 }, - { 42, 12, 0xE0 }, - { 42, 12, 0xE8 }, - { 8, 8, 0xAE }, - { 8, 8, 0xAF }, + +// Table of move info icon offsets in graphics/interface_fr/menu.png +const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] = +{ // { width, height, offset } + { 12, 12, 0x00 }, // Unused + { 32, 12, 0x20 }, // Normal icon + { 32, 12, 0x64 }, // Fight icon + { 32, 12, 0x60 }, // Flying icon + { 32, 12, 0x80 }, // Poison icon + { 32, 12, 0x48 }, // Ground icon + { 32, 12, 0x44 }, // Rock icon + { 32, 12, 0x6C }, // Bug icon + { 32, 12, 0x68 }, // Ghost icon + { 32, 12, 0x88 }, // Steel icon + { 32, 12, 0xA4 }, // ??? (Mystery) icon + { 32, 12, 0x24 }, // Fire icon + { 32, 12, 0x28 }, // Water icon + { 32, 12, 0x2C }, // Grass icon + { 32, 12, 0x40 }, // Electric icon + { 32, 12, 0x84 }, // Psychic icon + { 32, 12, 0x4C }, // Ice icon + { 32, 12, 0xA0 }, // Dragon icon + { 32, 12, 0x8C }, // Dark icon + { 42, 12, 0xA8 }, // -Type- icon + { 42, 12, 0xC0 }, // -Power- icon + { 42, 12, 0xC8 }, // -Accuracy- icon + { 42, 12, 0xE0 }, // -PP- icon + { 42, 12, 0xE8 }, // -Effect- icon + { 8, 8, 0xAE }, // Unused (Small white pokeball) + { 8, 8, 0xAF }, // Unused (Small dark pokeball) }; // Forward declarations @@ -125,7 +127,7 @@ extern void task_free_buf_after_copying_tile_data_to_vram(u8 taskId); void sub_81971D0(void) { InitWindows(gUnknown_0860F098); - gUnknown_0203CD8C = 0xFF; + gStartMenuWindowId = 0xFF; gUnknown_0203CD8D = 0xFF; } @@ -471,22 +473,22 @@ u8 GetPlayerTextSpeed(void) u8 sub_81979C4(u8 a1) { - if (gUnknown_0203CD8C == 0xFF) - gUnknown_0203CD8C = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139); - return gUnknown_0203CD8C; + if (gStartMenuWindowId == 0xFF) + gStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139); + return gStartMenuWindowId; } u8 GetStartMenuWindowId(void) { - return gUnknown_0203CD8C; + return gStartMenuWindowId; } -void remove_start_menu_window_maybe(void) +void RemoveStartMenuWindow(void) { - if (gUnknown_0203CD8C != 0xFF) + if (gStartMenuWindowId != 0xFF) { - RemoveWindow(gUnknown_0203CD8C); - gUnknown_0203CD8C = 0xFF; + RemoveWindow(gStartMenuWindowId); + gStartMenuWindowId = 0xFF; } } @@ -1988,7 +1990,7 @@ void sub_8199F74(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 spee AddTextPrinter(&printer, speed, callback); } -void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3) +void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) { int count = 0; while (gSaveBlock2Ptr->playerName[count] != EOS) @@ -1996,7 +1998,7 @@ void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3) StringExpandPlaceholders(gStringVar4, src); - PrintTextOnWindow(windowId, 1, gStringVar4, a2, a3, 0xFF, 0); + PrintTextOnWindow(windowId, 1, gStringVar4, x, y, 0xFF, 0); } //Screw this function, it's long and unreferenced and ugh @@ -2364,22 +2366,22 @@ void sub_819A2BC(u8 palOffset, u8 palId) void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y) { - BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gUnknown_0860F0D4[iconId].unk3 * 32, 0, 0, 128, 128, x, y, gUnknown_0860F0D4[iconId].unk1, gUnknown_0860F0D4[iconId].unk2); + BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height); } -void sub_819A344(u8 a0, u8 *a1, u8 a2) +void sub_819A344(u8 a0, u8 *dest, u8 color) { s32 curFlag; s32 flagCount; u8 *endOfString; - u8 *string = a1; + u8 *string = dest; *(string++) = EXT_CTRL_CODE_BEGIN; *(string++) = EXT_CTRL_CODE_COLOR; - *(string++) = a2; + *(string++) = color; *(string++) = EXT_CTRL_CODE_BEGIN; *(string++) = EXT_CTRL_CODE_SHADOW; - *(string++) = a2 + 1; + *(string++) = color + 1; switch (a0) { diff --git a/src/overworld.c b/src/overworld.c index 6ee338cb8..920f6f8f1 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -161,7 +161,7 @@ extern void FieldEffectActiveListClear(void); extern void SetUpFieldTasks(void); extern void sub_81BE6B8(void); extern void sub_80AAFA4(void); -extern void sub_809FA9C(void); +extern void ShowStartMenu(void); extern void sub_80AEE84(void); extern void mapldr_default(void); extern void npc_paltag_set_load(u8); @@ -2795,7 +2795,7 @@ static void sub_8087510(void) static void sub_808751C(void) { PlaySE(SE_WIN_OPEN); - sub_809FA9C(); + ShowStartMenu(); ScriptContext2_Enable(); } diff --git a/src/pokeball.c b/src/pokeball.c index 795a33827..8173c4a90 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -43,7 +43,7 @@ static void sub_80768F0(struct Sprite *sprite); static void sub_80769A8(struct Sprite *sprite); static void sub_80769CC(struct Sprite *sprite); static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite); -static u16 GetBankPokeballItemId(u8 bank); +static u16 GetBattlerPokeballItemId(u8 battlerId); // rom const data @@ -317,11 +317,11 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] = }, }; -#define tFrames data[0] -#define tPan data[1] -#define tThrowId data[2] -#define tBank data[3] -#define tOpponentBank data[4] +#define tFrames data[0] +#define tPan data[1] +#define tThrowId data[2] +#define tBattler data[3] +#define tOpponentBattler data[4] u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) { @@ -333,17 +333,17 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); gTasks[taskId].tPan = pan; gTasks[taskId].tThrowId = kindOfThrow; - gTasks[taskId].tBank = gActiveBattler; + gTasks[taskId].tBattler = gActiveBattler; return 0; } -#define sBank data[6] +#define sBattler data[6] static void Task_DoPokeballSendOutAnim(u8 taskId) { u16 throwCaseId; - u8 bank; + u8 battlerId; u16 itemId, ballId; u8 ballSpriteId; bool8 notSendOut = FALSE; @@ -355,12 +355,12 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) } throwCaseId = gTasks[taskId].tThrowId; - bank = gTasks[taskId].tBank; + battlerId = gTasks[taskId].tBattler; - if (GetBattlerSide(bank) != B_SIDE_PLAYER) - itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL); + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); else - itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL); + itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); ballId = ItemIdToBallId(itemId); LoadBallGfx(ballId); @@ -372,15 +372,15 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) switch (throwCaseId) { case POKEBALL_PLAYER_SENDOUT: - gBattlerTarget = bank; + gBattlerTarget = battlerId; gSprites[ballSpriteId].pos1.x = 24; gSprites[ballSpriteId].pos1.y = 68; gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; break; case POKEBALL_OPPONENT_SENDOUT: - gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(bank, BANK_X_POS); - gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(bank, BANK_Y_POS) + 24; - gBattlerTarget = bank; + gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(battlerId, BANK_X_POS); + gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(battlerId, BANK_Y_POS) + 24; + gBattlerTarget = battlerId; gSprites[ballSpriteId].data[0] = 0; gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut; break; @@ -390,7 +390,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) break; } - gSprites[ballSpriteId].sBank = gBattlerTarget; + gSprites[ballSpriteId].sBattler = gBattlerTarget; if (!notSendOut) { DestroyTask(taskId); @@ -404,7 +404,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) gSprites[ballSpriteId].data[5] = -40; sub_80A68D4(&gSprites[ballSpriteId]); gSprites[ballSpriteId].oam.affineParam = taskId; - gTasks[taskId].tOpponentBank = gBattlerTarget; + gTasks[taskId].tOpponentBattler = gBattlerTarget; gTasks[taskId].func = TaskDummy; PlaySE(SE_NAGERU); } @@ -415,7 +415,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite) { u16 ballId; u8 taskId = sprite->oam.affineParam; - u8 opponentBank = gTasks[taskId].tOpponentBank; + u8 opponentBattler = gTasks[taskId].tOpponentBattler; u8 noOfShakes = gTasks[taskId].tThrowId; StartSpriteAnim(sprite, 1); @@ -425,10 +425,10 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite) sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[5] = 0; - ballId = ItemIdToBallId(GetBankPokeballItemId(opponentBank)); + ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); - sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBank, 14, ballId); - sprite->sBank = opponentBank; + sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); + sprite->sBattler = opponentBattler; sprite->data[7] = noOfShakes; DestroyTask(taskId); sprite->callback = sub_80756D4; @@ -438,8 +438,8 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite) #undef tFrames #undef tPan #undef tThrowId -#undef tBank -#undef tOpponentBank +#undef tBattler +#undef tOpponentBattler static void sub_80756D4(struct Sprite *sprite) { @@ -452,9 +452,9 @@ static void sub_80756E0(struct Sprite *sprite) { sprite->data[5] = 0; sprite->callback = sub_807574C; - StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 2); - AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]); - gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0; + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2); + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0; } } @@ -463,17 +463,17 @@ static void sub_807574C(struct Sprite *sprite) sprite->data[5]++; if (sprite->data[5] == 11) PlaySE(SE_SUIKOMU); - if (gSprites[gBattlerSpriteIds[sprite->sBank]].affineAnimEnded) + if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded) { StartSpriteAnim(sprite, 2); - gSprites[gBattlerSpriteIds[sprite->sBank]].invisible = TRUE; + gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE; sprite->data[5] = 0; sprite->callback = sub_80757E4; } else { - gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] += 0x60; - gSprites[gBattlerSpriteIds[sprite->sBank]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] >> 8; + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] += 0x60; + gSprites[gBattlerSpriteIds[sprite->sBattler]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] >> 8; } } @@ -641,7 +641,7 @@ static void sub_8075970(struct Sprite *sprite) #define tCryTaskSpecies data[0] #define tCryTaskPan data[1] #define tCryTaskWantedCry data[2] -#define tCryTaskBank data[3] +#define tCryTaskBattler data[3] #define tCryTaskMonSpriteId data[4] #define tCryTaskMonPtr1 data[5] #define tCryTaskMonPtr2 data[6] @@ -653,7 +653,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) u8 wantedCry = gTasks[taskId].tCryTaskWantedCry; s8 pan = gTasks[taskId].tCryTaskPan; u16 species = gTasks[taskId].tCryTaskSpecies; - u8 bank = gTasks[taskId].tCryTaskBank; + u8 battlerId = gTasks[taskId].tCryTaskBattler; u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId; struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); @@ -669,7 +669,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) PlayCry3(species, pan, 0); else PlayCry3(species, pan, 11); - gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; DestroyTask(taskId); break; case 2: @@ -685,7 +685,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) else PlayCry4(species, pan, 12); - gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; DestroyTask(taskId); } else @@ -724,7 +724,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) else PlayCry4(species, pan, 11); - gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; DestroyTask(taskId); break; } @@ -732,13 +732,13 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) { - u8 bank = sprite->sBank; + u8 battlerId = sprite->sBattler; u32 ballId; StartSpriteAnim(sprite, 1); - ballId = ItemIdToBallId(GetBankPokeballItemId(bank)); + ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); - sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBank, 14, ballId); + sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId); sprite->callback = HandleBallAnimEnd; if (gMain.inBattle) @@ -749,19 +749,19 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) u16 wantedCryCase; u8 taskId; - if (GetBattlerSide(bank) != B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { - mon = &gEnemyParty[gBattlerPartyIndexes[bank]]; + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; pan = 25; } else { - mon = &gPlayerParty[gBattlerPartyIndexes[bank]]; + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; pan = -25; } species = GetMonData(mon, MON_DATA_SPECIES); - if ((bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -777,39 +777,39 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1) wantedCryCase = 0; - else if (bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) wantedCryCase = 1; else wantedCryCase = 2; - gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 1; + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1; taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3); gTasks[taskId].tCryTaskSpecies = species; gTasks[taskId].tCryTaskPan = pan; gTasks[taskId].tCryTaskWantedCry = wantedCryCase; - gTasks[taskId].tCryTaskBank = bank; - gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBank]; + gTasks[taskId].tCryTaskBattler = battlerId; + gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler]; gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10; gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon); gTasks[taskId].tCryTaskState = 0; } - StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 1); + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1); - if (GetBattlerSide(sprite->sBank) == B_SIDE_OPPONENT) - gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039B58; + if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT) + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58; else - gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039E44; + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44; - AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]); - gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0x1000; + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; } #undef tCryTaskSpecies #undef tCryTaskPan #undef tCryTaskWantedCry -#undef tCryTaskBank +#undef tCryTaskBattler #undef tCryTaskMonSpriteId #undef tCryTaskMonPtr1 #undef tCryTaskMonPtr2 @@ -828,37 +828,37 @@ static void sub_8075FB4(struct Sprite *sprite) static void HandleBallAnimEnd(struct Sprite *sprite) { bool8 affineAnimEnded = FALSE; - u8 bank = sprite->sBank; + u8 battlerId = sprite->sBattler; - gSprites[gBattlerSpriteIds[bank]].invisible = FALSE; + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; if (sprite->animEnded) sprite->invisible = TRUE; - if (gSprites[gBattlerSpriteIds[bank]].affineAnimEnded) + if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded) { - StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[bank]], 0); + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); affineAnimEnded = TRUE; } else { - gSprites[gBattlerSpriteIds[bank]].data[1] -= 288; - gSprites[gBattlerSpriteIds[bank]].pos2.y = gSprites[gBattlerSpriteIds[bank]].data[1] >> 8; + gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288; + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8; } if (sprite->animEnded && affineAnimEnded) { - s32 i, doneBanks; + s32 i, doneBattlers; - gSprites[gBattlerSpriteIds[bank]].pos2.y = 0; + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0; gDoingBattleAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); - for (doneBanks = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) { if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0) - doneBanks++; + doneBattlers++; } - if (doneBanks == MAX_BATTLERS_COUNT) + if (doneBattlers == MAX_BATTLERS_COUNT) { for (i = 0; i < POKEBALL_COUNT; i++) FreeBallGfx(i); @@ -868,7 +868,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite) static void sub_80760F8(struct Sprite *sprite) { - u8 bank = sprite->sBank; + u8 battlerId = sprite->sBattler; sprite->data[4]++; if (sprite->data[4] == 40) @@ -883,21 +883,21 @@ static void sub_80760F8(struct Sprite *sprite) } else if (sprite->data[4] == 315) { - FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBank]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]); + FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum); + DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); DestroySpriteAndFreeResources(sprite); if (gMain.inBattle) - gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; } } static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) { sprite->data[0] = 25; - sprite->data[2] = GetBattlerSpriteCoord(sprite->sBank, 2); - sprite->data[4] = GetBattlerSpriteCoord(sprite->sBank, 3) + 24; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24; sprite->data[5] = -30; - sprite->oam.affineParam = sprite->sBank; + sprite->oam.affineParam = sprite->sBattler; sub_80A68D4(sprite); sprite->callback = SpriteCB_PlayerMonSendOut_2; } @@ -923,7 +923,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) } r4 = sprite->data[0]; sub_80A6F3C(sprite); - sprite->data[7] += sprite->sBank / 3; + sprite->data[7] += sprite->sBattler / 3; sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]); sprite->oam.affineParam += 0x100; if ((sprite->oam.affineParam >> 8) % 3 != 0) @@ -946,11 +946,11 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) sprite->pos1.y += sprite->pos2.y; sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->sBank = sprite->oam.affineParam & 0xFF; + sprite->sBattler = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 - && sprite->sBank == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) sprite->callback = SpriteCB_ReleaseMon2FromBall; else sprite->callback = SpriteCB_ReleaseMonFromBall; @@ -976,26 +976,26 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) { sprite->data[0] = 0; if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 - && sprite->sBank == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) sprite->callback = SpriteCB_ReleaseMon2FromBall; else sprite->callback = SpriteCB_ReleaseMonFromBall; } } -#undef sBank +#undef sBattler static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d) { return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE); } -static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 bank, u32 arg2) +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2) { - return LaunchBallFadeMonTask(unFadeLater, bank, arg2, BALL_POKE); + return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); } -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) { u8 spriteId; @@ -1012,7 +1012,7 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oa gSprites[monSpriteId].data[7] = species; gSprites[spriteId].data[1] = g; - gSprites[spriteId].data[2] = bank; + gSprites[spriteId].data[2] = battlerId; gSprites[spriteId].data[3] = h; gSprites[spriteId].data[4] = h >> 0x10; gSprites[spriteId].oam.priority = oamPriority; @@ -1027,7 +1027,7 @@ static void sub_8076524(struct Sprite *sprite) { u8 r5; u8 r7 = sprite->data[0]; - u8 bank = sprite->data[2]; + u8 battlerId = sprite->data[2]; u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); if (sprite->subpriority != 0) @@ -1037,7 +1037,7 @@ static void sub_8076524(struct Sprite *sprite) StartSpriteAnim(sprite, 1); LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); - sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, bank, r4); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); sprite->callback = sub_80765E0; gSprites[r7].invisible = FALSE; StartSpriteAffineAnim(&gSprites[r7], 1); @@ -1175,16 +1175,16 @@ static void DestroySpriteAndFreeResources_(struct Sprite *sprite) DestroySpriteAndFreeResources(sprite); } -void sub_8076918(u8 bank) +void sub_8076918(u8 battlerId) { - struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[bank]]; + struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]]; healthboxSprite->data[0] = 5; healthboxSprite->data[1] = 0; healthboxSprite->pos2.x = 0x73; healthboxSprite->pos2.y = 0; healthboxSprite->callback = sub_80769CC; - if (GetBattlerSide(bank) != B_SIDE_PLAYER) + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) { healthboxSprite->data[0] = -healthboxSprite->data[0]; healthboxSprite->data[1] = -healthboxSprite->data[1]; @@ -1192,7 +1192,7 @@ void sub_8076918(u8 bank) healthboxSprite->pos2.y = -healthboxSprite->pos2.y; } gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]); - if (GetBattlerPosition(bank) == B_POSITION_PLAYER_RIGHT) + if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT) healthboxSprite->callback = sub_80769A8; } @@ -1214,13 +1214,13 @@ static void sub_80769CC(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy; } -void DoHitAnimHealthboxEffect(u8 bank) +void DoHitAnimHealthboxEffect(u8 battlerId) { u8 spriteId; spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect); gSprites[spriteId].data[0] = 1; - gSprites[spriteId].data[1] = gHealthboxSpriteIds[bank]; + gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId]; gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect; } @@ -1267,10 +1267,10 @@ void FreeBallGfx(u8 ballId) FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag); } -static u16 GetBankPokeballItemId(u8 bank) +static u16 GetBattlerPokeballItemId(u8 battlerId) { - if (GetBattlerSide(bank) == B_SIDE_PLAYER) - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL); + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); else - return GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL); + return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); } diff --git a/src/pokeblock.c b/src/pokeblock.c index b9a1f6bf3..b244409c4 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -91,7 +91,7 @@ static void sub_81362E0(void); static void sub_8136344(void); static void HandlePokeblockListMenuItems(void); static void sub_81363BC(void); -static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2); +static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2); static void PutPokeblockInfoText(void); static void HandlePokeblockMenuCursor(u16 cursorPos, u16 arg1); static void PutPokeblockListMenuString(u8 *dst, u16 pkblId); @@ -319,18 +319,18 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate = .unk_08 = NULL, .totalItems = 0, .maxShowed = 0, - .unk_10 = 1, + .windowId = 1, .unk_11 = 0, .unk_12 = 1, - .cursor_Y = 0, + .cursor_X = 0, .upText_Y = 1, - .cursorColor = 2, - .fillColor = 0, - .cursorShadowColor = 3, - .unk_16_0 = FALSE, - .spaceBetweenItems = 32, - .unk_16_7 = FALSE, - .unk_17_0 = 1, + .cursorPal = 2, + .fillValue = 0, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .unk_16_3 = 0, + .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD, + .fontId = 1, .cursorKind = 1 }; @@ -620,7 +620,7 @@ static void HandlePokeblockListMenuItems(void) sPokeblockMenu->items[i].id = LIST_B_PRESSED; gMultiuseListMenuTemplate = sPokeblockListMenuTemplate; - gMultiuseListMenuTemplate.unk_17_0 = 7; + gMultiuseListMenuTemplate.fontId = 7; gMultiuseListMenuTemplate.totalItems = sPokeblockMenu->itemsNo; gMultiuseListMenuTemplate.items = sPokeblockMenu->items; gMultiuseListMenuTemplate.maxShowed = sPokeblockMenu->maxShowed; @@ -639,7 +639,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId) StringExpandPlaceholders(txtPtr, gText_LvVar1); } -static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2) +static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2) { if (arg1 != TRUE) { @@ -869,7 +869,7 @@ static void Task_FreeDataAndExitPokeblockCase(u8 taskId) if (sPokeblockMenu->caseId == PBLOCK_CASE_FEEDER || sPokeblockMenu->caseId == PBLOCK_CASE_GIVE) gFieldCallback = sub_80AF168; - sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); sub_8136418(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -893,7 +893,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId) { if (gMain.newKeys & SELECT_BUTTON) { - sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1) { PlaySE(SE_SELECT); @@ -908,7 +908,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId) u16 oldPosition = sSavedPokeblockData.lastItemPos; s32 itemId = ListMenuHandleInputGetItemId(data[0]); - sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (oldPosition != sSavedPokeblockData.lastItemPos) { HandlePokeblockMenuCursor(oldPosition, 5); @@ -945,7 +945,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); - sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); HandlePokeblocksSwap(taskId, FALSE); } else @@ -954,7 +954,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId) u16 var = sSavedPokeblockData.lastItemPos; s32 itemId = ListMenuHandleInputGetItemId(data[0]); - sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (i != sSavedPokeblockData.lastItemPage || var != sSavedPokeblockData.lastItemPos) { for (i = 0; i < 9; i++) @@ -996,7 +996,7 @@ static void HandlePokeblocksSwap(u8 taskId, bool8 noSwap) u16 swappedFromId = sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos; sPokeblockMenu->isSwapping = FALSE; - sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); + DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos); if (!noSwap && data[2] != swappedFromId && data[2] != swappedFromId - 1) { @@ -1112,7 +1112,7 @@ static void HandleErasePokeblock(u8 taskId) lastPos = &sSavedPokeblockData.lastItemPos; data = gTasks[taskId].data; - sub_81AE6C8(data[0], lastPage, lastPos); + DestroyListMenuTask(data[0], lastPage, lastPos); HandlePokeblockMenuCursor(*lastPos, 5); SetMenuItemsCountAndMaxShowed(); sub_81362E0(); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 3ebdc3d6d..834ca6f7d 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -26,6 +26,7 @@ #include "international_string_util.h" #include "scanline_effect.h" #include "menu_helpers.h" +#include "daycare.h" struct ContestMove { @@ -3024,7 +3025,7 @@ void sub_81C31F0(u8 *a) { u8 level = gUnknown_0203CF1C->summary.metLevel; if (level == 0) - level = 5; + level = EGG_HATCH_LEVEL; ConvertIntToDecimalStringN(a, level, 0, 3); UnkTextUtil_SetPtrI(3, a); } diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index cedd3aee4..45f0f5a9e 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -13,6 +13,7 @@ #include "constants/species.h" #include "battle_interface.h" #include "battle_anim.h" +#include "data2.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; @@ -25,14 +26,14 @@ extern u16 gBattle_BG3_Y; extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[]; -extern void sub_806A068(u16 species, u8 bankIdentity); -extern void sub_806A12C(u16 backPicId, u8 bankIdentity); +extern void sub_806A068(u16 species, u8 battlerPosition); +extern void sub_806A12C(u16 backPicId, u8 battlerPosition); // this file's functions static void CB2_ReshowBattleScreenAfterMenu(void); -static bool8 LoadBattlerSpriteGfx(u8 bank); -static void CreateBattlerSprite(u8 bank); -static void CreateHealthboxSprite(u8 bank); +static bool8 LoadBattlerSpriteGfx(u8 battlerId); +static void CreateBattlerSprite(u8 battlerId); +static void CreateHealthboxSprite(u8 battlerId); static void sub_80A95F4(void); void nullsub_35(void) @@ -217,16 +218,6 @@ static bool8 LoadBattlerSpriteGfx(u8 battler) return TRUE; } -// todo: get rid of it once the struct is declared in a header -struct MonCoords -{ - // This would use a bitfield, but sub_8079F44 - // uses it as a u8 and casting won't match. - u8 coords; // u8 x:4, y:4; - u8 y_offset; -}; -extern const struct MonCoords gTrainerBackPicCoords[]; - static void CreateBattlerSprite(u8 battler) { if (battler < gBattlersCount) diff --git a/src/secret_base.c b/src/secret_base.c index df754f2a0..c886912f4 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -6,8 +6,8 @@ #include "main.h" #include "task.h" #include "palette.h" -#include "list_menu.h" #include "window.h" +#include "list_menu.h" #include "menu.h" #include "menu_helpers.h" #include "menu_indicators.h" @@ -66,7 +66,7 @@ EWRAM_DATA struct SecretBaseListMenuBuffer *gUnknown_0203A020 = NULL; void sub_80E9C9C(u8 taskId); void game_continue(u8 taskId); -void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu); +void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu); void sub_80E9E00(u8 taskId); void sub_80E9E44(u8 taskId); void sub_80E9E90(u8 taskId); @@ -913,13 +913,13 @@ void game_continue(u8 taskId) data[3] = 8; } gMultiuseListMenuTemplate = gUnknown_0858D07C; - gMultiuseListMenuTemplate.unk_10 = data[6]; + gMultiuseListMenuTemplate.windowId = data[6]; gMultiuseListMenuTemplate.totalItems = data[0]; gMultiuseListMenuTemplate.items = gUnknown_0203A020->items; gMultiuseListMenuTemplate.maxShowed = data[3]; } -void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu) +void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu) { if (flag != TRUE) { @@ -953,14 +953,14 @@ void sub_80E9E90(u8 taskId) data = gTasks[taskId].data; input = ListMenuHandleInputGetItemId(data[5]); - sub_81AE860(data[5], &data[2], &data[1]); + ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); switch (input) { case -1: break; case -2: PlaySE(SE_SELECT); - sub_81AE6C8(data[5], NULL, NULL); + DestroyListMenuTask(data[5], NULL, NULL); RemoveScrollIndicatorArrowPair(data[8]); sub_819746C(data[6], 0); ClearWindowTilemap(data[6]); @@ -1042,7 +1042,7 @@ void sub_80EA08C(u8 taskId) data = gTasks[taskId].data; sub_8197434(0, 0); - sub_81AE6C8(data[5], &data[2], &data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); gSaveBlock1Ptr->secretBases[data[4]].sbr_field_1_6 = 0; game_continue(taskId); sub_812225C(&data[2], &data[1], data[3], data[0]); @@ -1061,7 +1061,7 @@ void sub_80EA13C(u8 taskId) data = gTasks[taskId].data; sub_8197434(0, 0); - sub_81AE6C8(data[5], &data[2], &data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); sub_80E9E00(taskId); gTasks[taskId].func = sub_80E9E90; } diff --git a/src/start_menu.c b/src/start_menu.c index d076d307d..c248ca86b 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -8,6 +8,31 @@ #include "text.h" #include "strings.h" #include "bg.h" +#include "field_effect.h" +#include "task.h" +#include "overworld.h" +#include "link.h" +#include "battle_frontier_2.h" +#include "rom_818CFC8.h" +#include "field_specials.h" +#include "field_map_obj_helpers.h" +#include "script.h" +#include "main.h" +#include "sound.h" +#include "pokedex.h" +#include "field_weather.h" +#include "palette.h" +#include "item_menu.h" +#include "option_menu.h" +#include "event_scripts.h" +#include "save.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "text_window.h" +#include "load_save.h" +#include "international_string_util.h" +#include "constants/songs.h" +#include "field_player_avatar.h" // Menu actions enum @@ -27,49 +52,99 @@ enum MENU_ACTION_PYRAMID_BAG }; -extern bool32 is_c1_link_related_active(void); -extern bool32 InUnionRoom(void); -extern bool8 InBattlePike(void); -extern bool8 InBattlePyramid(void); -extern bool8 InMultiBattleRoom(void); -extern void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, u8 a1); -extern void sub_8198070(u8 windowId, u8 a1); - -// this file's functions -static void BuildStartMenuActions_LinkMode(void); -static void BuildStartMenuActions_UnionRoom(void); -static void BuildStartMenuActions_SafariZone(void); -static void BuildStartMenuActions_BattlePike(void); -static void BuildStartMenuActions_BattlePyramid(void); -static void BuildStartMenuActions_MultiBattleRoom(void); -static void BuildStartMenuActions_Normal(void); -bool8 StartMenu_Pokedex(void); -bool8 StartMenu_Pokemon(void); -bool8 StartMenu_Bag(void); -bool8 StartMenu_PokeNav(void); -bool8 StartMenu_PlayerName(void); -bool8 StartMenu_Save(void); -bool8 StartMenu_Option(void); -bool8 StartMenu_Exit(void); -bool8 StartMenu_SafariZoneRetire(void); -bool8 StartMenu_LinkModePlayerName(void); -bool8 StartMenu_BattlePyramidRetire(void); -bool8 StartMenu_BattlePyramidBag(void); - -// EWRAM vars -EWRAM_DATA u8 sSafariBallsWindowId = 0; -EWRAM_DATA u8 sBattlePyramidFloorWindowId = 0; -EWRAM_DATA u8 sStartMenuCursorPos = 0; -EWRAM_DATA u8 sNumStartMenuActions = 0; -EWRAM_DATA u8 sCurrentStartMenuActions[9] = {0}; -EWRAM_DATA u8 gUnknown_02037619[2] = {0}; -EWRAM_DATA bool8 (*gUnknown_0203761C)(void) = NULL; -EWRAM_DATA u8 gUnknown_02037620 = 0; -EWRAM_DATA u8 gUnknown_02037621 = 0; -EWRAM_DATA u8 gUnknown_02037622 = 0; - -// const rom data -static const struct WindowTemplate gSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; +// Save status +enum +{ + SAVE_IN_PROGRESS, + SAVE_SUCCESS, + SAVE_CANCELED, + SAVE_ERROR +}; + +EWRAM_DATA static u8 sSafariBallsWindowId = 0; +EWRAM_DATA static u8 sBattlePyramidFloorWindowId = 0; +EWRAM_DATA static u8 sStartMenuCursorPos = 0; +EWRAM_DATA static u8 sNumStartMenuActions = 0; +EWRAM_DATA static u8 sCurrentStartMenuActions[9] = {0}; +EWRAM_DATA static u8 sUnknown_02037619[2] = {0}; + +EWRAM_DATA static u8 (*sSaveDialogCallback)(void) = NULL; +EWRAM_DATA static u8 sSaveDialogTimer = 0; +EWRAM_DATA static bool8 sSavingComplete = FALSE; +EWRAM_DATA static u8 sSaveInfoWindowId = 0; + +// Extern variables +extern u8 gDifferentSaveFile; +extern u16 gSaveFileStatus; +extern u8 gUnknown_03005DB4; + +// Extern functions in uncompiled files +extern void sub_80AF688(void); +extern void var_800D_set_xB(void); +extern void sub_808B864(void); +extern void sub_80BB534(void); +extern void play_some_sound(void); +extern void CB2_PartyMenuFromStartMenu(void); +extern void CB2_PokeNav(void); +extern void sub_80C4DDC(void (*)(void)); +extern void sub_80C51C4(void (*)(void)); +extern void sub_80C4E74(u8, void (*)(void)); +extern void sub_81C4EFC(void); +extern void sub_80984F4(void); +extern void sub_81A9EC8(void); +extern void save_serialize_map(void); +extern void sub_81A9E90(void); + +// Menu action callbacks +static bool8 StartMenuPokedexCallback(void); +static bool8 StartMenuPokemonCallback(void); +static bool8 StartMenuBagCallback(void); +static bool8 StartMenuPokeNavCallback(void); +static bool8 StartMenuPlayerNameCallback(void); +static bool8 StartMenuSaveCallback(void); +static bool8 StartMenuOptionCallback(void); +static bool8 StartMenuExitCallback(void); +static bool8 StartMenuSafariZoneRetireCallback(void); +static bool8 StartMenuLinkModePlayerNameCallback(void); +static bool8 StartMenuBattlePyramidRetireCallback(void); +static bool8 StartMenuBattlePyramidBagCallback(void); + +// Menu callbacks +static bool8 SaveStartCallback(void); +static bool8 SaveCallback(void); +static bool8 BattlePyramidRetireStartCallback(void); +static bool8 BattlePyramidRetireReturnCallback(void); +static bool8 BattlePyramidRetireCallback(void); +static bool8 HandleStartMenuInput(void); + +// Save dialog callbacks +static u8 SaveConfirmSaveCallback(void); +static u8 SaveYesNoCallback(void); +static u8 SaveConfirmInputCallback(void); +static u8 SaveFileExistsCallback(void); +static u8 SaveConfirmOverwriteNoCallback(void); +static u8 SaveConfirmOverwriteCallback(void); +static u8 SaveOverwriteInputCallback(void); +static u8 SaveSavingMessageCallback(void); +static u8 SaveDoSaveCallback(void); +static u8 SaveSuccessCallback(void); +static u8 SaveReturnSuccessCallback(void); +static u8 SaveErrorCallback(void); +static u8 SaveReturnErrorCallback(void); +static u8 BattlePyramidConfirmRetireCallback(void); +static u8 BattlePyramidRetireYesNoCallback(void); +static u8 BattlePyramidRetireInputCallback(void); + +// Task callbacks +static void StartMenuTask(u8 taskId); +static void SaveGameTask(u8 taskId); +static void sub_80A0550(u8 taskId); +static void sub_80A08A4(u8 taskId); + +// Some other callback +static bool8 sub_809FA00(void); + +static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; static const u8* const sPyramindFloorNames[] = { @@ -83,27 +158,27 @@ static const u8* const sPyramindFloorNames[] = gText_Peak }; -static const struct WindowTemplate gPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8}; -static const struct WindowTemplate gPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8}; - -const struct MenuAction sStartMenuItems[] = -{ - {gText_MenuPokedex, {.u8_void = StartMenu_Pokedex}}, - {gText_MenuPokemon, {.u8_void = StartMenu_Pokemon}}, - {gText_MenuBag, {.u8_void = StartMenu_Bag}}, - {gText_MenuPokenav, {.u8_void = StartMenu_PokeNav}}, - {gText_MenuPlayer, {.u8_void = StartMenu_PlayerName}}, - {gText_MenuSave, {.u8_void = StartMenu_Save}}, - {gText_MenuOption, {.u8_void = StartMenu_Option}}, - {gText_MenuExit, {.u8_void = StartMenu_Exit}}, - {gText_MenuRetire, {.u8_void = StartMenu_SafariZoneRetire}}, - {gText_MenuPlayer, {.u8_void = StartMenu_LinkModePlayerName}}, - {gText_MenuRest, {.u8_void = StartMenu_Save}}, - {gText_MenuRetire, {.u8_void = StartMenu_BattlePyramidRetire}}, - {gText_MenuBag, {.u8_void = StartMenu_BattlePyramidBag}} +static const struct WindowTemplate sPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8}; +static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8}; + +static const struct MenuAction sStartMenuItems[] = +{ + {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}}, + {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}}, + {gText_MenuBag, {.u8_void = StartMenuBagCallback}}, + {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}}, + {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}}, + {gText_MenuSave, {.u8_void = StartMenuSaveCallback}}, + {gText_MenuOption, {.u8_void = StartMenuOptionCallback}}, + {gText_MenuExit, {.u8_void = StartMenuExitCallback}}, + {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}}, + {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}}, + {gText_MenuRest, {.u8_void = StartMenuSaveCallback}}, + {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}}, + {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}} }; -const struct BgTemplate gUnknown_085105A8[] = +static const struct BgTemplate sUnknown_085105A8[] = { { .bg = 0, @@ -116,15 +191,47 @@ const struct BgTemplate gUnknown_085105A8[] = } }; -const struct WindowTemplate gUnknown_085105AC[] = +static const struct WindowTemplate sUnknown_085105AC[] = { {0, 2, 0xF, 0x1A, 4, 0xF, 0x194}, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_085105BC = {0, 1, 1, 0xE, 0xA, 0xF, 8}; +static const struct WindowTemplate sSaveInfoWindowTemplate = {0, 1, 1, 0xE, 0xA, 0xF, 8}; + +// Local functions +static void BuildStartMenuActions(void); +static void AddStartMenuAction(u8 action); +static void BuildNormalStartMenu(void); +static void BuildSafariZoneStartMenu(void); +static void BuildLinkModeStartMenu(void); +static void BuildUnionRoomStartMenu(void); +static void BuildBattlePikeStartMenu(void); +static void BuildBattlePyramidStartMenu(void); +static void BuildMultiBattleRoomStartMenu(void); +static void ShowSafariBallsWindow(void); +static void ShowPyramidFloorWindow(void); +static void RemoveExtraStartMenuWindows(void); +static bool32 PrintStartMenuActions(s8 *pIndex, u32 count); +static bool32 InitStartMenuStep(void); +static void InitStartMenu(void); +static void CreateStartMenuTask(TaskFunc followupFunc); +static void InitSave(void); +static u8 RunSaveCallback(void); +static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void)); +static void sub_80A0014(void); +static void HideSaveInfoWindow(void); +static void SaveStartTimer(void); +static bool8 SaveSuccesTimer(void); +static bool8 SaveErrorTimer(void); +static void InitBattlePyramidRetire(void); +static void sub_80A03D8(void); +static bool32 sub_80A03E4(u8 *par1); +static void sub_80A0540(void); +static void ShowSaveInfoWindow(void); +static void RemoveSaveInfoWindow(void); +static void HideStartMenuWindow(void); -// code void SetDexPokemonPokenavFlags(void) // unused { FlagSet(FLAG_SYS_POKEDEX_GET); @@ -132,46 +239,70 @@ void SetDexPokemonPokenavFlags(void) // unused FlagSet(FLAG_SYS_POKENAV_GET); } -void BuildStartMenuActions(void) +static void BuildStartMenuActions(void) { sNumStartMenuActions = 0; + if (is_c1_link_related_active() == TRUE) - BuildStartMenuActions_LinkMode(); + { + BuildLinkModeStartMenu(); + } else if (InUnionRoom() == TRUE) - BuildStartMenuActions_UnionRoom(); + { + BuildUnionRoomStartMenu(); + } else if (GetSafariZoneFlag() == TRUE) - BuildStartMenuActions_SafariZone(); + { + BuildSafariZoneStartMenu(); + } else if (InBattlePike()) - BuildStartMenuActions_BattlePike(); + { + BuildBattlePikeStartMenu(); + } else if (InBattlePyramid()) - BuildStartMenuActions_BattlePyramid(); + { + BuildBattlePyramidStartMenu(); + } else if (InMultiBattleRoom()) - BuildStartMenuActions_MultiBattleRoom(); + { + BuildMultiBattleRoomStartMenu(); + } else - BuildStartMenuActions_Normal(); + { + BuildNormalStartMenu(); + } } -void AddStartMenuAction(u8 action) +static void AddStartMenuAction(u8 action) { AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action); } -static void BuildStartMenuActions_Normal(void) +static void BuildNormalStartMenu(void) { if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) + { AddStartMenuAction(MENU_ACTION_POKEDEX); + } if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE) + { AddStartMenuAction(MENU_ACTION_POKEMON); + } + AddStartMenuAction(MENU_ACTION_BAG); + if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE) + { AddStartMenuAction(MENU_ACTION_POKENAV); + } + AddStartMenuAction(MENU_ACTION_PLAYER); AddStartMenuAction(MENU_ACTION_SAVE); AddStartMenuAction(MENU_ACTION_OPTION); AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_SafariZone(void) +static void BuildSafariZoneStartMenu(void) { AddStartMenuAction(MENU_ACTION_RETIRE_SAFARI); AddStartMenuAction(MENU_ACTION_POKEDEX); @@ -182,29 +313,37 @@ static void BuildStartMenuActions_SafariZone(void) AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_LinkMode(void) +static void BuildLinkModeStartMenu(void) { AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_BAG); + if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE) + { AddStartMenuAction(MENU_ACTION_POKENAV); + } + AddStartMenuAction(MENU_ACTION_PLAYER_LINK); AddStartMenuAction(MENU_ACTION_OPTION); AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_UnionRoom(void) +static void BuildUnionRoomStartMenu(void) { AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_BAG); + if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE) + { AddStartMenuAction(MENU_ACTION_POKENAV); + } + AddStartMenuAction(MENU_ACTION_PLAYER); AddStartMenuAction(MENU_ACTION_OPTION); AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_BattlePike(void) +static void BuildBattlePikeStartMenu(void) { AddStartMenuAction(MENU_ACTION_POKEDEX); AddStartMenuAction(MENU_ACTION_POKEMON); @@ -213,7 +352,7 @@ static void BuildStartMenuActions_BattlePike(void) AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_BattlePyramid(void) +static void BuildBattlePyramidStartMenu(void) { AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_PYRAMID_BAG); @@ -224,7 +363,7 @@ static void BuildStartMenuActions_BattlePyramid(void) AddStartMenuAction(MENU_ACTION_EXIT); } -static void BuildStartMenuActions_MultiBattleRoom(void) +static void BuildMultiBattleRoomStartMenu(void) { AddStartMenuAction(MENU_ACTION_POKEMON); AddStartMenuAction(MENU_ACTION_PLAYER); @@ -232,74 +371,1056 @@ static void BuildStartMenuActions_MultiBattleRoom(void) AddStartMenuAction(MENU_ACTION_EXIT); } -void DisplaySafariBallsWindow(void) +static void ShowSafariBallsWindow(void) { - sSafariBallsWindowId = AddWindow(&gSafariBallsWindowTemplate); + sSafariBallsWindowId = AddWindow(&sSafariBallsWindowTemplate); PutWindowTilemap(sSafariBallsWindowId); - NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, 0); + NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, FALSE); ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_SafariBallStock); PrintTextOnWindow(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sSafariBallsWindowId, 2); } -void DisplayPyramidFloorWindow(void) +static void ShowPyramidFloorWindow(void) { - // TODO: fix location - if (gSaveBlock2Ptr->field_CAA[4] == 7) - sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_1); + if (gSaveBlock2Ptr->field_CAA[4] == 7) // TODO: fix location + { + sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1); + } else - sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2); + { + sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2); + } + PutWindowTilemap(sBattlePyramidFloorWindowId); - NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, 0); + NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->field_CAA[4]]); StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor); PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sBattlePyramidFloorWindowId, 2); } -void RemoveExtraStartMenuWindows(void) +static void RemoveExtraStartMenuWindows(void) { if (GetSafariZoneFlag()) { - sub_8198070(sSafariBallsWindowId, 0); + sub_8198070(sSafariBallsWindowId, FALSE); CopyWindowToVram(sSafariBallsWindowId, 2); RemoveWindow(sSafariBallsWindowId); } if (InBattlePyramid()) { - sub_8198070(sBattlePyramidFloorWindowId, 0); + sub_8198070(sBattlePyramidFloorWindowId, FALSE); RemoveWindow(sBattlePyramidFloorWindowId); } } -/* -// Prints n menu items starting at *index -static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n) +static bool32 PrintStartMenuActions(s8 *pIndex, u32 count) { - s8 _index = *index; - + s8 index = *pIndex; + do { - if (sStartMenuItems[sCurrentStartMenuActions[_index]].func.u8_void == StartMenu_PlayerName) + if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) { + PrintPlayerNameOnWindow(GetStartMenuWindowId(), sStartMenuItems[sCurrentStartMenuActions[index]].text, 8, (index << 4) + 9); + } + else { + StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text); + PrintTextOnWindow(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL); + } + + index++; + if (index >= sNumStartMenuActions) { + *pIndex = index; + return TRUE; + } + + count--; + } + while (count != 0); + + *pIndex = index; + return FALSE; +} + +static bool32 InitStartMenuStep(void) +{ + s8 value = sUnknown_02037619[0]; + + switch (value) + { + case 0: + sUnknown_02037619[0]++; + break; + case 1: + BuildStartMenuActions(); + sUnknown_02037619[0]++; + break; + case 2: + sub_81973A4(); + NewMenuHelpers_DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE); + sUnknown_02037619[1] = 0; + sUnknown_02037619[0]++; + break; + case 3: + if (GetSafariZoneFlag() != FALSE) + { + ShowSafariBallsWindow(); + } + if (InBattlePyramid() != FALSE) + { + ShowPyramidFloorWindow(); + } + sUnknown_02037619[0]++; + break; + case 4: + if (PrintStartMenuActions(&sUnknown_02037619[1], 2) == FALSE) { + break; + } + sUnknown_02037619[0]++; + break; + case 5: + sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos); + CopyWindowToVram(GetStartMenuWindowId(), TRUE); + return TRUE; + } + + return FALSE; +} + +static void InitStartMenu(void) +{ + sUnknown_02037619[0] = 0; + sUnknown_02037619[1] = 0; + while (!InitStartMenuStep()); +} + +static void StartMenuTask(u8 taskId) +{ + if (InitStartMenuStep() == TRUE) + { + SwitchTaskToFollowupFunc(taskId); + } +} + +static void CreateStartMenuTask(TaskFunc followupFunc) +{ + u8 taskId; + + sUnknown_02037619[0] = 0; + sUnknown_02037619[1] = 0; + taskId = CreateTask(StartMenuTask, 0x50); + SetTaskFuncWithFollowupFunc(taskId, StartMenuTask, followupFunc); +} + +static bool8 sub_809FA00(void) +{ + if (InitStartMenuStep() == FALSE) + { + return FALSE; + } + + sub_80AF688(); + return TRUE; +} + +void sub_809FA18(void) // Called from field_screen.s +{ + sUnknown_02037619[0] = 0; + sUnknown_02037619[1] = 0; + gUnknown_03005DB0 = sub_809FA00; +} + +void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s +{ + struct Task* task = &gTasks[taskId]; + switch(task->data[0]) + { + case 0: + if (InUnionRoom() == TRUE) + { + var_800D_set_xB(); } - else + + gMenuCallback = HandleStartMenuInput; + task->data[0]++; + break; + case 1: + if (gMenuCallback() == TRUE) { + DestroyTask(taskId); + } + break; + } +} + +void ShowStartMenu(void) // Called from overworld.c and field_control_avatar.s +{ + if (!is_c1_link_related_active()) + { + FreezeMapObjects(); + sub_808B864(); + sub_808BCF4(); + } + CreateStartMenuTask(sub_809FA34); + ScriptContext2_Enable(); +} +static bool8 HandleStartMenuInput(void) +{ + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = MoveMenuCursor(-1); + } + + if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = MoveMenuCursor(1); + } + + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback) + { + if (GetNationalPokedexCount(0) == 0) { + return FALSE; + } + } + + gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void; + + if (gMenuCallback != StartMenuSaveCallback + && gMenuCallback != StartMenuExitCallback + && gMenuCallback != StartMenuSafariZoneRetireCallback + && gMenuCallback != StartMenuBattlePyramidRetireCallback) + { + FadeScreen(1, 0); + } + + return FALSE; + } + + if (gMain.newKeys & (START_BUTTON | B_BUTTON)) + { + RemoveExtraStartMenuWindows(); + HideStartMenu(); + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuPokedexCallback(void) +{ + if (!gPaletteFade.active) + { + IncrementGameStat(GAME_STAT_CHECKED_POKEDEX); + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(sub_80BB534); // Display pokedex + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuPokemonCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(CB2_PartyMenuFromStartMenu); // Display party menu + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuBagCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(CB2_BagMenuFromStartMenu); // Display bag menu + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuPokeNavCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(CB2_PokeNav); // Display PokeNav + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuPlayerNameCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + + if (is_c1_link_related_active() || InUnionRoom()) + { + sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card + } + else if (FlagGet(FLAG_SYS_FRONTIER_PASS)) + { + sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass + } + else + { + sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card } - } while (++_index > sNumStartMenuActions); + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuSaveCallback(void) +{ + if (InBattlePyramid()) + { + RemoveExtraStartMenuWindows(); + } + + gMenuCallback = SaveStartCallback; // Display save menu + + return FALSE; +} + +static bool8 StartMenuOptionCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(CB2_InitOptionMenu); // Display option menu + gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu; + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuExitCallback(void) +{ + RemoveExtraStartMenuWindows(); + HideStartMenu(); // Hide start menu + + return TRUE; +} + +static bool8 StartMenuSafariZoneRetireCallback(void) +{ + RemoveExtraStartMenuWindows(); + HideStartMenu(); + SafariZoneRetirePrompt(); + + return TRUE; +} + +static bool8 StartMenuLinkModePlayerNameCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + overworld_free_bg_tilemaps(); + sub_80C4E74(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu); + + return TRUE; + } + + return FALSE; +} + +static bool8 StartMenuBattlePyramidRetireCallback(void) +{ + gMenuCallback = BattlePyramidRetireStartCallback; // Confirm retire + + return FALSE; +} + +void sub_809FDD4(void) // Called from battle_frontier_2.s +{ + sub_8197DF8(0, FALSE); + sub_80984F4(); + CreateStartMenuTask(sub_809FA34); + ScriptContext2_Enable(); +} + +static bool8 StartMenuBattlePyramidBagCallback(void) +{ + if (!gPaletteFade.active) + { + play_some_sound(); + RemoveExtraStartMenuWindows(); + overworld_free_bg_tilemaps(); + SetMainCallback2(sub_81C4EFC); // Display battle pyramid bag + + return TRUE; + } + + return FALSE; +} + +static bool8 SaveStartCallback(void) +{ + InitSave(); + gMenuCallback = SaveCallback; - if (--n == 0) + return FALSE; +} + +static bool8 SaveCallback(void) +{ + switch (RunSaveCallback()) { - *index = _index; + case SAVE_IN_PROGRESS: + return FALSE; + case SAVE_CANCELED: // Back to start menu + sub_8197DF8(0, FALSE); + InitStartMenu(); + gMenuCallback = HandleStartMenuInput; return FALSE; + case SAVE_SUCCESS: + case SAVE_ERROR: // Close start menu + sub_8197DF8(0, TRUE); + sub_80984F4(); + ScriptContext2_Disable(); + sub_81A9EC8(); + return TRUE; + } + + return FALSE; +} + +static bool8 BattlePyramidRetireStartCallback(void) +{ + InitBattlePyramidRetire(); + gMenuCallback = BattlePyramidRetireCallback; + + return FALSE; +} + +static bool8 BattlePyramidRetireReturnCallback(void) +{ + InitStartMenu(); + gMenuCallback = HandleStartMenuInput; + + return FALSE; +} + +static bool8 BattlePyramidRetireCallback(void) +{ + switch (RunSaveCallback()) + { + case SAVE_SUCCESS: // No (Stay in battle pyramid) + RemoveExtraStartMenuWindows(); + gMenuCallback = BattlePyramidRetireReturnCallback; + return FALSE; + case SAVE_IN_PROGRESS: + return FALSE; + case SAVE_CANCELED: // Yes (Retire from battle pyramid) + sub_8197DF8(0, TRUE); + sub_80984F4(); + ScriptContext2_Disable(); + ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88); + return TRUE; + } + + return FALSE; +} + +static void InitSave(void) +{ + save_serialize_map(); + sSaveDialogCallback = SaveConfirmSaveCallback; + sSavingComplete = FALSE; +} + +static u8 RunSaveCallback(void) +{ + // True if text is still printing + if (sub_8197224() == TRUE) + { + return SAVE_IN_PROGRESS; + } + + sSavingComplete = FALSE; + return sSaveDialogCallback(); +} + +void SaveGame(void) // Called from cable_club.s +{ + InitSave(); + CreateTask(SaveGameTask, 0x50); +} + +static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void)) +{ + StringExpandPlaceholders(gStringVar4, message); + sub_819786C(0, TRUE); + AddTextPrinterForMessage_2(TRUE); + sSavingComplete = TRUE; + sSaveDialogCallback = saveCallback; +} + +static void SaveGameTask(u8 taskId) +{ + u8 status = RunSaveCallback(); + + switch (status) + { + case SAVE_CANCELED: + case SAVE_ERROR: + gSpecialVar_Result = 0; + break; + case SAVE_SUCCESS: + gSpecialVar_Result = status; + break; + case SAVE_IN_PROGRESS: + return; + } + + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +static void sub_80A0014(void) +{ + sub_8197434(0, TRUE); +} + +static void HideSaveInfoWindow(void) +{ + RemoveSaveInfoWindow(); +} + +static void SaveStartTimer(void) +{ + sSaveDialogTimer = 60; +} + +static bool8 SaveSuccesTimer(void) +{ + sSaveDialogTimer--; + + if (gMain.heldKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + return TRUE; + } + else if (sSaveDialogTimer == 0) + { + return TRUE; + } + + return FALSE; +} + +static bool8 SaveErrorTimer(void) +{ + if (sSaveDialogTimer != 0) + { + sSaveDialogTimer--; + } + else if (gMain.heldKeys & A_BUTTON) + { + return TRUE; + } + + return FALSE; +} + +static u8 SaveConfirmSaveCallback(void) +{ + sub_819746C(GetStartMenuWindowId(), FALSE); + RemoveStartMenuWindow(); + ShowSaveInfoWindow(); + + if (InBattlePyramid()) + { + ShowSaveMessage(gText_BattlePyramidConfirmRest, SaveYesNoCallback); + } + else + { + ShowSaveMessage(gText_ConfirmSave, SaveYesNoCallback); + } + + return SAVE_IN_PROGRESS; +} + +static u8 SaveYesNoCallback(void) +{ + sub_8197930(); // Show Yes/No menu + sSaveDialogCallback = SaveConfirmInputCallback; + return SAVE_IN_PROGRESS; +} + +static u8 SaveConfirmInputCallback(void) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: // Yes + switch (gSaveFileStatus) + { + case 0: + case 2: + if (gDifferentSaveFile == FALSE) + { + sSaveDialogCallback = SaveFileExistsCallback; + return SAVE_IN_PROGRESS; + } + + sSaveDialogCallback = SaveSavingMessageCallback; + return SAVE_IN_PROGRESS; + default: + sSaveDialogCallback = SaveFileExistsCallback; + return SAVE_IN_PROGRESS; + } + case -1: // B Button + case 1: // No + HideSaveInfoWindow(); + sub_80A0014(); + return SAVE_CANCELED; + } + + return SAVE_IN_PROGRESS; +} + +// A different save file exists +static u8 SaveFileExistsCallback(void) +{ + if (gDifferentSaveFile == TRUE) + { + ShowSaveMessage(gText_DifferentSaveFile, SaveConfirmOverwriteNoCallback); + } + else + { + ShowSaveMessage(gText_AlreadySavedFile, SaveConfirmOverwriteCallback); + } + + return SAVE_IN_PROGRESS; +} + +static u8 SaveConfirmOverwriteNoCallback(void) +{ + sub_8197948(1); // Show Yes/No menu (No selected as default) + sSaveDialogCallback = SaveOverwriteInputCallback; + return SAVE_IN_PROGRESS; +} + +static u8 SaveConfirmOverwriteCallback(void) +{ + sub_8197930(); // Show Yes/No menu + sSaveDialogCallback = SaveOverwriteInputCallback; + return SAVE_IN_PROGRESS; +} + +static u8 SaveOverwriteInputCallback(void) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: // Yes + sSaveDialogCallback = SaveSavingMessageCallback; + return SAVE_IN_PROGRESS; + case -1: // B Button + case 1: // No + HideSaveInfoWindow(); + sub_80A0014(); + return SAVE_CANCELED; + } + + return SAVE_IN_PROGRESS; +} + +static u8 SaveSavingMessageCallback(void) +{ + ShowSaveMessage(gText_SavingDontTurnOff, SaveDoSaveCallback); + return SAVE_IN_PROGRESS; +} + +static u8 SaveDoSaveCallback(void) +{ + u8 saveStatus; + + IncrementGameStat(GAME_STAT_SAVED_GAME); + sub_81A9E90(); + + if (gDifferentSaveFile == TRUE) + { + saveStatus = TrySavingData(SAVE_OVERWRITE_DIFFERENT_FILE); + gDifferentSaveFile = FALSE; + } + else + { + saveStatus = TrySavingData(SAVE_NORMAL); + } + + if (saveStatus == 1) // Save succeded + { + ShowSaveMessage(gText_PlayerSavedGame, SaveSuccessCallback); + } + else // Save error + { + ShowSaveMessage(gText_SaveError, SaveErrorCallback); + } + + SaveStartTimer(); + return SAVE_IN_PROGRESS; +} + +static u8 SaveSuccessCallback(void) +{ + if (!IsTextPrinterActive(0)) + { + PlaySE(SE_SAVE); + sSaveDialogCallback = SaveReturnSuccessCallback; + } + + return SAVE_IN_PROGRESS; +} + +static u8 SaveReturnSuccessCallback(void) +{ + if (!IsSEPlaying() && SaveSuccesTimer()) + { + HideSaveInfoWindow(); + return SAVE_SUCCESS; + } + else + { + return SAVE_IN_PROGRESS; + } +} + +static u8 SaveErrorCallback(void) +{ + if (!IsTextPrinterActive(0)) + { + PlaySE(SE_BOO); + sSaveDialogCallback = SaveReturnErrorCallback; + } + + return SAVE_IN_PROGRESS; +} + +static u8 SaveReturnErrorCallback(void) +{ + if (!SaveErrorTimer()) + { + return SAVE_IN_PROGRESS; } else { - *index = _index; + HideSaveInfoWindow(); + return SAVE_ERROR; + } +} + +static void InitBattlePyramidRetire(void) +{ + sSaveDialogCallback = BattlePyramidConfirmRetireCallback; + sSavingComplete = FALSE; +} + +static u8 BattlePyramidConfirmRetireCallback(void) +{ + sub_819746C(GetStartMenuWindowId(), FALSE); + RemoveStartMenuWindow(); + ShowSaveMessage(gText_BattlePyramidConfirmRetire, BattlePyramidRetireYesNoCallback); + + return SAVE_IN_PROGRESS; +} + +static u8 BattlePyramidRetireYesNoCallback(void) +{ + sub_8197948(1); // Show Yes/No menu (No selected as default) + sSaveDialogCallback = BattlePyramidRetireInputCallback; + + return SAVE_IN_PROGRESS; +} + +static u8 BattlePyramidRetireInputCallback(void) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: // Yes + return SAVE_CANCELED; + case -1: // B Button + case 1: // No + sub_80A0014(); + return SAVE_SUCCESS; + } + + return SAVE_IN_PROGRESS; +} + +static void sub_80A03D8(void) +{ + TransferPlttBuffer(); +} + +static bool32 sub_80A03E4(u8 *par1) +{ + switch (*par1) + { + case 0: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + DmaClear16(3, PLTT, PLTT_SIZE); + DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000); + break; + case 1: + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + ScanlineEffect_Clear(); + break; + case 2: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8)); + InitWindows(sUnknown_085105AC); + box_border_load_tiles_and_pal(0, 8, 224); + sub_81978B0(240); + break; + case 3: + ShowBg(0); + BlendPalettes(-1, 16, 0); + SetVBlankCallback(sub_80A03D8); + EnableInterrupts(1); + break; + case 4: return TRUE; } -}*/ + + (*par1)++; + return FALSE; +} + +void sub_80A0514(void) // Called from cable_club.s +{ + if (sub_80A03E4(&gMain.state)) + { + CreateTask(sub_80A0550, 0x50); + SetMainCallback2(sub_80A0540); + } +} + +static void sub_80A0540(void) +{ + RunTasks(); + UpdatePaletteFade(); +} + +static void sub_80A0550(u8 taskId) +{ + s16 *step = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + switch (*step) + { + case 0: + FillWindowPixelBuffer(0, 17); + AddTextPrinterParameterized(0, + 1, + gText_SavingDontTurnOffPower, + 255, + NULL, + 2, + 1, + 3); + sub_8098858(0, 8, 14); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + + if (gWirelessCommType != 0 && InUnionRoom()) + { + if (sub_800A07C()) + { + *step = 1; + } + else + { + *step = 5; + } + } + else + { + gSoftResetDisabled = 1; + *step = 1; + } + break; + case 1: + sub_8076D5C(); + sub_8153430(); + *step = 2; + break; + case 2: + if (sub_8153474()) + { + sav2_gender2_inplace_and_xFE(); + *step = 3; + gSoftResetDisabled = 0; + } + break; + case 3: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + *step = 4; + break; + case 4: + FreeAllWindowBuffers(); + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskId); + break; + case 5: + CreateTask(sub_8153688, 0x5); + *step = 6; + break; + case 6: + if (!FuncIsActiveTask(sub_8153688)) + { + *step = 3; + } + break; + } + } +} + +static void ShowSaveInfoWindow(void) +{ + struct WindowTemplate saveInfoWindow = sSaveInfoWindowTemplate; + u8 gender; + u8 color; + u32 xOffset; + u32 yOffset; + + if (!FlagGet(FLAG_SYS_POKEDEX_GET)) + { + saveInfoWindow.height -= 2; + } + + sSaveInfoWindowId = AddWindow(&saveInfoWindow); + NewMenuHelpers_DrawStdWindowFrame(sSaveInfoWindowId, FALSE); + + gender = gSaveBlock2Ptr->playerGender; + color = TEXT_COLOR_RED; // Red when female, blue when male. + + if (gender == MALE) + { + color = TEXT_COLOR_BLUE; + } + + // Print region name + yOffset = 1; + sub_819A344(3, gStringVar4, TEXT_COLOR_GREEN); + PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL); + + // Print player name + yOffset = 0x11; + PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL); + sub_819A344(0, gStringVar4, color); + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); + PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset); + + // Print badge count + yOffset = 0x21; + PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL); + sub_819A344(4, gStringVar4, color); + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); + PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + + if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) + { + // Print pokedex count + yOffset = 0x31; + PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL); + sub_819A344(1, gStringVar4, color); + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); + PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + } + + // Print play time + yOffset += 0x10; + PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL); + sub_819A344(2, gStringVar4, color); + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); + PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + + CopyWindowToVram(sSaveInfoWindowId, 2); +} + +static void RemoveSaveInfoWindow(void) +{ + sub_819746C(sSaveInfoWindowId, FALSE); + RemoveWindow(sSaveInfoWindowId); +} + +static void sub_80A08A4(u8 taskId) +{ + if (!FuncIsActiveTask(sub_8153688)) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + } +} + +void sub_80A08CC(void) // Referenced in data/specials.inc and data/scripts/maps/BattleFrontier_BattleTowerLobby.inc +{ + u8 taskId = CreateTask(sub_8153688, 0x5); + gTasks[taskId].data[2] = 1; + gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId; +} + +static void HideStartMenuWindow(void) +{ + sub_819746C(GetStartMenuWindowId(), TRUE); + RemoveStartMenuWindow(); + sub_80984F4(); + ScriptContext2_Disable(); +} + +void HideStartMenu(void) // Called from map_name_popup.s +{ + PlaySE(SE_SELECT); + HideStartMenuWindow(); +} + +void AppendToList(u8 *list, u8 *pos, u8 newEntry) +{ + list[*pos] = newEntry; + (*pos)++; +}
\ No newline at end of file diff --git a/sym_common.txt b/sym_common.txt index ce3540ad9..6f6a8da32 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -70,7 +70,7 @@ gUnknown_03005DEC: @ 3005DEC gSelectedMapObject: @ 3005DF0 .space 0x4 -gUnknown_03005DF4: @ 3005DF4 +gMenuCallback: @ 3005DF4 .space 0x4 .include "sound.o" @@ -178,11 +178,7 @@ gUnknown_030062F0: @ 30062F0 gUnknown_030062F4: @ 30062F4 .space 0xC -gUnknown_03006300: @ 3006300 - .space 0x10 - -gMultiuseListMenuTemplate: @ 3006310 - .space 0x18 + .include "list_menu.o" gUnknown_03006328: @ 3006328 .space 0x48 |