diff --git a/asm/code_0807F0D8.s b/asm/code_0807F0D8.s index 74d902aa..3c9a2658 100644 --- a/asm/code_0807F0D8.s +++ b/asm/code_0807F0D8.s @@ -5,1621 +5,6 @@ .text - thumb_func_start sub_0807F0D8 -sub_0807F0D8: @ 0x0807F0D8 - ldr r0, _0807F0E8 @ =gInput - ldrh r2, [r0, #2] - rsbs r0, r2, #0 - orrs r0, r2 - lsrs r0, r0, #0x1f - str r0, [r1, #0x14] - bx lr - .align 2, 0 -_0807F0E8: .4byte gInput - - thumb_func_start sub_0807F0EC -sub_0807F0EC: @ 0x0807F0EC - push {r4, lr} - adds r4, r1, #0 - bl Random - ldr r1, [r4, #4] - bl __modsi3 - str r0, [r4, #4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F100 -sub_0807F100: @ 0x0807F100 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl Random - movs r2, #6 - adds r1, r0, #0 - ands r1, r2 - strb r1, [r4, #0x14] - ldr r2, _0807F124 @ =gUnk_0811E750 - lsrs r0, r0, #8 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strb r0, [r5, #0x1a] - pop {r4, r5, pc} - .align 2, 0 -_0807F124: .4byte gUnk_0811E750 - - thumb_func_start sub_0807F128 -sub_0807F128: @ 0x0807F128 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl Random - ldr r2, _0807F150 @ =gUnk_0811E758 - movs r3, #7 - adds r1, r0, #0 - ands r1, r3 - adds r1, r1, r2 - ldrb r1, [r1] - strb r1, [r4, #0x14] - ldr r1, _0807F154 @ =gUnk_0811E760 - lsrs r0, r0, #8 - ands r0, r3 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5, #0x1a] - pop {r4, r5, pc} - .align 2, 0 -_0807F150: .4byte gUnk_0811E758 -_0807F154: .4byte gUnk_0811E760 - - thumb_func_start sub_0807F158 -sub_0807F158: @ 0x0807F158 - push {lr} - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #1 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - - thumb_func_start sub_0807F168 -sub_0807F168: @ 0x0807F168 - push {lr} - ldr r0, _0807F17C @ =gPlayerEntity - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #1 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - .align 2, 0 -_0807F17C: .4byte gPlayerEntity - - thumb_func_start sub_0807F180 -sub_0807F180: @ 0x0807F180 - push {lr} - adds r2, r0, #0 - adds r2, #0x38 - movs r1, #2 - strb r1, [r2] - bl UpdateSpriteForCollisionLayer - pop {pc} - - thumb_func_start sub_0807F190 -sub_0807F190: @ 0x0807F190 - push {lr} - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl DoFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F1A0 -sub_0807F1A0: @ 0x0807F1A0 - push {r4, lr} - ldr r3, _0807F1BC @ =gPlayerEntity - movs r4, #0x2e - ldrsh r2, [r3, r4] - movs r4, #0x32 - ldrsh r3, [r3, r4] - bl sub_0807DEDC - ldr r2, _0807F1C0 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F1BC: .4byte gPlayerEntity -_0807F1C0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F1C4 -sub_0807F1C4: @ 0x0807F1C4 - push {lr} - ldr r2, _0807F1D8 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F1E0 - ldr r0, _0807F1DC @ =0x00000459 - b _0807F1E4 - .align 2, 0 -_0807F1D8: .4byte gPlayerState -_0807F1DC: .4byte 0x00000459 -_0807F1E0: - movs r0, #0xde - lsls r0, r0, #1 -_0807F1E4: - strh r0, [r2, #8] - pop {pc} - - thumb_func_start sub_0807F1E8 -sub_0807F1E8: @ 0x0807F1E8 - push {lr} - ldr r2, _0807F1FC @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F204 - ldr r0, _0807F200 @ =0x0000045A - b _0807F206 - .align 2, 0 -_0807F1FC: .4byte gPlayerState -_0807F200: .4byte 0x0000045A -_0807F204: - ldr r0, _0807F20C @ =0x000002BD -_0807F206: - strh r0, [r2, #8] - pop {pc} - .align 2, 0 -_0807F20C: .4byte 0x000002BD - - thumb_func_start sub_0807F210 -sub_0807F210: @ 0x0807F210 - push {lr} - ldr r2, _0807F224 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _0807F22C - ldr r0, _0807F228 @ =0x0000041C - b _0807F22E - .align 2, 0 -_0807F224: .4byte gPlayerState -_0807F228: .4byte 0x0000041C -_0807F22C: - ldr r0, _0807F234 @ =0x0000080C -_0807F22E: - strh r0, [r2, #8] - pop {pc} - .align 2, 0 -_0807F234: .4byte 0x0000080C - - thumb_func_start sub_0807F238 -sub_0807F238: @ 0x0807F238 - ldr r2, _0807F240 @ =gPlayerState - ldr r0, [r1, #4] - strh r0, [r2, #8] - bx lr - .align 2, 0 -_0807F240: .4byte gPlayerState - - thumb_func_start sub_0807F244 -sub_0807F244: @ 0x0807F244 - push {r4, r5, lr} - ldr r0, [r1, #4] - ldr r4, _0807F298 @ =0x0000FFFF - lsrs r5, r0, #0x10 - ands r4, r0 - cmp r4, #1 - blo _0807F28C - cmp r4, #4 - bls _0807F25A - cmp r4, #6 - bne _0807F28C -_0807F25A: - movs r4, #1 - movs r0, #2 - bl GetInventoryValue - cmp r0, #0 - beq _0807F268 - movs r4, #2 -_0807F268: - movs r0, #3 - bl GetInventoryValue - cmp r0, #0 - beq _0807F274 - movs r4, #3 -_0807F274: - movs r0, #4 - bl GetInventoryValue - cmp r0, #0 - beq _0807F280 - movs r4, #4 -_0807F280: - movs r0, #6 - bl GetInventoryValue - cmp r0, #0 - beq _0807F28C - movs r4, #6 -_0807F28C: - adds r0, r4, #0 - adds r1, r5, #0 - bl ForceEquipItem - pop {r4, r5, pc} - .align 2, 0 -_0807F298: .4byte 0x0000FFFF - - thumb_func_start sub_0807F29C -sub_0807F29C: @ 0x0807F29C - push {lr} - ldr r0, [r1, #4] - bl sub_0805ED14 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F2A8 -sub_0807F2A8: @ 0x0807F2A8 - push {lr} - ldr r0, _0807F2C0 @ =gPlayerState - adds r0, #0x9c - ldr r0, [r0] - cmp r0, #0 - bne _0807F2C8 - ldr r2, _0807F2C4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F2CE - .align 2, 0 -_0807F2C0: .4byte gPlayerState -_0807F2C4: .4byte gActiveScriptInfo -_0807F2C8: - ldr r1, _0807F2D0 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F2CE: - pop {pc} - .align 2, 0 -_0807F2D0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F2D4 -sub_0807F2D4: @ 0x0807F2D4 - push {lr} - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0807F2F8 - ldr r2, _0807F2F4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F2FC - .align 2, 0 -_0807F2F4: .4byte gActiveScriptInfo -_0807F2F8: - ldr r0, _0807F300 @ =gActiveScriptInfo - strb r1, [r0, #6] -_0807F2FC: - pop {pc} - .align 2, 0 -_0807F300: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F304 -sub_0807F304: @ 0x0807F304 - push {lr} - ldr r0, _0807F324 @ =gPlayerEntity - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _0807F32C - ldr r2, _0807F328 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F330 - .align 2, 0 -_0807F324: .4byte gPlayerEntity -_0807F328: .4byte gActiveScriptInfo -_0807F32C: - ldr r0, _0807F334 @ =gActiveScriptInfo - strb r1, [r0, #6] -_0807F330: - pop {pc} - .align 2, 0 -_0807F334: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F338 -sub_0807F338: @ 0x0807F338 - movs r1, #0 - str r1, [r0, #0x48] - ldrb r2, [r0, #0x17] - movs r1, #0xfe - ands r1, r2 - strb r1, [r0, #0x17] - bx lr - .align 2, 0 - - thumb_func_start sub_0807F348 -sub_0807F348: @ 0x0807F348 - push {lr} - movs r1, #2 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F354 -sub_0807F354: @ 0x0807F354 - push {lr} - movs r1, #6 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F360 -sub_0807F360: @ 0x0807F360 - push {lr} - movs r1, #3 - bl sub_0805E3A0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F36C -sub_0807F36C: @ 0x0807F36C - push {r4, r5, lr} - adds r5, r0, #0 - movs r1, #0x41 - movs r2, #0 - bl CreateFx - adds r4, r0, #0 - cmp r4, #0 - beq _0807F3C2 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2] - ldr r3, _0807F3C4 @ =0xFFF80000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - bl Random - movs r5, #1 - ands r0, r5 - cmp r0, #0 - beq _0807F3B0 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_0807F3B0: - bl Random - ands r0, r5 - cmp r0, #0 - beq _0807F3C2 - ldrb r0, [r4, #0x18] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x18] -_0807F3C2: - pop {r4, r5, pc} - .align 2, 0 -_0807F3C4: .4byte 0xFFF80000 - - thumb_func_start sub_0807F3C8 -sub_0807F3C8: @ 0x0807F3C8 - push {lr} - bl sub_0807F36C - movs r0, #0xe5 - bl SoundReq - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F3D8 -sub_0807F3D8: @ 0x0807F3D8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0x14] - lsrs r0, r0, #1 - ldr r1, [r1, #4] - adds r1, r1, r0 - adds r0, r4, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - adds r0, #0x58 - ldrb r0, [r0] - adds r4, #0x80 - strh r0, [r4] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F3F8 -sub_0807F3F8: @ 0x0807F3F8 - push {lr} - ldr r0, _0807F408 @ =gPlayerEntity - movs r2, #0x18 - rsbs r2, r2, #0 - movs r1, #8 - bl CreateSpeechBubbleExclamationMark - pop {pc} - .align 2, 0 -_0807F408: .4byte gPlayerEntity - - thumb_func_start sub_0807F40C -sub_0807F40C: @ 0x0807F40C - push {lr} - ldr r0, _0807F41C @ =gPlayerEntity - movs r2, #0x18 - rsbs r2, r2, #0 - movs r1, #8 - bl CreateSpeechBubbleQuestionMark - pop {pc} - .align 2, 0 -_0807F41C: .4byte gPlayerEntity - - thumb_func_start sub_0807F420 -sub_0807F420: @ 0x0807F420 - push {lr} - ldr r2, [r1, #4] - ldrb r0, [r1, #4] - lsrs r2, r2, #8 - lsls r2, r2, #0x18 - lsrs r2, r2, #0x18 - adds r1, r2, #0 - bl MenuFadeIn - pop {pc} - - thumb_func_start sub_0807F434 -sub_0807F434: @ 0x0807F434 - push {lr} - adds r3, r0, #0 - adds r3, #0x39 - movs r2, #0 - ldrsb r2, [r3, r2] - cmp r2, #1 - beq _0807F44C - cmp r2, #2 - beq _0807F44C - movs r0, #0 - str r0, [r1, #4] - b _0807F452 -_0807F44C: - movs r0, #0 - strb r0, [r3] - str r2, [r1, #4] -_0807F452: - ldr r2, _0807F460 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F460: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F464 -sub_0807F464: @ 0x0807F464 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldrb r0, [r5, #0x18] - cmp r0, #0 - bne _0807F4BC - adds r0, #1 - movs r3, #0 - strb r0, [r5, #0x18] - ldr r0, [r5, #8] - movs r1, #2 - orrs r0, r1 - str r0, [r5, #8] - ldr r2, [r5, #4] - ldr r1, _0807F4A8 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, r0, r2 - strh r0, [r5, #0x1e] - ldrh r0, [r4, #0x32] - strh r0, [r5, #0x22] - movs r6, #0x2e - ldrsh r0, [r4, r6] - ldrh r1, [r1, #6] - subs r0, r0, r1 - cmp r2, r0 - ble _0807F4AC - movs r0, #0x40 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 - movs r1, #2 - b _0807F4B8 - .align 2, 0 -_0807F4A8: .4byte gRoomControls -_0807F4AC: - movs r0, #0xc0 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 - movs r1, #6 -_0807F4B8: - orrs r0, r1 - strb r0, [r4, #0x14] -_0807F4BC: - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - movs r2, #0x1e - ldrsh r1, [r5, r2] - movs r6, #0x2e - ldrsh r0, [r4, r6] - subs r1, r1, r0 - ldrb r2, [r4, #0x15] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - lsls r0, r0, #0x18 - eors r1, r0 - cmp r1, #0 - bge _0807F4EA - ldrh r0, [r5, #0x1e] - strh r0, [r4, #0x2e] - b _0807F4F0 -_0807F4EA: - ldr r1, _0807F4F4 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F4F0: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807F4F4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F4F8 -sub_0807F4F8: @ 0x0807F4F8 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - ldrb r0, [r5, #0x18] - cmp r0, #0 - bne _0807F548 - adds r0, #1 - strb r0, [r5, #0x18] - ldr r0, [r5, #8] - movs r1, #2 - orrs r0, r1 - str r0, [r5, #8] - ldr r2, [r5, #4] - ldrh r0, [r4, #0x2e] - strh r0, [r5, #0x1e] - ldr r1, _0807F538 @ =gRoomControls - ldrh r0, [r1, #8] - adds r0, r0, r2 - strh r0, [r5, #0x22] - movs r3, #0x32 - ldrsh r0, [r4, r3] - ldrh r1, [r1, #8] - subs r0, r0, r1 - cmp r2, r0 - ble _0807F53C - movs r0, #0x80 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - ands r0, r1 - movs r1, #4 - orrs r0, r1 - b _0807F546 - .align 2, 0 -_0807F538: .4byte gRoomControls -_0807F53C: - movs r0, #0 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x14] - movs r0, #0x80 - ands r0, r1 -_0807F546: - strb r0, [r4, #0x14] -_0807F548: - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - movs r2, #0x22 - ldrsh r1, [r5, r2] - movs r3, #0x32 - ldrsh r0, [r4, r3] - subs r1, r1, r0 - ldrb r2, [r4, #0x15] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - lsls r0, r0, #0x18 - eors r1, r0 - cmp r1, #0 - blt _0807F576 - ldrh r0, [r5, #0x22] - strh r0, [r4, #0x32] - b _0807F57C -_0807F576: - ldr r1, _0807F580 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F57C: - pop {r4, r5, pc} - .align 2, 0 -_0807F580: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F584 -sub_0807F584: @ 0x0807F584 - ldr r0, _0807F590 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - str r0, [r1, #4] - bx lr - .align 2, 0 -_0807F590: .4byte gPlayerEntity - - thumb_func_start sub_0807F594 -sub_0807F594: @ 0x0807F594 - push {lr} - ldr r0, _0807F5A8 @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0 - beq _0807F5A6 - ldr r1, _0807F5AC @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F5A6: - pop {pc} - .align 2, 0 -_0807F5A8: .4byte gPlayerState -_0807F5AC: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F5B0 -sub_0807F5B0: @ 0x0807F5B0 - ldr r0, _0807F5BC @ =gPlayerState - ldr r1, [r1, #4] - adds r0, #0x27 - strb r1, [r0] - bx lr - .align 2, 0 -_0807F5BC: .4byte gPlayerState - - thumb_func_start sub_0807F5C0 -sub_0807F5C0: @ 0x0807F5C0 - push {r4, lr} - ldr r4, _0807F620 @ =gRoomControls - ldr r1, [r4, #0x30] - cmp r1, #0 - beq _0807F62E - movs r2, #0x2e - ldrsh r0, [r1, r2] - adds r2, r0, #0 - subs r2, #0x78 - movs r3, #0x32 - ldrsh r0, [r1, r3] - adds r3, r0, #0 - subs r3, #0x50 - ldrh r1, [r4, #6] - cmp r2, r1 - bge _0807F5E2 - adds r2, r1, #0 -_0807F5E2: - ldrh r0, [r4, #0x1e] - adds r0, r1, r0 - subs r0, #0xf0 - cmp r2, r0 - ble _0807F5EE - adds r2, r0, #0 -_0807F5EE: - ldrh r1, [r4, #8] - cmp r3, r1 - bge _0807F5F6 - adds r3, r1, #0 -_0807F5F6: - ldrh r0, [r4, #0x20] - adds r0, r1, r0 - subs r0, #0xa0 - cmp r3, r0 - ble _0807F602 - adds r3, r0, #0 -_0807F602: - movs r1, #0xa - ldrsh r0, [r4, r1] - cmp r2, r0 - bne _0807F628 - movs r2, #0xc - ldrsh r0, [r4, r2] - cmp r3, r0 - bne _0807F628 - ldr r2, _0807F624 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - b _0807F62E - .align 2, 0 -_0807F620: .4byte gRoomControls -_0807F624: .4byte gActiveScriptInfo -_0807F628: - ldr r1, _0807F630 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807F62E: - pop {r4, pc} - .align 2, 0 -_0807F630: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F634 -sub_0807F634: @ 0x0807F634 - push {lr} - ldr r3, [r1, #4] - ldrh r1, [r3] - ldrh r2, [r3, #2] - ldrh r3, [r3, #4] - bl sub_0801DFB4 - ldr r0, _0807F64C @ =gPlayerState - adds r0, #0x8b - movs r1, #3 - strb r1, [r0] - pop {pc} - .align 2, 0 -_0807F64C: .4byte gPlayerState - - thumb_func_start sub_0807F650 -sub_0807F650: @ 0x0807F650 - push {r4, lr} - adds r4, r0, #0 - bl sub_08002632 - ldr r1, _0807F678 @ =gUnk_08001A7C - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrh r1, [r0] - ldrh r2, [r0, #2] - ldrh r3, [r0, #4] - adds r0, r4, #0 - bl sub_0801DFB4 - ldr r0, _0807F67C @ =gPlayerState - adds r0, #0x8b - movs r1, #3 - strb r1, [r0] - pop {r4, pc} - .align 2, 0 -_0807F678: .4byte gUnk_08001A7C -_0807F67C: .4byte gPlayerState - - thumb_func_start sub_0807F680 -sub_0807F680: @ 0x0807F680 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r0, _0807F6A8 @ =gPlayerEntity - movs r1, #0x2e - ldrsh r0, [r0, r1] - ldr r1, _0807F6AC @ =gRoomControls - ldrh r1, [r1, #6] - subs r0, r0, r1 - ldrh r1, [r2, #4] - cmp r0, r1 - ble _0807F69A - movs r3, #1 -_0807F69A: - str r3, [r2, #0x14] - ldr r2, _0807F6B0 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F6A8: .4byte gPlayerEntity -_0807F6AC: .4byte gRoomControls -_0807F6B0: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F6B4 -sub_0807F6B4: @ 0x0807F6B4 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r0, _0807F6DC @ =gPlayerEntity - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldr r1, _0807F6E0 @ =gRoomControls - ldrh r1, [r1, #8] - subs r0, r0, r1 - ldrh r1, [r2, #4] - cmp r0, r1 - ble _0807F6CE - movs r3, #1 -_0807F6CE: - str r3, [r2, #0x14] - ldr r2, _0807F6E4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F6DC: .4byte gPlayerEntity -_0807F6E0: .4byte gRoomControls -_0807F6E4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F6E8 -sub_0807F6E8: @ 0x0807F6E8 - ldr r2, _0807F6F4 @ =gPlayerState - ldr r0, [r2, #0x30] - ldr r1, [r1, #4] - orrs r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_0807F6F4: .4byte gPlayerState - - thumb_func_start sub_0807F6F8 -sub_0807F6F8: @ 0x0807F6F8 - ldr r2, _0807F704 @ =gPlayerState - ldr r1, [r1, #4] - ldr r0, [r2, #0x30] - bics r0, r1 - str r0, [r2, #0x30] - bx lr - .align 2, 0 -_0807F704: .4byte gPlayerState - - thumb_func_start sub_0807F708 -sub_0807F708: @ 0x0807F708 - push {lr} - ldr r1, [r1, #4] - bl ShowNPCDialogue - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F714 -sub_0807F714: @ 0x0807F714 - push {lr} - adds r1, r0, #0 - ldr r2, _0807F734 @ =gUnk_08114F30 - ldrb r3, [r1, #0x19] - lsrs r0, r3, #6 - adds r0, r0, r2 - ldrb r2, [r0] - lsls r2, r2, #6 - movs r0, #0x3f - ands r0, r3 - orrs r0, r2 - strb r0, [r1, #0x19] - adds r0, r1, #0 - bl ResolveEntityOnTop - pop {pc} - .align 2, 0 -_0807F734: .4byte gUnk_08114F30 - - thumb_func_start sub_0807F738 -sub_0807F738: @ 0x0807F738 - push {lr} - adds r1, r0, #0 - ldr r2, _0807F758 @ =gUnk_08114F34 - ldrb r3, [r1, #0x19] - lsrs r0, r3, #6 - adds r0, r0, r2 - ldrb r2, [r0] - lsls r2, r2, #6 - movs r0, #0x3f - ands r0, r3 - orrs r0, r2 - strb r0, [r1, #0x19] - adds r0, r1, #0 - bl sub_0806FAD8 - pop {pc} - .align 2, 0 -_0807F758: .4byte gUnk_08114F34 - - thumb_func_start sub_0807F75C -sub_0807F75C: @ 0x0807F75C - push {r4, lr} - ldr r2, [r1, #4] - ldr r3, _0807F774 @ =gPlayerEntity - ldr r1, _0807F778 @ =gRoomControls - asrs r0, r2, #0x10 - ldrh r4, [r1, #6] - adds r0, r0, r4 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #8] - adds r0, r0, r2 - strh r0, [r3, #0x32] - pop {r4, pc} - .align 2, 0 -_0807F774: .4byte gPlayerEntity -_0807F778: .4byte gRoomControls - - thumb_func_start sub_0807F77C -sub_0807F77C: @ 0x0807F77C - push {lr} - ldr r0, [r1, #0x14] - cmp r0, #0 - beq _0807F786 - movs r0, #1 -_0807F786: - str r0, [r1, #4] - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F78C -sub_0807F78C: @ 0x0807F78C - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r5, [r1, #4] - cmp r5, #0 - bne _0807F79A - ldr r0, _0807F7BC @ =gRoomVars - ldrb r5, [r0, #6] -_0807F79A: - adds r0, r5, #0 - bl GetSaleItemConfirmMessageID - adds r4, r0, #0 - adds r0, r5, #0 - bl GetItemPrice - adds r5, r0, #0 - adds r0, r4, #0 - adds r1, r6, #0 - bl TextboxNoOverlap - ldr r0, _0807F7C0 @ =gTextBox - lsls r5, r5, #0x10 - lsrs r5, r5, #0x10 - str r5, [r0, #0x10] - pop {r4, r5, r6, pc} - .align 2, 0 -_0807F7BC: .4byte gRoomVars -_0807F7C0: .4byte gTextBox - - thumb_func_start sub_0807F7C4 -sub_0807F7C4: @ 0x0807F7C4 - push {r4, lr} - adds r4, r1, #0 - ldr r0, [r4, #4] - cmp r0, #0 - bne _0807F7D2 - ldr r0, _0807F7F4 @ =gRoomVars - ldrb r0, [r0, #6] -_0807F7D2: - bl GetItemPrice - movs r2, #0 - ldr r1, _0807F7F8 @ =gSave - adds r1, #0xc0 - ldrh r1, [r1] - cmp r0, r1 - bgt _0807F7E4 - movs r2, #1 -_0807F7E4: - str r2, [r4, #0x14] - ldr r2, _0807F7FC @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F7F4: .4byte gRoomVars -_0807F7F8: .4byte gSave -_0807F7FC: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F800 -sub_0807F800: @ 0x0807F800 - push {r4, lr} - ldr r4, [r1, #4] - cmp r4, #0 - bne _0807F80C - ldr r0, _0807F834 @ =gRoomVars - ldrb r4, [r0, #6] -_0807F80C: - adds r0, r4, #0 - bl GetItemPrice - rsbs r0, r0, #0 - bl ModRupees - adds r0, r4, #0 - movs r1, #0 - movs r2, #0 - bl sub_080A7C18 - ldr r1, _0807F834 @ =gRoomVars - movs r0, #0 - strb r0, [r1, #6] - ldr r2, _0807F838 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {r4, pc} - .align 2, 0 -_0807F834: .4byte gRoomVars -_0807F838: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F83C -sub_0807F83C: @ 0x0807F83C - push {lr} - bl sub_08079184 - pop {pc} - - thumb_func_start sub_0807F844 -sub_0807F844: @ 0x0807F844 - push {lr} - ldr r1, _0807F850 @ =gRoomControls - str r0, [r1, #0x30] - bl sub_080809D4 - pop {pc} - .align 2, 0 -_0807F850: .4byte gRoomControls - - thumb_func_start sub_0807F854 -sub_0807F854: @ 0x0807F854 - push {lr} - ldr r1, [r1, #4] - lsrs r2, r1, #0x10 - movs r0, #3 - ands r2, r0 - ldr r3, _0807F870 @ =0x0000FFFF - ands r3, r1 - cmp r2, #4 - bhi _0807F8B4 - lsls r0, r2, #2 - ldr r1, _0807F874 @ =_0807F878 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F870: .4byte 0x0000FFFF -_0807F874: .4byte _0807F878 -_0807F878: @ jump table - .4byte _0807F88C @ case 0 - .4byte _0807F88C @ case 1 - .4byte _0807F898 @ case 2 - .4byte _0807F8A4 @ case 3 - .4byte _0807F8B0 @ case 4 -_0807F88C: - ldr r0, _0807F894 @ =gTextBox - str r3, [r0, #0x10] - b _0807F8B4 - .align 2, 0 -_0807F894: .4byte gTextBox -_0807F898: - ldr r0, _0807F8A0 @ =gTextBox - str r3, [r0, #0x14] - b _0807F8B4 - .align 2, 0 -_0807F8A0: .4byte gTextBox -_0807F8A4: - ldr r0, _0807F8AC @ =gTextBox - str r3, [r0, #0x18] - b _0807F8B4 - .align 2, 0 -_0807F8AC: .4byte gTextBox -_0807F8B0: - ldr r0, _0807F8B8 @ =gTextBox - str r3, [r0, #0x1c] -_0807F8B4: - pop {pc} - .align 2, 0 -_0807F8B8: .4byte gTextBox - - thumb_func_start sub_0807F8BC -sub_0807F8BC: @ 0x0807F8BC - push {r4, lr} - adds r4, r1, #0 - bl sub_080040A8 - cmp r0, #0 - beq _0807F8CA - movs r0, #1 -_0807F8CA: - str r0, [r4, #0x14] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0807F8D0 -sub_0807F8D0: @ 0x0807F8D0 - push {lr} - ldr r1, [r1, #4] - bl sub_08003FC4 - ldr r2, _0807F8E4 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] - pop {pc} - .align 2, 0 -_0807F8E4: .4byte gActiveScriptInfo - - thumb_func_start sub_0807F8E8 -sub_0807F8E8: @ 0x0807F8E8 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r1, #0xa6 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r2, r0, #0 - cmp r2, #0 - beq _0807F912 - str r4, [r2, #0x50] - ldr r0, [r5, #4] - ldr r1, _0807F914 @ =0x000003FF - ands r0, r1 - movs r3, #0x80 - lsls r3, r3, #8 - adds r1, r3, #0 - adds r2, #0x86 - orrs r0, r1 - strh r0, [r2] -_0807F912: - pop {r4, r5, pc} - .align 2, 0 -_0807F914: .4byte 0x000003FF - - thumb_func_start sub_0807F918 -sub_0807F918: @ 0x0807F918 - push {lr} - ldr r0, [r1, #4] - bl PutItemOnSlot - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F924 -sub_0807F924: @ 0x0807F924 - push {lr} - bl sub_0807879C - pop {pc} - - thumb_func_start sub_0807F92C -sub_0807F92C: @ 0x0807F92C - push {lr} - bl sub_080787C0 - pop {pc} - - thumb_func_start sub_0807F934 -sub_0807F934: @ 0x0807F934 - push {lr} - bl sub_080787B4 - pop {pc} - - thumb_func_start sub_0807F93C -sub_0807F93C: @ 0x0807F93C - push {lr} - ldr r2, [r1, #4] - lsrs r1, r2, #8 - movs r3, #0xff - ands r1, r3 - ands r2, r3 - bl CreateSpeechBubbleSleep - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807F950 -sub_0807F950: @ 0x0807F950 - push {lr} - sub sp, #4 - movs r0, #2 - str r0, [sp] - movs r0, #6 - movs r1, #0x56 - movs r2, #6 - movs r3, #0 - bl FindEntity - cmp r0, #0 - beq _0807F96C - bl DeleteEntity -_0807F96C: - add sp, #4 - pop {pc} - - thumb_func_start sub_0807F970 -sub_0807F970: @ 0x0807F970 - push {lr} - adds r2, r1, #0 - movs r3, #0 - ldr r1, _0807F988 @ =gCurrentTextBox - ldr r0, [r2, #4] - ldrh r1, [r1, #0x28] - cmp r0, r1 - bne _0807F982 - movs r3, #1 -_0807F982: - str r3, [r2, #0x14] - pop {pc} - .align 2, 0 -_0807F988: .4byte gCurrentTextBox - - thumb_func_start sub_0807F98C -sub_0807F98C: @ 0x0807F98C - ldr r1, [r1, #4] - str r1, [r0, #0x34] - bx lr - .align 2, 0 - - thumb_func_start sub_0807F994 -sub_0807F994: @ 0x0807F994 - ldr r2, [r1, #4] - asrs r1, r2, #0x10 - adds r3, r0, #0 - adds r3, #0x62 - strb r1, [r3] - adds r0, #0x63 - strb r2, [r0] - bx lr - - thumb_func_start sub_0807F9A4 -sub_0807F9A4: @ 0x0807F9A4 - push {lr} - ldr r0, _0807F9BC @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - subs r0, #5 - cmp r0, #0x17 - bhi _0807FA30 - lsls r0, r0, #2 - ldr r1, _0807F9C0 @ =_0807F9C4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F9BC: .4byte gPlayerState -_0807F9C0: .4byte _0807F9C4 -_0807F9C4: @ jump table - .4byte _0807FA24 @ case 0 - .4byte _0807FA30 @ case 1 - .4byte _0807FA24 @ case 2 - .4byte _0807FA24 @ case 3 - .4byte _0807FA30 @ case 4 - .4byte _0807FA24 @ case 5 - .4byte _0807FA24 @ case 6 - .4byte _0807FA24 @ case 7 - .4byte _0807FA24 @ case 8 - .4byte _0807FA24 @ case 9 - .4byte _0807FA24 @ case 10 - .4byte _0807FA24 @ case 11 - .4byte _0807FA24 @ case 12 - .4byte _0807FA24 @ case 13 - .4byte _0807FA24 @ case 14 - .4byte _0807FA24 @ case 15 - .4byte _0807FA24 @ case 16 - .4byte _0807FA24 @ case 17 - .4byte _0807FA24 @ case 18 - .4byte _0807FA24 @ case 19 - .4byte _0807FA30 @ case 20 - .4byte _0807FA30 @ case 21 - .4byte _0807FA24 @ case 22 - .4byte _0807FA24 @ case 23 -_0807FA24: - ldr r1, _0807FA2C @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] - b _0807FA3A - .align 2, 0 -_0807FA2C: .4byte gActiveScriptInfo -_0807FA30: - ldr r2, _0807FA3C @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] -_0807FA3A: - pop {pc} - .align 2, 0 -_0807FA3C: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FA40 -sub_0807FA40: @ 0x0807FA40 - push {lr} - ldr r0, _0807FA58 @ =gPlayerState - adds r0, #0xa8 - ldrb r0, [r0] - subs r0, #5 - cmp r0, #0x17 - bhi _0807FACC - lsls r0, r0, #2 - ldr r1, _0807FA5C @ =_0807FA60 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807FA58: .4byte gPlayerState -_0807FA5C: .4byte _0807FA60 -_0807FA60: @ jump table - .4byte _0807FAC0 @ case 0 - .4byte _0807FACC @ case 1 - .4byte _0807FAC0 @ case 2 - .4byte _0807FAC0 @ case 3 - .4byte _0807FACC @ case 4 - .4byte _0807FAC0 @ case 5 - .4byte _0807FAC0 @ case 6 - .4byte _0807FAC0 @ case 7 - .4byte _0807FAC0 @ case 8 - .4byte _0807FAC0 @ case 9 - .4byte _0807FAC0 @ case 10 - .4byte _0807FAC0 @ case 11 - .4byte _0807FAC0 @ case 12 - .4byte _0807FAC0 @ case 13 - .4byte _0807FACC @ case 14 - .4byte _0807FAC0 @ case 15 - .4byte _0807FAC0 @ case 16 - .4byte _0807FAC0 @ case 17 - .4byte _0807FAC0 @ case 18 - .4byte _0807FAC0 @ case 19 - .4byte _0807FACC @ case 20 - .4byte _0807FACC @ case 21 - .4byte _0807FAC0 @ case 22 - .4byte _0807FAC0 @ case 23 -_0807FAC0: - ldr r1, _0807FAC8 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] - b _0807FAD6 - .align 2, 0 -_0807FAC8: .4byte gActiveScriptInfo -_0807FACC: - ldr r2, _0807FAD8 @ =gActiveScriptInfo - ldrb r1, [r2, #7] - movs r0, #1 - orrs r0, r1 - strb r0, [r2, #7] -_0807FAD6: - pop {pc} - .align 2, 0 -_0807FAD8: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FADC -sub_0807FADC: @ 0x0807FADC - push {r4, lr} - adds r2, r0, #0 - adds r4, r1, #0 - ldrb r0, [r4, #0x18] - cmp r0, #1 - beq _0807FB06 - cmp r0, #1 - bgt _0807FAF2 - cmp r0, #0 - beq _0807FAF8 - b _0807FB1C -_0807FAF2: - cmp r0, #2 - beq _0807FB16 - b _0807FB1C -_0807FAF8: - movs r0, #1 - strb r0, [r4, #0x18] - ldr r1, [r4, #4] - adds r0, r2, #0 - bl sub_0808C650 - b _0807FB1C -_0807FB06: - bl sub_0808C67C - cmp r0, #0 - beq _0807FB1C - ldrb r0, [r4, #0x18] - adds r0, #1 - strb r0, [r4, #0x18] - b _0807FB1C -_0807FB16: - bl sub_0808C688 - b _0807FB22 -_0807FB1C: - ldr r1, _0807FB24 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FB22: - pop {r4, pc} - .align 2, 0 -_0807FB24: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FB28 -sub_0807FB28: @ 0x0807FB28 - push {r4, lr} - adds r4, r1, #0 - ldrb r0, [r4, #0x18] - cmp r0, #0 - bne _0807FB3A - ldr r0, _0807FB54 @ =0x00007FFF - movs r1, #1 - bl sub_0801D7BC -_0807FB3A: - ldrb r0, [r4, #0x18] - adds r0, #1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x18] - ldr r0, [r4, #4] - cmp r1, r0 - blo _0807FB58 - movs r0, #0 - movs r1, #0 - bl sub_0801D7BC - b _0807FB5E - .align 2, 0 -_0807FB54: .4byte 0x00007FFF -_0807FB58: - ldr r1, _0807FB60 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FB5E: - pop {r4, pc} - .align 2, 0 -_0807FB60: .4byte gActiveScriptInfo - - thumb_func_start sub_0807FB64 -sub_0807FB64: @ 0x0807FB64 - ldr r0, _0807FB70 @ =gPlayerEntity - ldr r1, [r1, #4] - adds r0, #0x3d - strb r1, [r0] - bx lr - .align 2, 0 -_0807FB70: .4byte gPlayerEntity - - thumb_func_start sub_0807FB74 -sub_0807FB74: @ 0x0807FB74 - ldr r0, _0807FB8C @ =gPlayerState - adds r0, #0x26 - movs r1, #0 - strb r1, [r0] - ldr r1, _0807FB90 @ =gPlayerEntity - adds r1, #0x3c - ldrb r2, [r1] - movs r0, #0xfb - ands r0, r2 - strb r0, [r1] - bx lr - .align 2, 0 -_0807FB8C: .4byte gPlayerState -_0807FB90: .4byte gPlayerEntity - - thumb_func_start sub_0807FB94 -sub_0807FB94: @ 0x0807FB94 - push {lr} - movs r0, #4 - bl InitScreen - pop {pc} - .align 2, 0 - - thumb_func_start sub_0807FBA0 -sub_0807FBA0: @ 0x0807FBA0 - ldr r2, _0807FBB0 @ =gRoomControls - ldrh r1, [r2, #0xa] - adds r1, #0x78 - strh r1, [r0, #0x2e] - ldrh r1, [r2, #0xc] - adds r1, #0x50 - strh r1, [r0, #0x32] - bx lr - .align 2, 0 -_0807FBB0: .4byte gRoomControls - - thumb_func_start sub_0807FBB4 -sub_0807FBB4: @ 0x0807FBB4 - ldr r2, _0807FBC0 @ =gPlayerState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - bx lr - .align 2, 0 -_0807FBC0: .4byte gPlayerState - - thumb_func_start sub_0807FBC4 -sub_0807FBC4: @ 0x0807FBC4 - push {lr} - bl sub_0805E4A0 - pop {pc} - - thumb_func_start sub_0807FBCC -sub_0807FBCC: @ 0x0807FBCC - push {lr} - bl sub_0805E4CC - pop {pc} - - thumb_func_start sub_0807FBD4 -sub_0807FBD4: @ 0x0807FBD4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - beq _0807FBF4 - ldr r1, _0807FBF8 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_0807FBF4: - pop {r4, pc} - .align 2, 0 -_0807FBF8: .4byte gActiveScriptInfo - -.ifndef EU - thumb_func_start sub_0807FBFC -sub_0807FBFC: @ 0x0807FBFC - ldr r3, _0807FC20 @ =gSave - adds r0, r3, #0 - adds r0, #0xb2 - movs r1, #0 - strb r1, [r0] - adds r0, #0x12 - movs r2, #0 - strh r1, [r0] - subs r0, #0x11 - strb r2, [r0] - adds r0, #0x13 - strh r1, [r0] - subs r0, #0xc - strb r2, [r0] - adds r0, #0xe - strh r1, [r0] - bx lr - .align 2, 0 -_0807FC20: .4byte gSave -.endif - -.ifdef USA - thumb_func_start sub_0807FC24 -sub_0807FC24: @ 0x0807FC24 - push {lr} - ldr r0, _0807FC3C @ =gRoomControls - ldrb r0, [r0, #5] - movs r1, #0xd1 - cmp r0, #1 - bne _0807FC32 - movs r1, #0xcf -_0807FC32: - adds r0, r1, #0 - bl SetLocalFlag - pop {pc} - .align 2, 0 -_0807FC3C: .4byte gRoomControls -.else -.ifdef DEMO @ TODO deduplicate - thumb_func_start sub_0807FC24 -sub_0807FC24: @ 0x0807FC24 - push {lr} - ldr r0, _0807FC3C @ =gRoomControls - ldrb r0, [r0, #5] - movs r1, #0xd1 - cmp r0, #1 - bne _0807FC32 - movs r1, #0xcf -_0807FC32: - adds r0, r1, #0 - bl SetLocalFlag - pop {pc} - .align 2, 0 -_0807FC3C: .4byte gRoomControls -.endif -.endif - thumb_func_start UpdateScroll UpdateScroll: @ 0xUpdateScroll push {lr} diff --git a/asmdiff.sh b/asmdiff.sh index 54cac7b5..bf6a907a 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,7 +1,7 @@ #!/bin/bash -buildname=tmc_eu -baserom=baserom_eu +buildname=tmc +baserom=baserom OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" diff --git a/include/functions.h b/include/functions.h index 45e0f294..ad271fa5 100644 --- a/include/functions.h +++ b/include/functions.h @@ -9,6 +9,7 @@ #include "player.h" #include "room.h" #include "structures.h" +#include "script.h" // Identified - to be sorted into header files extern void ShowNPCDialogue(Entity*, Dialog*); @@ -42,7 +43,21 @@ extern void ResetPlayer(void); extern u32 IsItemEquipped(u32); extern void DeleteManager(Manager*); extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY); +extern Entity* CreateProjectileWithParent(Entity*, u8, u8); +extern u32 GetBottleContaining(u32); extern u32 GetTileTypeByEntity(Entity*); +extern u32 GetSaleItemConfirmMessageID(u32); +extern void FlushSprites(void); +extern void DispReset(u32); +extern void InitSoundPlayingInfo(void); +extern void InitDMA(void); +extern Entity* CreateProjectile(u32); +extern void RegisterPlayerHitbox(); +extern s32 GetItemPrice(); +extern void DoExitTransition(ScreenTransitionData*); +extern void CreateDustAt(u32, u32, u32); +extern void PutItemOnSlot(u32 itemID); +extern void CreateSpeechBubbleSleep(Entity*, u32, u32); // Unidentified extern u32 sub_0806ED78(Entity*); @@ -80,8 +95,6 @@ extern u32 sub_08049FA0(Entity*); extern u32 sub_08049FDC(Entity*, u32); extern u32 sub_080041A0(Entity*, Entity*, u32, u32); extern u32 sub_08049EE4(Entity*); -extern Entity* CreateProjectileWithParent(Entity*, u8, u8); -extern u32 GetBottleContaining(u32); extern void sub_08077E54(ItemBehavior*); extern void sub_080042BA(Entity*, u32); extern bool32 sub_08077F24(ItemBehavior*, u32); @@ -92,7 +105,6 @@ extern s32 sub_0807887C(Entity*, u32, u32); extern s32 sub_08078904(); extern void sub_0805E5A8(void); extern void sub_0805E5C0(void); -extern void FlushSprites(void); extern void sub_080AD9B0(void); extern void sub_080AD918(void); extern void sub_0801E104(void); @@ -118,7 +130,6 @@ extern u32 sub_08060354(void); extern void sub_08057E64(void); extern void sub_0809F814(u32); extern void sub_080300E8(void); -extern void DispReset(u32); extern void sub_08058D34(void); extern void sub_0807AABC(Entity*); extern void sub_08078A90(u32); @@ -142,7 +153,6 @@ extern void sub_080AF2E4(void); extern void sub_0804F578(void); extern void sub_08059994(void); extern s32 sub_0801CFA8(u32); -extern void InitSoundPlayingInfo(void); extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4 extern void sub_0801E1B8(u32, u32); extern void sub_0801E1EC(s32, s32, s32); @@ -171,7 +181,6 @@ extern void sub_0807A108(void); extern u32 sub_0801766C(Entity*); extern void sub_08004168(Entity*); extern u32 sub_08052638(u32); -extern void InitDMA(void); extern void sub_08056208(void); extern void sub_08050384(); extern u32 sub_0806F520(); @@ -181,7 +190,6 @@ extern void sub_0804A7D4(Entity*); extern void sub_08033744(Entity*); extern void sub_0800417E(Entity*, u32); extern void sub_080784C8(); -extern void RegisterPlayerHitbox(); extern u32 sub_0808288C(Entity*, u32, u32, u32); extern void sub_0806FDA0(Entity*); extern void sub_080AE008(Entity*, u32, u32); @@ -227,7 +235,6 @@ extern u32 sub_0805F7A0(u32); extern u32* sub_0805F25C(u32); extern u32 sub_080045DA(s32, s32); u32 sub_0806FCB8(Entity*, u32, u32, u32); -extern Entity* CreateProjectile(u32); extern void sub_080A1D70(Entity*, u32); extern void sub_0806F62C(Entity*, u32, u32); extern void sub_080A1ED0(u32, u32, u32); @@ -241,7 +248,6 @@ extern u32 sub_08052734(); // has Dungeon Map? extern u32 sub_08052764(); // has Dungeon Compass? extern u32 sub_0805279C(); // has Dungeon Big Key? extern u32 sub_080527CC(); // num Dungeon small keys? -extern u32 GetItemPrice(); extern void sub_08078790(Entity*, u32); extern void sub_080788E0(Entity*); extern void sub_08078AA8(u32, u32); @@ -267,7 +273,15 @@ extern void sub_0805EEB4(u8*, u32); extern void sub_08056BDC(u32); extern void sub_08056F88(u32, u32); extern void sub_0805F8E4(u32 r0, WStruct* r1); -extern void DoExitTransition(ScreenTransitionData*); +extern u32 sub_08002632(Entity*); +extern void sub_0807879C(Entity*); +extern void sub_080787C0(Entity*); +extern void sub_080787B4(Entity*); +extern void sub_0808C650(Entity*, u32); +extern u32 sub_0808C67C(void); +extern void sub_0808C688(void); +extern void sub_0805E4A0(Entity*); +extern void sub_0805E4CC(Entity*); extern Entity* sub_08077C94(ItemBehavior*, u32); extern Entity* sub_08077C0C(ItemBehavior*, u32); @@ -283,7 +297,6 @@ extern void sub_08078E84(Entity*, Entity*); extern void sub_080042D0(Entity*, u32, u16); extern u32 sub_080002A8(u32, u32, u32); -extern void CreateDustAt(u32, u32, u32); extern void sub_080806BC(u32, u32, u32, u32); extern void sub_080186C0(u32); diff --git a/include/utils.h b/include/utils.h index 0634700e..004a5ada 100644 --- a/include/utils.h +++ b/include/utils.h @@ -40,6 +40,8 @@ void ReadKeyInput(void); void LoadPalettes(const u8*, int, int); void LoadPaletteGroup(u32 group); +void sub_0801D79C(u32 colorIndex, u32 color); +void sub_0801D7BC(u32 color, u32 arg1); /** * Allocate memory on heap. diff --git a/src/npc/din.c b/src/npc/din.c index ec340fb1..d17d1dea 100644 --- a/src/npc/din.c +++ b/src/npc/din.c @@ -5,8 +5,6 @@ #include "functions.h" #include "save.h" -extern u32 sub_08002632(Entity*); - void Din(Entity* this) { switch (this->action) { case 0: diff --git a/src/script.c b/src/script.c index 105f7af2..9529156f 100644 --- a/src/script.c +++ b/src/script.c @@ -11,6 +11,7 @@ #include "random.h" #include "audio.h" #include "functions.h" +#include "main.h" void InitScriptForEntity(Entity*, ScriptExecutionContext*, u16*); void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script); @@ -301,6 +302,9 @@ const ScriptCommand gScriptCommands[] = { ScriptCommandNop, ScriptCommand_0807F0B4, ScriptCommand_0807F0C8 }; +extern u16* gUnk_08001A7C[]; +extern u8 gUnk_08114F30[]; +extern u8 gUnk_08114F34[]; extern const u16 gUnk_08016984; extern u8 gUnk_0811E514[]; extern u8 gUnk_0811E510[]; @@ -1524,3 +1528,623 @@ void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context) { void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context) { sub_08080964(context->scriptInstructionPointer[1], context->scriptInstructionPointer[2]); } + +extern u8 gUnk_0811E750[]; +extern u8 gUnk_0811E758[]; +extern u8 gUnk_0811E760[]; + +void sub_0807F0D8(Entity* entity, ScriptExecutionContext* context) { + context->condition = (-(u32)gInput.newKeys | ((u32)gInput.newKeys)) >> 0x1f; +} + +void sub_0807F0EC(Entity* entity, ScriptExecutionContext* context) { + context->intVariable = (s32)Random() % (s32)context->intVariable; +} + +void sub_0807F100(Entity* entity, ScriptExecutionContext* context) { + u32 rand; + + rand = Random(); + entity->animationState = rand & 6; + context->unk_1A = gUnk_0811E750[(rand >> 8) & 7]; +} + +void sub_0807F128(Entity* entity, ScriptExecutionContext* context) { + u32 rand; + + rand = Random(); + entity->animationState = gUnk_0811E758[rand & 7]; + context->unk_1A = gUnk_0811E760[(rand >> 8) & 7]; +} + +void sub_0807F158(Entity* entity, ScriptExecutionContext* context) { + entity->collisionLayer = 1; + UpdateSpriteForCollisionLayer(entity); +} + +void sub_0807F168(Entity* entity, ScriptExecutionContext* context) { + gPlayerEntity.collisionLayer = 1; + UpdateSpriteForCollisionLayer(&gPlayerEntity); +} + +void sub_0807F180(Entity* entity, ScriptExecutionContext* context) { + entity->collisionLayer = 2; + UpdateSpriteForCollisionLayer(entity); +} + +void sub_0807F190(Entity* entity, ScriptExecutionContext* context) { + DoFade(4, 256); +} + +void sub_0807F1A0(Entity* entity, ScriptExecutionContext* context) { + sub_0807DEDC(entity, context, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F1C4(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x459; + } else { + gPlayerState.field_0x8 = 0x1bc; + } +} + +void sub_0807F1E8(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x45a; + } else { + gPlayerState.field_0x8 = 0x2bd; + } +} + +void sub_0807F210(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerState.flags.all & 8) != 0) { + gPlayerState.field_0x8 = 0x41c; + } else { + gPlayerState.field_0x8 = 0x80c; + } +} + +void sub_0807F238(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x8 = context->intVariable; +} + +void sub_0807F244(Entity* entity, ScriptExecutionContext* context) { + u32 slot; + u32 item; + + item = context->intVariable & 0xFFFF; + slot = context->intVariable >> 0x10; + item &= 0xFFFF; + switch (item) { + case 1: + case 2: + case 3: + case 4: + case 6: + // Pick greatest sword unlocked + item = 1; + if (GetInventoryValue(2)) + item = 2; + if (GetInventoryValue(3)) + item = 3; + if (GetInventoryValue(4)) + item = 4; + if (GetInventoryValue(6)) + item = 6; + break; + } + ForceEquipItem(item, slot); +} + +void sub_0807F29C(Entity* entity, ScriptExecutionContext* context) { + sub_0805ED14((void*)context->intVariable); +} + +void sub_0807F2A8(Entity* entity, ScriptExecutionContext* context) { + if (gPlayerState.field_0x9c == 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F2D4(Entity* entity, ScriptExecutionContext* context) { + if ((entity->frames.all & 0x80) != 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F304(Entity* entity, ScriptExecutionContext* context) { + if ((gPlayerEntity.frames.all & 0x80) != 0) { + gActiveScriptInfo.flags |= 1; + } else { + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F338(Entity* entity, ScriptExecutionContext* context) { + entity->hitbox = NULL; + entity->field_0x17 &= ~1; +} + +void sub_0807F348(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 2); +} + +void sub_0807F354(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 6); +} + +void sub_0807F360(Entity* entity, ScriptExecutionContext* context) { + sub_0805E3A0(entity, 3); +} + +void sub_0807F36C(Entity* entity, ScriptExecutionContext* context) { + Entity* fx; + fx = CreateFx(entity, 0x41, 0); + if (fx != NULL) { + fx->spritePriority.b0 = 1; + PositionRelative(entity, fx, 0, -524288); + if (Random() & 1) + fx->spriteSettings.b.flipX = 1; + if (Random() & 1) + fx->spriteSettings.b.flipY = 1; + } +} + +void sub_0807F3C8(Entity* entity, ScriptExecutionContext* context) { + sub_0807F36C(entity, context); + SoundReq(SFX_BUTTON_DEPRESS); +} + +void sub_0807F3D8(Entity* entity, ScriptExecutionContext* context) { + InitAnimationForceUpdate(entity, context->intVariable + (entity->animationState >> 1)); + entity->field_0x80.HWORD = entity->animIndex; +} + +void sub_0807F3F8(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleExclamationMark(&gPlayerEntity, 8, -24); +} + +void sub_0807F40C(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleQuestionMark(&gPlayerEntity, 8, -24); +} + +void sub_0807F420(Entity* entity, ScriptExecutionContext* context) { + MenuFadeIn(context->intVariable & 0xff, (u8)(context->intVariable >> 8)); +} + +void sub_0807F434(Entity* entity, ScriptExecutionContext* context) { + switch (entity->interactType) { + case 1: + entity->interactType = 0; + context->intVariable = 1; + break; + case 2: + entity->interactType = 0; + context->intVariable = 2; + break; + default: + context->intVariable = 0; + break; + } + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F464(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var; + + if (!context->unk_18) { + context->unk_18++; + context->postScriptActions |= 2; + s32Var = context->intVariable; + context->x.HALF.HI = gRoomControls.roomOriginX + s32Var; + context->y.HALF.HI = entity->y.HALF.HI; + if (s32Var > entity->x.HALF.HI - gRoomControls.roomOriginX) { + entity->direction = 64; + entity->animationState = (entity->animationState & 0x80) | 2; + } else { + entity->direction = -64; + entity->animationState = (entity->animationState & 0x80) | 6; + } + } + sub_0806F62C(entity, entity->speed, entity->direction); + if (((context->x.HALF.HI - entity->x.HALF.HI) ^ ((entity->direction & 0x80) << 24)) < 0) + entity->x.HALF.HI = context->x.HALF.HI; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F4F8(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var; + + if (!context->unk_18) { + context->unk_18++; + context->postScriptActions |= 2; + s32Var = context->intVariable; + context->x.HALF.HI = entity->x.HALF.HI; + context->y.HALF.HI = gRoomControls.roomOriginY + s32Var; + if (s32Var > entity->y.HALF.HI - gRoomControls.roomOriginY) { + entity->direction = 128; + entity->animationState = (entity->animationState & 0x80) | 4; + } else { + entity->direction = 0; + entity->animationState = (entity->animationState & 0x80); + } + } + sub_0806F62C(entity, entity->speed, entity->direction); + if (((context->y.HALF.HI - entity->y.HALF.HI) ^ ((entity->direction & 0x80) << 24)) >= 0) + entity->y.HALF.HI = context->y.HALF.HI; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F584(Entity* entity, ScriptExecutionContext* context) { + context->intVariable = gPlayerEntity.animationState >> 1; +} + +void sub_0807F594(Entity* entity, ScriptExecutionContext* context) { + if (gPlayerState.field_0xa8) + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807F5B0(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x27[0] = context->intVariable; +} + +void sub_0807F5C0(Entity* entity, ScriptExecutionContext* context) { + s32 left; + s32 bottom; + + if (gRoomControls.cameraTarget != NULL) { + left = gRoomControls.cameraTarget->x.HALF.HI - DISPLAY_WIDTH / 2; + bottom = gRoomControls.cameraTarget->y.HALF.HI - DISPLAY_HEIGHT / 2; + + if (left < gRoomControls.roomOriginX) + left = gRoomControls.roomOriginX; + if (left > gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH) + left = gRoomControls.roomOriginX + gRoomControls.width - DISPLAY_WIDTH; + if (bottom < gRoomControls.roomOriginY) + bottom = gRoomControls.roomOriginY; + if (bottom > gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT) + bottom = gRoomControls.roomOriginY + gRoomControls.height - DISPLAY_HEIGHT; + + if (left == gRoomControls.roomScrollX && bottom == gRoomControls.roomScrollY) + gActiveScriptInfo.flags |= 1u; + else + gActiveScriptInfo.commandSize = 0; + } +} + +void sub_0807F634(Entity* entity, ScriptExecutionContext* context) { + u16* p = (u16*)context->intVariable; + sub_0801DFB4(entity, p[0], p[1], p[2]); + gPlayerState.field_0x8b = 3; +} + +void sub_0807F650(Entity* entity, ScriptExecutionContext* context) { + u32 p = sub_08002632(entity); + sub_0801DFB4(entity, gUnk_08001A7C[p][0], gUnk_08001A7C[p][1], gUnk_08001A7C[p][2]); + gPlayerState.field_0x8b = 3; +} + +void sub_0807F680(Entity* entity, ScriptExecutionContext* context) { + context->condition = gPlayerEntity.x.HALF.HI - gRoomControls.roomOriginX > (s32)(context->intVariable & 0xffff); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F6B4(Entity* entity, ScriptExecutionContext* context) { + context->condition = gPlayerEntity.y.HALF.HI - gRoomControls.roomOriginY > (s32)(context->intVariable & 0xffff); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F6E8(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.flags.all |= context->intVariable; +} + +void sub_0807F6F8(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.flags.all &= ~context->intVariable; +} + +void sub_0807F708(Entity* entity, ScriptExecutionContext* context) { + ShowNPCDialogue(entity, (Dialog*)context->intVariable); +} + +void sub_0807F714(Entity* entity, ScriptExecutionContext* context) { + entity->spriteRendering.b3 = gUnk_08114F30[entity->spriteRendering.b3]; + ResolveEntityOnTop(entity, entity); +} + +void sub_0807F738(Entity* entity, ScriptExecutionContext* context) { + entity->spriteRendering.b3 = gUnk_08114F34[entity->spriteRendering.b3]; + sub_0806FAD8(entity, entity); +} + +void sub_0807F75C(Entity* entity, ScriptExecutionContext* context) { + s32 s32Var = context->intVariable; + gPlayerEntity.x.HALF.HI = (s32Var >> 16) + gRoomControls.roomOriginX; + gPlayerEntity.y.HALF.HI = (s32Var & 0xffff) + gRoomControls.roomOriginY; +} + +void sub_0807F77C(Entity* entity, ScriptExecutionContext* context) { + if (context->condition) + context->intVariable = 1; + else + context->intVariable = 0; +} + +void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + msg = GetSaleItemConfirmMessageID(item); + price = GetItemPrice(item); + TextboxNoOverlap(msg, entity); + gTextBox.field_0x10 = (u16)price; +} + +void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + context->condition = GetItemPrice(item) <= gSave.stats.rupees; + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F800(Entity* entity, ScriptExecutionContext* context) { + u32 item = context->intVariable; + u32 msg; + u32 price; + + if (context->intVariable == 0) + item = gRoomVars.itemForSaleIndex; + + price = GetItemPrice(item); + ModRupees(-price); + sub_080A7C18(item, 0, 0); + gRoomVars.itemForSaleIndex = 0; + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F83C(Entity* entity, ScriptExecutionContext* context) { + sub_08079184(); +} + +void sub_0807F844(Entity* entity, ScriptExecutionContext* context) { + gRoomControls.cameraTarget = entity; + sub_080809D4(); +} + +void sub_0807F854(Entity* entity, ScriptExecutionContext* context) { + u32 value; + u32 idx; + + idx = (context->intVariable >> 0x10) & 3; + value = context->intVariable & 0xffff; + switch (idx) { + case 0: + case 1: + gTextBox.field_0x10 = value; + break; + case 2: + gTextBox.field_0x14 = value; + break; + case 3: + gTextBox.field_0x18 = value; + break; + case 4: + gTextBox.field_0x1c = value; + break; + } +} + +void sub_0807F8BC(Entity* entity, ScriptExecutionContext* context) { + if (sub_080040A8(entity)) + context->condition = 1; + else + context->condition = 0; +} + +void sub_0807F8D0(Entity* entity, ScriptExecutionContext* context) { + sub_08003FC4(entity, context->intVariable); + gActiveScriptInfo.flags |= 1; +} + +void sub_0807F8E8(Entity* entity, ScriptExecutionContext* context) { + Entity* c = CreateObjectWithParent(entity, 0xA6, 0, 0); + if (c != NULL) { + c->parent = entity; + c->field_0x86.HWORD = (context->intVariable & 0x3ff) | 0x8000; + } +} + +void sub_0807F918(Entity* entity, ScriptExecutionContext* context) { + PutItemOnSlot(context->intVariable); +} + +void sub_0807F924(Entity* entity, ScriptExecutionContext* context) { + sub_0807879C(entity); +} + +void sub_0807F92C(Entity* entity, ScriptExecutionContext* context) { + sub_080787C0(entity); +} + +void sub_0807F934(Entity* entity, ScriptExecutionContext* context) { + sub_080787B4(entity); +} + +void sub_0807F93C(Entity* entity, ScriptExecutionContext* context) { + CreateSpeechBubbleSleep(entity, (context->intVariable >> 8) & 0xff, context->intVariable & 0xff); +} + +void sub_0807F950(Entity* entity, ScriptExecutionContext* context) { + Entity* c = FindEntity(6, 0x56, 6, 0, 2); + if (c != NULL) + DeleteEntity(c); +} + +void sub_0807F970(Entity* entity, ScriptExecutionContext* context) { + context->condition = context->intVariable == gCurrentTextBox._28; +} + +void sub_0807F98C(Entity* entity, ScriptExecutionContext* context) { + entity->height.WORD = context->intVariable; +} + +void sub_0807F994(Entity* entity, ScriptExecutionContext* context) { + entity->spriteOffsetX = (s32)context->intVariable >> 0x10; + entity->spriteOffsetY = context->intVariable & 0xffff; +} + +void sub_0807F9A4(Entity* entity, ScriptExecutionContext* context) { + switch (gPlayerState.field_0xa8) { + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 27: + case 28: + gActiveScriptInfo.commandSize = 0; + break; + default: + gActiveScriptInfo.flags |= 1u; + break; + } +} + +void sub_0807FA40(Entity* entity, ScriptExecutionContext* context) { + switch (gPlayerState.field_0xa8) { + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 20: + case 21: + case 22: + case 23: + case 24: + case 27: + case 28: + gActiveScriptInfo.commandSize = 0; + break; + default: + gActiveScriptInfo.flags |= 1u; + break; + } +} + +void sub_0807FADC(Entity* entity, ScriptExecutionContext* context) { + switch (context->unk_18) { + case 0: + context->unk_18++; + sub_0808C650(entity, context->intVariable); + break; + case 1: + if (sub_0808C67C()) + context->unk_18++; + break; + case 2: + sub_0808C688(); + return; + } + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807FB28(Entity* entity, ScriptExecutionContext* context) { + if (!context->unk_18) + sub_0801D7BC(0x7fff, 1); + + context->unk_18++; + if (context->unk_18 >= context->intVariable) + sub_0801D7BC(0, 0); + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_0807FB64(Entity* entity, ScriptExecutionContext* context) { + gPlayerEntity.iframes = context->intVariable; +} + +void sub_0807FB74(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.swimState = 0; + gPlayerEntity.field_0x3c &= ~4; +} + +void sub_0807FB94(Entity* entity, ScriptExecutionContext* context) { + InitScreen(SCREEN_CREDITS); +} + +void sub_0807FBA0(Entity* entity, ScriptExecutionContext* context) { + entity->x.HALF.HI = gRoomControls.roomScrollX + 120; + entity->y.HALF.HI = gRoomControls.roomScrollY + 80; +} + +void sub_0807FBB4(Entity* entity, ScriptExecutionContext* context) { + gPlayerState.field_0x1a[0] |= 0x80; +} + +void sub_0807FBC4(Entity* entity, ScriptExecutionContext* context) { + sub_0805E4A0(entity); +} + +void sub_0807FBCC(Entity* entity, ScriptExecutionContext* context) { + sub_0805E4CC(entity); +} + +void sub_0807FBD4(Entity* entity, ScriptExecutionContext* context) { + sub_0806F62C(entity, entity->speed, entity->direction); + if (sub_080040A8(entity)) + gActiveScriptInfo.commandSize = 0; +} + +#ifndef EU +void sub_0807FBFC(Entity* entity, ScriptExecutionContext* context) { + gSave.stats.charm = 0; + gSave.stats.charmTimer = 0; + gSave.stats.unkB = 0; + gSave.stats.unkTimer = 0; + gSave.stats.effect = 0; + gSave.stats.effectTimer = 0; +} + +#if defined(USA) || defined(DEMO) +void sub_0807FC24(Entity* entity, ScriptExecutionContext* context) { + u32 idx = gRoomControls.roomID == 1 ? 0xcf : 0xd1; + SetLocalFlag(idx); +} +#endif +#endif