diff --git a/asm/kinstone.s b/asm/kinstone.s deleted file mode 100644 index adc9fdf8..00000000 --- a/asm/kinstone.s +++ /dev/null @@ -1,946 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08018500 -sub_08018500: @ 0x08018500 - push {r4, lr} - ldr r4, _08018550 @ =gUnk_02033AB8 - adds r3, r4, #4 - ldr r0, _08018554 @ =gUnk_080B3D14 - ldrb r1, [r4] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrb r2, [r4, #1] - lsls r0, r2, #1 - adds r0, r0, r2 - ldrh r1, [r1] - adds r0, r0, r1 - movs r2, #0 -_0801851A: - strh r0, [r3] - adds r0, #1 - adds r3, #2 - adds r2, #1 - cmp r2, #2 - bls _0801851A - ldrb r1, [r4] - lsls r0, r1, #2 - adds r0, r0, r1 - ldr r1, _08018558 @ =0x00000C81 - adds r0, r0, r1 - movs r2, #0 - adds r1, r4, #0 - adds r1, #0xa -_08018536: - strh r0, [r3] - adds r0, #1 - adds r3, #2 - adds r2, #1 - cmp r2, #4 - bls _08018536 - movs r0, #5 - bl sub_08018690 - movs r0, #0 - strb r0, [r4, #2] - pop {r4, pc} - .align 2, 0 -_08018550: .4byte gUnk_02033AB8 -_08018554: .4byte gUnk_080B3D14 -_08018558: .4byte 0x00000C81 - - thumb_func_start sub_0801855C -sub_0801855C: @ 0x0801855C - push {r4, r5, r6, lr} - ldr r4, _08018570 @ =gUnk_02033AB8 - adds r0, r4, #0 - movs r1, #0x14 - bl MemClear - adds r5, r4, #0 - ldr r4, _08018574 @ =gUnk_080B3D20 - movs r6, #0 - b _0801858C - .align 2, 0 -_08018570: .4byte gUnk_02033AB8 -_08018574: .4byte gUnk_080B3D20 -_08018578: - adds r0, r4, #0 - bl sub_080185B4 - cmp r0, #0 - beq _08018584 - ldrb r6, [r5, #3] -_08018584: - ldrb r0, [r5, #3] - adds r0, #1 - strb r0, [r5, #3] - adds r4, #4 -_0801858C: - ldrb r0, [r4] - cmp r0, #0xff - bne _08018578 - strb r6, [r5, #3] - ldrb r0, [r5, #3] - lsls r0, r0, #2 - ldr r1, _080185B0 @ =gUnk_080B3D20 - adds r4, r0, r1 - ldrb r0, [r4, #2] - strb r0, [r5] - ldrb r0, [r4, #3] - strb r0, [r5, #1] - adds r0, r6, #1 - strb r0, [r5, #3] - bl sub_08018500 - pop {r4, r5, r6, pc} - .align 2, 0 -_080185B0: .4byte gUnk_080B3D20 - - thumb_func_start sub_080185B4 -sub_080185B4: @ 0x080185B4 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2] - cmp r0, #0xff - bne _080185C2 - movs r0, #0 - b _080185F6 -_080185C2: - cmp r0, #0xfe - bne _080185D4 - ldrb r0, [r2, #1] - bl GetInventoryValue - cmp r0, #0 - beq _080185F6 - movs r0, #1 - b _080185F6 -_080185D4: - cmp r0, #0xfd - beq _080185F0 - ldr r1, _080185EC @ =gLocalFlagBanks - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrb r1, [r2, #1] - bl CheckLocalFlagByBank - b _080185F6 - .align 2, 0 -_080185EC: .4byte gLocalFlagBanks -_080185F0: - ldrb r0, [r2, #1] - bl CheckKinstoneFused -_080185F6: - pop {pc} - - thumb_func_start sub_080185F8 -sub_080185F8: @ 0x080185F8 - push {r4, r5, lr} - ldr r5, _08018624 @ =gUnk_02033AB8 - ldrb r0, [r5, #3] - lsls r0, r0, #2 - ldr r1, _08018628 @ =gUnk_080B3D20 - adds r4, r0, r1 - adds r0, r4, #0 - bl sub_080185B4 - cmp r0, #0 - beq _08018620 - ldrb r0, [r4, #2] - strb r0, [r5] - ldrb r0, [r4, #3] - strb r0, [r5, #1] - ldrb r0, [r5, #3] - adds r0, #1 - strb r0, [r5, #3] - bl sub_08018500 -_08018620: - pop {r4, r5, pc} - .align 2, 0 -_08018624: .4byte gUnk_02033AB8 -_08018628: .4byte gUnk_080B3D20 - - thumb_func_start GenerateAreaHint -GenerateAreaHint: @ 0x0801862C - push {r4, r5, lr} - ldr r1, _0801864C @ =gPlayerState - movs r2, #0 - movs r0, #0x16 - strb r0, [r1, #0xc] - ldr r5, _08018650 @ =gRoomTransition - adds r0, r5, #0 -.ifdef JP - adds r0, #0x34 -.else -.ifdef EU - adds r0, #0x34 -.else - adds r0, #0x35 -.endif -.endif - strb r2, [r0] - ldr r4, _08018654 @ =gUnk_02033AB8 - ldrb r0, [r4] - cmp r0, #0xff - bne _08018658 - ldrh r0, [r4, #4] - strh r0, [r5, #0x36] - b _0801868C - .align 2, 0 -_0801864C: .4byte gPlayerState -_08018650: .4byte gRoomTransition -_08018654: .4byte gUnk_02033AB8 -_08018658: - ldrb r0, [r4, #2] - lsls r0, r0, #1 - adds r1, r4, #4 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r5, #0x36] - ldrb r0, [r4, #2] - adds r0, #1 - strb r0, [r4, #2] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _0801868C - movs r0, #0 - strb r0, [r4, #2] - movs r0, #8 - bl sub_08018690 - ldrh r0, [r4, #4] - ldrh r5, [r5, #0x36] - cmp r0, r5 - bne _0801868C - adds r1, r0, #0 - ldrh r0, [r4, #0x12] - strh r0, [r4, #4] - strh r1, [r4, #0x12] -_0801868C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08018690 -sub_08018690: @ 0x08018690 - push {r4, r5, r6, lr} - adds r6, r1, #0 - subs r4, r0, #1 - cmp r4, #0 - beq _080186BC - lsls r0, r4, #1 - adds r5, r0, r6 -_0801869E: - bl Random - adds r1, r4, #1 - bl __modsi3 - ldrh r2, [r5] - lsls r0, r0, #1 - adds r0, r0, r6 - ldrh r1, [r0] - strh r1, [r5] - strh r2, [r0] - subs r5, #2 - subs r4, #1 - cmp r4, #0 - bne _0801869E -_080186BC: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_080186C0 -sub_080186C0: @ 0x080186C0 - ldr r3, _080186D0 @ =gArea - adds r2, r3, #0 - adds r2, #0x28 - movs r1, #0xff - strb r1, [r2] - strh r0, [r3, #0x2c] - bx lr - .align 2, 0 -_080186D0: .4byte gArea - - thumb_func_start sub_080186D4 -sub_080186D4: @ 0x080186D4 - push {lr} - ldr r0, _080186E8 @ =gArea - adds r0, #0x28 - ldrb r0, [r0] - cmp r0, #0xff - bne _080186E4 - bl sub_0801855C -_080186E4: - pop {pc} - .align 2, 0 -_080186E8: .4byte gArea - - thumb_func_start sub_080186EC -sub_080186EC: @ 0x080186EC - push {r4, r5, lr} - movs r5, #0 - ldr r4, _0801870C @ =gUnk_080C9CBC -_080186F2: - ldrb r0, [r4, #3] - cmp r0, #8 - bne _08018700 - ldrb r1, [r4, #4] - adds r0, r5, #0 - bl sub_08018738 -_08018700: - adds r4, #8 - adds r5, #1 - cmp r5, #0x64 - bls _080186F2 - pop {r4, r5, pc} - .align 2, 0 -_0801870C: .4byte gUnk_080C9CBC - - thumb_func_start sub_08018710 -sub_08018710: @ 0x08018710 - push {r4, r5, r6, lr} - adds r6, r0, #0 - movs r5, #0 - ldr r4, _08018734 @ =gUnk_080C9CBC -_08018718: - ldrb r0, [r4, #3] - cmp r0, #8 - bne _0801872A - ldrb r1, [r4, #4] - cmp r6, r1 - beq _0801872A - adds r0, r5, #0 - bl sub_08018738 -_0801872A: - adds r4, #8 - adds r5, #1 - cmp r5, #0x64 - bls _08018718 - pop {r4, r5, r6, pc} - .align 2, 0 -_08018734: .4byte gUnk_080C9CBC - - thumb_func_start sub_08018738 -sub_08018738: @ 0x08018738 - push {r4, lr} - adds r2, r0, #0 - adds r4, r1, #0 - lsls r0, r4, #2 - adds r0, r0, r4 - lsls r0, r0, #2 - ldr r1, _08018764 @ =gUnk_080FE320 - adds r0, r0, r1 - ldr r1, _08018768 @ =gRoomControls - ldrh r0, [r0, #2] - ldrh r1, [r1, #4] - cmp r0, r1 - bne _08018760 - adds r0, r2, #0 - bl CheckKinstoneFused - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_0801876C -_08018760: - pop {r4, pc} - .align 2, 0 -_08018764: .4byte gUnk_080FE320 -_08018768: .4byte gRoomControls - - thumb_func_start sub_0801876C -sub_0801876C: @ 0x0801876C - push {r4, r5, lr} - adds r2, r0, #0 - adds r4, r1, #0 - lsls r0, r2, #2 - adds r0, r0, r2 - lsls r0, r0, #2 - ldr r1, _08018790 @ =gUnk_080FE320 - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, #0x1c - bls _08018784 - b _080189E4 -_08018784: - lsls r0, r0, #2 - ldr r1, _08018794 @ =_08018798 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08018790: .4byte gUnk_080FE320 -_08018794: .4byte _08018798 -_08018798: @ jump table - .4byte _080189E4 @ case 0 - .4byte _08018838 @ case 1 - .4byte _0801882A @ case 2 - .4byte _08018858 @ case 3 - .4byte _08018878 @ case 4 - .4byte _08018886 @ case 5 - .4byte _0801880C @ case 6 - .4byte _08018894 @ case 7 - .4byte _080188E0 @ case 8 - .4byte _08018930 @ case 9 - .4byte _080189E4 @ case 10 - .4byte _080188FE @ case 11 - .4byte _080189E4 @ case 12 - .4byte _080189E4 @ case 13 - .4byte _080189E4 @ case 14 - .4byte _080189B4 @ case 15 - .4byte _080189E4 @ case 16 - .4byte _080189D0 @ case 17 - .4byte _080189E4 @ case 18 - .4byte _080189E4 @ case 19 - .4byte _080189E4 @ case 20 - .4byte _080189E4 @ case 21 - .4byte _080189E4 @ case 22 - .4byte _080189E4 @ case 23 - .4byte _080189A4 @ case 24 - .4byte _080188B8 @ case 25 - .4byte _080189E4 @ case 26 - .4byte _080189E4 @ case 27 - .4byte _080189E4 @ case 28 -_0801880C: - cmp r4, #0 - beq _08018812 - b _080189E4 -_08018812: - ldrh r0, [r5, #8] - lsrs r0, r0, #4 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r5, #0xa] - lsrs r1, r1, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - bl sub_08018AB4 - b _080189E4 -_0801882A: - cmp r4, #0 - bne _08018830 - b _080189E4 -_08018830: - adds r0, r2, #0 - bl sub_08018BB4 - b _080189E4 -_08018838: - cmp r4, #0 - bne _0801883E - b _080189E4 -_0801883E: - ldrh r0, [r5, #0x12] - bl CheckGlobalFlag - cmp r0, #0 - beq _0801884A - b _080189E4 -_0801884A: - ldrb r0, [r5, #1] - lsls r0, r0, #4 - ldr r1, _08018854 @ =gUnk_080FEC28 - b _080188A4 - .align 2, 0 -_08018854: .4byte gUnk_080FEC28 -_08018858: - cmp r4, #0 - bne _0801885E - b _080189E4 -_0801885E: - ldrh r0, [r5, #0x12] - bl GetInventoryValue - cmp r0, #0 - beq _0801886A - b _080189E4 -_0801886A: - ldrb r0, [r5, #1] - lsls r0, r0, #4 - ldr r1, _08018874 @ =gUnk_080FEBE8 - b _080188A4 - .align 2, 0 -_08018874: .4byte gUnk_080FEBE8 -_08018878: - cmp r4, #0 - beq _0801887E - b _080189E4 -_0801887E: - adds r0, r2, #0 - bl sub_08018A58 - b _080189E4 -_08018886: - cmp r4, #0 - bne _0801888C - b _080189E4 -_0801888C: - adds r0, r2, #0 - bl sub_08018B50 - b _080189E4 -_08018894: - cmp r4, #0 - beq _0801889A - b _080189E4 -_0801889A: - ldrb r0, [r5, #1] - cmp r0, #0x80 - beq _080188B0 - lsls r0, r0, #4 - ldr r1, _080188AC @ =gUnk_080FECC8 -_080188A4: - adds r0, r0, r1 - bl LoadRoomEntity - b _080189E4 - .align 2, 0 -_080188AC: .4byte gUnk_080FECC8 -_080188B0: - adds r0, r2, #0 - bl sub_080189EC - b _080189E4 -_080188B8: - ldrb r0, [r5, #1] - lsls r0, r0, #4 - ldr r1, _080188DC @ =gUnk_080FED18 - adds r0, r0, r1 - bl LoadRoomEntity - adds r2, r0, #0 - cmp r2, #0 - bne _080188CC - b _080189E4 -_080188CC: - rsbs r0, r4, #0 - orrs r0, r4 - asrs r0, r0, #0x1f - movs r1, #2 - ands r0, r1 - strb r0, [r2, #0xa] - b _080189E4 - .align 2, 0 -_080188DC: .4byte gUnk_080FED18 -_080188E0: - cmp r4, #0 - bne _080188E6 - b _080189E4 -_080188E6: - movs r0, #0xb4 - lsls r0, r0, #1 - ldrh r1, [r5, #8] - lsrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r5, #0xa] - lsrs r2, r2, #4 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - b _0801899C -_080188FE: - cmp r4, #0 - beq _080189E4 - ldrb r0, [r5, #1] - lsls r0, r0, #4 - ldr r1, _08018924 @ =gUnk_080FED58 - adds r0, r0, r1 - bl LoadRoomEntity - ldr r2, _08018928 @ =gRoomVars - ldrb r0, [r5, #1] - lsls r0, r0, #2 - adds r2, #0x8c - adds r2, r0, r2 - ldr r1, _0801892C @ =gUnk_080FED98 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r2] - b _080189E4 - .align 2, 0 -_08018924: .4byte gUnk_080FED58 -_08018928: .4byte gRoomVars -_0801892C: .4byte gUnk_080FED98 -_08018930: - cmp r4, #0 - beq _080189E4 - ldrb r0, [r5, #1] - lsls r0, r0, #4 - ldr r1, _08018974 @ =gUnk_080FEE78 - adds r0, r0, r1 - bl LoadRoomEntity - adds r2, r0, #0 - cmp r2, #0 - beq _08018958 - ldr r0, _08018978 @ =gRoomControls - ldrh r1, [r0, #6] - ldrh r3, [r5, #8] - adds r1, r1, r3 - strh r1, [r2, #0x38] - ldrh r0, [r0, #8] - ldrh r1, [r5, #0xa] - adds r0, r0, r1 - strh r0, [r2, #0x3a] -_08018958: - ldrb r0, [r5, #1] - cmp r0, #0 - bne _0801897C - ldrh r1, [r5, #8] - lsrs r1, r1, #4 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r5, #0xa] - lsrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - movs r0, #0x8d - b _0801899C - .align 2, 0 -_08018974: .4byte gUnk_080FEE78 -_08018978: .4byte gRoomControls -_0801897C: - ldrh r4, [r5, #8] - lsrs r4, r4, #4 - movs r1, #0x3f - ands r4, r1 - ldrh r0, [r5, #0xa] - lsrs r0, r0, #4 - ands r0, r1 - lsls r0, r0, #6 - orrs r4, r0 - subs r1, r4, #1 - movs r0, #0x8c - movs r2, #1 - bl SetTileType - movs r0, #0x8e - adds r1, r4, #0 -_0801899C: - movs r2, #1 - bl SetTileType - b _080189E4 -_080189A4: - cmp r4, #0 - beq _080189E4 - ldr r0, _080189B0 @ =gUnk_080FEE18 - bl LoadRoomEntityList - b _080189E4 - .align 2, 0 -_080189B0: .4byte gUnk_080FEE18 -_080189B4: - cmp r4, #0 - beq _080189C4 - ldr r0, _080189C0 @ =gUnk_080FEE58 - bl LoadRoomEntity - b _080189E4 - .align 2, 0 -_080189C0: .4byte gUnk_080FEE58 -_080189C4: - ldr r0, _080189CC @ =gUnk_080FEE48 - bl LoadRoomEntity - b _080189E4 - .align 2, 0 -_080189CC: .4byte gUnk_080FEE48 -_080189D0: - cmp r4, #0 - beq _080189E4 - movs r0, #0x80 - lsls r0, r0, #1 -.ifdef JP - movs r1, #0x77 -.else -.ifdef EU - movs r1, #0x77 -.else -.ifdef DEMO_JP - movs r1, #0x77 @ TODO deduplicate -.else - movs r1, #0x79 -.endif -.endif -.endif - bl SetLocalFlagByBank - ldr r0, _080189E8 @ =gUnk_080FEE38 - bl LoadRoomEntityList -_080189E4: - pop {r4, r5, pc} - .align 2, 0 -_080189E8: .4byte gUnk_080FEE38 - - thumb_func_start sub_080189EC -sub_080189EC: @ 0x080189EC - push {r4, r5, r6, lr} - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08018A48 @ =gUnk_080FE320 - adds r1, r1, r0 - ldrh r0, [r1, #8] - lsrs r6, r0, #4 - movs r2, #0x3f - ands r6, r2 - ldrh r0, [r1, #0xa] - lsrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r6, r0 - subs r6, #0x42 - movs r5, #0 -_08018A0E: - ldr r1, _08018A4C @ =0x000001DF - adds r0, r5, r1 - adds r1, r6, r5 - movs r2, #2 - bl SetTileType - adds r5, #1 - cmp r5, #3 - bls _08018A0E - adds r6, #0x40 - movs r5, #0 -_08018A24: - ldr r1, _08018A50 @ =0x000001E3 - adds r0, r5, r1 - adds r4, r6, r5 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - ldr r1, _08018A54 @ =0x000001DB - adds r0, r5, r1 - adds r1, r4, #0 - movs r2, #1 - bl SetTileType - adds r5, #1 - cmp r5, #3 - bls _08018A24 - pop {r4, r5, r6, pc} - .align 2, 0 -_08018A48: .4byte gUnk_080FE320 -_08018A4C: .4byte 0x000001DF -_08018A50: .4byte 0x000001E3 -_08018A54: .4byte 0x000001DB - - thumb_func_start sub_08018A58 -sub_08018A58: @ 0x08018A58 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08018AAC @ =gUnk_080FE320 - adds r1, r1, r0 - ldrh r0, [r1, #8] - lsrs r5, r0, #4 - movs r2, #0x3f - ands r5, r2 - ldrh r0, [r1, #0xa] - lsrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r5, r0 - subs r5, #0x43 - ldr r6, _08018AB0 @ =0x00000232 - movs r0, #0 -_08018A80: - movs r4, #0 - movs r1, #0x40 - adds r1, r1, r5 - mov r8, r1 - adds r7, r0, #1 -_08018A8A: - adds r0, r6, #0 - adds r6, #1 - adds r1, r5, r4 - movs r2, #1 - bl SetTileType - adds r4, #1 - cmp r4, #6 - bls _08018A8A - mov r5, r8 - adds r0, r7, #0 - cmp r0, #3 - bls _08018A80 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08018AAC: .4byte gUnk_080FE320 -_08018AB0: .4byte 0x00000232 - - thumb_func_start sub_08018AB4 -sub_08018AB4: @ 0x08018AB4 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - adds r5, r0, #0 - movs r3, #0xf4 - lsls r3, r3, #1 - movs r7, #0xfa - lsls r7, r7, #1 - movs r0, #0 -_08018ACA: - movs r6, #0 - movs r1, #0x40 - adds r1, r1, r5 - mov r8, r1 - adds r0, #1 - mov sb, r0 - adds r4, r5, #0 - subs r4, #0x40 -_08018ADA: - adds r0, r3, #0 - adds r3, #1 - adds r1, r5, r6 - movs r2, #1 - str r3, [sp] - bl SetTileType - adds r0, r7, #0 - adds r7, #1 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - adds r4, #1 - adds r6, #1 - ldr r3, [sp] - cmp r6, #3 - bls _08018ADA - mov r5, r8 - mov r0, sb - cmp r0, #2 - bls _08018ACA - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08018B10 -sub_08018B10: @ 0x08018B10 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - movs r0, #0xf8 - lsls r0, r0, #1 - mov r8, r0 - movs r7, #0xfe - lsls r7, r7, #1 - movs r5, #0 - adds r4, r6, #0 - subs r4, #0x40 -_08018B28: - mov r0, r8 - movs r1, #1 - add r8, r1 - adds r1, r6, r5 - movs r2, #1 - bl SetTileType - adds r0, r7, #0 - adds r7, #1 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - adds r4, #1 - adds r5, #1 - cmp r5, #3 - bls _08018B28 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08018B50 -sub_08018B50: @ 0x08018B50 - push {r4, r5, r6, r7, lr} - sub sp, #4 - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08018BAC @ =gUnk_080FE320 - adds r2, r1, r0 - ldrb r1, [r2, #1] - movs r0, #0x80 - ands r0, r1 - ldr r3, _08018BB0 @ =0x00000219 - cmp r0, #0 - bne _08018B6C - subs r3, #0x19 -_08018B6C: - ldrh r0, [r2, #8] - lsrs r5, r0, #4 - movs r1, #0x3f - ands r5, r1 - ldrh r0, [r2, #0xa] - lsrs r0, r0, #4 - ands r0, r1 - lsls r0, r0, #6 - orrs r5, r0 - subs r5, #0x82 - movs r0, #0 -_08018B82: - movs r4, #0 - adds r6, r5, #0 - adds r6, #0x40 - adds r7, r0, #1 -_08018B8A: - adds r0, r3, #0 - adds r3, #1 - adds r1, r5, r4 - movs r2, #1 - str r3, [sp] - bl SetTileType - adds r4, #1 - ldr r3, [sp] - cmp r4, #4 - bls _08018B8A - adds r5, r6, #0 - adds r0, r7, #0 - cmp r0, #4 - bls _08018B82 - add sp, #4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08018BAC: .4byte gUnk_080FE320 -_08018BB0: .4byte 0x00000219 - - thumb_func_start sub_08018BB4 -sub_08018BB4: @ 0x08018BB4 - push {r4, r5, lr} - sub sp, #8 - adds r4, r0, #0 - lsls r0, r4, #3 - ldr r1, _08018C14 @ =gUnk_080FEAC8 - adds r0, r0, r1 - mov r5, sp - mov r1, sp - movs r2, #8 - bl MemCopy - lsls r0, r4, #2 - adds r0, r0, r4 - lsls r0, r0, #2 - ldr r1, _08018C18 @ =gUnk_080FE320 - adds r0, r0, r1 - ldrh r1, [r0, #8] - lsrs r1, r1, #4 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r0, #0xa] - lsrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r5, #4] - mov r0, sp - bl sub_0804B3C4 - ldrb r0, [r5, #1] - bl CheckLocalFlag - cmp r0, #0 - bne _08018C10 - ldrh r3, [r5, #4] - ldrb r1, [r5, #6] - movs r0, #1 - ands r0, r1 - movs r2, #2 - cmp r0, #0 - bne _08018C08 - movs r2, #1 -_08018C08: - movs r0, #0x73 - adds r1, r3, #0 - bl SetTileType -_08018C10: - add sp, #8 - pop {r4, r5, pc} - .align 2, 0 -_08018C14: .4byte gUnk_080FEAC8 -_08018C18: .4byte gUnk_080FE320 diff --git a/asm/non_matching/movement/MoveNorthEast.inc b/asm/non_matching/movement/MoveNorthEast.inc deleted file mode 100644 index 65a3ffcc..00000000 --- a/asm/non_matching/movement/MoveNorthEast.inc +++ /dev/null @@ -1,129 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - adds r5, r1, #0 - mov r8, r2 - mov sb, r3 - movs r7, #0 - movs r6, #0 - ldrh r0, [r4, #0x2a] - movs r1, #0xe - ands r1, r0 - mov ip, r1 - movs r2, #0xe0 - lsls r2, r2, #8 - ands r2, r0 - adds r3, r2, #0 - cmp r1, #0 - beq _080AE904 - cmp r2, #0 - bne _080AE99E -_080AE904: - orrs r1, r2 - cmp r1, #0 - bne _080AE928 - ldr r1, _080AE924 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r7, r0, #0 - muls r7, r5, r7 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - b _080AE98A - .align 2, 0 -_080AE924: .4byte gSineTable -_080AE928: - mov r2, ip - cmp r2, #2 - bne _080AE942 - lsls r7, r5, #8 - ldr r0, [r4, #0x2c] - adds r0, r0, r7 - str r0, [r4, #0x2c] - adds r0, r4, #0 - movs r1, #4 - mov r2, sb - bl CalculateEntityTileCollisions - b _080AE95C -_080AE942: - movs r0, #0x80 - lsls r0, r0, #7 - cmp r3, r0 - bne _080AE95C - lsls r7, r5, #8 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - adds r0, r4, #0 - movs r1, #4 - mov r2, sb - bl CalculateEntityTileCollisions -_080AE95C: - ldrh r2, [r4, #0x2a] - movs r0, #0xe - ands r0, r2 - cmp r0, #0 - bne _080AE97E - ldr r1, _080AE9B4 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x30] - subs r0, r0, r6 - str r0, [r4, #0x30] -_080AE97E: - movs r0, #0xe0 - lsls r0, r0, #8 - ands r0, r2 - cmp r0, #0 - bne _080AE99E - ldr r1, _080AE9B4 @ =gSineTable -_080AE98A: - mov r2, r8 - lsls r0, r2, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x2c] - adds r0, r0, r6 - str r0, [r4, #0x2c] -_080AE99E: - ldr r2, _080AE9B8 @ =0x00003333 - adds r0, r7, r2 - ldr r1, _080AE9BC @ =0x00006665 - cmp r0, r1 - bhi _080AE9C0 - ldr r2, _080AE9B8 @ =0x00003333 - adds r0, r6, r2 - cmp r0, r1 - bhi _080AE9C0 - movs r0, #0 - b _080AE9C2 - .align 2, 0 -_080AE9B4: .4byte gSineTable -_080AE9B8: .4byte 0x00003333 -_080AE9BC: .4byte 0x00006665 -_080AE9C0: - movs r0, #1 -_080AE9C2: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/movement/MoveNorthWest.inc b/asm/non_matching/movement/MoveNorthWest.inc deleted file mode 100644 index b6ab895b..00000000 --- a/asm/non_matching/movement/MoveNorthWest.inc +++ /dev/null @@ -1,129 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - adds r5, r1, #0 - mov r8, r2 - mov sb, r3 - movs r7, #0 - movs r6, #0 - ldrh r0, [r4, #0x2a] - movs r1, #0xe - ands r1, r0 - mov ip, r1 - movs r2, #0xe0 - lsls r2, r2, #4 - ands r2, r0 - adds r3, r2, #0 - cmp r1, #0 - beq _080AEEC0 - cmp r2, #0 - bne _080AEF5A -_080AEEC0: - orrs r1, r2 - cmp r1, #0 - bne _080AEEE4 - ldr r1, _080AEEE0 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r7, r0, #0 - muls r7, r5, r7 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - b _080AEF46 - .align 2, 0 -_080AEEE0: .4byte gSineTable -_080AEEE4: - mov r2, ip - cmp r2, #4 - bne _080AEEFE - lsls r7, r5, #8 - ldr r0, [r4, #0x2c] - subs r0, r0, r7 - str r0, [r4, #0x2c] - adds r0, r4, #0 - movs r1, #0x1c - mov r2, sb - bl CalculateEntityTileCollisions - b _080AEF18 -_080AEEFE: - movs r0, #0x80 - lsls r0, r0, #3 - cmp r3, r0 - bne _080AEF18 - lsls r7, r5, #8 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - adds r0, r4, #0 - movs r1, #0x1c - mov r2, sb - bl CalculateEntityTileCollisions -_080AEF18: - ldrh r2, [r4, #0x2a] - movs r0, #0xe - ands r0, r2 - cmp r0, #0 - bne _080AEF3A - ldr r1, _080AEF70 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x30] - subs r0, r0, r6 - str r0, [r4, #0x30] -_080AEF3A: - movs r0, #0xe0 - lsls r0, r0, #4 - ands r0, r2 - cmp r0, #0 - bne _080AEF5A - ldr r1, _080AEF70 @ =gSineTable -_080AEF46: - mov r2, r8 - lsls r0, r2, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x2c] - adds r0, r0, r6 - str r0, [r4, #0x2c] -_080AEF5A: - ldr r2, _080AEF74 @ =0x00003333 - adds r0, r7, r2 - ldr r1, _080AEF78 @ =0x00006665 - cmp r0, r1 - bhi _080AEF7C - ldr r2, _080AEF74 @ =0x00003333 - adds r0, r6, r2 - cmp r0, r1 - bhi _080AEF7C - movs r0, #0 - b _080AEF7E - .align 2, 0 -_080AEF70: .4byte gSineTable -_080AEF74: .4byte 0x00003333 -_080AEF78: .4byte 0x00006665 -_080AEF7C: - movs r0, #1 -_080AEF7E: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/movement/MoveSouthEast.inc b/asm/non_matching/movement/MoveSouthEast.inc deleted file mode 100644 index d497d4e9..00000000 --- a/asm/non_matching/movement/MoveSouthEast.inc +++ /dev/null @@ -1,129 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - adds r5, r1, #0 - mov r8, r2 - mov sb, r3 - movs r7, #0 - movs r6, #0 - ldrh r0, [r4, #0x2a] - movs r1, #0xe0 - ands r1, r0 - mov ip, r1 - movs r2, #0xe0 - lsls r2, r2, #8 - ands r2, r0 - adds r3, r2, #0 - cmp r1, #0 - beq _080AEAEC - cmp r2, #0 - bne _080AEB86 -_080AEAEC: - orrs r1, r2 - cmp r1, #0 - bne _080AEB10 - ldr r1, _080AEB0C @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r7, r0, #0 - muls r7, r5, r7 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - b _080AEB72 - .align 2, 0 -_080AEB0C: .4byte gSineTable -_080AEB10: - mov r2, ip - cmp r2, #0x20 - bne _080AEB2A - lsls r7, r5, #8 - ldr r0, [r4, #0x2c] - adds r0, r0, r7 - str r0, [r4, #0x2c] - adds r0, r4, #0 - movs r1, #0xc - mov r2, sb - bl CalculateEntityTileCollisions - b _080AEB44 -_080AEB2A: - movs r0, #0x80 - lsls r0, r0, #6 - cmp r3, r0 - bne _080AEB44 - lsls r7, r5, #8 - ldr r0, [r4, #0x30] - adds r0, r0, r7 - str r0, [r4, #0x30] - adds r0, r4, #0 - movs r1, #0xc - mov r2, sb - bl CalculateEntityTileCollisions -_080AEB44: - ldrh r2, [r4, #0x2a] - movs r0, #0xe0 - ands r0, r2 - cmp r0, #0 - bne _080AEB66 - ldr r1, _080AEB9C @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x30] - subs r0, r0, r6 - str r0, [r4, #0x30] -_080AEB66: - movs r0, #0xe0 - lsls r0, r0, #8 - ands r0, r2 - cmp r0, #0 - bne _080AEB86 - ldr r1, _080AEB9C @ =gSineTable -_080AEB72: - mov r2, r8 - lsls r0, r2, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x2c] - adds r0, r0, r6 - str r0, [r4, #0x2c] -_080AEB86: - ldr r2, _080AEBA0 @ =0x00003333 - adds r0, r7, r2 - ldr r1, _080AEBA4 @ =0x00006665 - cmp r0, r1 - bhi _080AEBA8 - ldr r2, _080AEBA0 @ =0x00003333 - adds r0, r6, r2 - cmp r0, r1 - bhi _080AEBA8 - movs r0, #0 - b _080AEBAA - .align 2, 0 -_080AEB9C: .4byte gSineTable -_080AEBA0: .4byte 0x00003333 -_080AEBA4: .4byte 0x00006665 -_080AEBA8: - movs r0, #1 -_080AEBAA: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/movement/MoveSouthWest.inc b/asm/non_matching/movement/MoveSouthWest.inc deleted file mode 100644 index 563fe38c..00000000 --- a/asm/non_matching/movement/MoveSouthWest.inc +++ /dev/null @@ -1,129 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r4, r0, #0 - adds r5, r1, #0 - mov r8, r2 - mov sb, r3 - movs r7, #0 - movs r6, #0 - ldrh r0, [r4, #0x2a] - movs r1, #0xe0 - ands r1, r0 - mov ip, r1 - movs r2, #0xe0 - lsls r2, r2, #4 - ands r2, r0 - adds r3, r2, #0 - cmp r1, #0 - beq _080AECD8 - cmp r2, #0 - bne _080AED72 -_080AECD8: - orrs r1, r2 - cmp r1, #0 - bne _080AECFC - ldr r1, _080AECF8 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r7, r0, #0 - muls r7, r5, r7 - ldr r0, [r4, #0x30] - subs r0, r0, r7 - str r0, [r4, #0x30] - b _080AED5E - .align 2, 0 -_080AECF8: .4byte gSineTable -_080AECFC: - mov r2, ip - cmp r2, #0x40 - bne _080AED16 - lsls r7, r5, #8 - ldr r0, [r4, #0x2c] - subs r0, r0, r7 - str r0, [r4, #0x2c] - adds r0, r4, #0 - movs r1, #0x14 - mov r2, sb - bl CalculateEntityTileCollisions - b _080AED30 -_080AED16: - movs r0, #0x80 - lsls r0, r0, #2 - cmp r3, r0 - bne _080AED30 - lsls r7, r5, #8 - ldr r0, [r4, #0x30] - adds r0, r0, r7 - str r0, [r4, #0x30] - adds r0, r4, #0 - movs r1, #0x14 - mov r2, sb - bl CalculateEntityTileCollisions -_080AED30: - ldrh r2, [r4, #0x2a] - movs r0, #0xe0 - ands r0, r2 - cmp r0, #0 - bne _080AED52 - ldr r1, _080AED88 @ =gSineTable - mov r0, r8 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x30] - subs r0, r0, r6 - str r0, [r4, #0x30] -_080AED52: - movs r0, #0xe0 - lsls r0, r0, #4 - ands r0, r2 - cmp r0, #0 - bne _080AED72 - ldr r1, _080AED88 @ =gSineTable -_080AED5E: - mov r2, r8 - lsls r0, r2, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r6, r0, #0 - muls r6, r5, r6 - ldr r0, [r4, #0x2c] - adds r0, r0, r6 - str r0, [r4, #0x2c] -_080AED72: - ldr r2, _080AED8C @ =0x00003333 - adds r0, r7, r2 - ldr r1, _080AED90 @ =0x00006665 - cmp r0, r1 - bhi _080AED94 - ldr r2, _080AED8C @ =0x00003333 - adds r0, r6, r2 - cmp r0, r1 - bhi _080AED94 - movs r0, #0 - b _080AED96 - .align 2, 0 -_080AED88: .4byte gSineTable -_080AED8C: .4byte 0x00003333 -_080AED90: .4byte 0x00006665 -_080AED94: - movs r0, #1 -_080AED96: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerUtils/sub_08077880.inc b/asm/non_matching/playerUtils/sub_08077880.inc deleted file mode 100644 index ee9a0c39..00000000 --- a/asm/non_matching/playerUtils/sub_08077880.inc +++ /dev/null @@ -1,40 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - subs r0, r4, #1 - cmp r0, #0x1e - bhi _080778C0 - lsls r0, r4, #1 - adds r0, r0, r4 - lsls r0, r0, #2 - ldr r1, _080778C4 @ =gUnk_0811BE48 - adds r5, r0, r1 - ldr r1, _080778C8 @ =gPlayerState + 0x90 - ldrb r0, [r5] - cmp r0, #0 - beq _080778A0 - adds r1, #2 -_080778A0: - ldrh r0, [r1] - ands r0, r6 - cmp r0, #0 - bne _080778AC - cmp r2, #0 - beq _080778C0 -_080778AC: - adds r0, r4, #0 - bl sub_0807794C - adds r1, r0, #0 - cmp r1, #0 - beq _080778C0 - ldrb r0, [r5, #1] - strb r0, [r1, #9] - strb r4, [r1, #1] - strb r6, [r1, #3] -_080778C0: - pop {r4, r5, r6, pc} - .align 2, 0 -_080778C4: .4byte gUnk_0811BE48 -_080778C8: .4byte gPlayerState + 0x90 - .syntax divided diff --git a/asm/non_matching/v1EyeLaser/sub_080AB758.inc b/asm/non_matching/v1EyeLaser/sub_080AB758.inc deleted file mode 100644 index 6e3699a1..00000000 --- a/asm/non_matching/v1EyeLaser/sub_080AB758.inc +++ /dev/null @@ -1,123 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r5, r0, #0 - movs r6, #6 - movs r7, #0 - movs r4, #0 - movs r0, #0x32 - ldrsh r2, [r5, r0] - ldr r1, _080AB818 @ =gRoomControls - ldrh r0, [r1, #8] - adds r0, #0xd4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov r8, r1 - cmp r2, r0 - bhi _080AB7B4 - movs r3, #7 -_080AB77E: - adds r0, r4, #0 - ands r0, r3 - cmp r0, #7 - bne _080AB798 - adds r0, r5, #0 - movs r1, #4 - adds r2, r6, #0 - str r3, [sp] - bl sub_080AB844 - adds r6, #0x3e - adds r7, #0x3e - ldr r3, [sp] -_080AB798: - adds r4, #1 - ands r4, r3 - movs r1, #0x32 - ldrsh r0, [r5, r1] - adds r0, r0, r7 - lsls r1, r4, #3 - adds r2, r0, r1 - ldr r0, _080AB818 @ =gRoomControls - ldrh r0, [r0, #8] - adds r0, #0xd4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r2, r0 - bls _080AB77E -_080AB7B4: - movs r4, #0 - movs r1, #0x32 - ldrsh r0, [r5, r1] - adds r2, r0, r7 - mov r1, r8 - ldrh r0, [r1, #8] - adds r0, #0xd4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r2, r0 - bhi _080AB802 - movs r3, #3 -_080AB7CC: - adds r0, r4, #0 - ands r0, r3 - cmp r0, #3 - bne _080AB7E6 - adds r0, r5, #0 - movs r1, #3 - adds r2, r6, #0 - str r3, [sp] - bl sub_080AB844 - adds r6, #0x1e - adds r7, #0x1e - ldr r3, [sp] -_080AB7E6: - adds r4, #1 - ands r4, r3 - movs r1, #0x32 - ldrsh r0, [r5, r1] - adds r0, r0, r7 - lsls r1, r4, #3 - adds r2, r0, r1 - ldr r0, _080AB818 @ =gRoomControls - ldrh r0, [r0, #8] - adds r0, #0xd4 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r2, r0 - bls _080AB7CC -_080AB802: - movs r0, #2 - ands r0, r4 - cmp r0, #0 - beq _080AB81C - adds r0, r5, #0 - movs r1, #2 - adds r2, r6, #0 - bl sub_080AB844 - adds r6, #0xe - b _080AB830 - .align 2, 0 -_080AB818: .4byte gRoomControls -_080AB81C: - movs r0, #1 - ands r4, r0 - cmp r4, #0 - beq _080AB830 - adds r0, r5, #0 - movs r1, #1 - adds r2, r6, #0 - bl sub_080AB844 - adds r6, #6 -_080AB830: - adds r0, r5, #0 - movs r1, #6 - adds r2, r6, #0 - bl sub_080AB844 - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - .syntax divided diff --git a/asm/object/code_0808C964.s b/asm/object/code_0808C964.s deleted file mode 100644 index dabd1f86..00000000 --- a/asm/object/code_0808C964.s +++ /dev/null @@ -1,211 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start sub_0808C964 -sub_0808C964: @ 0x0808C964 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - strb r1, [r4, #0x1e] - ldrb r0, [r4, #9] - cmp r0, #0x76 - bne _0808C982 - ldr r0, _0808CA08 @ =gUI - adds r0, #0x20 - ldrb r0, [r0] - cmp r0, #2 - beq _0808C982 - adds r0, r1, #0 - subs r0, #9 - strb r0, [r4, #0xa] -_0808C982: - ldrb r0, [r4, #0xa] - cmp r0, #4 - bls _0808C996 - ldr r0, _0808CA0C @ =gArea - ldrb r0, [r0, #0x16] - ldrb r1, [r4, #0xb] - cmp r0, r1 - beq _0808C996 - bl DeleteThisEntity -_0808C996: - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - ldrb r2, [r4, #0x1b] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x80 - orrs r0, r2 - strb r0, [r4, #0x1b] - ldrb r0, [r4, #0x19] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x19] - ldrb r0, [r4, #0xb] - adds r3, r4, #0 - adds r3, #0x29 - movs r1, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r4, #9] - cmp r0, #0x75 - beq _0808CA04 - ldrb r2, [r4, #0xa] - subs r0, r2, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bhi _0808CA04 - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - movs r2, #0x80 - lsls r2, r2, #1 - cmp r0, #1 - bne _0808C9FA - movs r2, #0xe0 -_0808C9FA: - adds r0, r4, #0 - adds r1, r2, #0 - movs r3, #0 - bl SetAffineInfo -_0808CA04: - pop {r4, pc} - .align 2, 0 -_0808CA08: .4byte gUI -_0808CA0C: .4byte gArea - - thumb_func_start sub_0808CA10 -sub_0808CA10: @ 0x0808CA10 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _0808CA40 - cmp r0, #2 - bgt _0808CA24 - cmp r0, #1 - beq _0808CA2A - b _0808CA78 -_0808CA24: - cmp r0, #3 - beq _0808CA60 - b _0808CA78 -_0808CA2A: - ldr r2, _0808CA3C @ =gUnk_02018EB0 - ldrb r0, [r2, #0x18] - cmp r0, #0 - beq _0808CA78 - movs r0, #0 - movs r1, #0x20 - strb r1, [r4, #0xe] - strb r0, [r2, #0x18] - b _0808CA50 - .align 2, 0 -_0808CA3C: .4byte gUnk_02018EB0 -_0808CA40: - ldr r2, _0808CA5C @ =gUnk_02018EB0 - ldrb r0, [r2, #0x19] - cmp r0, #0 - beq _0808CA78 - movs r0, #0 - movs r1, #0x20 - strb r1, [r4, #0xe] - strb r0, [r2, #0x19] -_0808CA50: - movs r0, #0x97 - lsls r0, r0, #1 - bl SoundReq - b _0808CA78 - .align 2, 0 -_0808CA5C: .4byte gUnk_02018EB0 -_0808CA60: - ldr r2, _0808CABC @ =gUnk_02018EB0 - ldrb r0, [r2, #0x1a] - cmp r0, #0 - beq _0808CA78 - movs r0, #0 - movs r1, #0x20 - strb r1, [r4, #0xe] - strb r0, [r2, #0x1a] - movs r0, #0x97 - lsls r0, r0, #1 - bl SoundReq -_0808CA78: - ldrb r0, [r4, #9] - cmp r0, #0x75 - beq _0808CAE0 - ldrb r1, [r4, #0xa] - subs r0, r1, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - adds r5, r1, #0 - cmp r0, #2 - bhi _0808CAE0 - ldrb r1, [r4, #0xe] - cmp r1, #0 - beq _0808CAE0 - subs r1, #1 - strb r1, [r4, #0xe] - ldrb r0, [r4, #0xf] - adds r2, r0, #1 - strb r2, [r4, #0xf] - lsls r1, r1, #0x18 - cmp r1, #0 - beq _0808CAC4 - ldr r0, _0808CAC0 @ =gUnk_08121648 - movs r1, #0xe - ands r1, r2 - lsls r2, r1, #1 - adds r2, r2, r0 - movs r6, #0 - ldrsh r3, [r2, r6] - adds r1, #1 - lsls r1, r1, #1 - adds r1, r1, r0 - movs r0, #0 - ldrsh r2, [r1, r0] - b _0808CACA - .align 2, 0 -_0808CABC: .4byte gUnk_02018EB0 -_0808CAC0: .4byte gUnk_08121648 -_0808CAC4: - movs r2, #0x80 - lsls r2, r2, #1 - adds r3, r2, #0 -_0808CACA: - lsls r0, r5, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bne _0808CAD6 - subs r3, #0x20 - subs r2, #0x20 -_0808CAD6: - adds r0, r4, #0 - adds r1, r3, #0 - movs r3, #0 - bl SetAffineInfo -_0808CAE0: - pop {r4, r5, r6, pc} - .align 2, 0 diff --git a/include/area.h b/include/area.h index 00a2339d..30efcb1f 100644 --- a/include/area.h +++ b/include/area.h @@ -20,6 +20,15 @@ typedef struct { } RoomResInfo; static_assert(sizeof(RoomResInfo) == 0x20); +typedef struct { + u8 inventoryGfxIdx; + u8 unk29; + u8 unk2a; + u8 unk2b; + u16 unk2C[7]; + u16 unk3E; +} struct_area_28; + typedef struct { u8 areaMetadata; u8 locationIndex; @@ -43,14 +52,13 @@ typedef struct { bool8 portal_in_use; u8 unk1A; u8 filler2[13]; - u8 inventoryGfxIdx; - u8 filler4[0x13]; + struct_area_28 unk28; RoomResInfo roomResInfos[MAX_ROOMS]; RoomResInfo currentRoomInfo; RoomResInfo* pCurrentRoomInfo; u32 bgm; u32 queued_bgm; - u8 filler5[0x20]; + u8 filler6[0x20]; void* transitionManager; void (*onEnter)(); void (*onExit)(); diff --git a/include/common.h b/include/common.h index aee1592f..9108cf9a 100644 --- a/include/common.h +++ b/include/common.h @@ -20,8 +20,8 @@ extern Input gInput; /**< Input instance. */ typedef struct { u8 evt_type; u8 entity_idx; - u8 _2; - u8 _3; + u8 area; + u8 room; u16 _4; u16 _6; u16 x; diff --git a/include/object.h b/include/object.h index a4aa6e44..cf38190c 100644 --- a/include/object.h +++ b/include/object.h @@ -289,7 +289,7 @@ void Object37(); void JarPortal(); void BossDoor(); void Object3A(); -void MacroMushromStalks(); +void MacroMushroomStalks(); void MacroPlayer(); void Object3D(); void Object3E(); diff --git a/include/room.h b/include/room.h index 747379b6..d4c35300 100644 --- a/include/room.h +++ b/include/room.h @@ -190,15 +190,17 @@ typedef struct { typedef struct { u8 type; - u8 _1; + u8 localFlag; u8 _2; u8 _3; - u16 _4; + u16 tilePos; u8 _6; u8 _7; } TileEntity; extern TileEntity gSmallChests[8]; +extern TileEntity gUnk_080FEAC8[]; + typedef enum { NONE, ROOM_VISIT_MARKER, @@ -226,11 +228,12 @@ void LoadRoom(void); void SetCurrentRoomPropertyList(u32 area, u32 room); void* GetCurrentRoomProperty(u32); void LoadRoomTileEntities(); -void LoadRoomEntityList(EntityData* listPtr); +Entity* LoadRoomEntity(const EntityData*); +void LoadRoomEntityList(const EntityData* listPtr); bool32 LoadFixedGFX(Entity*, u32); void UnloadGFXSlots(Entity*); -void sub_0804B3C4(void*); +void sub_0804B3C4(TileEntity*); void sub_0804B0B0(u32 arg0, u32 arg1); void DoExitTransition(const ScreenTransitionData* data); diff --git a/linker.ld b/linker.ld index f25ebb70..443d0cff 100644 --- a/linker.ld +++ b/linker.ld @@ -107,8 +107,6 @@ SECTIONS { . = 0x00033280; gActiveScriptInfo = .; . = 0x00033290; gUnk_02033290 = .; . = 0x00033A90; gArea = .; - . = 0x00033AB8; gUnk_02033AB8 = .; - . = 0x00033ACC; gUnk_02033ACC = .; . = 0x000342F8; gUnk_020342F8 = .; . = 0x00034330; gUnk_02034330 = .; . = 0x00034350; gRoomVars = .; @@ -305,7 +303,6 @@ SECTIONS { src/npc.o(.text); src/collision.o(.text); /* C source compiled without interworking */ - asm/kinstone.o(.text); src/kinstone.o(.text); src/playerItem/playerItemGustBig.o(.text); src/playerItem/playerItemBow.o(.text); @@ -680,9 +677,6 @@ SECTIONS { src/object/bossDoor.o(.text); src/object/object3A.o(.text); src/object/macroMushroomStalks.o(.text); - src/object/object75.o(.text); /* 75 and 76 are mislocated in object table */ - src/object/object76.o(.text); - asm/object/code_0808C964.o(.text); src/object/macroPlayer.o(.text); src/object/object3D.o(.text); src/object/object3E.o(.text); @@ -1408,8 +1402,6 @@ SECTIONS { data/animations/object/bossDoor.o(.rodata); src/object/object3A.o(.rodata); src/object/macroMushroomStalks.o(.rodata); - src/object/object75.o(.rodata); - src/object/object76.o(.rodata); src/object/macroPlayer.o(.rodata); src/object/object3D.o(.rodata); src/object/object3E.o(.rodata); diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c index 9fea0d69..457d7c59 100644 --- a/src/enemy/stalfos.c +++ b/src/enemy/stalfos.c @@ -324,28 +324,23 @@ void sub_0803981C(StalfosEntity* this) { EnqueueSFX(SFX_12B); } -NONMATCH("asm/non_matching/stalfos/sub_08039858.inc", void sub_08039858(StalfosEntity* this)) { +void sub_08039858(StalfosEntity* this) { s32 iVar1; u32 uVar2; - u32 uVar3; - u32 tmp; iVar1 = sub_080398C0(this); - uVar2 = (u32)super->animationState; - tmp = uVar2 * 8; - if (((iVar1 + 4U) & 0x18) == tmp) { + uVar2 = (u32)super->animationState * 8; + if (((iVar1 + 4U) & 0x18) == uVar2) { if (this->unk_7b != 3) { return; } this->unk_7b = 0; - uVar3 = Random(); - iVar1 += ((uVar3 & 2) - 1) * 8; + iVar1 += ((Random() & 2) - 1) * 8; } - uVar2 = ((iVar1 + uVar2 * -8) & 0x1f) >> 4 ^ 1; + uVar2 = ((iVar1 - uVar2) & 0x1f) >> 4 ^ 1; InitAnimationForceUpdate(super, gUnk_080CF8F8[(u32)super->animationState * 2 + uVar2]); super->animationState = ((uVar2 * 2 + super->animationState) - 1) & 3; } -END_NONMATCH u32 sub_080398C0(StalfosEntity* this) { u32 rand = Random(); diff --git a/src/game.c b/src/game.c index 1917a077..0582b3d0 100644 --- a/src/game.c +++ b/src/game.c @@ -374,7 +374,7 @@ static void GameMain_ChangeRoom(void) { SetPlayerControl(0); gPauseMenuOptions.disabled = 0; #if defined(USA) || defined(DEMO_USA) - if (gArea.inventoryGfxIdx != 0xff) { + if (gArea.unk28.inventoryGfxIdx != 0xff) { sub_0801855C(); } CreateManagerF(); @@ -384,13 +384,13 @@ static void GameMain_ChangeRoom(void) { sub_0801855C(); #elif defined(JP) CheckAreaDiscovery(); - if (gArea.inventoryGfxIdx != 0xff) { + if (gArea.unk28.inventoryGfxIdx != 0xff) { sub_0801855C(); } #elif defined(DEMO_JP) if (gRoomTransition.field_0x2c[4]) CheckAreaDiscovery(); - if (gArea.inventoryGfxIdx != 0xff) { + if (gArea.unk28.inventoryGfxIdx != 0xff) { sub_0801855C(); } CreateManagerF(); @@ -2105,10 +2105,10 @@ void sub_08053CC8(void) { void sub_08053D34(void) { if (gMenu.field_0xa != 0) { gMenu.field_0xa = 0; - if (CheckLocalFlagByBank(0x680, 0x3d)) { + if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3d)) { SetTileType(0x74, 0xc4, 1); } - if (CheckLocalFlagByBank(0x680, 0x3e)) { + if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3e)) { SetTileType(0x74, 0xcc, 1); } } @@ -2682,22 +2682,22 @@ void sub_08054968(void) { void sub_08054974(s32 param_1, s32 param_2) { struct_080FE320* ptr = &gUnk_080FE320[param_1]; - SetCurrentRoomPropertyList(ptr->_2, ptr->_3); - gRoomControls.area = ptr->_2; - gRoomControls.room = ptr->_3; + SetCurrentRoomPropertyList(ptr->area, ptr->room); + gRoomControls.area = ptr->area; + gRoomControls.room = ptr->room; LoadGfxGroups(); gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area); if (param_2 != 0) { - LoadAuxiliaryRoom(ptr->_2, ptr->_3); + LoadAuxiliaryRoom(ptr->area, ptr->room); } else { - sub_08052FF4(ptr->_2, ptr->_3); + sub_08052FF4(ptr->area, ptr->room); InitializeCamera(); gUpdateVisibleTiles = 1; } gScreen.lcd.displayControl &= 0x1fff; gRoomControls.scroll_x = gRoomControls.origin_x + ptr->_4; gRoomControls.scroll_y = gRoomControls.origin_y + ptr->_6; - if (ptr->_2 == 2) { + if (ptr->area == AREA_HYRULE_TOWN) { TryLoadPrologueHyruleTown(); } sub_08018710(gUI.field_0x3); diff --git a/src/kinstone.c b/src/kinstone.c index f9f4b5f8..24feb5ab 100644 --- a/src/kinstone.c +++ b/src/kinstone.c @@ -1,5 +1,461 @@ #include "global.h" #include "room.h" +#include "subtask.h" +#include "common.h" +#include "flags.h" +#include "player.h" +#include "kinstone.h" +#include "area.h" +#include "manager.h" +#include "asm.h" + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +} struct_gUnk_080B3D20; + +extern struct_gUnk_080B3D20 gUnk_080B3D20[]; +extern EntityData gUnk_080FEC28[]; +extern EntityData gUnk_080FEBE8[]; +extern EntityData gUnk_080FECC8[]; +extern EntityData gUnk_080FEE78[]; +extern EntityData gUnk_080FED58[]; +extern const EntityData gUnk_080FED18[]; +extern const EntityData gUnk_080FEE38[]; +extern const EntityData gUnk_080FEE18[]; +extern const EntityData gUnk_080FEE48[]; +extern const EntityData gUnk_080FEE58[]; +extern const void* gUnk_080FED98[]; +extern const u16 gUnk_080B3D14[]; + +void sub_08018AB4(int); +void sub_08018BB4(int); +void sub_08018A58(int); +void sub_08018B50(int); +void sub_080189EC(int); +void sub_0801876C(int, int); +void sub_08018738(u32, int); +void sub_08018690(int param_1, u16* param_2); +void sub_08018500(); +bool32 sub_080185B4(const struct_gUnk_080B3D20* param_1); + +void sub_08018500(void) { + s32 sVar1; + u32 i; + u16* puVar3; + u16* puVar4; + struct_area_28* ptr = &gArea.unk28; + + puVar3 = ptr->unk2C; + sVar1 = gUnk_080B3D14[ptr->inventoryGfxIdx] + ptr->unk29 * 3; + + for (i = 0; i < 3; i++) { + *puVar3 = sVar1; + sVar1++; + puVar3++; + } + + sVar1 = ptr->inventoryGfxIdx * 5 + 0xc81; + for (i = 0, puVar4 = &ptr->unk2C[3]; i < 5; i++) { + *puVar3 = sVar1; + sVar1++; + puVar3++; + } + sub_08018690(5, puVar4); + ptr->unk2a = 0; +} + +void sub_0801855C(void) { + u32 bVar3; + struct_area_28* ptr; + // TODO: Figure out what is up with the pointer assignment + struct_gUnk_080B3D20* pcVar2 = (struct_gUnk_080B3D20*)&gArea.unk28; + + MemClear(pcVar2, 0x14); + ptr = (struct_area_28*)pcVar2; + for (pcVar2 = gUnk_080B3D20, bVar3 = 0; pcVar2->unk0 != 0xff; pcVar2++) { + if (sub_080185B4(pcVar2)) { + bVar3 = ptr->unk2b; + } + ptr->unk2b++; + } + ptr->unk2b = bVar3; + pcVar2 = &gUnk_080B3D20[ptr->unk2b]; + ptr->inventoryGfxIdx = pcVar2->unk2; + ptr->unk29 = pcVar2->unk3; + ptr->unk2b = bVar3 + 1; + sub_08018500(); +} + +bool32 sub_080185B4(const struct_gUnk_080B3D20* param_1) { + if (param_1->unk0 == 0xff) + return 0; + + if (param_1->unk0 == 0xfe) { + return GetInventoryValue(param_1->unk1) != 0; + } + + if (param_1->unk0 == 0xfd) { + return CheckKinstoneFused(param_1->unk1); + } + return CheckLocalFlagByBank(gLocalFlagBanks[param_1->unk0], param_1->unk1); +} + +void sub_080185F8(void) { + struct_area_28* ptr2 = &gArea.unk28; + struct_gUnk_080B3D20* ptr = &gUnk_080B3D20[ptr2->unk2b]; + + if (sub_080185B4(ptr)) { + ptr2->inventoryGfxIdx = ptr->unk2; + ptr2->unk29 = ptr->unk3; + ptr2->unk2b++; + sub_08018500(); + } +} + +void GenerateAreaHint(void) { + u16 uVar1; + struct_area_28* ptr; + + gPlayerState.queued_action = 0x16; +#if defined(EU) || defined(JP) + // TODO what fields of the room transition are switched in these variants? + gRoomTransition.field_0x2c[7] = 0; +#else + gRoomTransition.hint_height = 0; +#endif + ptr = &gArea.unk28; + if (ptr->inventoryGfxIdx == 0xff) { + gRoomTransition.hint_idx = ptr->unk2C[0]; + } else { + gRoomTransition.hint_idx = ptr->unk2C[ptr->unk2a]; + ptr->unk2a++; + if (ptr->unk2a > 7) { + ptr->unk2a = 0; + sub_08018690(8, ptr->unk2C); + if (ptr->unk2C[0] == gRoomTransition.hint_idx) { + uVar1 = ptr->unk2C[0]; + ptr->unk2C[0] = ptr->unk3E; + ptr->unk3E = uVar1; + } + } + } +} + +void sub_08018690(int param_1, u16* param_2) { + u32 uVar1; + s32 uVar4; + s32 uVar2; + s32 iVar3; + u16* puVar4; + u16* puVar5; + + uVar4 = param_1 - 1; + if (uVar4 != 0) { + puVar5 = (u16*)(uVar4 * 2 + (int)param_2); + do { + uVar2 = Random(); + iVar3 = uVar2 % (uVar4 + 1); + uVar1 = *puVar5; + puVar4 = (u16*)(iVar3 * 2 + (int)param_2); + *puVar5 = *puVar4; + *puVar4 = uVar1; + puVar5--; + uVar4--; + } while (uVar4 != 0); + } +} + +void sub_080186C0(u32 param_1) { + gArea.unk28.inventoryGfxIdx = 0xff; + gArea.unk28.unk2C[0] = param_1; +} + +void sub_080186D4(void) { + if (gArea.unk28.inventoryGfxIdx == 0xff) { + sub_0801855C(); + } +} + +void sub_080186EC(u32 param_1) { + struct_080C9CBC* psVar1; + u32 i; + + for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) { + if (psVar1->unk3 == 8) { + sub_08018738(i, psVar1->evt_type); + } + } +} + +void sub_08018710(u32 param_1) { + struct_080C9CBC* psVar1; + u32 i; + + for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) { + if (psVar1->unk3 == 8 && param_1 != psVar1->evt_type) { + sub_08018738(i, psVar1->evt_type); + } + } +} + +void sub_08018738(u32 param_1, int param_2) { + struct_080FE320* ptr = &gUnk_080FE320[param_2]; + + if (ptr->area == gRoomControls.area && ptr->room == gRoomControls.room) { + sub_0801876C(param_2, CheckKinstoneFused(param_1)); + } +} + +void sub_0801876C(int param_1, int param_2) { + Entity* roomEnt; + Entity* ent; + u32 uVar3; + u32 tmp; + u8* puVar4; + u32 uVar5; + struct_080FE320* ptr; + + ptr = &gUnk_080FE320[param_1]; + switch (ptr->evt_type) { + case 6: + if (param_2 == 0) { + sub_08018AB4((ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6); + } + break; + case 0: + break; + case 2: + if (param_2 != 0) { + sub_08018BB4(param_1); + } + break; + case 1: + if (param_2 == 0) { + return; + } + if (CheckGlobalFlag(ptr->flag)) { + return; + } + LoadRoomEntity(gUnk_080FEC28 + ptr->entity_idx); + break; + case 3: + if (param_2 == 0) { + return; + } + if (GetInventoryValue(ptr->flag)) { + return; + } + LoadRoomEntity(gUnk_080FEBE8 + ptr->entity_idx); + break; + case 4: + if (param_2 == 0) { + sub_08018A58(param_1); + } + break; + case 5: + if (param_2 != 0) { + sub_08018B50(param_1); + } + break; + + case 7: + if (param_2 != 0) { + return; + } + if (ptr->entity_idx != 0x80) { + LoadRoomEntity(gUnk_080FECC8 + ptr->entity_idx); + } else { + sub_080189EC(param_1); + } + break; + case 0x19: + roomEnt = LoadRoomEntity(&gUnk_080FED18[ptr->entity_idx]); + if (roomEnt != 0) { + roomEnt->type = param_2 ? 2 : 0; + } + break; + case 8: + if (param_2 == 0) { + return; + } + SetTileType(0x168, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1); + break; + case 0xb: + if (param_2 != 0) { + LoadRoomEntity(&gUnk_080FED58[ptr->entity_idx]); + gRoomVars.field_0x8c[ptr->entity_idx] = (void*)gUnk_080FED98[ptr->entity_idx]; + } + break; + case 9: + if (param_2 == 0) { + return; + } + ent = LoadRoomEntity(&gUnk_080FEE78[ptr->entity_idx]); + if (ent != 0) { + *(u16*)&ent->collisionLayer = ptr->x + gRoomControls.origin_x; + *(u16*)&ent->gustJarState = ptr->y + gRoomControls.origin_y; + } + if (ptr->entity_idx == 0) { + SetTileType(0x8d, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1); + } else { + uVar5 = (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6; + SetTileType(0x8c, uVar5 - 1, 1); + uVar3 = 0x8e; + SetTileType(uVar3, uVar5, 1); + } + break; + case 0x18: + if (param_2 != 0) { + LoadRoomEntityList(gUnk_080FEE18); + } + break; + case 0xf: + if (param_2 != 0) { + LoadRoomEntity(gUnk_080FEE58); + } else { + LoadRoomEntity(gUnk_080FEE48); + } + break; + case 0x11: + if (param_2 != 0) { + SetLocalFlagByBank(FLAG_BANK_1, SOUGEN_05_BOMB_00); + LoadRoomEntityList(gUnk_080FEE38); + } + break; + case 0x1a: + case 0x1b: + case 0x1c: + break; + } +} + +void sub_080189EC(int param_1) { + u32 i; + int iVar1; + int tilePosition; + struct_080FE320* ptr; + + ptr = &gUnk_080FE320[param_1]; + + tilePosition = (ptr->x >> 4) & 0x3f; + tilePosition |= ((ptr->y >> 4) & 0x3f) << 6; + tilePosition -= 0x42; + + for (i = 0; i < 4; i++) { + SetTileType(i + 0x1df, tilePosition + i, 2); + } + + tilePosition += 0x40; + for (i = 0; i < 4; i++) { + SetTileType(i + 0x1e3, tilePosition + i, 2); + SetTileType(i + 0x1db, tilePosition + i, 1); + } +} + +void sub_08018A58(int param_1) { + u32 i; + int iVar2; + u32 j; + int tilePosition; + struct_080FE320* ptr; + + ptr = &gUnk_080FE320[param_1]; + + tilePosition = (ptr->x >> 4) & 0x3f; + tilePosition |= ((ptr->y >> 4) & 0x3f) << 6; + tilePosition -= 0x43; + iVar2 = 0x232; + + for (i = 0; i < 4; tilePosition += 0x40, i++) { + for (j = 0; j < 7; j++) { + SetTileType(iVar2++, tilePosition + j, 1); + } + } +} + +void sub_08018AB4(int param_1) { + u32 i; + int iVar2; + u32 j; + int iVar6; + + iVar2 = 0x1e8; + iVar6 = 500; + + for (i = 0; i < 3; i++) { + j = 0; + for (; j < 4; j++) { + SetTileType(iVar2++, param_1 + j, 1); + SetTileType(iVar6++, param_1 - 0x40 + j, 2); + } + param_1 += 0x40; + } +} + +void sub_08018B10(int param_1) { + int iVar1; + u32 index; + int iVar3; + int iVar4; + + iVar4 = 0x1f0; + iVar3 = 0x1fc; + index = 0; + iVar1 = param_1 - 0x40; + for (; index < 4; iVar1++, index++) { + SetTileType(iVar4++, param_1 + index, 1); + SetTileType(iVar3++, iVar1, 2); + } +} + +void sub_08018B50(int param_1) { + u32 i; + int iVar2; + u32 j; + int tilePosition; + struct_080FE320* ptr; + + ptr = &gUnk_080FE320[param_1]; + if ((ptr->entity_idx & 0x80) == 0) { + iVar2 = 0x200; + } else { + iVar2 = 0x219; + } + + tilePosition = (ptr->x >> 4) & 0x3f; + tilePosition |= ((ptr->y >> 4) & 0x3f) << 6; + tilePosition -= 0x82; + + for (i = 0; i < 5; tilePosition += 0x40, i++) { + for (j = 0; j < 5; j++) { + SetTileType(iVar2++, tilePosition + j, 1); + } + } +} + +void sub_08018BB4(int param_1) { + u32 layer; + TileEntity tile; + struct_080FE320* ptr; + u32 position; + + MemCopy(gUnk_080FEAC8 + param_1, &tile, sizeof(TileEntity)); + ptr = &gUnk_080FE320[param_1]; + tile.tilePos = (ptr->x >> 4 & 0x3f) | (((ptr->y) >> 4 & 0x3f) << 6); + sub_0804B3C4(&tile); + if (CheckLocalFlag(tile.localFlag) == 0) { + position = tile.tilePos; + if ((tile._6 & 1) == 0) { + layer = 1; + } else { + layer = 2; + } + SetTileType(0x73, position, layer); + } +} void CreateMinishEntrance(u32 tilePos) { u32 x, y; diff --git a/src/manager/manager38.c b/src/manager/manager38.c index 081beb14..5e377242 100644 --- a/src/manager/manager38.c +++ b/src/manager/manager38.c @@ -1,8 +1,6 @@ #include "entity.h" #include "room.h" -extern Entity* LoadRoomEntity(EntityData*); - void sub_0805E0C0(Entity*); void sub_0805E0F4(Entity*); diff --git a/src/manager/managerA.c b/src/manager/managerA.c index 37679354..b94bbe6b 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -147,7 +147,7 @@ static void sub_08058514(ManagerA* this) { } static void sub_080585B0(ManagerA* this) { - if (gArea.inventoryGfxIdx != 0xFF) { + if (gArea.unk28.inventoryGfxIdx != 0xFF) { DeleteThisEntity(); } if (CheckFlags(this->flag1)) { diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 1e49669f..bb9aa75e 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -81,8 +81,6 @@ void ManagerB_WaitForDone(ManagerB* this) { ManagerBHelper* CreateHelper(Manager*); void ManagerBHelper_Monitor(ManagerBHelper*, Entity*, u32); -extern Entity* LoadRoomEntity(EntityData*); - void ManagerB_LoadFight(Manager* this) { ManagerBHelper* monitor; EntityData* prop; diff --git a/src/manager/managerF.c b/src/manager/managerF.c index b46d3138..50c01ac7 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -414,7 +414,7 @@ void sub_080594DC(ManagerF* this) { break; case 2: default: - if (gArea.inventoryGfxIdx != 0xFF) { + if (gArea.unk28.inventoryGfxIdx != 0xFF) { DeleteThisEntity(); } if (CheckLocalFlagByBank(FLAG_BANK_10, 0x85)) { diff --git a/src/movement.c b/src/movement.c index 0c4f0368..3224af88 100644 --- a/src/movement.c +++ b/src/movement.c @@ -1775,25 +1775,26 @@ bool32 MoveNorth(Entity* this, s32 radius, s32 angle, u32 collisionType) { } } -ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc", - bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) -/*NONMATCH("asm/non_matching/movement/MoveNorthEast.inc", - bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) { +bool32 MoveNorthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; s32 moveB = 0; - if (((this->collisions & COL_NORTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) { - if ((this->collisions & (COL_NORTH_ANY | COL_EAST_ANY)) == COL_NONE) { - moveA = radius * gSineTable[angle + 0x40]; + s32 northCollision = (this->collisions & COL_NORTH_ANY); + u32 northCollision2 = northCollision; + s32 eastCollision = (this->collisions & COL_EAST_ANY); + u32 eastCollision2 = eastCollision; + if ((northCollision == COL_NONE) || (eastCollision == COL_NONE)) { + if ((northCollision | eastCollision) == COL_NONE) { + moveA = gSineTable[angle + 0x40] * radius; this->y.WORD -= moveA; - moveB = radius * gSineTable[angle]; + moveB = gSineTable[angle] * radius; this->x.WORD += moveB; } else { - if ((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) { + if (northCollision2 == COL_NORTH_WEST) { moveA = radius * 0x100; this->x.WORD += moveA; CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType); } else { - if ((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) { + if (eastCollision2 == COL_EAST_NORTH) { moveA = radius * 0x100; this->y.WORD -= moveA; CalculateEntityTileCollisions(this, DirectionNorthEast, collisionType); @@ -1809,13 +1810,14 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthEast.inc", } } } - if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) { - return FALSE; - } else { + if (((moveA < -0x3333) || (moveA >= 0x3333))) { return TRUE; + } else if ((moveB < -0x3333) || (moveB >= 0x3333)) { + return TRUE; + } else { + return FALSE; } } -END_NONMATCH*/ bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; @@ -1855,24 +1857,25 @@ bool32 MoveEast(Entity* this, s32 radius, s32 angle, u32 collisionType) { } } -ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc", - bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) -/*NONMATCH("asm/non_matching/movement/MoveSouthEast.inc", - bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType)) { +bool32 MoveSouthEast(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; s32 moveB = 0; - if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_EAST_ANY) == COL_NONE)) { - if ((this->collisions & (COL_SOUTH_ANY | COL_EAST_ANY)) == COL_NONE) { + s32 anySouth = this->collisions & COL_SOUTH_ANY; + s32 anySouth2 = anySouth; + s32 anyEast = this->collisions & COL_EAST_ANY; + s32 anyEast2 = anyEast; + if ((anySouth == COL_NONE) || (anyEast == COL_NONE)) { + if ((anySouth | anyEast) == COL_NONE) { moveA = gSineTable[angle + 0x40] * radius; this->y.WORD -= moveA; moveB = gSineTable[angle] * radius; this->x.WORD += moveB; } else { - if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_WEST) { + if (anySouth2 == COL_SOUTH_WEST) { moveA = radius * 0x100; this->x.WORD += moveA; CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType); - } else if ((this->collisions & COL_EAST_ANY) == COL_EAST_SOUTH) { + } else if (anyEast2 == COL_EAST_SOUTH) { moveA = radius * 0x100; this->y.WORD += moveA; CalculateEntityTileCollisions(this, DirectionSouthEast, collisionType); @@ -1887,13 +1890,16 @@ ASM_FUNC("asm/non_matching/movement/MoveSouthEast.inc", } } } - if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) { - return FALSE; - } else { + if (moveA < -0x3333 || moveA >= 0x3333) { return TRUE; } + + if (moveB < -0x3333 || moveB >= 0x3333) { + return TRUE; + } + + return FALSE; } -END_NONMATCH*/ bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; @@ -1934,47 +1940,49 @@ bool32 MoveSouth(Entity* this, s32 radius, s32 angle, u32 collisionType) { } } -ASM_FUNC("asm/non_matching/movement/MoveSouthWest.inc", - bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) -/*NONMATCH("asm/non_matching/movement/MoveSouthWest.inc", - bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) { +bool32 MoveSouthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; s32 moveB = 0; - if (((this->collisions & COL_SOUTH_ANY) == COL_NONE) || ((this->collisions & COL_WEST_ANY) == COL_NONE)) { - if ((this->collisions & (COL_SOUTH_ANY | COL_WEST_ANY)) == COL_NONE) { - moveB = gSineTable[angle + 0x40] * radius; - this->y.WORD -= moveB; - moveA = gSineTable[angle] * radius; - this->x.WORD += moveA; + s32 anySouth = this->collisions & COL_SOUTH_ANY; + s32 anySouth2 = anySouth; + s32 anyWest = this->collisions & COL_WEST_ANY; + s32 anyWest2 = anyWest; + if ((anySouth == COL_NONE) || (anyWest == COL_NONE)) { + if ((anySouth | anyWest) == COL_NONE) { + moveA = gSineTable[angle + 0x40] * radius; + this->y.WORD -= moveA; + moveB = gSineTable[angle] * radius; + this->x.WORD += moveB; } else { - if ((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_EAST) { - moveB = radius * 0x100; - this->x.WORD -= moveB; + if (anySouth2 == COL_SOUTH_EAST) { + moveA = radius * 0x100; + this->x.WORD -= moveA; + CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType); + } else if (anyWest2 == COL_WEST_SOUTH) { + moveA = radius * 0x100; + this->y.WORD += moveA; CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType); - } else { - if ((this->collisions & COL_WEST_ANY) == COL_WEST_SOUTH) { - moveB = radius * 0x100; - this->y.WORD += moveB; - CalculateEntityTileCollisions(this, DirectionSouthWest, collisionType); - } } if ((this->collisions & COL_SOUTH_ANY) == COL_NONE) { - moveA = gSineTable[angle + 0x40] * radius; - this->y.WORD -= moveA; + moveB = gSineTable[angle + 0x40] * radius; + this->y.WORD -= moveB; } if ((this->collisions & COL_WEST_ANY) == COL_NONE) { - moveA = gSineTable[angle] * radius; - this->x.WORD += moveA; + moveB = gSineTable[angle] * radius; + this->x.WORD += moveB; } } } - if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) { - return FALSE; - } else { + if (moveA < -0x3333 || moveA >= 0x3333) { return TRUE; } + + if (moveB < -0x3333 || moveB >= 0x3333) { + return TRUE; + } + + return FALSE; } -END_NONMATCH*/ bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; @@ -2018,14 +2026,13 @@ bool32 MoveWest(Entity* this, s32 radius, s32 angle, u32 collisionType) { } } -ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc", - bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) -/*NONMATCH("asm/non_matching/movement/MoveNorthWest.inc", - bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType)) { +bool32 MoveNorthWest(Entity* this, s32 radius, s32 angle, u32 collisionType) { s32 moveA = 0; s32 moveB = 0; u32 colNorthAny = (this->collisions & COL_NORTH_ANY); + u32 colNorthAny2 = colNorthAny; u32 colWestAny = (this->collisions & COL_WEST_ANY); + u32 colWestAny2 = colWestAny; if ((colNorthAny == COL_NONE) || (colWestAny == COL_NONE)) { if ((colNorthAny | colWestAny) == COL_NONE) { moveA = gSineTable[angle + 0x40] * radius; @@ -2033,12 +2040,12 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc", moveB = gSineTable[angle] * radius; this->x.WORD += moveB; } else { - if (colNorthAny == COL_NORTH_EAST) { + if (colNorthAny2 == COL_NORTH_EAST) { moveA = radius * 0x100; this->x.WORD -= moveA; CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType); } else { - if (colWestAny == COL_WEST_NORTH) { + if (colWestAny2 == COL_WEST_NORTH) { moveA = radius * 0x100; this->y.WORD -= moveA; CalculateEntityTileCollisions(this, DirectionNorthWest, collisionType); @@ -2054,13 +2061,16 @@ ASM_FUNC("asm/non_matching/movement/MoveNorthWest.inc", } } } - if (((moveA >= -0x3333) && (moveA < 0x3333)) && ((moveB >= -0x3333) && (moveB < 0x3333))) { - return FALSE; - } else { + if (moveA < -0x3333 || moveA >= 0x3333) { return TRUE; } + + if (moveB < -0x3333 || moveB >= 0x3333) { + return TRUE; + } + + return FALSE; } -END_NONMATCH*/ bool32 ProcessMovement0(Entity* this) { bool32 result; diff --git a/src/object.c b/src/object.c index c0c4eb40..42aed751 100644 --- a/src/object.c +++ b/src/object.c @@ -61,7 +61,7 @@ void (*const gObjectFunctions[])(Entity*) = { [JAR_PORTAL] = JarPortal, [BOSS_DOOR] = BossDoor, [OBJECT_3A] = Object3A, - [PORTAL_MUSHROOM_STALKS] = MacroMushromStalks, + [PORTAL_MUSHROOM_STALKS] = MacroMushroomStalks, [PORTAL_FALLING_PLAYER] = MacroPlayer, [OBJECT_3D] = Object3D, [OBJECT_3E] = Object3E, diff --git a/src/object/macroMushroomStalks.c b/src/object/macroMushroomStalks.c index 4bc543b3..4bc6b577 100644 --- a/src/object/macroMushroomStalks.c +++ b/src/object/macroMushroomStalks.c @@ -1,12 +1,112 @@ #include "entity.h" +#include "area.h" +#include "main.h" +#include "sound.h" +#include "object.h" void sub_0808C964(Entity*); void sub_0808CA10(Entity*); -void MacroMushromStalks(Entity* this) { +static const s16 gUnk_08121648[] = { 264, 252, 256, 256, 248, 260, 240, 264, 248, 260, 256, 256, 264, 252, 272, 248 }; + +void MacroMushroomStalks(Entity* this) { static void (*const actionFuncs[])(Entity*) = { sub_0808C964, sub_0808CA10, }; actionFuncs[this->action](this); } + +void Object75(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0808C964, + sub_0808CA10, + }; + + actionFuncs[this->action](this); +} + +void Object76(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0808C964, + sub_0808CA10, + }; + + actionFuncs[this->action](this); +} + +void sub_0808C964(Entity* this) { + u32 uVar1; + + this->frameIndex = this->type; + if ((this->id == OBJECT_76) && (gUI.roomControls.area != AREA_HYRULE_TOWN)) { + this->type -= 9; + } + if (4 < this->type) { + if (gArea.portal_exit_dir != this->type2) { + DeleteThisEntity(); + } + } + this->action = 1; + this->spriteSettings.draw = 1; + this->spriteOrientation.flipY = 2; + this->spriteRendering.b3 = 2; + ; + this->spritePriority.b0 = this->type2; + if (this->id != OBJECT_75 && (u8)(this->type - 1) < 3) { + this->spriteRendering.b0 = 3; + if (this->type == 1) { + uVar1 = 0xe0; + } else { + uVar1 = 0x100; + } + SetAffineInfo(this, uVar1, uVar1, 0); + } +} + +void sub_0808CA10(Entity* this) { + s32 sVar3; + s32 sVar5; + + switch (this->type) { + case 1: + if (gUnk_02018EB0.unk_18 != 0) { + this->timer = 0x20; + gUnk_02018EB0.unk_18 = 0; + SoundReq(SFX_12E); + } + break; + case 2: + if (gUnk_02018EB0.unk_19 != 0) { + this->timer = 0x20; + gUnk_02018EB0.unk_19 = 0; + SoundReq(SFX_12E); + } + break; + case 3: + if (gUnk_02018EB0.unk_1a != 0) { + this->timer = 0x20; + gUnk_02018EB0.unk_1a = 0; + SoundReq(SFX_12E); + } + break; + } + + if ((this->id != OBJECT_75 && ((u8)(this->type - 1) < 3)) && this->timer != 0) { + this->timer--; + this->subtimer++; + if (this->timer != 0) { + sVar5 = gUnk_08121648[this->subtimer & 0xe]; + sVar3 = gUnk_08121648[(this->subtimer & 0xe) + 1]; + } else { + sVar3 = 0x100; + sVar5 = sVar3; + } + + if (this->type == 1) { + sVar5 = sVar5 - 0x20; + sVar3 = sVar3 - 0x20; + } + SetAffineInfo(this, sVar5, sVar3, 0); + } +} diff --git a/src/object/object3A.c b/src/object/object3A.c index 568712f6..00def745 100644 --- a/src/object/object3A.c +++ b/src/object/object3A.c @@ -160,5 +160,3 @@ void sub_0808C8B8(Object3AEntity* this) { DeleteThisEntity(); } } - -const u16 gUnk_08121648[] = { 264, 252, 256, 256, 248, 260, 240, 264, 248, 260, 256, 256, 264, 252, 272, 248 }; diff --git a/src/object/object6A.c b/src/object/object6A.c index d1296659..5fbeef59 100644 --- a/src/object/object6A.c +++ b/src/object/object6A.c @@ -808,7 +808,7 @@ void sub_0809584C(Object6AEntity* this) { u32 tmp, idx; idx = super->health; - if ((idx & 0x7F) != 0 && !ReadBit((u32*)gArea.filler5, idx - 1)) + if ((idx & 0x7F) != 0 && !ReadBit((u32*)gArea.filler6, idx - 1)) DeleteThisEntity(); if (super->timer != 0 && CheckKinstoneFused(super->type2)) DeleteThisEntity(); @@ -1178,9 +1178,9 @@ void sub_08095F38(Object6AEntity* this) { void sub_08096028(Object6AEntity* this) { u32 type2 = 6; - if (!CheckLocalFlagByBank(768, 123)) + if (!CheckLocalFlagByBank(FLAG_BANK_3, 123)) type2 = 4; - if (!CheckLocalFlagByBank(768, 122)) + if (!CheckLocalFlagByBank(FLAG_BANK_3, 122)) type2 = 3; CreateObject(OBJECT_6A, 0x1F, type2); } diff --git a/src/object/object75.c b/src/object/object75.c deleted file mode 100644 index efd305f6..00000000 --- a/src/object/object75.c +++ /dev/null @@ -1,14 +0,0 @@ -#define NENT_DEPRECATED -#include "entity.h" - -extern void sub_0808C964(Entity*); -extern void sub_0808CA10(Entity*); - -void Object75(Entity* this) { - static void (*const actionFuncs[])(Entity*) = { - sub_0808C964, - sub_0808CA10, - }; - - actionFuncs[this->action](this); -} diff --git a/src/object/object76.c b/src/object/object76.c deleted file mode 100644 index 79df5405..00000000 --- a/src/object/object76.c +++ /dev/null @@ -1,14 +0,0 @@ -#define NENT_DEPRECATED -#include "entity.h" - -extern void sub_0808C964(Entity*); -extern void sub_0808CA10(Entity*); - -void Object76(Entity* this) { - static void (*const actionFuncs[])(Entity*) = { - sub_0808C964, - sub_0808CA10, - }; - - actionFuncs[this->action](this); -} diff --git a/src/object/objectBlockingStairs.c b/src/object/objectBlockingStairs.c index b1274661..9101022c 100644 --- a/src/object/objectBlockingStairs.c +++ b/src/object/objectBlockingStairs.c @@ -283,8 +283,8 @@ typedef struct { } struct_gUnk_08122898; const struct_gUnk_08122898 gUnk_08122898[] = { - { 0x200, 0xa1, 0xa2 }, - { 0x8c0, 0x6f, 0x70 }, + { FLAG_BANK_2, 0xa1, 0xa2 }, + { FLAG_BANK_10, 0x6f, 0x70 }, }; u32 sub_080932D8(u32 param_1) { diff --git a/src/object/objectOnPillar.c b/src/object/objectOnPillar.c index 7f0456c8..5b5e8010 100644 --- a/src/object/objectOnPillar.c +++ b/src/object/objectOnPillar.c @@ -294,9 +294,9 @@ void sub_080971E0(ObjectOnPillarEntity* this) { bool32 sub_08097348(u32 tilePosition) { u32 index; TileEntity* tileEntity = gSmallChests; - for (index = 0; index < 8; index++, tileEntity++) { - if (tileEntity->_4 == tilePosition) { - return CheckLocalFlag(tileEntity->_1); + for (index = 0; index < ARRAY_COUNT(gSmallChests); index++, tileEntity++) { + if (tileEntity->tilePos == tilePosition) { + return CheckLocalFlag(tileEntity->localFlag); } } return FALSE; diff --git a/src/object/whirlwind.c b/src/object/whirlwind.c index 6017bbe7..5659a5a4 100644 --- a/src/object/whirlwind.c +++ b/src/object/whirlwind.c @@ -23,7 +23,7 @@ void Whirlwind(Entity* this) { Whirlwind_Action2, }; u32 tmp = this->health; - if (((tmp & 0x7f) != 0) && (ReadBit(gArea.filler5, tmp - 1) == 0)) { + if (((tmp & 0x7f) != 0) && (ReadBit(gArea.filler6, tmp - 1) == 0)) { DeleteThisEntity(); } Whirlwind_Actions[this->action](this); diff --git a/src/physics.c b/src/physics.c index 609d8e8c..fbe503c1 100644 --- a/src/physics.c +++ b/src/physics.c @@ -26,7 +26,7 @@ static bool32 sub_0807007C(struct_gUnk_020000C0*, u32); void sub_0806F364(void) { gArea.filler[2] ^= 0x80; - MemClear(&gArea.filler5[(gArea.filler[2] + 7) / 8], 16); + MemClear(&gArea.filler6[(gArea.filler[2] + 7) / 8], 16); } void sub_0806F38C(void) { diff --git a/src/playerItemUtils.c b/src/playerItemUtils.c index 8364caf3..aa1d15a0 100644 --- a/src/playerItemUtils.c +++ b/src/playerItemUtils.c @@ -56,14 +56,14 @@ void sub_080A7C8C(u32 pos, u32 layer) { u32 found = 0; u32 i; for (i = 0; i < 8; ++i, ++t) { - if (*(u16*)&t->_4 == pos) { + if (*(u16*)&t->tilePos == pos) { found = 1; break; } } if ((layer >> 1) == ((u32)(t->_6 << 31) >> 31)) { if (found) { - SetLocalFlag(t->_1); + SetLocalFlag(t->localFlag); CreateItemEntity(t->_2, t->_3, 0); } else { CreateItemEntity(0x60, 0, 0); @@ -81,7 +81,7 @@ u32 sub_080A7CFC(u32 a1) { TileEntity* t = GetCurrentRoomProperty(3); if (t != 0) { do { - if (t->_4 == a1) { + if (t->tilePos == a1) { switch (t->type) { case SIGN: hint = FALSE; @@ -95,7 +95,7 @@ u32 sub_080A7CFC(u32 a1) { break; } t++; - } while (t->_4 != 0); + } while (t->tilePos != 0); } InitTileMessage(msg, hint); } diff --git a/src/playerUtils.c b/src/playerUtils.c index 35a80159..923f5db3 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -215,27 +215,27 @@ bool32 sub_080777A0(void) { } } -NONMATCH("asm/non_matching/playerUtils/sub_08077880.inc", void sub_08077880(u32 param_1, u32 param_2, u32 param_3)) { +void sub_08077880(Item itemId, u32 param_2, u32 param_3) { ItemBehavior* item; u16* puVar2; - if (param_1 - 1 < 0x1f) { - if (gUnk_0811BE48[param_1].unk0[0] != 0) { + if (itemId - 1 < 0x1f) { + struct_0811BE48* ptr = &gUnk_0811BE48[itemId]; + puVar2 = &gPlayerState.field_0x90; + if (ptr->unk0[0] != 0) { puVar2 = &gPlayerState.field_0x92; - } else { - puVar2 = &gPlayerState.field_0x90; } + if (((*puVar2 & param_2) != 0) || (param_3 != 0)) { - item = sub_0807794C(param_1); + item = sub_0807794C(itemId); if (item != NULL) { - item->field_0x5[4] = gUnk_0811BE48[param_1].unk0[1]; - item->behaviorID = (u8)param_1; - item->field_0x2[1] = (u8)param_2; + item->field_0x5[4] = gUnk_0811BE48[itemId].unk0[1]; + item->behaviorID = itemId; + item->field_0x2[1] = param_2; } } } } -END_NONMATCH bool32 sub_080778CC(void) { ItemBehavior* item; @@ -246,9 +246,9 @@ bool32 sub_080778CC(void) { (((sub_080789A8() != 0 || ((gPlayerState.field_0x90 & 0xf03) == 0)))))) { return FALSE; } - item = sub_0807794C(0x1b); + item = sub_0807794C(ITEM_TRAP); if (item != NULL) { - item->behaviorID = 0x1b; + item->behaviorID = ITEM_TRAP; item->field_0x5[4] = gUnk_0811BE48[0].unk0[0x145]; return TRUE; } else { @@ -256,16 +256,16 @@ bool32 sub_080778CC(void) { } } -ItemBehavior* sub_0807794C(u32 param_1) { - if (((((gPlayerState.queued_action == PLAYER_ROLL) && (param_1 != 0x1b)) || - (((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (6 < param_1)))) || - ((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (6 < param_1)) || - (((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[param_1].unk6[2] == 0)))))) || - ((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < param_1 - 0x14)))))) { +ItemBehavior* sub_0807794C(Item itemId) { + if (((((gPlayerState.queued_action == PLAYER_ROLL) && (itemId != ITEM_TRAP)) || + (((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (ITEM_FOURSWORD < itemId)))) || + ((((gPlayerState.jump_status != 0 || (gPlayerEntity.z.WORD != 0)) && (ITEM_FOURSWORD < itemId)) || + (((gPlayerState.flags & PL_MINISH) != 0 && (gUnk_0811BE48[itemId].unk6[2] == 0)))))) || + ((gPlayerState.floor_type == SURFACE_SWAMP && ((gPlayerState.field_0x37 != 0 && (1 < itemId - 0x14)))))) { return NULL; } else { - u32 tmp = gUnk_0811BE48[param_1].unk0[2]; - return gUnk_0811BFC8[tmp](param_1); + u32 tmp = gUnk_0811BE48[itemId].unk0[2]; + return gUnk_0811BFC8[tmp](itemId); } } diff --git a/src/projectile/removableDust.c b/src/projectile/removableDust.c index 2c188926..86fa2908 100644 --- a/src/projectile/removableDust.c +++ b/src/projectile/removableDust.c @@ -5,7 +5,6 @@ #include "object.h" extern u32 sub_080B1AE0(u16, u8); -extern Entity* LoadRoomEntity(EntityData*); extern void (*const RemovableDust_Functions[])(Entity*); extern const u16 gUnk_08129FD0[]; diff --git a/src/projectile/v1EyeLaser.c b/src/projectile/v1EyeLaser.c index 52115d4f..af8ec1bd 100644 --- a/src/projectile/v1EyeLaser.c +++ b/src/projectile/v1EyeLaser.c @@ -51,32 +51,29 @@ void V1EyeLaser_Action2(Entity* this) { } } -NONMATCH("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entity* this)) { +void sub_080AB758(Entity* this) { s32 r6 = 6; u32 r7 = 0; u32 index = 0; - if (((u32)this->y.HALF.HI) <= (u16)(gRoomControls.origin_y + 0xd4)) { - u32 tmp = 7; - do { - if ((index & tmp) == 7) { - sub_080AB844(this, 4, r6); - r6 += 0x3e; - r7 += 0x3e; - } - index = (index + 1) & tmp; - } while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4)); + u32 tmp = this->y.HALF.HI + r7 + (index << 3); + for (; tmp <= (u16)(gRoomControls.origin_y + 0xd4); + index = (index + 1) & 7, tmp = this->y.HALF.HI + r7 + (index << 3)) { + if ((index & 7) == 7) { + sub_080AB844(this, 4, r6); + r6 += 0x3e; + r7 += 0x3e; + } } + index = 0; - if (this->y.HALF.HI + r7 <= (u16)(gRoomControls.origin_y + 0xd4)) { - u32 tmp = 3; - do { - if ((index & tmp) == 3) { - sub_080AB844(this, 3, r6); - r6 += 0x1e; - r7 += 0x1e; - } - index = (index + 1) & tmp; - } while (this->y.HALF.HI + r7 + (index << 3) <= (u16)(gRoomControls.origin_y + 0xd4)); + tmp = this->y.HALF.HI + r7 + (index << 3); + for (; tmp <= (u16)(gRoomControls.origin_y + 0xd4); + index = (index + 1) & 3, tmp = this->y.HALF.HI + r7 + (index << 3)) { + if ((index & 3) == 3) { + sub_080AB844(this, 3, r6); + r6 += 0x1e; + r7 += 0x1e; + } } if (index & 0x2) { @@ -89,7 +86,6 @@ NONMATCH("asm/non_matching/v1EyeLaser/sub_080AB758.inc", void sub_080AB758(Entit sub_080AB844(this, 6, r6); } -END_NONMATCH void sub_080AB844(Entity* this, s32 param_1, s32 param_2) { Entity* entity; diff --git a/src/room.c b/src/room.c index 92c4057a..f4ef24c7 100644 --- a/src/room.c +++ b/src/room.c @@ -10,7 +10,7 @@ static void sub_0804B058(EntityData* dat); extern void sub_0801AC98(void); extern u32 sub_08049D1C(u32); -extern Entity* LoadRoomEntity(EntityData*); +extern Entity* LoadRoomEntity(const EntityData*); extern void* GetRoomProperty(u32, u32, u32); extern void** gCurrentRoomProperties; @@ -22,8 +22,8 @@ extern void sub_0804B16C(void); extern void ClearSmallChests(void); extern Entity* GetEmptyEntityByKind(u32 kind); -void RegisterRoomEntity(Entity*, EntityData*); -void sub_0804AF0C(Entity*, EntityData*); +void RegisterRoomEntity(Entity*, const EntityData*); +void sub_0804AF0C(Entity*, const EntityData*); void sub_0804AFB0(void** properties); void sub_08054524(void); @@ -39,7 +39,7 @@ static void LoadDestructibleTile(TileEntity*); static void LoadGrassDropTile(TileEntity*); static void LoadLocationTile(TileEntity*); -void LoadRoomEntityList(EntityData* listPtr) { +void LoadRoomEntityList(const EntityData* listPtr) { if (listPtr != NULL) { while (listPtr->kind != 0xFF) { LoadRoomEntity(listPtr++); @@ -47,7 +47,7 @@ void LoadRoomEntityList(EntityData* listPtr) { } } -NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityData* dat)) { +NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(const EntityData* dat)) { int kind; Entity* v4; Entity* v5; @@ -86,7 +86,7 @@ NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityDat } END_NONMATCH -void RegisterRoomEntity(Entity* ent, EntityData* dat) { +void RegisterRoomEntity(Entity* ent, const EntityData* dat) { u32 list; u32 kind; void* offset; @@ -108,7 +108,7 @@ void RegisterRoomEntity(Entity* ent, EntityData* dat) { MemCopy(dat, offset, sizeof(EntityData)); } -void sub_0804AF0C(Entity* ent, EntityData* dat) { +void sub_0804AF0C(Entity* ent, const EntityData* dat) { switch (dat->flags & 0xf0) { case 0x0: ent->x.HALF.HI = dat->xPos + gRoomControls.origin_x; @@ -251,8 +251,8 @@ void* GetCurrentRoomProperty(u32 idx) { void sub_0804B16C(void) { TileEntity* tile = gSmallChests; do { - if (tile->_4 != 0 && CheckLocalFlag(tile->_1)) { - SetTileType(0x74, tile->_4, tile->_6 & 1 ? 2 : 1); + if (tile->tilePos != 0 && CheckLocalFlag(tile->localFlag)) { + SetTileType(0x74, tile->tilePos, tile->_6 & 1 ? 2 : 1); } } while (++tile < gSmallChests + 8); } @@ -297,28 +297,28 @@ void LoadRoomTileEntities(TileEntity* list) { } static void LoadGrassDropTile(TileEntity* tile) { - MemCopy(&gAreaDroptables[tile->_1], &gRoomVars.currentAreaDroptable, 0x20); + MemCopy(&gAreaDroptables[tile->localFlag], &gRoomVars.currentAreaDroptable, 0x20); } static void LoadLocationTile(TileEntity* tile) { - gArea.locationIndex = tile->_1; + gArea.locationIndex = tile->localFlag; sub_08054524(); } static void LoadRoomVisitTile(TileEntity* tile) { - SetLocalFlag(tile->_1); + SetLocalFlag(tile->localFlag); } static void LoadSmallChestTile(TileEntity* tile) { TileEntity* t = gSmallChests; u32 i = 0; for (i = 0; i < 8; ++i, ++t) { - if (!t->_4) { + if (!t->tilePos) { MemCopy(tile, t, sizeof(TileEntity)); - if ((t->_6 & 1) && (gRoomControls.scroll_flags & 2) && !CheckLocalFlag(t->_1)) { - Entity* e = CreateObject(OBJECT_52, t->_1, 0); + if ((t->_6 & 1) && (gRoomControls.scroll_flags & 2) && !CheckLocalFlag(t->localFlag)) { + Entity* e = CreateObject(OBJECT_52, t->localFlag, 0); if (e != NULL) { - sub_0806F704(e, t->_4); + sub_0806F704(e, t->tilePos); } } return; @@ -331,10 +331,10 @@ static void LoadBombableWallTile(TileEntity* tile) { if (mgr != NULL) { mgr->manager.type = 9; mgr->manager.subtype = 0x24; - mgr->x = tile->_4; + mgr->x = tile->tilePos; mgr->y = *(u16*)&tile->_6; mgr->field_0x35 = tile->_2; - mgr->field_0x3e = tile->_1; + mgr->field_0x3e = tile->localFlag; AppendEntityToList((Entity*)mgr, 6); } } @@ -345,7 +345,7 @@ static void LoadDarknessTile(TileEntity* tile) { static void LoadDestructibleTile(TileEntity* tile) { if (CheckLocalFlag(*(u16*)&tile->_2)) { - SetTileType(*(u16*)&tile->_6, tile->_4, tile->_1); + SetTileType(*(u16*)&tile->_6, tile->tilePos, tile->localFlag); } else if (!gRoomVars.filler_0x1) { Manager* mgr; gRoomVars.filler_0x1 = 1; @@ -369,6 +369,6 @@ void sub_0804B388(u32 a1, u32 a2) { sub_080526F8(-1); } -void sub_0804B3C4(void* arg0) { - LoadSmallChestTile(arg0); +void sub_0804B3C4(TileEntity* tile) { + LoadSmallChestTile(tile); } diff --git a/src/roomInit.c b/src/roomInit.c index d39188da..8578ebd6 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -4633,10 +4633,7 @@ u32 sub_unk3_SimonsSimulation_Main(void) { extern u8* gUnk_080F0D58[4]; extern Entity* gUnk_080F0CB8[15]; extern u8* gUnk_080F0E08[]; -extern struct { - u32 unk_00; - u32 unk_04; -} gUnk_080F0E1C[]; +extern TileEntity gUnk_080F0E1C[]; void sub_StateChange_SimonsSimulation_Main(void) { u32 r; @@ -5356,7 +5353,7 @@ extern EntityData gUnk_080F5788; void sub_StateChange_HouseInteriors3_StockwellShop(void) { LoadRoomEntityList(&gUnk_080F5758); - if (!GetInventoryValue(ITEM_QST_DOGFOOD) && CheckLocalFlagByBank(0x200, 0x8f)) { + if (!GetInventoryValue(ITEM_QST_DOGFOOD) && CheckLocalFlagByBank(FLAG_BANK_2, 0x8f)) { LoadRoomEntityList(&gUnk_080F57E8); } if (!CheckLocalFlag(0x55)) { @@ -5549,7 +5546,7 @@ extern EntityData gUnk_080F66AC; void sub_StateChange_WindTribeTowerRoof_Main(void) { sub_0805B4D0(5); - if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByBank(0x100, 5)) { + if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByBank(FLAG_BANK_1, 5)) { LoadRoomEntityList(&gUnk_080F66AC); } SetWorldMapPos(8, 0, 0x1e8, 0x158); diff --git a/src/subtask.c b/src/subtask.c index 896124b3..6ee32e04 100644 --- a/src/subtask.c +++ b/src/subtask.c @@ -69,7 +69,6 @@ extern const EntityData gUnk_080FF264[]; extern void (*const gUnk_080FF28C[])(void); -extern Entity* LoadRoomEntity(EntityData*); extern void sub_08054A14(u32); extern const EntityData gUnk_080FEE48[]; @@ -90,13 +89,6 @@ extern void (*const gUnk_080FF330[])(void); void sub_08055994(void); -typedef struct { - u8 unk_0[6]; - u8 unk_6; - u8 unk_7; -} struct_080FEAC8; -extern struct_080FEAC8 gUnk_080FEAC8[]; - extern void (*const gUnk_080FF35C[])(void); extern const EntityData gUnk_080FF33C[]; @@ -676,8 +668,8 @@ void sub_08055978(void) { void sub_08055994(void) { u32 layer; - struct_080FEAC8* ptr = &gUnk_080FEAC8[gMenu.field_0x4]; - if ((ptr->unk_6 & 1) != 0) { + TileEntity* ptr = &gUnk_080FEAC8[gMenu.field_0x4]; + if ((ptr->_6 & 1) != 0) { layer = 2; } else { layer = 1; diff --git a/src/subtask2.c b/src/subtask2.c index 261ae145..b390c56b 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -765,7 +765,7 @@ void sub_080A5D1C(void) { bool32 sub_080A5F24(void) { bool32 result = TRUE; - if ((gArea.dungeon_idx == 6) && CheckLocalFlagByBank(0x8c0, 0x7b)) { + if ((gArea.dungeon_idx == 6) && CheckLocalFlagByBank(FLAG_BANK_10, 0x7b)) { result = 0; } return result;