summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_player_avatar.s1120
-rw-r--r--data/field_player_avatar.s34
-rw-r--r--include/event_object_movement.h2
-rw-r--r--include/field_effect_helpers.h1
-rw-r--r--include/field_player_avatar.h4
-rw-r--r--include/quest_log.h1
-rw-r--r--include/quest_log_player.h2
-rw-r--r--include/strings.h5
-rw-r--r--src/event_object_movement.c2
-rw-r--r--src/field_player_avatar.c401
-rw-r--r--src/item_use.c2
-rw-r--r--src/quest_log_player.c6
-rw-r--r--src/strings.c6
13 files changed, 421 insertions, 1165 deletions
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index 52dbf8583..f1bcf4e39 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -5,1126 +5,6 @@
.text
- thumb_func_start Task_StopSurfingInit
-Task_StopSurfingInit: @ 805D1D4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0805D230 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D234 @ =gObjectEvents
- adds r5, r0, r1
- adds r0, r5, 0
- bl ObjectEventIsMovementOverridden
- lsls r0, 24
- cmp r0, 0
- beq _0805D200
- adds r0, r5, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D228
-_0805D200:
- ldrb r0, [r5, 0x1A]
- movs r1, 0x2
- bl sub_80DC44C
- ldr r0, _0805D238 @ =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x8]
- bl sub_80641EC
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl sub_805C06C
- ldr r0, _0805D23C @ =sub_805D240
- str r0, [r4]
-_0805D228:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D230: .4byte gPlayerAvatar
-_0805D234: .4byte gObjectEvents
-_0805D238: .4byte gTasks
-_0805D23C: .4byte sub_805D240
- thumb_func_end Task_StopSurfingInit
-
- thumb_func_start sub_805D240
-sub_805D240: @ 805D240
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _0805D2B4 @ =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D2B8 @ =gObjectEvents
- adds r4, r0, r1
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfFinished
- lsls r0, 24
- cmp r0, 0
- beq _0805D2AE
- movs r0, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionMovementAction
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_805C06C
- movs r0, 0
- strb r0, [r6, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- ldrb r1, [r4, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D2BC @ =gSprites
- adds r0, r1
- bl DestroySprite
- adds r0, r5, 0
- bl DestroyTask
- bl SetHelpContextForMap
-_0805D2AE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D2B4: .4byte gPlayerAvatar
-_0805D2B8: .4byte gObjectEvents
-_0805D2BC: .4byte gSprites
- thumb_func_end sub_805D240
-
- thumb_func_start sub_805D2C0
-sub_805D2C0: @ 805D2C0
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _0805D2FC @ =sub_805D304
- adds r0, r5, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0805D300 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x26]
- bl _call_via_r5
- movs r0, 0x2
- bl sub_8150474
- cmp r0, 0x1
- bne _0805D2F4
- bl sub_8112C9C
-_0805D2F4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D2FC: .4byte sub_805D304
-_0805D300: .4byte gTasks
- thumb_func_end sub_805D2C0
-
- thumb_func_start sub_805D304
-sub_805D304: @ 805D304
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0805D334 @ =gUnknown_835B8CC
- ldr r2, _0805D338 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0805D316:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _0805D316
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0805D334: .4byte gUnknown_835B8CC
-_0805D338: .4byte gTasks
- thumb_func_end sub_805D304
-
- thumb_func_start sub_805D33C
-sub_805D33C: @ 805D33C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, _0805D358 @ =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D358: .4byte gPlayerAvatar
- thumb_func_end sub_805D33C
-
- thumb_func_start fish1
-fish1: @ 805D35C
- push {r4-r6,lr}
- sub sp, 0x10
- adds r5, r0, 0
- ldr r1, _0805D3E4 @ =gUnknown_835B90C
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- add r4, sp, 0x8
- ldr r1, _0805D3E8 @ =gUnknown_835B912
- adds r0, r4, 0
- movs r2, 0x6
- bl memcpy
- movs r0, 0
- strh r0, [r5, 0x20]
- bl Random
- movs r2, 0x26
- ldrsh r1, [r5, r2]
- lsls r1, 1
- mov r2, sp
- adds r6, r2, r1
- lsls r0, 16
- lsrs r0, 16
- adds r4, r1
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl __modsi3
- ldrh r1, [r6]
- adds r1, r0
- strh r1, [r5, 0x22]
- ldr r3, _0805D3EC @ =gObjectEvents
- ldr r2, _0805D3F0 @ =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x5]
- strh r0, [r5, 0x24]
- ldrb r0, [r2, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- adds r4, r3
- adds r0, r4, 0
- bl ObjectEventClearHeldMovementIfActive
- ldrb r0, [r4, 0x1]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl sub_805CC2C
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D3E4: .4byte gUnknown_835B90C
-_0805D3E8: .4byte gUnknown_835B912
-_0805D3EC: .4byte gObjectEvents
-_0805D3F0: .4byte gPlayerAvatar
- thumb_func_end fish1
-
- thumb_func_start fish2
-fish2: @ 805D3F4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0805D428 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D42C @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3B
- ble _0805D41E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0805D41E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D428: .4byte gPlayerAvatar
-_0805D42C: .4byte gSprites
- thumb_func_end fish2
-
- thumb_func_start sub_805D430
-sub_805D430: @ 805D430
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- movs r1, 0x1
- bl sub_80F7768
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x8]
- strh r1, [r4, 0xA]
- strh r1, [r4, 0xC]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- adds r1, r0, 0
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0805D468
- adds r0, r1, 0x4
- strh r0, [r4, 0xE]
-_0805D468:
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0x9
- ble _0805D474
- movs r0, 0xA
- strh r0, [r4, 0xE]
-_0805D474:
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_805D430
-
- thumb_func_start sub_805D47C
-sub_805D47C: @ 805D47C
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r0, _0805D4CC @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D4D0 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- movs r5, 0
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0805D4F8
- strh r5, [r4, 0xA]
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _0805D4D4
- ldrh r0, [r4, 0x8]
- adds r1, r0, 0x1
- strh r1, [r4, 0x8]
- ldrh r2, [r4, 0x20]
- movs r3, 0x20
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _0805D4C6
- adds r0, r1, 0x1
- strh r0, [r4, 0x8]
-_0805D4C6:
- adds r0, r2, 0x1
- strh r0, [r4, 0x20]
- b _0805D4F8
- .align 2, 0
-_0805D4CC: .4byte gPlayerAvatar
-_0805D4D0: .4byte gSprites
-_0805D4D4:
- ldr r2, _0805D504 @ =gUnknown_835B918
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- lsls r3, r0, 1
- adds r3, r0
- lsls r3, 26
- lsrs r3, 24
- movs r0, 0x1
- str r0, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- bl AddTextPrinterParameterized
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_0805D4F8:
- movs r0, 0
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D504: .4byte gUnknown_835B918
- thumb_func_end sub_805D47C
-
- thumb_func_start sub_805D508
-sub_805D508: @ 805D508
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r6, _0805D540 @ =gPlayerAvatar
- ldrb r1, [r6, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D544 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl DoesCurrentMapHaveFishingMons
- lsls r0, 24
- cmp r0, 0
- beq _0805D53A
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _0805D548
-_0805D53A:
- movs r0, 0xB
- strh r0, [r4, 0x8]
- b _0805D56A
- .align 2, 0
-_0805D540: .4byte gPlayerAvatar
-_0805D544: .4byte gSprites
-_0805D548:
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl sub_8063510
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_0805D56A:
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_805D508
-
- thumb_func_start sub_805D574
-sub_805D574: @ 805D574
- ldrh r1, [r0, 0x8]
- adds r1, 0x3
- strh r1, [r0, 0x8]
- movs r0, 0
- bx lr
- thumb_func_end sub_805D574
-
- thumb_func_start sub_805D580
-sub_805D580: @ 805D580
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _0805D5C0 @ =gUnknown_835B91A
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- ldr r0, _0805D5C4 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D5C8 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r1, [r4, 0xA]
- adds r1, 0x1
- strh r1, [r4, 0xA]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- lsls r0, 1
- add r0, sp
- lsls r1, 16
- asrs r1, 16
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r1, r0
- blt _0805D5CC
- movs r0, 0xC
- b _0805D5DC
- .align 2, 0
-_0805D5C0: .4byte gUnknown_835B91A
-_0805D5C4: .4byte gPlayerAvatar
-_0805D5C8: .4byte gSprites
-_0805D5CC:
- ldr r0, _0805D5E8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0805D5DE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
-_0805D5DC:
- strh r0, [r4, 0x8]
-_0805D5DE:
- movs r0, 0
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D5E8: .4byte gMain
- thumb_func_end sub_805D580
-
- thumb_func_start sub_805D5EC
-sub_805D5EC: @ 805D5EC
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r1, _0805D660 @ =gUnknown_835B920
- mov r0, sp
- movs r2, 0xC
- bl memcpy
- ldr r0, _0805D664 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D668 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r1, r0
- blt _0805D650
- cmp r1, 0x1
- bgt _0805D654
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- movs r3, 0x20
- ldrsh r2, [r4, r3]
- lsls r2, 1
- movs r3, 0x26
- ldrsh r1, [r4, r3]
- lsls r1, 2
- adds r2, r1
- mov r3, sp
- adds r1, r3, r2
- movs r2, 0
- ldrsh r1, [r1, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- ble _0805D654
-_0805D650:
- movs r0, 0x3
- strh r0, [r4, 0x8]
-_0805D654:
- movs r0, 0
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D660: .4byte gUnknown_835B920
-_0805D664: .4byte gPlayerAvatar
-_0805D668: .4byte gSprites
- thumb_func_end sub_805D5EC
-
- thumb_func_start sub_805D66C
-sub_805D66C: @ 805D66C
- push {r4,r5,lr}
- sub sp, 0x10
- adds r4, r0, 0
- ldr r0, _0805D6BC @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D6C0 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0805D6C4 @ =gUnknown_841D14E
- movs r5, 0
- str r5, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- strh r5, [r4, 0xA]
- movs r0, 0
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D6BC: .4byte gPlayerAvatar
-_0805D6C0: .4byte gSprites
-_0805D6C4: .4byte gUnknown_841D14E
- thumb_func_end sub_805D66C
-
- thumb_func_start sub_805D6C8
-sub_805D6C8: @ 805D6C8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0805D6EA
- ldr r0, _0805D774 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D778 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
-_0805D6EA:
- bl RunTextPrinters
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0805D788
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- bne _0805D780
- ldr r7, _0805D774 @ =gPlayerAvatar
- ldrb r0, [r7, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805D77C @ =gObjectEvents
- mov r8, r0
- add r4, r8
- ldrh r1, [r5, 0x24]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl ObjectEventTurn
- ldrb r1, [r7]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805D748
- ldrb r0, [r7, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r0, [r1, 0x1A]
- movs r1, 0
- movs r2, 0
- bl sub_80DC4A4
-_0805D748:
- ldr r2, _0805D778 @ =gSprites
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x24]
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r6, [r0, 0x26]
- movs r0, 0
- movs r1, 0x1
- bl ClearDialogWindowAndFrame
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _0805D7AA
- .align 2, 0
-_0805D774: .4byte gPlayerAvatar
-_0805D778: .4byte gSprites
-_0805D77C: .4byte gObjectEvents
-_0805D780:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _0805D7AA
-_0805D788:
- ldr r1, _0805D7B8 @ =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- ldrh r0, [r5, 0x26]
- lsls r0, 24
- lsrs r0, 24
- bl FishingWildEncounter
- ldr r0, _0805D7BC @ =sub_805D304
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805D7AA:
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D7B8: .4byte gPlayerAvatar
-_0805D7BC: .4byte sub_805D304
- thumb_func_end sub_805D6C8
-
- thumb_func_start sub_805D7C0
-sub_805D7C0: @ 805D7C0
- push {r4-r6,lr}
- sub sp, 0x10
- adds r6, r0, 0
- ldr r4, _0805D82C @ =gPlayerAvatar
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D830 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrb r0, [r4, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFishingBiteDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, _0805D834 @ =gUnknown_841D169
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- movs r0, 0xD
- strh r0, [r6, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D82C: .4byte gPlayerAvatar
-_0805D830: .4byte gSprites
-_0805D834: .4byte gUnknown_841D169
- thumb_func_end sub_805D7C0
-
- thumb_func_start sub_805D838
-sub_805D838: @ 805D838
- push {r4-r6,lr}
- sub sp, 0x10
- adds r6, r0, 0
- ldr r4, _0805D8A0 @ =gPlayerAvatar
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, _0805D8A4 @ =gSprites
- adds r0, r5
- bl sub_805D9C4
- ldrb r0, [r4, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r5
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- bl GetFishingBiteDirectionAnimNum
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r2, _0805D8A8 @ =gUnknown_841D17E
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized2
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D8A0: .4byte gPlayerAvatar
-_0805D8A4: .4byte gSprites
-_0805D8A8: .4byte gUnknown_841D17E
- thumb_func_end sub_805D838
-
- thumb_func_start sub_805D8AC
-sub_805D8AC: @ 805D8AC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0805D8D0 @ =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0805D8D4 @ =gSprites
- adds r0, r1
- bl sub_805D9C4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D8D0: .4byte gPlayerAvatar
-_0805D8D4: .4byte gSprites
- thumb_func_end sub_805D8AC
-
- thumb_func_start sub_805D8D8
-sub_805D8D8: @ 805D8D8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r5, _0805D974 @ =gPlayerAvatar
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r7, _0805D978 @ =gSprites
- adds r0, r7
- bl sub_805D9C4
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- cmp r0, 0
- bge _0805D968
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0805D97C @ =gObjectEvents
- mov r8, r0
- add r4, r8
- ldrh r1, [r6, 0x24]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl ObjectEventSetGraphicsId
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl ObjectEventTurn
- ldrb r1, [r5]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805D948
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- add r1, r8
- ldrb r0, [r1, 0x1A]
- movs r1, 0
- movs r2, 0
- bl sub_80DC4A4
-_0805D948:
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r2, 0
- strh r2, [r0, 0x24]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- strh r2, [r0, 0x26]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0805D968:
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805D974: .4byte gPlayerAvatar
-_0805D978: .4byte gSprites
-_0805D97C: .4byte gObjectEvents
- thumb_func_end sub_805D8D8
-
- thumb_func_start sub_805D980
-sub_805D980: @ 805D980
- push {lr}
- bl RunTextPrinters
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _0805D9B6
- ldr r0, _0805D9BC @ =gPlayerAvatar
- strb r1, [r0, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeObjectEvents
- movs r0, 0
- movs r1, 0x1
- bl ClearDialogWindowAndFrame
- ldr r0, _0805D9C0 @ =sub_805D304
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0805D9B6:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0805D9BC: .4byte gPlayerAvatar
-_0805D9C0: .4byte sub_805D304
- thumb_func_end sub_805D980
-
- thumb_func_start sub_805D9C4
-sub_805D9C4: @ 805D9C4
- push {r4-r7,lr}
- adds r4, r0, 0
- bl AnimateSprite
- movs r0, 0
- strh r0, [r4, 0x24]
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x2B
- ldrb r5, [r0]
- movs r0, 0x2A
- adds r0, r4
- mov r12, r0
- ldrb r0, [r0]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r6, r5, 2
- adds r0, r6, r0
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r7, 0x1
- negs r7, r7
- cmp r0, r7
- beq _0805DA28
- adds r3, r4, 0
- adds r3, 0x2C
- ldrb r2, [r3]
- lsls r1, r2, 26
- lsrs r1, 26
- adds r1, 0x1
- movs r0, 0x3F
- ands r1, r0
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- mov r1, r12
- ldrb r0, [r1]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- adds r0, r6, r0
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, r7
- bne _0805DA2E
-_0805DA28:
- subs r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_0805DA2E:
- adds r0, r4, 0
- adds r0, 0x2A
- ldrb r0, [r0]
- ldr r1, [r4, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r5, 2
- adds r0, r1
- ldrb r5, [r0]
- subs r0, r5, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _0805DA60
- movs r0, 0x8
- strh r0, [r4, 0x24]
- bl GetPlayerFacingDirection
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0805DA60
- ldr r0, _0805DAA4 @ =0x0000fff8
- strh r0, [r4, 0x24]
-_0805DA60:
- cmp r5, 0x5
- bne _0805DA68
- ldr r0, _0805DAA4 @ =0x0000fff8
- strh r0, [r4, 0x26]
-_0805DA68:
- adds r0, r5, 0
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0805DA78
- movs r0, 0x8
- strh r0, [r4, 0x26]
-_0805DA78:
- ldr r3, _0805DAA8 @ =gPlayerAvatar
- ldrb r1, [r3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0805DA9C
- ldr r2, _0805DAAC @ =gObjectEvents
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1A]
- movs r1, 0x26
- ldrsh r2, [r4, r1]
- movs r1, 0x1
- bl sub_80DC4A4
-_0805DA9C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0805DAA4: .4byte 0x0000fff8
-_0805DAA8: .4byte gPlayerAvatar
-_0805DAAC: .4byte gObjectEvents
- thumb_func_end sub_805D9C4
-
thumb_func_start sub_805DAB0
sub_805DAB0: @ 805DAB0
push {r4,lr}
diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s
index c4a4f324f..74faff36c 100644
--- a/data/field_player_avatar.s
+++ b/data/field_player_avatar.s
@@ -4,39 +4,5 @@
.section .rodata
.align 2
- .align 2
-gUnknown_835B8CC:: @ 835B8CC
- .4byte sub_805D33C
- .4byte fish1
- .4byte fish2
- .4byte sub_805D430
- .4byte sub_805D47C
- .4byte sub_805D508
- .4byte sub_805D574
- .4byte sub_805D580
- .4byte sub_805D5EC
- .4byte sub_805D66C
- .4byte sub_805D6C8
- .4byte sub_805D7C0
- .4byte sub_805D838
- .4byte sub_805D8AC
- .4byte sub_805D8D8
- .4byte sub_805D980
-
-gUnknown_835B90C:: @ 835B90C
- .2byte 0x0001, 0x0001, 0x0001
-
-gUnknown_835B912:: @ 835B912
- .2byte 0x0001, 0x0003, 0x0006
-
-gUnknown_835B918:: @ 835B918
- .string "·$"
-
-gUnknown_835B91A:: @ 835B91A
- .2byte 0x0024, 0x0021, 0x001e
-
-gUnknown_835B920:: @ 835B920
- .2byte 0x0000, 0x0000, 0x0028, 0x000a, 0x0046, 0x001e
-
gUnknown_835B92C:: @ 835B92C
.byte 0x01, 0x03, 0x04, 0x02, 0x01
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 12d3305e7..496b2f245 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -217,5 +217,7 @@ u8 GetJumpInPlaceTurnAroundMovementAction(u32 direction);
u8 GetAcroWheelieInPlaceDirectionMovementAction(u32 direction);
u8 GetAcroPopWheelieMoveDirectionMovementAction(u32 direction);
u8 GetAcroWheelieMoveDirectionMovementAction(u32 direction);
+u8 sub_80641EC(u32 direction);
+u8 sub_8063510(u8 direction);
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index a1fbe49b2..4505b2e48 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -24,5 +24,6 @@ u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y);
void SetSpriteInvisible(u8 spriteId);
+void sub_80DC4A4(u8 spriteId, u8 value, s16 data1);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 1dcdb8e5d..51e29c060 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -19,12 +19,12 @@ void sub_805C780(void);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 GetPlayerAvatarGraphicsIdByStateId(u8);
void SetPlayerAvatarStateMask(u8 mask);
-void sub_805D9C4(struct Sprite *sprite);
+void AlignFishingAnimationFrames(struct Sprite *sprite);
void CreateStopSurfingTask_NoMusicChange(u8 direction);
void sub_805DAE4(u8 direction);
void SetPlayerAvatarTransitionFlags(u16 a);
bool8 IsPlayerFacingSurfableFishableWater(void);
-void sub_805D2C0(u8 secondaryId);
+void StartFishing(u8 secondaryId);
u8 GetPlayerAvatarObjectId(void);
u8 PlayerGetZCoord(void);
u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
diff --git a/include/quest_log.h b/include/quest_log.h
index 70a5c2f30..28c69505b 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -58,5 +58,6 @@ void Special_UpdateTrainerFansAfterLinkBattle(void);
void sub_8112628(u8 movementActionId);
void sub_81126AC(u8 movementActionId, u8 duration);
void sub_8112588(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration);
+void sub_8112C9C(void);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/quest_log_player.h b/include/quest_log_player.h
index eedb6fa37..5aee3f2d0 100644
--- a/include/quest_log_player.h
+++ b/include/quest_log_player.h
@@ -4,7 +4,7 @@
#include "global.h"
void sub_8150454(void);
-bool8 sub_8150474(u8 a0);
+bool32 sub_8150474(u8 a0);
void sub_8150498(u8 a0);
#endif //GUARD_QUEST_LOG_PLAYER_H
diff --git a/include/strings.h b/include/strings.h
index e7f274abd..37d856a86 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1463,4 +1463,9 @@ extern const u8 gUnknown_841B2C6[];
extern const u8 gUnknown_841B2E5[];
extern const u8 gUnknown_841B2DC[];
+// field_player_avatar
+extern const u8 gText_PokemonOnHook[];
+extern const u8 gText_NotEvenANibble[];
+extern const u8 gText_ItGotAway[];
+
#endif //GUARD_STRINGS_H
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 7fde3ff21..c326b2d01 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -4084,6 +4084,8 @@ static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Spr
sprite->data[1] = 0;
}
+// Off by one error
+
u8 GetFaceDirectionAnimNum(u8 direction)
{
return gFaceDirectionAnimNums[direction];
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index e3035351b..0ee1f2fea 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -8,12 +8,17 @@
#include "field_effect.h"
#include "field_effect_helpers.h"
#include "field_player_avatar.h"
+#include "help_system.h"
#include "metatile_behavior.h"
+#include "new_menu_helpers.h"
#include "overworld.h"
#include "party_menu.h"
#include "quest_log.h"
#include "quest_log_player.h"
+#include "random.h"
#include "script.h"
+#include "strings.h"
+#include "wild_encounter.h"
#include "constants/event_object_movement.h"
#include "constants/event_objects.h"
#include "constants/songs.h"
@@ -108,6 +113,24 @@ bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task * task, struct ObjectEvent
bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task * task, struct ObjectEvent * playerObj);
void CreateStopSurfingTask(u8 direction);
void Task_StopSurfingInit(u8 taskId);
+void Task_WaitStopSurfing(u8 taskId);
+void Task_Fishing(u8 taskId);
+bool8 Fishing1(struct Task * task);
+bool8 Fishing2(struct Task * task);
+bool8 Fishing3(struct Task * task);
+bool8 Fishing4(struct Task * task);
+bool8 Fishing5(struct Task * task);
+bool8 Fishing6(struct Task * task);
+bool8 Fishing7(struct Task * task);
+bool8 Fishing8(struct Task * task);
+bool8 Fishing9(struct Task * task);
+bool8 Fishing10(struct Task * task);
+bool8 Fishing11(struct Task * task);
+bool8 Fishing12(struct Task * task);
+bool8 Fishing13(struct Task * task);
+bool8 Fishing14(struct Task * task);
+bool8 Fishing15(struct Task * task);
+bool8 Fishing16(struct Task * task);
bool8 player_should_look_direction_be_enforced_upon_movement(void);
void MovementType_Player(struct Sprite *sprite)
@@ -1330,7 +1353,7 @@ void sub_805CBE8(void)
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], 0);
}
-void sub_805CC2C(void)
+void sub_805CC2C(u8 direction)
{
sub_8150498(2);
}
@@ -1590,3 +1613,379 @@ void sub_805D1A8(void)
CreateStopSurfingTask(DIR_NORTH);
}
}
+
+void Task_StopSurfingInit(u8 taskId)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ if (ObjectEventIsMovementOverridden(playerObjEvent))
+ {
+ if (!ObjectEventClearHeldMovementIfFinished(playerObjEvent))
+ return;
+ }
+ sub_80DC44C(playerObjEvent->fieldEffectSpriteId, 2);
+ sub_805C06C(playerObjEvent, sub_80641EC((u8)gTasks[taskId].data[0]));
+ gTasks[taskId].func = Task_WaitStopSurfing;
+}
+
+void Task_WaitStopSurfing(u8 taskId)
+{
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ if (ObjectEventClearHeldMovementIfFinished(playerObjEvent))
+ {
+ ObjectEventSetGraphicsId(playerObjEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL));
+ sub_805C06C(playerObjEvent, GetFaceDirectionMovementAction(playerObjEvent->facingDirection));
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]);
+ DestroyTask(taskId);
+ SetHelpContextForMap();
+ }
+}
+
+bool8 (*const sFishingStateFuncs[])(struct Task *) =
+{
+ Fishing1,
+ Fishing2,
+ Fishing3,
+ Fishing4,
+ Fishing5,
+ Fishing6,
+ Fishing7,
+ Fishing8,
+ Fishing9,
+ Fishing10,
+ Fishing11,
+ Fishing12,
+ Fishing13,
+ Fishing14,
+ Fishing15,
+ Fishing16,
+};
+
+#define tStep data[0]
+#define tFrameCounter data[1]
+#define tNumDots data[2]
+#define tDotsRequired data[3]
+#define tRoundsPlayed data[12]
+#define tMinRoundsRequired data[13]
+#define tPlayerGfxId data[14]
+#define tFishingRod data[15]
+
+#define FISHING_START_ROUND 3
+#define FISHING_GOT_BITE 6
+#define FISHING_ON_HOOK 9
+#define FISHING_NO_BITE 11
+#define FISHING_GOT_AWAY 12
+#define FISHING_SHOW_RESULT 13
+
+void StartFishing(u8 rod)
+{
+ u8 taskId = CreateTask(Task_Fishing, 0xFF);
+
+ gTasks[taskId].tFishingRod = rod;
+ Task_Fishing(taskId);
+ if (sub_8150474(2) == TRUE)
+ sub_8112C9C();
+}
+
+
+void Task_Fishing(u8 taskId)
+{
+ while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId]))
+ ;
+}
+
+bool8 Fishing1(struct Task *task)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->tStep++;
+ return FALSE;
+}
+
+bool8 Fishing2(struct Task *task)
+{
+ struct ObjectEvent *playerObjEvent;
+ const s16 arr1[] = {1, 1, 1};
+ const s16 arr2[] = {1, 3, 6};
+
+ task->tRoundsPlayed = 0;
+ task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]);
+ task->tPlayerGfxId = gObjectEvents[gPlayerAvatar.objectEventId].graphicsId;
+ playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ ObjectEventClearHeldMovementIfActive(playerObjEvent);
+ playerObjEvent->enableAnim = 1;
+ sub_805CC2C(playerObjEvent->facingDirection);
+ task->tStep++;
+ return FALSE;
+}
+
+bool8 Fishing3(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+
+ // Wait one second
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= 60)
+ task->tStep++;
+ return FALSE;
+}
+
+bool8 Fishing4(struct Task *task)
+{
+ u32 randVal;
+
+ sub_80F7768(0, TRUE);
+ task->tStep++;
+ task->tFrameCounter = 0;
+ task->tNumDots = 0;
+ randVal = Random();
+ randVal %= 10;
+ task->tDotsRequired = randVal + 1;
+ if (task->tRoundsPlayed == 0)
+ task->tDotsRequired = randVal + 4;
+ if (task->tDotsRequired >= 10)
+ task->tDotsRequired = 10;
+ return TRUE;
+}
+
+// Play a round of the dot game
+bool8 Fishing5(struct Task *task)
+{
+ static const u8 dot[] = _("·");
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= 20)
+ {
+ task->tFrameCounter = 0;
+ if (task->tNumDots >= task->tDotsRequired)
+ {
+ task->tStep++;
+ if (task->tRoundsPlayed != 0)
+ task->tStep++;
+ task->tRoundsPlayed++;
+ }
+ else
+ {
+ AddTextPrinterParameterized(0, 2, dot, task->tNumDots * 12, 1, 0, NULL);
+ task->tNumDots++;
+ }
+ }
+ return FALSE;
+}
+
+// Determine if fish bites
+bool8 Fishing6(struct Task *task)
+{
+ bool8 bite;
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ bite = FALSE;
+
+ if (!DoesCurrentMapHaveFishingMons() || Random() & 1)
+ {
+ task->tStep = FISHING_NO_BITE;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_8063510(GetPlayerFacingDirection()));
+ }
+ return TRUE;
+}
+
+// Oh! A Bite!
+bool8 Fishing7(struct Task *task)
+{
+ task->tStep += 3;
+ return FALSE;
+}
+
+// We have a bite. Now, wait for the player to press A, or the timer to expire.
+bool8 Fishing8(struct Task *task)
+{
+ const s16 reelTimeouts[3] = {36, 33, 30};
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= reelTimeouts[task->tFishingRod])
+ task->tStep = FISHING_GOT_AWAY;
+ else if (gMain.newKeys & A_BUTTON)
+ task->tStep++;
+ return FALSE;
+}
+
+// Determine if we're going to play the dot game again
+bool8 Fishing9(struct Task *task)
+{
+ const s16 arr[][2] =
+ {
+ {0, 0},
+ {40, 10},
+ {70, 30}
+ };
+
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ if (task->tRoundsPlayed < task->tMinRoundsRequired)
+ {
+ task->tStep = FISHING_START_ROUND;
+ }
+ else if (task->tRoundsPlayed < 2)
+ {
+ // probability of having to play another round
+ s16 probability = Random() % 100;
+
+ if (arr[task->tFishingRod][task->tRoundsPlayed] > probability)
+ task->tStep = FISHING_START_ROUND;
+ }
+ return FALSE;
+}
+
+bool8 Fishing10(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep++;
+ task->tFrameCounter = 0;
+ return FALSE;
+}
+
+bool8 Fishing11(struct Task *task)
+{
+ if (task->tFrameCounter == 0)
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+
+ RunTextPrinters();
+
+ if (task->tFrameCounter == 0)
+ {
+ if (!IsTextPrinterActive(0))
+ {
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
+ ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
+ gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
+ ClearDialogWindowAndFrame(0, TRUE);
+ task->tFrameCounter++;
+ return FALSE;
+ }
+ }
+
+ if (task->tFrameCounter != 0)
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ FishingWildEncounter(task->tFishingRod);
+ DestroyTask(FindTaskIdByFunc(Task_Fishing));
+ }
+ return FALSE;
+}
+
+// Not even a nibble
+bool8 Fishing12(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ AddTextPrinterParameterized2(0, 2, gText_NotEvenANibble, 1, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep = FISHING_SHOW_RESULT;
+ return TRUE;
+}
+
+// It got away
+bool8 Fishing13(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
+ AddTextPrinterParameterized2(0, 2, gText_ItGotAway, 1, NULL, TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY);
+ task->tStep++;
+ return TRUE;
+}
+
+// Wait one second
+bool8 Fishing14(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ task->tStep++;
+ return FALSE;
+}
+
+bool8 Fishing15(struct Task *task)
+{
+ AlignFishingAnimationFrames(&gSprites[gPlayerAvatar.spriteId]);
+ if (gSprites[gPlayerAvatar.spriteId].animEnded)
+ {
+ struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ ObjectEventSetGraphicsId(playerObjEvent, task->tPlayerGfxId);
+ ObjectEventTurn(playerObjEvent, playerObjEvent->movementDirection);
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 0, 0);
+ gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
+ gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
+ task->tStep++;
+ }
+ return FALSE;
+}
+
+bool8 Fishing16(struct Task *task)
+{
+ RunTextPrinters();
+ if (!IsTextPrinterActive(0))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeObjectEvents();
+ ClearDialogWindowAndFrame(0, TRUE);
+ DestroyTask(FindTaskIdByFunc(Task_Fishing));
+ }
+ return FALSE;
+}
+
+#undef tStep
+#undef tFrameCounter
+#undef tFishingRod
+
+void AlignFishingAnimationFrames(struct Sprite * playerSprite)
+{
+ u8 animCmdIndex;
+ u8 animType;
+
+ AnimateSprite(playerSprite);
+ playerSprite->pos2.x = 0;
+ playerSprite->pos2.y = 0;
+ animCmdIndex = playerSprite->animCmdIndex;
+ if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1)
+ {
+ animCmdIndex--;
+ }
+ else
+ {
+ playerSprite->animDelayCounter++;
+ if (playerSprite->anims[playerSprite->animNum][animCmdIndex].type == -1)
+ animCmdIndex--;
+ }
+ animType = playerSprite->anims[playerSprite->animNum][animCmdIndex].type;
+ if (animType == 1 || animType == 2 || animType == 3)
+ {
+ playerSprite->pos2.x = 8;
+ if (GetPlayerFacingDirection() == 3)
+ playerSprite->pos2.x = -8;
+ }
+ if (animType == 5)
+ playerSprite->pos2.y = -8;
+ if (animType == 10 || animType == 11)
+ playerSprite->pos2.y = 8;
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_80DC4A4(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y);
+}
diff --git a/src/item_use.c b/src/item_use.c
index 0b74e0726..ea7005f4e 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -327,7 +327,7 @@ static bool8 ItemUseCheckFunc_Rod(void)
static void ItemUseOnFieldCB_Rod(u8 taskId)
{
- sub_805D2C0(ItemId_GetSecondaryId(gSpecialVar_ItemId));
+ StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
}
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index 0819e8fc5..9eb0fbeb8 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -39,7 +39,7 @@ void sub_8150454(u8 a0)
gUnknown_8471EDC[a0]();
}
-bool8 sub_8150474(u8 a0)
+bool32 sub_8150474(u8 a0)
{
if (gUnknown_3005E88 == 2)
{
@@ -107,7 +107,7 @@ static void sub_81505C4(u8 taskId)
gTasks[taskId].data[1] = 0;
break;
case 1:
- sub_805D9C4(sprite);
+ AlignFishingAnimationFrames(sprite);
if (gTasks[taskId].data[1] < 60)
gTasks[taskId].data[1]++;
else
@@ -118,7 +118,7 @@ static void sub_81505C4(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- sub_805D9C4(sprite);
+ AlignFishingAnimationFrames(sprite);
if (sprite->animEnded)
{
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING))
diff --git a/src/strings.c b/src/strings.c
index faf42c86a..547a36138 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1056,9 +1056,9 @@ const u8 gText_BerryCrush2[] = _("BERRY CRUSH");
const u8 gText_PressingSpeedRankings[] = _("Pressing-Speed Rankings");
const u8 gText_Var1Players[] = _("{STR_VAR_1} PLAYERS");
ALIGNED(4) const u8 gText_Ghost[] = _("GHOST");
-const u8 gUnknown_841D14E[] = _("A POKéMON's on the hook!{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_841D169[] = _("Not even a nibble‥{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_841D17E[] = _("It got away‥{PAUSE_UNTIL_PRESS}");
+const u8 gText_PokemonOnHook[] = _("A POKéMON's on the hook!{PAUSE_UNTIL_PRESS}");
+const u8 gText_NotEvenANibble[] = _("Not even a nibble‥{PAUSE_UNTIL_PRESS}");
+const u8 gText_ItGotAway[] = _("It got away‥{PAUSE_UNTIL_PRESS}");
const u8 gUnknown_841D18D[] = _("ROOFTOP");
ALIGNED(4) const u8 gString_PokemonFireRed_Staff[] = _("Pokémon FireRed Version\nStaff");
ALIGNED(4) const u8 gString_PokemonLeafGreen_Staff[] = _("Pokémon LeafGreen Version\nStaff");