diff options
-rw-r--r-- | asm/field_player_avatar.s | 1120 | ||||
-rw-r--r-- | data/field_player_avatar.s | 34 | ||||
-rw-r--r-- | include/event_object_movement.h | 2 | ||||
-rw-r--r-- | include/field_effect_helpers.h | 1 | ||||
-rw-r--r-- | include/field_player_avatar.h | 4 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | include/quest_log_player.h | 2 | ||||
-rw-r--r-- | include/strings.h | 5 | ||||
-rw-r--r-- | src/event_object_movement.c | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 401 | ||||
-rw-r--r-- | src/item_use.c | 2 | ||||
-rw-r--r-- | src/quest_log_player.c | 6 | ||||
-rw-r--r-- | src/strings.c | 6 |
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"); |