From c317fe3f18325fec54c0d76df450f132945449f7 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 17 Jun 2023 00:10:00 +0200 Subject: [PATCH] Extract KeyValuePairs --- asm/non_matching/playerUtils/sub_080789A8.inc | 2 +- asm/non_matching/playerUtils/sub_0807A2F8.inc | 18 +- asm/src/code_080043E8.s | 43 +--- asm/src/code_08007CAC.s | 57 +++--- asm/src/intr.s | 42 ++-- asm/src/player.s | 4 +- asm/src/script.s | 2 +- asm/src/veneer.s | 153 +++++++-------- assets/assets.json | 98 ---------- data/animations/object/minecart.s | 17 -- .../playerItem/playerItemCellOverwriteSet.s | 21 -- data/data_080046A4.s | 41 ++++ include/asm.h | 80 +++++--- include/collision.h | 2 +- include/functions.h | 1 - include/map.h | 11 +- include/player.h | 29 +-- include/room.h | 5 +- include/structures.h | 1 + linker.ld | 28 +-- src/beanstalkSubtask.c | 9 +- src/collision.c | 2 +- src/data/data_080046A4.c | 34 ++++ src/data/mapVvvToSurfaceType.c | 74 +++++++ src/enemy/acroBandits.c | 2 +- src/enemy/bombPeahat.c | 2 +- src/enemy/chuchu.c | 8 +- src/enemy/cloudPiranha.c | 4 +- src/enemy/gyorgFemale.c | 2 +- src/enemy/leever.c | 20 +- src/enemy/madderpillar.c | 2 +- src/enemy/pesto.c | 2 +- src/enemy/puffstool.c | 12 +- src/enemy/rope.c | 2 +- src/enemy/slime.c | 2 +- src/enemy/spinyBeetle.c | 2 +- src/enemy/tektite.c | 2 +- src/enemy/tektiteGolden.c | 2 +- src/enemy/vaatiEyesMacro.c | 2 +- src/enemy/vaatiProjectile.c | 2 +- src/enemy/wizzrobeWind.c | 2 +- src/item/itemGustJar.c | 2 +- src/item/itemMoleMitts.c | 4 +- src/manager/bombableWallManager.c | 4 +- src/manager/minishPortalManager.c | 4 +- src/npc/npc5.c | 6 +- src/npc/townMinish.c | 10 +- src/object/bigIceBlock.c | 164 ++++++++-------- src/object/bollard.c | 2 +- src/object/button.c | 2 +- src/object/crenelBeanSprout.c | 8 +- src/object/cutsceneMiscObject.c | 2 +- src/object/furniture.c | 6 +- src/object/itemOnGround.c | 2 +- src/object/jarPortal.c | 8 +- src/object/lilypadLarge.c | 16 +- src/object/mask.c | 2 +- src/object/minecart.c | 52 +++-- src/object/object1F.c | 2 +- src/object/objectOnPillar.c | 10 +- src/object/playerClone.c | 2 +- src/object/pot.c | 2 +- src/object/pullableLever.c | 2 +- src/object/pushableFurniture.c | 12 +- src/object/pushableRock.c | 8 +- src/object/pushableStatue.c | 8 +- src/object/smokeParticle.c | 2 +- src/object/treeHidingPortal.c | 8 +- src/object/well.c | 4 +- src/physics.c | 6 +- src/player.c | 40 ++-- src/playerItem/playerItemBottle.c | 2 +- src/playerItem/playerItemCellOverwriteSet.c | 34 +++- src/playerItem/playerItemGustBig.c | 21 +- src/playerItem/playerItemHeldObject.c | 8 +- .../playerItemPacciCaneProjectile.c | 2 +- src/playerItem/playerItemSword.c | 26 +-- src/playerUtils.c | 183 ++++++++++-------- src/projectile/projectile5.c | 5 +- src/projectile/removableDust.c | 8 +- src/projectile/spiderWeb.c | 4 +- src/scroll.c | 35 ++-- 82 files changed, 812 insertions(+), 760 deletions(-) delete mode 100644 data/const/playerItem/playerItemCellOverwriteSet.s create mode 100644 data/data_080046A4.s create mode 100644 src/data/data_080046A4.c create mode 100644 src/data/mapVvvToSurfaceType.c diff --git a/asm/non_matching/playerUtils/sub_080789A8.inc b/asm/non_matching/playerUtils/sub_080789A8.inc index bb9a4674..3b2185e2 100644 --- a/asm/non_matching/playerUtils/sub_080789A8.inc +++ b/asm/non_matching/playerUtils/sub_080789A8.inc @@ -18,7 +18,7 @@ _080789C0: cmp r0, #0 bne _08078A56 ldr r0, _08078A60 @ =gPlayerEntity - bl sub_080B1B0C + bl GetCollisionDataAtEntity adds r4, r0, #0 cmp r4, #0xf bls _080789E6 diff --git a/asm/non_matching/playerUtils/sub_0807A2F8.inc b/asm/non_matching/playerUtils/sub_0807A2F8.inc index a56d9c78..5d903c0d 100644 --- a/asm/non_matching/playerUtils/sub_0807A2F8.inc +++ b/asm/non_matching/playerUtils/sub_0807A2F8.inc @@ -100,7 +100,7 @@ _0807A3AA: lsrs r4, r7, #1 adds r0, r4, #0 movs r1, #1 - bl GetCollisionData + bl GetCollisionDataAtMetaTilePos cmp r0, #0 beq _0807A3FC lsls r0, r4, #0x10 @@ -108,7 +108,7 @@ _0807A3AA: mov r1, sl adds r1, #0x38 ldrb r1, [r1] - bl sub_080B1AE0 + bl GetVvvAtMetaTilePos lsls r0, r0, #0x10 lsrs r0, r0, #0x10 mov r2, sl @@ -118,7 +118,7 @@ _0807A3AA: ldr r2, _0807A3F8 @ =gUnk_0811C1D8 adds r1, r1, r2 ldr r1, [r1] - bl sub_08007DD6 + bl FindValueForKey cmp r0, #0 beq _0807A468 b _0807A400 @@ -138,7 +138,7 @@ _0807A400: lsrs r4, r6, #1 adds r0, r4, #0 movs r1, #1 - bl GetCollisionData + bl GetCollisionDataAtMetaTilePos cmp r0, #0 beq _0807A44C lsls r0, r4, #0x10 @@ -146,7 +146,7 @@ _0807A400: adds r1, r5, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080B1AE0 + bl GetVvvAtMetaTilePos lsls r0, r0, #0x10 lsrs r0, r0, #0x10 ldrb r1, [r5, #0x14] @@ -155,7 +155,7 @@ _0807A400: ldr r2, _0807A448 @ =gUnk_0811C1D8 adds r1, r1, r2 ldr r1, [r1] - bl sub_08007DD6 + bl FindValueForKey cmp r0, #0 beq _0807A468 b _0807A450 @@ -195,7 +195,7 @@ _0807A46E: adds r7, r0, #0 lsrs r0, r7, #1 movs r1, #2 - bl GetCollisionData + bl GetCollisionDataAtMetaTilePos cmp r0, #0 bne _0807A4F2 adds r0, r4, #0 @@ -206,7 +206,7 @@ _0807A46E: lsrs r0, r6, #1 movs r1, #2 _0807A4A0: - bl GetCollisionData + bl GetCollisionDataAtMetaTilePos cmp r0, #0 beq _0807A4EC b _0807A4F2 @@ -224,7 +224,7 @@ _0807A4B0: _0807A4C2: lsrs r0, r7, #1 movs r1, #1 - bl GetCollisionData + bl GetCollisionDataAtMetaTilePos cmp r0, #0 bne _0807A4F2 mov r1, sb diff --git a/asm/src/code_080043E8.s b/asm/src/code_080043E8.s index 5fce0906..c2ab3d18 100644 --- a/asm/src/code_080043E8.s +++ b/asm/src/code_080043E8.s @@ -170,7 +170,7 @@ _08004516: thumb_func_start sub_0800451C sub_0800451C: @ 0x0800451C push {r0, lr} - bl GetTileUnderEntity + bl GetVvvAtEntity adds r1, r0, #0 pop {r0, r3} mov lr, r3 @@ -367,44 +367,3 @@ _08004694: .4byte ram_CalcCollisionDirection _08004698: .4byte gUnk_080C93E0 _0800469C: .4byte 0x00000106 _080046A0: .4byte 0x00000280 - -gUnk_080046A4:: @ 080046A4 - .incbin "code_080043E8/gUnk_080046A4.bin" - -gUnk_080047F6:: @ 080047F6 - .incbin "code_080043E8/gUnk_080047F6.bin" - -@ TODO PlayerMacros - -gUnk_080049D6:: @ 080049D6 - .incbin "code_080043E8/gUnk_080049D6.bin" - -gUnk_080049F6:: @ 080049F6 - .incbin "code_080043E8/gUnk_080049F6.bin" - -gUnk_080049FE:: @ gUnk_080049FE - .incbin "code_080043E8/gUnk_080049FE.bin" - -gUnk_08004A0C:: @ 08004A0C - .incbin "code_080043E8/gUnk_08004A0C.bin" - -gUnk_08004A16:: @ 08004A16 - .incbin "code_080043E8/gUnk_08004A16.bin" - -gUnk_08004A24:: @ 08004A24 - .incbin "code_080043E8/gUnk_08004A24.bin" - -gUnk_08004A32:: @ 08004A32 - .incbin "code_080043E8/gUnk_08004A32.bin" - -gUnk_08004A48:: @ 08004A48 - .incbin "code_080043E8/gUnk_08004A48.bin" - -gUnk_08004A72:: @ 08004A72 - .incbin "code_080043E8/gUnk_08004A72.bin" - -gUnk_08004A8C:: @ 08004A8C - .incbin "code_080043E8/gUnk_08004A8C.bin" - -gUnk_08004AA6:: @ 08004AA6 - .incbin "code_080043E8/gUnk_08004AA6.bin" diff --git a/asm/src/code_08007CAC.s b/asm/src/code_08007CAC.s index c457c0a2..65db85e1 100644 --- a/asm/src/code_08007CAC.s +++ b/asm/src/code_08007CAC.s @@ -5,48 +5,41 @@ .text -gUnk_08007CAC:: @ 08007CAC - .incbin "code_080043E8/gUnk_08007CAC.bin" -.ifdef DEMO_JP -@ TODO only one byte differs - .incbin "code_080043E8/gUnk_08007CAC_1_DEMO_JP.bin" -.else -.ifdef DEMO_USA -@ TODO only one byte differs - .incbin "code_080043E8/gUnk_08007CAC_2_DEMO_USA.bin" -.else -.ifdef JP -@ TODO only one byte differs - .incbin "code_080043E8/gUnk_08007CAC_3_JP.bin" -.else -.ifdef EU -@ TODO only two bytes differ - .incbin "code_080043E8/gUnk_08007CAC_4_EU.bin" -.else - .incbin "code_080043E8/gUnk_08007CAC_5_USA.bin" -.endif -.endif -.endif -.endif +@ TODO cannot add this at the end of mapVvvToSurfaceType.c due to alignment? +.2byte 0 - non_word_aligned_thumb_func_start sub_08007DD6 -sub_08007DD6: @ 0x08007DD6 +@ TODO unused? +gUnk_08007DBE:: @ 08007DBE + .byte 0x42, 0x7b, 0x01, 0x32, 0x42, 0x73, 0x70, 0x47, 0x02, 0x73, 0x00, 0x23, 0x43, 0x73, 0x0b, 0x73 + + @ seems unused? + non_word_aligned_thumb_func_start sub_08007DCE +sub_08007DCE: + push {lr} + bl DoPlayerAction + pop {pc} + + +@ Find the key in the map of u16 to u16 +@ r0: value, r1: array of u16* + non_word_aligned_thumb_func_start FindValueForKey +FindValueForKey: @ 0x08007DD6 push {lr} bl sub_08007DE0 - adds r0, r3, #0 + adds r0, r3, #0 @ move the found value into r0 pop {pc} thumb_func_start sub_08007DE0 sub_08007DE0: @ 0x08007DE0 subs r1, #4 _08007DE2: - adds r1, #4 - ldrh r3, [r1] + adds r1, #4 @ add +4 to r1 at the end of loop + ldrh r3, [r1] @ r3: key cmp r3, #0 - beq _08007DF2 + beq _08007DF2 @ key == 0 -> end of map cmp r0, r3 - bne _08007DE2 - ldrh r3, [r1, #2] - movs r2, #1 + bne _08007DE2 @ r3 == r0 -> found + ldrh r3, [r1, #2] @ r3: value + movs r2, #1 @ r2 = 1 _08007DF2: bx lr diff --git a/asm/src/intr.s b/asm/src/intr.s index 6a5f86f7..adaaa7f6 100644 --- a/asm/src/intr.s +++ b/asm/src/intr.s @@ -121,67 +121,67 @@ _080B1A64: ldrh r0, [r1, r0] bx lr - arm_func_start arm_GetRelativeCollisionTile -arm_GetRelativeCollisionTile: @ 0x080B1A8C + arm_func_start arm_GetVvvRelativeToEntity +arm_GetVvvRelativeToEntity: @ 0x080B1A8C @ entity plus offset to world pixel coordinates and layer ldrh r3, [r0, #0x2e] add r3, r3, r1 ldrh r1, [r0, #0x32] add r1, r1, r2 ldrb r2, [r0, #0x38] mov r0, r3 - b arm_sub_080B1AB4 -arm_GetTileUnderEntity: + b arm_GetVvvAtWorldCoords +arm_GetVvvAtEntity: @ entity to world pixel coordinates and layer ldrb r2, [r0, #0x38] ldrh r1, [r0, #0x32] ldrh r0, [r0, #0x2e] -arm_sub_080B1AB4: +arm_GetVvvAtWorldCoords: @ world pixel coordinates to room pixel coordinates ldr ip, _080B1C20 @ =gRoomControls ldrh r3, [ip, #6] sub r0, r0, r3 ldrh r3, [ip, #8] sub r1, r1, r3 -arm_sub_080B1AC8: +arm_GetVvvAtRoomCoords: @ room pixel coordinates to room tile coordinates lsl r0, r0, #0x16 lsr r0, r0, #0x1a lsl r1, r1, #0x16 lsr r1, r1, #0x1a -arm_sub_080B1AD8: +arm_GetVvvAtRoomTile: add r0, r0, r1, lsl #6 - mov r1, r2 -arm_sub_080B1AE0: - ldr r2, _080B1C24 @ =gUnk_08000278 + mov r1, r2 @ move layer to r1 +arm_GetVvvAtMetaTilePos: + ldr r2, _080B1C24 @ =gVvvPtrs ldr r2, [r2, r1, lsl #2] ldrb r0, [r2, r0] bx lr - arm_func_start arm_sub_080B1AF0 -arm_sub_080B1AF0: @ 0x080B1AF0 + arm_func_start arm_GetCollisionDataRelativeTo +arm_GetCollisionDataRelativeTo: @ 0x080B1AF0 ldrh r3, [r0, #0x2e] add r3, r3, r1 ldrh r1, [r0, #0x32] add r1, r1, r2 ldrb r2, [r0, #0x38] mov r0, r3 - b arm_sub_080B1B18 -arm_sub_080B1B0C: + b arm_GetCollisionDataAtWorldCoords +arm_GetCollisionDataAtEntity: ldrb r2, [r0, #0x38] ldrh r1, [r0, #0x32] ldrh r0, [r0, #0x2e] -arm_sub_080B1B18: +arm_GetCollisionDataAtWorldCoords: ldr ip, _080B1C28 @ =gRoomControls ldrh r3, [ip, #6] sub r0, r0, r3 ldrh r3, [ip, #8] sub r1, r1, r3 -arm_sub_080B1B2C: +arm_GetCollisionDataAtRoomCoords: lsl r0, r0, #0x16 lsr r0, r0, #0x1a lsl r1, r1, #0x16 lsr r1, r1, #0x1a -arm_sub_080B1B3C: +arm_GetCollisionDataAtRoomTile: add r0, r0, r1, lsl #6 mov r1, r2 -arm_GetCollisionData: +arm_GetCollisionDataAtMetaTilePos: ldr r2, _080B1C2C @ =gCollisionDataPtrs ldr r1, [r2, r1, lsl #2] ldrb r0, [r1, r0] @@ -243,7 +243,7 @@ sub_080B1BCC: @ 0x080B1BCC and r1, r1, #0x3f0 and r2, r2, #0x3f0 add r1, r1, r2, lsl #6 - ldr r2, _080B1C50 @ =gUnk_08000278 + ldr r2, _080B1C50 @ =gVvvPtrs ldrb r3, [r0, #0x38] ldr r2, [r2, r3, lsl #2] ldrb r0, [r2, r1, lsr #4] @@ -254,7 +254,7 @@ _080B1C14: .4byte gUnk_08000258 _080B1C18: .4byte gRoomControls _080B1C1C: .4byte gMapDataPtrs _080B1C20: .4byte gRoomControls -_080B1C24: .4byte gUnk_08000278 +_080B1C24: .4byte gVvvPtrs _080B1C28: .4byte gRoomControls _080B1C2C: .4byte gCollisionDataPtrs _080B1C30: .4byte gUnk_080B37A0 @@ -265,7 +265,7 @@ _080B1C40: .4byte gUnk_080B7A3E _080B1C44: .4byte gUnk_08000360 _080B1C48: .4byte gUnk_080B7A3E _080B1C4C: .4byte gRoomControls -_080B1C50: .4byte gUnk_08000278 +_080B1C50: .4byte gVvvPtrs arm_func_start UpdateCollision UpdateCollision: @ 0x080B1C54 diff --git a/asm/src/player.s b/asm/src/player.s index d0c894c5..962a5686 100644 --- a/asm/src/player.s +++ b/asm/src/player.s @@ -758,12 +758,12 @@ CheckNEastTile: @ 0x08008B02 push {r0, r1, lr} movs r1, #0 movs r2, #0 - bl GetRelativeCollisionTile + bl GetVvvRelativeToEntity // check if north east collision? ldr r1, =0x4000 tst r0, r1 bne _08008B1E - ldr r1, =gUnk_08007CAC + ldr r1, =gMapVvvToSurfaceType bl sub_08007DE0 movs r2, #1 cmp r3, #1 diff --git a/asm/src/script.s b/asm/src/script.s index 35ee4490..ef5ad1cc 100644 --- a/asm/src/script.s +++ b/asm/src/script.s @@ -106,7 +106,7 @@ _08016A64: sub_08016A6C: @ 0x08016A6C push {r4, r5, lr} adds r4, r0, #0 - bl GetTileUnderEntity + bl GetVvvAtEntity add r1, pc, #0x38 _08016A76: adds r1, #4 diff --git a/asm/src/veneer.s b/asm/src/veneer.s index b2953213..54eb79bb 100644 --- a/asm/src/veneer.s +++ b/asm/src/veneer.s @@ -57,43 +57,43 @@ CloneTile: @ 0x08000152 non_word_aligned_thumb_func_start SetTile SetTile: @ r0 = tile type, r1, = tile position, r2 = layer push {r4-r7, lr} - lsls r3, r2, #3 + lsls r3, r2, #3 @ 1: 8, 2: 16 ldr r4, _08000208 @ =gMapDataPtrs - ldr r5, [r4, r3] + ldr r5, [r4, r3] @ layer 1: gMapBottom.mapData, 2: gMapTop.mapData lsls r6, r1, #1 - ldrh r7, [r5, r6] - strh r0, [r5, r6] + ldrh r7, [r5, r6] @ r7 (oldMetaTile) = gMapBottom.mapData[metaTilePos] + strh r0, [r5, r6] @ gMapBottom.mapData[metaTilePos] = metaTile ldr r6, _0800020C @ =0x00004000 cmp r0, r6 - blo _0800019A + blo _0800019A @ jump if metaTile < 0x4000 push {r1, r2} - subs r4, r0, r6 + subs r4, r0, r6 @ r4 = metaTile - 0x4000 ldr r3, _08000210 @ =gUnk_080B7910 - ldrb r0, [r3, r4] - bl sub_080001D0 + ldrb r0, [r3, r4] @ r0 = gUnk_080B7910[metaTile - 0x4000] + bl SetVvvAtMetaTilePos ldr r3, _08000214 @ =gUnk_080B79A7 - ldrb r0, [r3, r4] - lsrs r2, r2, #2 + ldrb r0, [r3, r4] @ r0 = gUnk_080B79A7[metaTile - 0x4000] + lsrs r2, r2, #2 @ r2 = layer bl SetCollisionData pop {r0, r1} @ tilepos, layer push {r0, r1} - bl DeleteLoadedTileEntity - adds r0, r7, #0 + bl DeleteLoadedTileEntity @ DeleteLoadedTileEntity(metaTilePos, layer) + adds r0, r7, #0 @ r0 = oldMetaTile pop {r1, r2} - bl sub_0801AF48 - pop {r4, r5, r6, r7, pc} + bl sub_0801AF48 @ sub_0801AF48(oldMetaTile, metaTilePos, layer) + pop {r4, r5, r6, r7, pc} @ pop pc results in returning to the calling function _0800019A: - adds r3, #4 + adds r3, #4 @ r3 = layer * 8 + 4 ldr r4, [r4, r3] - lsls r0, r0, #1 - ldrh r4, [r4, r0] + lsls r0, r0, #1 @ r0 = metaTile * 2 + ldrh r4, [r4, r0] @ r4 (metaTileType) = gMapBottom.metatileTypes[metaTile] push {r1, r2} ldr r3, _08000218 @ =gUnk_080B37A0 - ldrb r0, [r3, r4] - bl sub_080001D0 + ldrb r0, [r3, r4] @ r0 = gUnk_080B37A0[metaTileType] + bl SetVvvAtMetaTilePos ldr r3, _0800021C @ =gUnk_080B3E80 - ldrb r0, [r3, r4] - lsrs r2, r2, #2 + ldrb r0, [r3, r4] @ r0 = gUnk_080B3E80[metaTileType] + lsrs r2, r2, #2 @ r2 = layer bl SetCollisionData pop {r0, r1} bl DeleteLoadedTileEntity @@ -104,12 +104,13 @@ _080001C4: .4byte gMapBottom+0x6004 _080001C8: .4byte gMapTop+0x6004 _080001CC: .4byte gMapBottom+0x6004 - thumb_func_start sub_080001D0 -sub_080001D0: @ 0x080001D0 +@ r0: @see gUnk_080B7910 r1: metaTilePos, r2: layer + thumb_func_start SetVvvAtMetaTilePos +SetVvvAtMetaTilePos: @ 0x080001D0 lsls r2, r2, #2 - ldr r3, _08000220 @ =gUnk_08000278 - ldr r3, [r3, r2] - strb r0, [r3, r1] + ldr r3, _08000220 @ =gVvvPtrs + ldr r3, [r3, r2] @ r3 = gMapBottom.vvv + strb r0, [r3, r1] @ gMapBottom.vvv[metaTilePos] = r0 bx lr non_word_aligned_thumb_func_start GetTileIndex @@ -135,7 +136,7 @@ _08000210: .4byte gUnk_080B7910 _08000214: .4byte gUnk_080B79A7 _08000218: .4byte gUnk_080B37A0 _0800021C: .4byte gUnk_080B3E80 -_08000220: .4byte gUnk_08000278 +_08000220: .4byte gVvvPtrs _08000224: .4byte gMapDataPtrs gMapDataPtrs:: @@ -162,7 +163,7 @@ gUnk_08000258:: @ mapDataClone and metatileTypes .4byte gMapTop+0x5004 .4byte gMapBottom+0x3004 @ layer 3 .4byte gMapBottom+0x5004 -gUnk_08000278:: @ unkData3 for layers +gVvvPtrs:: @ vvv for layers .4byte gMapBottom+0xb004 @ layer 0 .4byte gMapBottom+0xb004 @ layer 1 .4byte gMapTop+0xb004 @ layer 2 @@ -266,9 +267,9 @@ GetTileType: @ 0x080002B0 @ r0: Entity* @ r1: u32 @ r2: u32 - thumb_func_start GetRelativeCollisionTile -GetRelativeCollisionTile: @ 0x080002B4 - ldr r3, _08000320 @ =ram_GetRelativeCollisionTile + thumb_func_start GetVvvRelativeToEntity +GetVvvRelativeToEntity: @ 0x080002B4 + ldr r3, _08000320 @ =ram_GetVvvRelativeToEntity bx r3 @ call 0x080B1AA8 @@ -278,18 +279,18 @@ GetRelativeCollisionTile: @ 0x080002B4 @ return: @ ======== @ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs. - thumb_func_start GetTileUnderEntity -GetTileUnderEntity: @ 0x080002B8 - ldr r3, _08000324 @ =ram_GetTileUnderEntity + thumb_func_start GetVvvAtEntity +GetVvvAtEntity: @ 0x080002B8 + ldr r3, _08000324 @ =ram_GetVvvAtEntity bx r3 @ call 0x080B1AB4 @ r0: s32 (xPos) @ r1: s32 (yPos) @ r2: u32 (layer) - thumb_func_start sub_080B1AB4 -sub_080B1AB4: @ 0x080002BC - ldr r3, _08000328 @ =ram_sub_080B1AB4 + thumb_func_start GetVvvAtWorldCoords +GetVvvAtWorldCoords: @ 0x080002BC + ldr r3, _08000328 @ =ram_GetVvvAtWorldCoords bx r3 @ call 0x080B1AC8 @@ -297,9 +298,9 @@ sub_080B1AB4: @ 0x080002BC @ r1: u32 @ r2: u32 @ return: ??? - thumb_func_start sub_080B1AC8 -sub_080B1AC8: @ 0x080002C0 - ldr r3, _0800032C @ =ram_sub_080B1AC8 + thumb_func_start GetVvvAtRoomCoords +GetVvvAtRoomCoords: @ 0x080002C0 + ldr r3, _0800032C @ =ram_GetVvvAtRoomCoords bx r3 @ call 0x080B1AD8 @@ -308,66 +309,66 @@ sub_080B1AC8: @ 0x080002C0 @ r2: s32 (yOffset) @ ======== @ Unused? Doesn't seem to be called by anything in Ghidra. - thumb_func_start sub_080B1AD8 -sub_080B1AD8: @ 0x080002C4 - ldr r3, _08000330 @ =ram_sub_080B1AD8 + thumb_func_start GetVvvAtRoomTile +GetVvvAtRoomTile: @ 0x080002C4 + ldr r3, _08000330 @ =ram_GetVvvAtRoomTile bx r3 @ call 0x080B1AE0 @ r0: u32 (tileIndex) @ r1: u32 (layer) - thumb_func_start sub_080B1AE0 -sub_080B1AE0: @ 0x080002C8 - ldr r3, _08000334 @ =ram_sub_080B1AE0 + thumb_func_start GetVvvAtMetaTilePos +GetVvvAtMetaTilePos: @ 0x080002C8 + ldr r3, _08000334 @ =ram_GetVvvAtMetaTilePos bx r3 @ call 0x080B1AF0 @ r0: Entity* @ r1: ??? @ r2: ??? - thumb_func_start sub_080B1AF0 -sub_080B1AF0: @ 0x080002CC - ldr r3, _08000338 @ =ram_sub_080B1AF0 + thumb_func_start GetCollisionDataRelativeTo +GetCollisionDataRelativeTo: @ 0x080002CC + ldr r3, _08000338 @ =ram_GetCollisionDataRelativeTo bx r3 @ call 0x080B1B0C @ r0: Entity* - thumb_func_start sub_080B1B0C -sub_080B1B0C: @ 0x080002D0 - ldr r3, _0800033C @ =ram_sub_080B1B0C + thumb_func_start GetCollisionDataAtEntity +GetCollisionDataAtEntity: @ 0x080002D0 + ldr r3, _0800033C @ =ram_GetCollisionDataAtEntity bx r3 @ call 0x080B1B18 @ r0: s32 (xPos) @ r1: s32 (yPos) @ r2: u32 (layer) - thumb_func_start sub_080B1B18 -sub_080B1B18: @ 0x080002D4 - ldr r3, _08000340 @ =ram_sub_080B1B18 + thumb_func_start GetCollisionDataAtWorldCoords +GetCollisionDataAtWorldCoords: @ 0x080002D4 + ldr r3, _08000340 @ =ram_GetCollisionDataAtWorldCoords bx r3 @ call 0x080B1B2C @ ======== @ Unused? Doesn't seem to be called by anything in Ghidra. - thumb_func_start sub_080B1B2C -sub_080B1B2C: @ 0x080002D8 - ldr r3, _08000344 @ =ram_sub_080B1B2C + thumb_func_start GetCollisionDataAtRoomCoords +GetCollisionDataAtRoomCoords: @ 0x080002D8 + ldr r3, _08000344 @ =ram_GetCollisionDataAtRoomCoords bx r3 @ call 0x080B1B3C @ ======== @ Unused? Doesn't seem to be called by anything in Ghidra. - thumb_func_start sub_080B1B3C -sub_080B1B3C: @ 0x080002DC - ldr r3, _08000348 @ =ram_sub_080B1B3C + thumb_func_start GetCollisionDataAtRoomTile +GetCollisionDataAtRoomTile: @ 0x080002DC + ldr r3, _08000348 @ =ram_GetCollisionDataAtRoomTile bx r3 @ call 0x080B1B44 @ ======== @ Unused? Doesn't seem to be called by anything in Ghidra. - thumb_func_start GetCollisionData -GetCollisionData: @ 0x080002E0 - ldr r3, _0800034C @ =ram_GetCollisionData + thumb_func_start GetCollisionDataAtMetaTilePos +GetCollisionDataAtMetaTilePos: @ 0x080002E0 + ldr r3, _0800034C @ =ram_GetCollisionDataAtMetaTilePos bx r3 @ call 0x080B1B54 @@ -413,18 +414,18 @@ _08000310: .4byte ram_GetTileTypeByPos _08000314: .4byte ram_sub_080B1A48 _08000318: .4byte ram_sub_080B1A58 _0800031C: .4byte ram_GetTileType -_08000320: .4byte ram_GetRelativeCollisionTile -_08000324: .4byte ram_GetTileUnderEntity -_08000328: .4byte ram_sub_080B1AB4 -_0800032C: .4byte ram_sub_080B1AC8 -_08000330: .4byte ram_sub_080B1AD8 -_08000334: .4byte ram_sub_080B1AE0 -_08000338: .4byte ram_sub_080B1AF0 -_0800033C: .4byte ram_sub_080B1B0C -_08000340: .4byte ram_sub_080B1B18 -_08000344: .4byte ram_sub_080B1B2C -_08000348: .4byte ram_sub_080B1B3C -_0800034C: .4byte ram_GetCollisionData +_08000320: .4byte ram_GetVvvRelativeToEntity +_08000324: .4byte ram_GetVvvAtEntity +_08000328: .4byte ram_GetVvvAtWorldCoords +_0800032C: .4byte ram_GetVvvAtRoomCoords +_08000330: .4byte ram_GetVvvAtRoomTile +_08000334: .4byte ram_GetVvvAtMetaTilePos +_08000338: .4byte ram_GetCollisionDataRelativeTo +_0800033C: .4byte ram_GetCollisionDataAtEntity +_08000340: .4byte ram_GetCollisionDataAtWorldCoords +_08000344: .4byte ram_GetCollisionDataAtRoomCoords +_08000348: .4byte ram_GetCollisionDataAtRoomTile +_0800034C: .4byte ram_GetCollisionDataAtMetaTilePos _08000350: .4byte ram_sub_080B1B54 _08000354: .4byte ram_sub_080B1B68 _08000358: .4byte ram_sub_080B1B84 diff --git a/assets/assets.json b/assets/assets.json index 26cacd48..a9a152e7 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -975,16 +975,6 @@ "start": 15940, "size": 384 }, - { - "path": "code_080043E8/gUnk_080046A4.bin", - "start": 18084, - "size": 338 - }, - { - "path": "code_080043E8/gUnk_080047F6.bin", - "start": 18422, - "size": 480 - }, { "path": "code_080043E8/gUnk_080049D6.bin", "start": 18902, @@ -3158,59 +3148,6 @@ "size": 59, "type": "animation" }, - { - "path": "code_080043E8/gUnk_08007CAC.bin", - "start": 31916, - "size": 91 - }, - { - "path": "code_080043E8/gUnk_08007CAC_1_DEMO_JP.bin", - "variants": [ - "DEMO_JP" - ], - "starts": { - "DEMO_JP": 32079 - }, - "size": 207 - }, - { - "path": "code_080043E8/gUnk_08007CAC_2_DEMO_USA.bin", - "variants": [ - "DEMO_USA" - ], - "starts": { - "DEMO_USA": 32007 - }, - "size": 207 - }, - { - "path": "code_080043E8/gUnk_08007CAC_3_JP.bin", - "variants": [ - "JP" - ], - "starts": { - "JP": 32007 - }, - "size": 207 - }, - { - "path": "code_080043E8/gUnk_08007CAC_4_EU.bin", - "variants": [ - "EU" - ], - "starts": { - "EU": 32159 - }, - "size": 207 - }, - { - "path": "code_080043E8/gUnk_08007CAC_5_USA.bin", - "variants": [ - "USA" - ], - "start": 32007, - "size": 207 - }, { "path": "data_08007DF4/gUnk_08007DF4.bin", "start": 32244, @@ -3559,21 +3496,6 @@ "start": 738498, "size": 14 }, - { - "path": "data_080B7910/gUnk_080B7910.bin", - "start": 751888, - "size": 151 - }, - { - "path": "data_080B7910/gUnk_080B79A7.bin", - "start": 752039, - "size": 151 - }, - { - "path": "data_080B7910/gUnk_080B7A3E.bin", - "start": 752190, - "size": 302 - }, { "path": "data_080B7B74/gCollisionMtx.bin", "start": 752500, @@ -20724,26 +20646,6 @@ "size": 4, "type": "animation" }, - { - "path": "minecart/gUnk_081223E8.bin", - "start": 1188840, - "size": 26 - }, - { - "path": "minecart/gUnk_08122402.bin", - "start": 1188866, - "size": 26 - }, - { - "path": "minecart/gUnk_0812241C.bin", - "start": 1188892, - "size": 26 - }, - { - "path": "minecart/gUnk_08122436.bin", - "start": 1188918, - "size": 26 - }, { "path": "animations/gSpriteAnimations_Minecart_0.bin", "start": 1188944, diff --git a/data/animations/object/minecart.s b/data/animations/object/minecart.s index 21b6acbb..c05e1d01 100644 --- a/data/animations/object/minecart.s +++ b/data/animations/object/minecart.s @@ -4,23 +4,6 @@ .section .rodata .align 2 -gUnk_081223D8:: @ 081223D8 - .4byte gUnk_081223E8 - .4byte gUnk_08122402 - .4byte gUnk_0812241C - .4byte gUnk_08122436 - -gUnk_081223E8:: @ 081223E8 - .incbin "minecart/gUnk_081223E8.bin" - -gUnk_08122402:: @ 08122402 - .incbin "minecart/gUnk_08122402.bin" - -gUnk_0812241C:: @ 0812241C - .incbin "minecart/gUnk_0812241C.bin" - -gUnk_08122436:: @ 08122436 - .incbin "minecart/gUnk_08122436.bin" gSpriteAnimations_Minecart_0:: @ 08122450 .include "animations/gSpriteAnimations_Minecart_0.s" diff --git a/data/const/playerItem/playerItemCellOverwriteSet.s b/data/const/playerItem/playerItemCellOverwriteSet.s deleted file mode 100644 index 97280cad..00000000 --- a/data/const/playerItem/playerItemCellOverwriteSet.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - @.align 2 - -@ before: playerItemBottle -@ after: playerItemCellOverwriteSet - -@ scroll.c, intr.s, veener.s -gUnk_080B7910:: @ 080B7910 - .incbin "data_080B7910/gUnk_080B7910.bin" - -@ veener.s, playerUtils.c -gUnk_080B79A7:: @ 080B79A7 - .incbin "data_080B7910/gUnk_080B79A7.bin" - -@ intr.s -gUnk_080B7A3E:: @ 080B7A3E - .incbin "data_080B7910/gUnk_080B7A3E.bin" - diff --git a/data/data_080046A4.s b/data/data_080046A4.s new file mode 100644 index 00000000..bca2f8f1 --- /dev/null +++ b/data/data_080046A4.s @@ -0,0 +1,41 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata +@ .align 2 + + +@ TODO PlayerMacros + +gUnk_080049D6:: @ 080049D6 + .incbin "code_080043E8/gUnk_080049D6.bin" + +gUnk_080049F6:: @ 080049F6 + .incbin "code_080043E8/gUnk_080049F6.bin" + +gUnk_080049FE:: @ gUnk_080049FE + .incbin "code_080043E8/gUnk_080049FE.bin" + +gUnk_08004A0C:: @ 08004A0C + .incbin "code_080043E8/gUnk_08004A0C.bin" + +gUnk_08004A16:: @ 08004A16 + .incbin "code_080043E8/gUnk_08004A16.bin" + +gUnk_08004A24:: @ 08004A24 + .incbin "code_080043E8/gUnk_08004A24.bin" + +gUnk_08004A32:: @ 08004A32 + .incbin "code_080043E8/gUnk_08004A32.bin" + +gUnk_08004A48:: @ 08004A48 + .incbin "code_080043E8/gUnk_08004A48.bin" + +gUnk_08004A72:: @ 08004A72 + .incbin "code_080043E8/gUnk_08004A72.bin" + +gUnk_08004A8C:: @ 08004A8C + .incbin "code_080043E8/gUnk_08004A8C.bin" + +gUnk_08004AA6:: @ 08004AA6 + .incbin "code_080043E8/gUnk_08004AA6.bin" diff --git a/include/asm.h b/include/asm.h index b9ffccbf..bec879a5 100644 --- a/include/asm.h +++ b/include/asm.h @@ -9,7 +9,9 @@ extern void CloneTile(u32, u32, u32); extern u32 GetTileTypeByEntity(struct Entity_*); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); extern u32 GetTileType(u32 position, u32 layer); -extern void SetTile(u32 index, u32 position, u32 layer); + +extern void SetTile(u32 metaTile, u32 metaTilePos, u32 layer); + extern void UpdateScrollVram(void); extern u32 sub_080B1BA4(u32, u32, u32); extern void LoadResourceAsync(const void* src, u32 dest, u32 size); @@ -33,43 +35,61 @@ extern u32 sub_080086B4(u32, u32, const u8*); extern u32 ResolveCollisionLayer(struct Entity_*); extern void sub_0800417E(struct Entity_*, u32); extern u32 sub_0800442E(struct Entity_*); -extern u32 sub_08007DD6(u32, const u16*); extern void SoundReqClipped(struct Entity_*, u32); extern u32 sub_0800132C(struct Entity_*, struct Entity_*); +extern u32 sub_080B1A48(u32, u32, u32); +extern u32 sub_0800445C(struct Entity_*); +extern bool32 sub_080B1B54(u32); +extern u32 CheckRectOnScreen(s32, s32, u32, u32); + +extern u32 GetVvvRelativeToEntity(struct Entity_* entity, s32 xOffset, s32 yOffset); +extern u32 GetVvvAtEntity(struct Entity_* entity); +extern u32 GetVvvAtWorldCoords(u32 worldX, u32 worldY, u32 layer); +extern u32 GetVvvAtRoomCoords(u32 roomX, u32 roomY, u32 layer); +extern u32 GetVvvAtRoomTile(u32 roomTileX, u32 roomTileY, u32 layer); +extern u32 GetVvvAtMetaTilePos(u16 metaTilePos, u8 layer); + +/** + * Sets vvv for a metaTilePos. + */ +extern void SetVvvAtMetaTilePos(u32 vvv, u32 metaTilePos, u32 layer); + +// Get CollisionData for entity (relative to entity?) +extern u32 GetCollisionDataRelativeTo(struct Entity_* entity, s32 xOffset, s32 yOffset); + +extern u32 GetCollisionDataAtEntity(struct Entity_* entity); +/** + * Returns the collision data for one metatile. (x, y in pixels relative to the world) + */ +extern u32 GetCollisionDataAtWorldCoords(u32 worldX, u32 worldY, u32 layer); +/** + * Returns the collision data for one metatile. (x, y in pixels relative to the room) + */ +extern u32 GetCollisionDataAtRoomCoords(u32 roomX, u32 roomY, u32 layer); +/** + * Returns the collision data for one metatile. (x, y in metatiles relative to the room) + */ +extern u32 GetCollisionDataAtRoomTile(u32 roomTileX, u32 roomTileY, u32 layer); +/** + * Returns the collision data for one metatile. + */ +extern u32 GetCollisionDataAtMetaTilePos(u32 metaTilePos, u32 layer); + /** * Sets the collision data for one metatile. */ extern void SetCollisionData(u32 collisionData, u32 metaTilePos, u32 layer); -/** - * Returns the collision data for one metatile. - */ -extern u32 GetCollisionData(u32 metaTilePos, u32 layer); -/** - * Returns the collision data for one metatile. (x, y in metatiles relative to the room) - */ -extern u32 sub_080B1B3C(u32 x, u32 y, u32 layer); -/** - * Returns the collision data for one metatile. (x, y in pixels relative to the room) - */ -extern u32 sub_080B1B2C(u32 x, u32 y, u32 layer); -/** - * Returns the collision data for one metatile. (x, y in pixels relative to the world) - */ -extern u32 sub_080B1B18(u32 x, u32 y, u32 layer); -extern u32 sub_080B1B0C(struct Entity_* entity); +typedef struct { + u16 key; + u16 value; +} KeyValuePair ALIGNED(2); -// Get CollisionData for entity (relative to entity?) -extern u32 sub_080B1AF0(struct Entity_*, s32 xOffset, s32 yOffset); - -extern u32 sub_080B1A48(u32, u32, u32); -extern u32 sub_080B1AE0(u16, u8); -extern u32 GetTileUnderEntity(struct Entity_*); -extern u32 sub_0800445C(struct Entity_*); -extern u32 sub_080B1AF0(struct Entity_*, s32, s32); -extern u32 GetRelativeCollisionTile(struct Entity_*, u32, u32); -extern bool32 sub_080B1B54(u32); -extern u32 CheckRectOnScreen(s32, s32, u32, u32); +/** + * Searches for a KeyValuePair with the key in the keyValuePairList and returns its value. + * Returns 0 if the key is not found. + */ +extern u32 FindValueForKey(u32 key, const KeyValuePair* keyValuePairList); #endif // ASM_H diff --git a/include/collision.h b/include/collision.h index af8ba984..be338ff7 100644 --- a/include/collision.h +++ b/include/collision.h @@ -39,6 +39,6 @@ void CalculateEntityTileCollisions(Entity*, u32, u32); bool32 ProcessMovementInternal(Entity*, s32, s32, u32); u32 sub_080176E4(Entity*); -extern const u8 gUnk_080B37A0[]; // unkData3 for tileType? +extern const u8 gUnk_080B37A0[]; // vvv for tileType? #endif // COLLISION_H diff --git a/include/functions.h b/include/functions.h index 0356cccd..e65297b7 100644 --- a/include/functions.h +++ b/include/functions.h @@ -49,7 +49,6 @@ extern void SetBGDefaults(void); // Unidentified extern u32 sub_080B1A0C(Entity*, s32, s32); -extern u32 sub_080B1AE0(u16, u8); extern s32 sub_080012DC(Entity*); extern void sub_08001318(Entity*); extern void sub_080027EA(Entity*, u32, u32); diff --git a/include/map.h b/include/map.h index adb447b8..fcb8f589 100644 --- a/include/map.h +++ b/include/map.h @@ -19,12 +19,19 @@ typedef struct { /*0x7004*/ u16 metatiles[0x800 * 4]; /**< Mapping from a metatile to the four tile_attrs it consists of.*/ // gMetatilesTop, gMetatilesBottom - /*0xb004*/ u8 unkData3[0x40*0x40]; /**< Some sort of special behavior for tiles? Falling into holes or jumping off walls does not work when this is all zero.*/ // gUnk_02016654, gUnk_02030EB4 + /* + Temporarily call this vvv + VVV + vvv + Vvv + + */ + /*0xb004*/ u8 vvv[0x40*0x40]; /**< Some sort of special behavior for tiles? Falling into holes or jumping off walls does not work when this is all zero.*/ // gUnk_02016654, gUnk_02030EB4 // TODO check with debugger what accesses this // 0x637 // 0x2030eb4 + 0x637 // 0x20314eb - // e.g. sub_080B1AE0 accesses this + // e.g. GetVvvAtMetaTilePos accesses this // TODO check whether this also affects sound played when walking? /* 0x10: water diff --git a/include/player.h b/include/player.h index 4e411c62..1f338872 100644 --- a/include/player.h +++ b/include/player.h @@ -158,8 +158,8 @@ enum PlayerItemId { typedef enum { SURFACE_NORMAL, SURFACE_PIT, - SURFACE_2, - SURFACE_3, + SURFACE_2, // nulled + SURFACE_3, // nulled SURFACE_SLOPE_GNDGND_V, SURFACE_SLOPE_GNDGND_H, SURFACE_6, @@ -169,10 +169,10 @@ typedef enum { SURFACE_A, SURFACE_B, SURFACE_SLOPE_GNDWATER, - SURFACE_D, - SURFACE_E, - SURFACE_F, - SURFACE_10, + SURFACE_D, // SurfaceAction_ConveyerNorth + SURFACE_E, // SurfaceAction_ConveyerSouth + SURFACE_F, // SurfaceAction_ConveyerWest + SURFACE_10, // SurfaceAction_ConveyerEast SURFACE_SWAMP, SURFACE_DOOR, SURFACE_DOOR_13, @@ -189,18 +189,19 @@ typedef enum { SURFACE_LADDER, SURFACE_1F, // nulled SURFACE_20, - SURFACE_21, + SURFACE_21, // reuses SurfaceAction_16 SURFACE_22, - SURFACE_EDGE, - SURFACE_24, + SURFACE_EDGE, // reuses SurfaceAction_6 + SURFACE_24, // reuses SurfaceAction_6 SURFACE_DUST, SURFACE_26, SURFACE_HOLE, - SURFACE_LIGHT_GRADE, - SURFACE_29, + SURFACE_LIGHT_GRADE, // reuses SurfaceAction_SlopeGndGndVertical + SURFACE_29, // reuses SurfaceAction_SlopeGndGndHorizontal SURFACE_AUTO_LADDER, SURFACE_CLIMB_WALL, SURFACE_2C, + SURFACE_2D // reuses SurfaceAction_Dust } SurfaceType; typedef enum { @@ -292,8 +293,8 @@ typedef struct { /*0x0f*/ u8 hurtBlinkSpeed; /*0x10*/ u8 field_0x10; /*0x11*/ u8 surfacePositionSameTimer; - /*0x12*/ u8 floor_type; - /*0x13*/ u8 floor_type_last; + /*0x12*/ u8 floor_type; /**< @see SurfaceType */ + /*0x13*/ u8 floor_type_last; /**< @see SurfaceType */ /*0x14*/ u8 field_0x14; /*0x15*/ u8 field_0x15; /*0x16*/ u16 startPosX; @@ -483,7 +484,7 @@ u32 sub_08079B24(void); void sub_08079708(Entity*); void sub_08079744(Entity*); void PlayerUpdateSwimming(Entity*); -u32 GetCollisionTileInFront(Entity*); +u32 GetVvvInFront(Entity* player); u32 sub_080797C4(void); void CheckPlayerVelocity(void); void sub_0807B068(Entity*); diff --git a/include/room.h b/include/room.h index bb2c03d0..18c3328f 100644 --- a/include/room.h +++ b/include/room.h @@ -34,7 +34,8 @@ typedef struct { /*0x0A*/ s16 scroll_x; /*0x0C*/ s16 scroll_y; /*0x0E*/ u8 scrollSpeed; /**< Pixels per frame that the camera can scroll. */ - /*0x0F*/ u8 scroll_flags; // 0x2 = ??, 0x4 = camera scrolling + /*0x0F*/ u8 scroll_flags; // 0x2 = ?? (apply collision value on bottom map no matter the layer SetTileType is called + // for), 0x4 = camera scrolling /*0x10*/ u8 scroll_direction; /*0x11*/ s8 oam_offset_x; /*0x12*/ s8 oam_offset_y; @@ -73,7 +74,7 @@ typedef struct { /* 0x0a */ u8 unk2; /* 0x0b */ u8 filler2; /* 0x0c */ s16 lightLevel; - /* 0x0e */ u16 unk_0e; + /* 0x0e */ u16 unk_0e; // Number of previous values for special tiles stored in gUnk_0200B240 /* 0x10 */ u8 unk_10[4]; /* 0x14 */ u32 flags; /* 0x18 */ u32 unk3; diff --git a/include/structures.h b/include/structures.h index f78ff839..42c20353 100644 --- a/include/structures.h +++ b/include/structures.h @@ -391,4 +391,5 @@ typedef struct { u8 paletteGroup; u8 gfxGroup; } PACKED StaffrollGfxEntry; + #endif // STRUCTURES_H diff --git a/linker.ld b/linker.ld index 38eb4c2a..2c6938b1 100644 --- a/linker.ld +++ b/linker.ld @@ -165,18 +165,18 @@ SECTIONS { . = 0x000057BC; ram_sub_080B1A48 = .; . = 0x000057CC; ram_sub_080B1A58 = .; . = 0x000057D4; ram_GetTileType = .; - . = 0x00005800; ram_GetRelativeCollisionTile = .; - . = 0x0000581C; ram_GetTileUnderEntity = .; - . = 0x00005828; ram_sub_080B1AB4 = .; - . = 0x0000583C; ram_sub_080B1AC8 = .; - . = 0x0000584C; ram_sub_080B1AD8 = .; - . = 0x00005854; ram_sub_080B1AE0 = .; - . = 0x00005864; ram_sub_080B1AF0 = .; - . = 0x00005880; ram_sub_080B1B0C = .; - . = 0x0000588C; ram_sub_080B1B18 = .; - . = 0x000058A0; ram_sub_080B1B2C = .; - . = 0x000058B0; ram_sub_080B1B3C = .; - . = 0x000058B8; ram_GetCollisionData = .; + . = 0x00005800; ram_GetVvvRelativeToEntity = .; + . = 0x0000581C; ram_GetVvvAtEntity = .; + . = 0x00005828; ram_GetVvvAtWorldCoords = .; + . = 0x0000583C; ram_GetVvvAtRoomCoords = .; + . = 0x0000584C; ram_GetVvvAtRoomTile = .; + . = 0x00005854; ram_GetVvvAtMetaTilePos = .; + . = 0x00005864; ram_GetCollisionDataRelativeTo = .; + . = 0x00005880; ram_GetCollisionDataAtEntity = .; + . = 0x0000588C; ram_GetCollisionDataAtWorldCoords = .; + . = 0x000058A0; ram_GetCollisionDataAtRoomCoords = .; + . = 0x000058B0; ram_GetCollisionDataAtRoomTile = .; + . = 0x000058B8; ram_GetCollisionDataAtMetaTilePos = .; . = 0x000058C8; ram_sub_080B1B54 = .; . = 0x000058DC; ram_sub_080B1B68 = .; . = 0x000058F8; ram_sub_080B1B84 = .; @@ -242,7 +242,10 @@ SECTIONS { data/gfx/sprite_ptrs.o(.rodata); asm/src/code_08003FC4.o(.text); asm/src/code_080043E8.o(.text); + src/data/data_080046A4.o(.rodata); + data/data_080046A4.o(.rodata); data/gfx/link_animations.o(.rodata); + src/data/mapVvvToSurfaceType.o(.rodata); asm/src/code_08007CAC.o(.text); data/data_08007DF4.o(.rodata); asm/src/player.o(.text); @@ -887,7 +890,6 @@ SECTIONS { src/playerItem/playerItemBoomerang.o(.rodata); src/playerItem/playerItemDashSword.o(.rodata); src/playerItem/playerItemBottle.o(.rodata); - data/const/playerItem/playerItemCellOverwriteSet.o(.rodata); src/playerItem/playerItemCellOverwriteSet.o(.rodata); data/const/collisionMatrix.o(.rodata); data/const/ui.o(.rodata); diff --git a/src/beanstalkSubtask.c b/src/beanstalkSubtask.c index ee774646..f95786e1 100644 --- a/src/beanstalkSubtask.c +++ b/src/beanstalkSubtask.c @@ -74,7 +74,6 @@ u32 sub_0801A570(Entity*, u32); bool32 sub_0801A458(LayerStruct* layer, u32 position, u32 collisionType); bool32 sub_0801A370(LayerStruct* layer, u32 position); u32 sub_0801A8D0(Entity* this, u32 param_2); -extern void sub_080001D0(u32, u32, u32); void sub_0801967C(void) { gUnk_080B4458[gMenu.overlayType](); @@ -202,8 +201,8 @@ u32 UpdatePlayerCollision(void) { index = sub_0807BDB8(&gPlayerEntity, direction >> 2); if (index != 0xff && (gRoomControls.scroll_flags & 4) == 0) { ptr1 = &gUnk_080B4490[index * 2]; - if (GetCollisionData(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]), - gPlayerEntity.collisionLayer) == 0xff) { + if (GetCollisionDataAtMetaTilePos(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]), + gPlayerEntity.collisionLayer) == 0xff) { if ((((gPlayerState.flags & (PL_FLAGS10000 | PL_FLAGS2)) != 0) || ((gPlayerState.sword_state & 0x10) != 0)) || ((sub_080806BC(gPlayerEntity.x.HALF.HI - gRoomControls.origin_x, @@ -260,7 +259,7 @@ u32 UpdatePlayerCollision(void) { if ((gPlayerEntity.direction & 0x80) != 0) { return 0; } - if (GetCollisionData(position, gPlayerEntity.collisionLayer) != 0xf) { + if (GetCollisionDataAtMetaTilePos(position, gPlayerEntity.collisionLayer) != 0xf) { return 0; } if (sub_08079778() == 0) { @@ -581,7 +580,7 @@ u32 UpdatePlayerCollision(void) { return 0; } SetTile(0x4074, position, gPlayerEntity.collisionLayer); - sub_080001D0(0xd, position, gPlayerEntity.collisionLayer); + SetVvvAtMetaTilePos(0xd, position, gPlayerEntity.collisionLayer); return 1; default: return 0; diff --git a/src/collision.c b/src/collision.c index 402c9bfa..b514159b 100644 --- a/src/collision.c +++ b/src/collision.c @@ -788,7 +788,7 @@ CollisionResult CollisionDefault(Entity* org, Entity* tgt, u32 direction, ColSet return RESULT_COLLISION; } -// unkData3 for tileType? +// vvv for tileType? #ifdef EU const u8 gUnk_080B37A0[] = { diff --git a/src/data/data_080046A4.c b/src/data/data_080046A4.c new file mode 100644 index 00000000..0f0d8a65 --- /dev/null +++ b/src/data/data_080046A4.c @@ -0,0 +1,34 @@ +#include "asm.h" + +const KeyValuePair gUnk_080046A4[] = { + { 63, 1 }, { 80, 2 }, { 69, 8 }, { 70, 9 }, { 71, 10 }, { 72, 11 }, { 73, 12 }, { 74, 13 }, + { 75, 14 }, { 76, 15 }, { 77, 16 }, { 65, 1 }, { 82, 2 }, { 68, 17 }, { 79, 18 }, { 372, 19 }, + { 117, 23 }, { 67, 3 }, { 66, 4 }, { 64, 5 }, { 81, 6 }, { 85, 20 }, { 92, 21 }, { 87, 20 }, + { 94, 21 }, { 86, 28 }, { 93, 29 }, { 88, 30 }, { 89, 31 }, { 90, 32 }, { 91, 22 }, { 9, 36 }, + { 12, 37 }, { 13, 36 }, { 15, 38 }, { 14, 39 }, { 16, 36 }, { 17, 36 }, { 18, 36 }, { 20, 37 }, + { 21, 36 }, { 23, 38 }, { 22, 39 }, { 24, 36 }, { 25, 36 }, { 10, 40 }, { 39, 40 }, { 28, 36 }, + { 42, 36 }, { 29, 36 }, { 43, 36 }, { 97, 44 }, { 101, 45 }, { 353, 47 }, { 355, 48 }, { 16384, 25 }, + { 16480, 26 }, { 374, 49 }, { 843, 33 }, { 844, 34 }, { 375, 50 }, { 871, 51 }, { 872, 52 }, { 16490, 24 }, + { 105, 41 }, { 106, 42 }, { 111, 43 }, { 109, 53 }, { 110, 54 }, { 78, 7 }, { 389, 36 }, { 390, 36 }, + { 391, 36 }, { 392, 36 }, { 393, 36 }, { 394, 36 }, { 398, 36 }, { 399, 36 }, { 403, 36 }, { 404, 36 }, + { 405, 36 }, { 406, 36 }, { 407, 36 }, { 408, 36 }, +}; +const u16 gUnk_080046A4End = 0; + +const u16 gUnk_080047F6[] = { + 0, 255, 65280, 0, 65247, 783, 0, 28, 65247, 783, 0, 42, 65247, 783, 0, 121, + 65247, 783, 0, 119, 65247, 783, 0, 53, 65247, 783, 0, 53, 64735, 783, 0, 39, + 65247, 783, 0, 418, 65247, 783, 0, 419, 65247, 783, 0, 420, 65247, 783, 0, 421, + 65247, 783, 0, 422, 65247, 783, 0, 423, 65247, 783, 0, 424, 65247, 783, 0, 425, + 65247, 783, 0, 426, 65247, 783, 0, 360, 65247, 783, 0, 40, 39563, 15119, 65280, 31, + 59074, 1039, 256, 29, 59074, 1039, 256, 43, 59074, 1039, 256, 789, 34816, 298, 65280, 118, + 34816, 298, 65280, 16491, 33666, 255, 65280, 16389, 33666, 255, 65280, 16499, 33439, 4879, 65280, 53, + 59074, 1039, 256, 53, 59074, 1039, 256, 53, 59074, 1039, 256, 119, 59074, 1039, 256, 121, + 59074, 1039, 256, 360, 49323, 5647, 1024, 38, 49323, 5647, 1024, 52, 32768, 255, 65280, 804, + 40960, 255, 65280, 26, 40960, 255, 65280, 53, 40960, 255, 65280, 119, 40960, 255, 65280, 121, + 40960, 255, 65280, 27, 49192, 801, 768, 38, 49192, 801, 768, 789, 49192, 801, 768, 29, + 49192, 33, 768, 38, 49192, 33, 768, 121, 32832, 783, 0, 113, 43019, 5903, 65280, 29, + 43019, 5903, 65280, 53, 33859, 11535, 512, 30, 32776, 1039, 65280, 29, 32776, 1039, 65280, 38, + 32776, 1039, 65280, 52, 32779, 21263, 65280, 19, 32779, 21263, 65280, 789, 0, 30, 2, 18, + 64, 8, 0, 1, 128, 10, 0, 1, 128, 8, 384, 10, 128, 30, 1, 49152 +}; diff --git a/src/data/mapVvvToSurfaceType.c b/src/data/mapVvvToSurfaceType.c new file mode 100644 index 00000000..50abb84e --- /dev/null +++ b/src/data/mapVvvToSurfaceType.c @@ -0,0 +1,74 @@ +#include "asm.h" +#include "player.h" + +const KeyValuePair gMapVvvToSurfaceType[] = { + { 13, SURFACE_PIT }, + { 38, SURFACE_SLOPE_GNDGND_V }, + { 39, SURFACE_SLOPE_GNDGND_H }, + { 82, SURFACE_26 }, + { 99, SURFACE_24 }, + { 116, SURFACE_EDGE }, + { 8, SURFACE_7 }, + { 31, SURFACE_MINISH_DOOR_FRONT }, + { 32, SURFACE_MINISH_DOOR_BACK }, + { 33, SURFACE_A }, + { 34, SURFACE_B }, + { 24, SURFACE_16 }, + { 18, SURFACE_ICE }, + { 15, SURFACE_SHALLOW_WATER }, + { 14, SURFACE_SLOPE_GNDWATER }, + { 16, SURFACE_WATER }, + { 27, SURFACE_BUTTON }, + { 29, SURFACE_BUTTON }, + { 97, SURFACE_1B }, + { 90, SURFACE_1C }, + { 17, SURFACE_14 }, + { 98, SURFACE_21 }, + { 101, SURFACE_6 }, + { 102, SURFACE_6 }, + { 103, SURFACE_6 }, + { 104, SURFACE_6 }, + { 105, SURFACE_6 }, + { 106, SURFACE_6 }, + { 108, SURFACE_6 }, + { 109, SURFACE_6 }, + { 110, SURFACE_6 }, + { 111, SURFACE_6 }, + { 107, SURFACE_6 }, + { 48, SURFACE_22 }, + { 49, SURFACE_22 }, + { 50, SURFACE_22 }, + { 51, SURFACE_22 }, + { 22, SURFACE_DUST }, + { 25, SURFACE_HOLE }, + { 240, SURFACE_HOLE }, + { 87, SURFACE_CLONE_TILE }, + { 83, SURFACE_LADDER }, + { 241, SURFACE_LADDER }, + { 63, SURFACE_AUTO_LADDER }, + { 80, SURFACE_CLIMB_WALL }, + { 81, SURFACE_2C }, + { 52, SURFACE_LIGHT_GRADE }, + { 53, SURFACE_29 }, + { 42, SURFACE_E }, + { 43, SURFACE_D }, + { 44, SURFACE_10 }, + { 45, SURFACE_F }, + { 64, SURFACE_E }, + { 65, SURFACE_D }, + { 66, SURFACE_10 }, + { 67, SURFACE_F }, + { 72, SURFACE_10 }, + { 74, SURFACE_E }, + { 69, SURFACE_E }, + { 71, SURFACE_E }, + { 70, SURFACE_D }, + { 73, SURFACE_D }, + { 68, SURFACE_D }, + { 75, SURFACE_D }, + { 19, SURFACE_SWAMP }, + { 41, SURFACE_DOOR }, + { 23, SURFACE_2D }, + { 40, SURFACE_DOOR_13 }, +}; +// const u16 gMapVvvToSurfaceTypeEnd = 0; diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c index 59ed095d..072ca4e0 100644 --- a/src/enemy/acroBandits.c +++ b/src/enemy/acroBandits.c @@ -175,7 +175,7 @@ void AcroBandit_Type0Action1(Entity* this) { rand = Random(); x = this->field_0x74.HWORD + ((s32)rand % 5) * 0x10 - 0x20; y = this->field_0x76.HWORD + ((s32)(rand >> 4) % 5) * 0x10 - 0x20; - if (sub_080B1B18(x, y, this->collisionLayer) == 0) { + if (GetCollisionDataAtWorldCoords(x, y, this->collisionLayer) == 0) { this->action = 2; this->spriteSettings.draw = 1; this->x.HALF.HI = x; diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 967c46c9..976d4802 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -200,7 +200,7 @@ void sub_0802AAC0(Entity* this) { this->child = NULL; #ifdef EU } else if (ent->timer == 0) { - if (GetCollisionData(COORD_TO_TILE(this), 1) == 0) { + if (GetCollisionDataAtMetaTilePos(COORD_TO_TILE(this), 1) == 0) { if (EntityInRectRadius(this, &gPlayerEntity, 0x10, 0x10) && ent->subtimer <= 0x50) { this->field_0x80.HALF.HI = 0; } diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c index 82de5555..2dd0b998 100644 --- a/src/enemy/chuchu.c +++ b/src/enemy/chuchu.c @@ -703,11 +703,11 @@ void sub_0801FB68(Entity* this) { this->zVelocity = 0; } -u32 sub_0801FBD0(Entity* this) { - if (GetTileUnderEntity(this) == 0x10) { - return 1; +bool32 sub_0801FBD0(Entity* this) { + if (GetVvvAtEntity(this) == 0x10) { + return TRUE; } else { - return 0; + return FALSE; } } diff --git a/src/enemy/cloudPiranha.c b/src/enemy/cloudPiranha.c index 15f89242..61937366 100644 --- a/src/enemy/cloudPiranha.c +++ b/src/enemy/cloudPiranha.c @@ -245,13 +245,13 @@ void sub_080387F0(CloudPiranhaEntity* this) { const s8* ptr; if ((super->action != 4) && (this->unk_82 == 0)) { - iVar4 = GetCollisionData(COORD_TO_TILE(super), super->collisionLayer); + iVar4 = GetCollisionDataAtMetaTilePos(COORD_TO_TILE(super), super->collisionLayer); if ((iVar4 == 0xf) || (iVar4 == 0x2a)) { this->unk_82 = 0x20; } ptr = &gUnk_080CF520[super->direction >> 1]; bVar1 = super->direction; - iVar4 = sub_080B1AF0(super, ptr[0], ptr[1]); + iVar4 = GetCollisionDataRelativeTo(super, ptr[0], ptr[1]); if ((iVar4 == 0xf) || (iVar4 == 0x2a)) { super->direction = (super->direction + 0x10) & 0x1f; } else { diff --git a/src/enemy/gyorgFemale.c b/src/enemy/gyorgFemale.c index 6c6f408c..d59e10d9 100644 --- a/src/enemy/gyorgFemale.c +++ b/src/enemy/gyorgFemale.c @@ -246,7 +246,7 @@ void sub_08046518(void) { u16* ptr = gMapTop.metatileTypes; u16* sl = &gMapTop.mapData[sub_08046518_offset]; u16* stack1 = &gMapTop.mapDataClone[sub_08046518_offset]; - u8* stack2 = &gMapTop.unkData3[sub_08046518_offset]; + u8* stack2 = &gMapTop.vvv[sub_08046518_offset]; u8* r6 = &gMapTop.collisionData[sub_08046518_offset]; u32 i; for (i = 0x10; i != 0; i--) { diff --git a/src/enemy/leever.c b/src/enemy/leever.c index e7735c04..d9a0be39 100644 --- a/src/enemy/leever.c +++ b/src/enemy/leever.c @@ -4,12 +4,10 @@ * * @brief Leever enemy */ - +#include "asm.h" #include "enemy.h" #include "physics.h" -extern u32 sub_080B1AB4(s32, s32, u32); - extern Entity* gUnk_020000B0; bool32 Leever_PlayerInRange(Entity*, s32); @@ -119,23 +117,23 @@ void Leever_DigDown(Entity* this) { } } -u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) { - u32 uVar3; +bool32 sub_0801FDE4(Entity* ent, s32 x, s32 y) { + u32 vvv; const u16* puVar4; - if (sub_080B1B18(x, y, gUnk_020000B0->collisionLayer) != 0) { - return 0; + if (GetCollisionDataAtWorldCoords(x, y, gUnk_020000B0->collisionLayer) != 0) { + return FALSE; } else { - uVar3 = sub_080B1AB4(x, y, gUnk_020000B0->collisionLayer); + vvv = GetVvvAtWorldCoords(x, y, gUnk_020000B0->collisionLayer); for (puVar4 = gUnk_080CA4CA; *puVar4 != (u16)-1;) { - if (*puVar4++ == uVar3) { + if (*puVar4++ == vvv) { ent->x.HALF.HI = (x & 0xfff0) + 8; ent->y.HALF.HI = (y & 0xfff0) + 8; ent->collisionLayer = gUnk_020000B0->collisionLayer; - return 1; + return TRUE; } } - return 0; + return FALSE; } } diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c index a89b4515..ff5d0ffc 100644 --- a/src/enemy/madderpillar.c +++ b/src/enemy/madderpillar.c @@ -340,7 +340,7 @@ void sub_08029E0C(Entity* this) { tile = COORD_TO_TILE(this); for (i = 0; i < 3; i++) { dir = ptr[iVar3]; - if (GetCollisionData(gUnk_080B4488[dir >> 3] + tile, this->collisionLayer) == 0) { + if (GetCollisionDataAtMetaTilePos(gUnk_080B4488[dir >> 3] + tile, this->collisionLayer) == 0) { local_24 = dir; if (this->direction - this->field_0x74.HALF.LO != dir - this->direction) break; diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index ce13cff2..d4e014df 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -336,7 +336,7 @@ void sub_080244E8(Entity* this) { switch (this->field_0x80.HALF.LO) { case 0: if (--this->timer == 0) { - if (GetCollisionData(COORD_TO_TILE(this), 1) == 0) { + if (GetCollisionDataAtMetaTilePos(COORD_TO_TILE(this), 1) == 0) { this->field_0x80.HALF.LO++; this->field_0x82.HALF.LO++; this->subtimer = 0; diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 46db91ad..f32fa848 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -481,10 +481,10 @@ bool32 sub_0802594C(Entity* this, u32 param_2) { u8 bVar6; iVar9 = xDiff + unk[0]; iVar11 = yDiff + unk[1]; - bVar4 = sub_080B1B18(iVar9 - 0x00, iVar11 - 0x00, uVar1); - bVar5 = sub_080B1B18(iVar9 - 0x10, iVar11 - 0x00, uVar1); - bVar6 = sub_080B1B18(iVar9 - 0x00, iVar11 - 0x10, uVar1); - bVar7 = sub_080B1B18(iVar9 - 0x10, iVar11 - 0x10, uVar1); + bVar4 = GetCollisionDataAtWorldCoords(iVar9 - 0x00, iVar11 - 0x00, uVar1); + bVar5 = GetCollisionDataAtWorldCoords(iVar9 - 0x10, iVar11 - 0x00, uVar1); + bVar6 = GetCollisionDataAtWorldCoords(iVar9 - 0x00, iVar11 - 0x10, uVar1); + bVar7 = GetCollisionDataAtWorldCoords(iVar9 - 0x10, iVar11 - 0x10, uVar1); if ((bVar4 | bVar5 | bVar6 | bVar7) == 0) { this->field_0x7c.HALF.LO = gRoomControls.origin_x + iVar9; this->field_0x7c.HALF.HI = gRoomControls.origin_y + iVar11; @@ -510,10 +510,10 @@ void sub_08025A54(Entity* this) { } bool32 sub_08025AB8(u32 tile, u32 layer) { - if (GetCollisionData(tile, layer)) + if (GetCollisionDataAtMetaTilePos(tile, layer)) return FALSE; - if (sub_080B1AE0(tile, layer) == 10) { + if (GetVvvAtMetaTilePos(tile, layer) == 10) { sub_0807B7D8(0x61, tile, layer); return TRUE; } diff --git a/src/enemy/rope.c b/src/enemy/rope.c index 098d4b89..53cc1df0 100644 --- a/src/enemy/rope.c +++ b/src/enemy/rope.c @@ -196,7 +196,7 @@ void sub_08031600(Entity* this) { u32 sub_0803163C(Entity* this) { u32 h; - if (GetTileUnderEntity(this) == 0x13) { + if (GetVvvAtEntity(this) == 0x13) { h = this->field_0x7a.HWORD / 2; } else { h = this->field_0x7a.HWORD; diff --git a/src/enemy/slime.c b/src/enemy/slime.c index 494d0459..05f2a32f 100644 --- a/src/enemy/slime.c +++ b/src/enemy/slime.c @@ -140,7 +140,7 @@ void sub_08045178(Entity* this, Entity* child, int h, int v) { return; sub_0804A4E4(this, child); - if (sub_080B1AF0(child, h, v)) + if (GetCollisionDataRelativeTo(child, h, v)) return; x = child->x.HALF.HI + h; diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c index 03f0a372..3d4f8e29 100644 --- a/src/enemy/spinyBeetle.c +++ b/src/enemy/spinyBeetle.c @@ -323,7 +323,7 @@ void sub_08033D78(SpinyBeetleEntity* this) { case 0x1c5: break; default: - if (GetCollisionData(tile, super->collisionLayer) - 1 > 0x3e) + if (GetCollisionDataAtMetaTilePos(tile, super->collisionLayer) - 1 > 0x3e) ProcessMovement0(super); break; } diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c index 04b9769c..f046745b 100644 --- a/src/enemy/tektite.c +++ b/src/enemy/tektite.c @@ -158,7 +158,7 @@ void sub_0802F300(Entity* this) { return; } else if (this->collisions != COL_NONE) { sub_0800417E(this, this->collisions); - } else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) { + } else if ((GetVvvAtEntity(this) & 0xf0) == 0x50) { this->direction = (this->direction + 0x10) & 0x1f; } diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c index beaffd3f..c67a5696 100644 --- a/src/enemy/tektiteGolden.c +++ b/src/enemy/tektiteGolden.c @@ -134,7 +134,7 @@ void sub_08038048(Entity* this) { return; } else if (this->collisions != COL_NONE) { sub_0800417E(this, this->collisions); - } else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) { + } else if ((GetVvvAtEntity(this) & 0xf0) == 0x50) { this->direction = (this->direction + 0x10) & 0x1f; } diff --git a/src/enemy/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c index d05f768e..8018cdea 100644 --- a/src/enemy/vaatiEyesMacro.c +++ b/src/enemy/vaatiEyesMacro.c @@ -230,7 +230,7 @@ void sub_0802EFB8(Entity* this) { uVar3 = GetFacingDirection(&gPlayerEntity, this); uVar1 = (uVar3 + 4) & 0x18; } - iVar4 = GetCollisionData(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1); + iVar4 = GetCollisionDataAtMetaTilePos(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1); if (iVar4 != 0) { this->direction = 0xff; } else { diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c index c66a375a..2d735663 100644 --- a/src/enemy/vaatiProjectile.c +++ b/src/enemy/vaatiProjectile.c @@ -276,7 +276,7 @@ void sub_0803E4D8(Entity* this) { u32 tile; tile = TILE(this->x.HALF.HI, this->y.HALF.HI + 8); - if (GetCollisionData(tile, gPlayerEntity.collisionLayer) != 0xff) { + if (GetCollisionDataAtMetaTilePos(tile, gPlayerEntity.collisionLayer) != 0xff) { SetTile(0x4074, tile, gPlayerEntity.collisionLayer); } } diff --git a/src/enemy/wizzrobeWind.c b/src/enemy/wizzrobeWind.c index 2baecef0..0904fea4 100644 --- a/src/enemy/wizzrobeWind.c +++ b/src/enemy/wizzrobeWind.c @@ -236,7 +236,7 @@ void sub_0802F8E4(WizzrobeEntity* this) { iVar4 = ((s32)(rand)&0x7ff0) % (this->unk_6f << 3); uVar7 = (uVar1 + iVar4) | 8; uVar6 = TILE(uVar8, uVar7); - if ((GetCollisionData(uVar6, super->collisionLayer) == 0) && + if ((GetCollisionDataAtMetaTilePos(uVar6, super->collisionLayer) == 0) && (GetTileIndex(uVar6, super->collisionLayer) != 0x4071)) { super->x.HALF.HI = (s16)uVar8; super->y.HALF.HI = (s16)uVar7; diff --git a/src/item/itemGustJar.c b/src/item/itemGustJar.c index c567f197..f00ef63b 100644 --- a/src/item/itemGustJar.c +++ b/src/item/itemGustJar.c @@ -12,7 +12,7 @@ void ItemGustJar(ItemBehavior* this, u32 index) { } void sub_08076DF4(ItemBehavior* this, u32 index) { - if (GetCollisionTileInFront(&gPlayerEntity) != 0x29 && gPlayerState.floor_type != SURFACE_DOOR && + if (GetVvvInFront(&gPlayerEntity) != 0x29 && gPlayerState.floor_type != SURFACE_DOOR && gPlayerState.floor_type != SURFACE_DOOR_13 && gPlayerState.jump_status == 0) { sub_08077D38(this, index); this->timer = 0; diff --git a/src/item/itemMoleMitts.c b/src/item/itemMoleMitts.c index 28414cae..fbb62e22 100644 --- a/src/item/itemMoleMitts.c +++ b/src/item/itemMoleMitts.c @@ -181,13 +181,13 @@ s32 sub_080774A0(void) { uVar3 = COORD_TO_TILE_OFFSET((&gPlayerEntity), -gUnk_0811BE1E[gPlayerEntity.animationState & 6], -gUnk_0811BE1E[(gPlayerEntity.animationState & 6) + 1]); - iVar2 = GetCollisionData(uVar3, gPlayerEntity.collisionLayer); + iVar2 = GetCollisionDataAtMetaTilePos(uVar3, gPlayerEntity.collisionLayer); if (iVar2 > 0x16) return 0; if (iVar2 < 0xf) return 0; - if (sub_080B1AE0(uVar3, gPlayerEntity.collisionLayer) != 0x56) { + if (GetVvvAtMetaTilePos(uVar3, gPlayerEntity.collisionLayer) != 0x56) { return 1; } else { return 0x56; diff --git a/src/manager/bombableWallManager.c b/src/manager/bombableWallManager.c index 52d018bd..efb1af9f 100644 --- a/src/manager/bombableWallManager.c +++ b/src/manager/bombableWallManager.c @@ -15,8 +15,6 @@ u32 sub_0805BFC4(u32, u32); void sub_0805C02C(BombableWallManager*); -extern u32 sub_080B1AE0(u16, u8); - u32 getArchwayType(void); void BombableWallManager_Init(BombableWallManager*); void BombableWallManager_Action1(BombableWallManager*); @@ -47,7 +45,7 @@ void BombableWallManager_Init(BombableWallManager* this) { } void BombableWallManager_Action1(BombableWallManager* this) { - if (sub_080B1AE0(this->tile, this->field_0x35) != 0x2e) { + if (GetVvvAtMetaTilePos(this->tile, this->field_0x35) != 0x2e) { super->action = 2; super->timer = 90; sub_0805C02C(this); diff --git a/src/manager/minishPortalManager.c b/src/manager/minishPortalManager.c index 47307dea..2107d6ef 100644 --- a/src/manager/minishPortalManager.c +++ b/src/manager/minishPortalManager.c @@ -14,8 +14,6 @@ #include "room.h" #include "sound.h" -extern u32 sub_080B1AC8(u16, u16, u8); - bool32 PortalReadyForMinish(void); void MinishPortalManager_Main(MinishPortalManager* this) { @@ -43,7 +41,7 @@ void MinishPortalManager_Main(MinishPortalManager* this) { gArea.portal_mode = 3; } } - if (sub_080B1AC8(this->unk_38, this->unk_3a, super->timer) == 0x3d) { + if (GetVvvAtRoomCoords(this->unk_38, this->unk_3a, super->timer) == 0x3d) { CreateMagicSparkles(this->unk_38 + gRoomControls.origin_x, this->unk_3a + gRoomControls.origin_y, super->timer); if (super->subtimer == 0) { diff --git a/src/npc/npc5.c b/src/npc/npc5.c index 4076c54a..d6730cba 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -472,7 +472,7 @@ u32 sub_080611D4(Entity* this) { 0x2b, 0x10, 0x2a, 0x0, 0x2d, 0x8, 0x2c, 0x18, 0x0, }; - u32 uVar2; + u32 vvv; u32 x; s32 a; s32 b; @@ -482,11 +482,11 @@ u32 sub_080611D4(Entity* this) { ptr = (s8*)gUnk_0810AC4C; a = ptr[x]; b = ptr[x + 1]; - uVar2 = GetRelativeCollisionTile(this, a, b); + vvv = GetVvvRelativeToEntity(this, a, b); ptr2 = gUnk_0810AC54; do { - if (*ptr2 != uVar2 || this->animationState != (ptr2[1] >> 2)) { + if (*ptr2 != vvv || this->animationState != (ptr2[1] >> 2)) { continue; } diff --git a/src/npc/townMinish.c b/src/npc/townMinish.c index a8cb574b..9808c6e8 100644 --- a/src/npc/townMinish.c +++ b/src/npc/townMinish.c @@ -1,10 +1,9 @@ -#include "global.h" +#include "asm.h" #include "entity.h" -#include "npc.h" #include "functions.h" #include "item.h" +#include "npc.h" -extern u32 sub_080B1AC8(u32, u32, u32); void sub_0806ACC4(Entity*); void sub_0806ABFC(Entity*); void sub_0806AC3C(Entity*); @@ -792,8 +791,9 @@ void sub_0806B0E0(Entity* this, ScriptExecutionContext* context) { static const u16 gUnk_08112C5C[2] = { TEXT_INDEX(TEXT_TOWN_MINISH2, 0x25), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x26) }; int idx = 0; - if (sub_080B1AC8(0x38, 0xb8, 1) == 0x57 && sub_080B1AC8(0x48, 0xb8, 1) == 0x57 && - sub_080B1AC8(0x38, 200, 1) == 0x57 && sub_080B1AC8(0x48, 200, 1) == 0x57) { + // Checks if the dust is gone at these four meta tiles. + if (GetVvvAtRoomCoords(56, 184, 1) == 0x57 && GetVvvAtRoomCoords(72, 184, 1) == 0x57 && + GetVvvAtRoomCoords(56, 200, 1) == 0x57 && GetVvvAtRoomCoords(72, 200, 1) == 0x57) { idx = 1; } diff --git a/src/object/bigIceBlock.c b/src/object/bigIceBlock.c index b52fe780..0d865546 100644 --- a/src/object/bigIceBlock.c +++ b/src/object/bigIceBlock.c @@ -129,8 +129,8 @@ void sub_08099880(BigIceBlockEntity* this) { void sub_08099910(BigIceBlockEntity* this) { u32 uVar2; - s32 iVar1; - u32 uVar3; + s32 vvv; + u32 tileIndex; u32 position; position = COORD_TO_TILE(super); @@ -146,112 +146,112 @@ void sub_08099910(BigIceBlockEntity* this) { SetTile(0x4022, position, super->collisionLayer); break; case 1: - iVar1 = sub_080B1AE0(position - 0x41, super->collisionLayer); - uVar3 = 0x4024; - if (iVar1 == 0x12) { - uVar3 = 0x4079; + vvv = GetVvvAtMetaTilePos(position - 0x41, super->collisionLayer); + tileIndex = 0x4024; + if (vvv == 0x12) { + tileIndex = 0x4079; } - SetTile(uVar3, position - 0x41, super->collisionLayer); + SetTile(tileIndex, position - 0x41, super->collisionLayer); SetTile(0x4022, position - 0x40, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 0x3f, super->collisionLayer); - uVar3 = 0x4025; - if (iVar1 == 0x12) { - uVar3 = 0x407b; + vvv = GetVvvAtMetaTilePos(position - 0x3f, super->collisionLayer); + tileIndex = 0x4025; + if (vvv == 0x12) { + tileIndex = 0x407b; } - SetTile(uVar3, position - 0x3f, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 1, super->collisionLayer); - uVar3 = 0x4024; - if (iVar1 == 0x12) { - uVar3 = 0x4079; + SetTile(tileIndex, position - 0x3f, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position - 1, super->collisionLayer); + tileIndex = 0x4024; + if (vvv == 0x12) { + tileIndex = 0x4079; } - SetTile(uVar3, position - 1, super->collisionLayer); + SetTile(tileIndex, position - 1, super->collisionLayer); SetTile(0x4022, position, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 1, super->collisionLayer); - uVar3 = 0x4025; - if (iVar1 == 0x12) { - uVar3 = 0x407b; + vvv = GetVvvAtMetaTilePos(position + 1, super->collisionLayer); + tileIndex = 0x4025; + if (vvv == 0x12) { + tileIndex = 0x407b; } - SetTile(uVar3, position + 1, super->collisionLayer); + SetTile(tileIndex, position + 1, super->collisionLayer); return; break; case 2: - iVar1 = sub_080B1AE0(position - 0x41, super->collisionLayer); - uVar3 = 0x4023; - if (iVar1 == 0x12) { - uVar3 = 0x4077; + vvv = GetVvvAtMetaTilePos(position - 0x41, super->collisionLayer); + tileIndex = 0x4023; + if (vvv == 0x12) { + tileIndex = 0x4077; } - SetTile(uVar3, position - 0x41, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 0x40, super->collisionLayer); - uVar3 = 0x4023; - if (iVar1 == 0x12) { - uVar3 = 0x4077; + SetTile(tileIndex, position - 0x41, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position - 0x40, super->collisionLayer); + tileIndex = 0x4023; + if (vvv == 0x12) { + tileIndex = 0x4077; } - SetTile(uVar3, position - 0x40, super->collisionLayer); + SetTile(tileIndex, position - 0x40, super->collisionLayer); SetTile(0x4022, position - 1, super->collisionLayer); SetTile(0x4022, position, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 0x3f, super->collisionLayer); - uVar3 = 0x4026; - if (iVar1 == 0x12) { - uVar3 = 0x407c; + vvv = GetVvvAtMetaTilePos(position + 0x3f, super->collisionLayer); + tileIndex = 0x4026; + if (vvv == 0x12) { + tileIndex = 0x407c; } - SetTile(uVar3, position + 0x3f, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 0x40, super->collisionLayer); - uVar3 = 0x4026; - if (iVar1 == 0x12) { - uVar3 = 0x407c; + SetTile(tileIndex, position + 0x3f, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position + 0x40, super->collisionLayer); + tileIndex = 0x4026; + if (vvv == 0x12) { + tileIndex = 0x407c; } - SetTile(uVar3, position + 0x40, super->collisionLayer); + SetTile(tileIndex, position + 0x40, super->collisionLayer); break; case 3: - iVar1 = sub_080B1AE0(position - 0x41, super->collisionLayer); - uVar3 = 0x4027; - if (iVar1 == 0x12) { - uVar3 = 0x4075; + vvv = GetVvvAtMetaTilePos(position - 0x41, super->collisionLayer); + tileIndex = 0x4027; + if (vvv == 0x12) { + tileIndex = 0x4075; } - SetTile(uVar3, position - 0x41, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 0x40, super->collisionLayer); - uVar3 = 0x4023; - if (iVar1 == 0x12) { - uVar3 = 0x4077; + SetTile(tileIndex, position - 0x41, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position - 0x40, super->collisionLayer); + tileIndex = 0x4023; + if (vvv == 0x12) { + tileIndex = 0x4077; } - SetTile(uVar3, position - 0x40, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 0x3f, super->collisionLayer); - uVar3 = 0x4028; - if (iVar1 == 0x12) { - uVar3 = 0x4076; + SetTile(tileIndex, position - 0x40, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position - 0x3f, super->collisionLayer); + tileIndex = 0x4028; + if (vvv == 0x12) { + tileIndex = 0x4076; } - SetTile(uVar3, position - 0x3f, super->collisionLayer); - iVar1 = sub_080B1AE0(position - 1, super->collisionLayer); - uVar3 = 0x4024; - if (iVar1 == 0x12) { - uVar3 = 0x4079; + SetTile(tileIndex, position - 0x3f, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position - 1, super->collisionLayer); + tileIndex = 0x4024; + if (vvv == 0x12) { + tileIndex = 0x4079; } - SetTile(uVar3, position - 1, super->collisionLayer); + SetTile(tileIndex, position - 1, super->collisionLayer); SetTile(0x4022, position, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 1, super->collisionLayer); - uVar3 = 0x4025; - if (iVar1 == 0x12) { - uVar3 = 0x407b; + vvv = GetVvvAtMetaTilePos(position + 1, super->collisionLayer); + tileIndex = 0x4025; + if (vvv == 0x12) { + tileIndex = 0x407b; } - SetTile(uVar3, position + 1, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 0x3f, super->collisionLayer); - uVar3 = 0x4029; - if (iVar1 == 0x12) { - uVar3 = 0x4078; + SetTile(tileIndex, position + 1, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position + 0x3f, super->collisionLayer); + tileIndex = 0x4029; + if (vvv == 0x12) { + tileIndex = 0x4078; } - SetTile(uVar3, position + 0x3f, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 0x40, super->collisionLayer); - uVar3 = 0x4026; - if (iVar1 == 0x12) { - uVar3 = 0x407c; + SetTile(tileIndex, position + 0x3f, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position + 0x40, super->collisionLayer); + tileIndex = 0x4026; + if (vvv == 0x12) { + tileIndex = 0x407c; } - SetTile(uVar3, position + 0x40, super->collisionLayer); - iVar1 = sub_080B1AE0(position + 0x41, super->collisionLayer); - uVar3 = 0x402a; - if (iVar1 == 0x12) { - uVar3 = 0x407a; + SetTile(tileIndex, position + 0x40, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(position + 0x41, super->collisionLayer); + tileIndex = 0x402a; + if (vvv == 0x12) { + tileIndex = 0x407a; } - SetTile(uVar3, position + 0x41, super->collisionLayer); + SetTile(tileIndex, position + 0x41, super->collisionLayer); break; } } diff --git a/src/object/bollard.c b/src/object/bollard.c index 304a9647..20994ca3 100644 --- a/src/object/bollard.c +++ b/src/object/bollard.c @@ -95,7 +95,7 @@ void sub_0808B3AC(BollardEntity* this) { super->spritePriority.b0 = 4; this->tile = COORD_TO_TILE(super); this->tileIndex = GetTileIndex(this->tile, super->collisionLayer); - this->unk74 = GetCollisionData(this->tile, super->collisionLayer); + this->unk74 = GetCollisionDataAtMetaTilePos(this->tile, super->collisionLayer); SetTile(0x400b, this->tile, super->collisionLayer); } diff --git a/src/object/button.c b/src/object/button.c index 42233657..ff68caba 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -154,7 +154,7 @@ u32 sub_08081E0C(Entity*); Entity* sub_08081D74(Entity* this) { Entity* ent; - if (GetCollisionData(this->field_0x74.HWORD, this->collisionLayer) == 0xF) { + if (GetCollisionDataAtMetaTilePos(this->field_0x74.HWORD, this->collisionLayer) == 0xF) { return 0; } ent = 0; diff --git a/src/object/crenelBeanSprout.c b/src/object/crenelBeanSprout.c index 8bee94eb..e9af7e85 100644 --- a/src/object/crenelBeanSprout.c +++ b/src/object/crenelBeanSprout.c @@ -6,8 +6,8 @@ */ #define NENT_DEPRECATED +#include "asm.h" #include "functions.h" -#include "global.h" #include "hitbox.h" #include "object.h" @@ -18,8 +18,6 @@ typedef struct { /*0x72*/ u16 unk_72; } CrenelBeanSproutEntity; -extern u32 sub_080B1AB4(s32, s32, u32); - void sub_080969A4(CrenelBeanSproutEntity*); void sub_08096A78(CrenelBeanSproutEntity*); void CrenelBeanSprout_Init(CrenelBeanSproutEntity*); @@ -171,13 +169,13 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) { tmp = gPlayerEntity.animationState & 6; this->unk_70 = ((super->x.HALF.HI + (s8)gUnk_08123184[tmp]) & -0x10) | 8; this->unk_72 = ((super->y.HALF.HI + (s8)gUnk_08123184[(tmp) + 1]) & -0x10) | 8; - if (sub_080B1AB4(this->unk_70, this->unk_72, super->collisionLayer) == 0x19) { + if (GetVvvAtWorldCoords(this->unk_70, this->unk_72, super->collisionLayer) == 0x19) { gHUD.rActionPlayerState = R_ACTION_THROW; } else { gHUD.rActionPlayerState = R_ACTION_NONE; } PositionRelative(&gPlayerEntity, super, 0, 0x10000); - if (GetTileUnderEntity(super) == 0x19) { + if (GetVvvAtEntity(super) == 0x19) { RestorePrevTileEntity(0xdc, super->collisionLayer); sub_08096A78(this); } diff --git a/src/object/cutsceneMiscObject.c b/src/object/cutsceneMiscObject.c index 8105cb11..16994592 100644 --- a/src/object/cutsceneMiscObject.c +++ b/src/object/cutsceneMiscObject.c @@ -335,7 +335,7 @@ void sub_08094E30(CutsceneMiscObjectEntity* this) { super->zVelocity = 0; SetDefaultPriority(super, PRIO_PLAYER_EVENT); InitializeAnimation(super, 0); - if (GetTileUnderEntity(super) == 13) { + if (GetVvvAtEntity(super) == 13) { super->action = 3; } break; diff --git a/src/object/furniture.c b/src/object/furniture.c index 38a111d0..b274a37f 100644 --- a/src/object/furniture.c +++ b/src/object/furniture.c @@ -10,8 +10,6 @@ #include "object.h" #include "room.h" -extern void sub_080001D0(u32, u32, u32); - enum { FURNITURE_INIT, FURNITURE_UPDATE, @@ -263,7 +261,7 @@ static void FurnitureInit(FurnitureEntity* this) { for (i = 0; i < cnt; ++i, ++tile) { SetTile(0x4026, tile, 2); SetTile(0x4026, tile, 1); - sub_080001D0(0, tile + 64, 1); + SetVvvAtMetaTilePos(0, tile + 64, 1); } break; } @@ -289,7 +287,7 @@ static void FurnitureInit(FurnitureEntity* this) { super->collisionLayer = 1; super->spriteOrientation.flipY = 2; SetTile(0x4074, this->tile - 64, super->collisionLayer); - sub_080001D0(63, this->tile - 64, super->collisionLayer); + SetVvvAtMetaTilePos(63, this->tile - 64, super->collisionLayer); SetTile(0x4017, this->tile, super->collisionLayer); SetTile(0x4017, this->tile + 64, super->collisionLayer); break; diff --git a/src/object/itemOnGround.c b/src/object/itemOnGround.c index eaf97830..3ec5a6e2 100644 --- a/src/object/itemOnGround.c +++ b/src/object/itemOnGround.c @@ -282,7 +282,7 @@ void sub_080812A0(Entity* this) { } void sub_080812A8(Entity* this) { - if (sub_080B1B0C(this) != 0xF && this->field_0x6e.HWORD != GetTileTypeByEntity(this)) { + if (GetCollisionDataAtEntity(this) != 0xF && this->field_0x6e.HWORD != GetTileTypeByEntity(this)) { this->direction = 0; this->speed = 0; this->spriteSettings.draw = 1; diff --git a/src/object/jarPortal.c b/src/object/jarPortal.c index 04720216..94000d86 100644 --- a/src/object/jarPortal.c +++ b/src/object/jarPortal.c @@ -176,10 +176,10 @@ void sub_0808C148(Entity* this, u32 a2) { pos = COORD_TO_TILE(this); if (!a2) { - SetTile(16530, pos - 1, this->collisionLayer); - SetTile(16531, pos, this->collisionLayer); - SetTile(16532, pos + 63, this->collisionLayer); - SetTile(16533, pos + 64, this->collisionLayer); + SetTile(0x4092, pos - 1, this->collisionLayer); + SetTile(0x4093, pos, this->collisionLayer); + SetTile(0x4094, pos + 63, this->collisionLayer); + SetTile(0x4095, pos + 64, this->collisionLayer); } else { RestorePrevTileEntity(pos - 1, this->collisionLayer); RestorePrevTileEntity(pos, this->collisionLayer); diff --git a/src/object/lilypadLarge.c b/src/object/lilypadLarge.c index 84b11274..a9bbe2e1 100644 --- a/src/object/lilypadLarge.c +++ b/src/object/lilypadLarge.c @@ -344,10 +344,10 @@ void sub_08085A1C(LilypadLargeEntity* this) { void sub_08085A44(LilypadLargeEntity* this) { super->speed = 0x200; - if (GetRelativeCollisionTile(super, 0x10, 0x18) != 0x11) { + if (GetVvvRelativeToEntity(super, 0x10, 0x18) != 0x11) { super->direction = 0x18; } else { - if (GetRelativeCollisionTile(super, -0x10, 0x18) != 0x11) { + if (GetVvvRelativeToEntity(super, -0x10, 0x18) != 0x11) { super->direction = 8; } else { super->direction = 0x10; @@ -368,7 +368,7 @@ void sub_08085A98(LilypadLargeEntity* this) { this->unk_78.WORD -= 0x20000; SetAffineInfo(super, this->unk_78.HALF_U.HI, this->unk_78.HALF_U.HI, this->unk_7c.HALF_U.HI); } - if (GetRelativeCollisionTile(super, 0, 0x18) != 0x11) { + if (GetVvvRelativeToEntity(super, 0, 0x18) != 0x11) { super->subAction = 2; if (gArea.locationIndex == 0x1b) { super->y.HALF.HI += 0xd0; @@ -401,7 +401,7 @@ void sub_08085B40(LilypadLargeEntity* this) { } } else { ResetCollisionLayer(super); - if (GetTileUnderEntity(super) == 0xd) { + if (GetVvvAtEntity(super) == 0xd) { ResetCollisionLayer(&gPlayerEntity); sub_08085CDC(this); super->direction = GetFacingDirection(&gPlayerEntity, super); @@ -423,7 +423,7 @@ void sub_08085B40(LilypadLargeEntity* this) { super->timer |= 0x80; this->unk_70 = 0; this->unk_6c = 0; - if (GetTileUnderEntity(super) == 0xd) { + if (GetVvvAtEntity(super) == 0xd) { super->action = 4; } } @@ -471,7 +471,7 @@ void sub_08085D10(LilypadLargeEntity* this) { void sub_08085D28(LilypadLargeEntity* this) { if (((gPlayerState.framestate != PL_STATE_TALKEZLO) && ((gPlayerState.flags & PL_FLAGS2) != 0)) && - (GetRelativeCollisionTile(super, 0, 0x18) == 0x11)) { + (GetVvvRelativeToEntity(super, 0, 0x18) == 0x11)) { super->action = 2; super->subAction = 0; sub_08078B48(); @@ -509,7 +509,7 @@ void sub_08085D60(LilypadLargeEntity* this) { tmp = r4 >> 2; tmpX = gUnk_08120638[tmp]; tmpY = gUnk_08120638[tmp + 1]; - if (sub_080B1AF0(super, tmpX, tmpY) == 0xff) { + if (GetCollisionDataRelativeTo(super, tmpX, tmpY) == 0xff) { if (sub_080806BC((super->x.HALF.HI - gRoomControls.origin_x) + tmpX, (super->y.HALF.HI - gRoomControls.origin_y) + tmpY, r4, 5) == 0) { @@ -528,7 +528,7 @@ void sub_08085D60(LilypadLargeEntity* this) { tmp = r6 >> 2; tmpX2 = gUnk_08120638[tmp]; tmpY2 = gUnk_08120638[tmp + 1]; - if (sub_080B1AF0(super, tmpX2, tmpY2) == 0xff) { + if (GetCollisionDataRelativeTo(super, tmpX2, tmpY2) == 0xff) { if (sub_0807BD14(&gPlayerEntity, r6 >> 3) != 0) { super->direction = (u8)r6; sub_08085E74(this); diff --git a/src/object/mask.c b/src/object/mask.c index 969d98c2..566e6ea1 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -61,7 +61,7 @@ void Mask_Init(Entity* this) { this->field_0x7c.HALF_U.HI = COORD_TO_TILE(this); this->field_0x7c.HALF_U.LO = GetTileIndex(this->field_0x7c.HALF_U.HI, 1); - this->field_0x7a.HWORD = GetCollisionData((u16)this->field_0x7c.HALF.HI, 1); + this->field_0x7a.HWORD = GetCollisionDataAtMetaTilePos((u16)this->field_0x7c.HALF.HI, 1); SetTile(0x4022, this->field_0x7c.HALF_U.HI, 1); } diff --git a/src/object/minecart.c b/src/object/minecart.c index 3a4c434e..77a027f1 100644 --- a/src/object/minecart.c +++ b/src/object/minecart.c @@ -27,7 +27,7 @@ void Minecart_Action5(MinecartEntity*); void Minecart_Action6(MinecartEntity*); void Minecart_Action7(MinecartEntity*); -extern const u16* const gUnk_081223D8[]; +extern const KeyValuePair* const gUnk_081223D8[]; void Minecart(Entity* this) { static void (*const Minecart_Actions[])(MinecartEntity*) = { @@ -129,10 +129,9 @@ void Minecart_Action2(MinecartEntity* this) { } void Minecart_Action3(MinecartEntity* this) { - static const s8 gUnk_081223C8[] = { 0, -7, 7, 0, 0, 7, -7, 0 }; + static const s8 offsetCoords[] = { 0, -7, 7, 0, 0, 7, -7, 0 }; - u32 iVar2; - u32 uVar3; + u32 vvv; gRoomControls.scrollSpeed = 7; if ((gPlayerState.flags & PL_IN_MINECART) == 0) { @@ -164,14 +163,13 @@ void Minecart_Action3(MinecartEntity* this) { super->subtimer = 60; } - uVar3 = GetRelativeCollisionTile(super, gUnk_081223C8[super->animationState * 2], - gUnk_081223C8[super->animationState * 2 + 1]); - iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[super->animationState]); - if (iVar2 == 0) { + vvv = GetVvvRelativeToEntity(super, offsetCoords[super->animationState * 2], + offsetCoords[super->animationState * 2 + 1]); + if (FindValueForKey(vvv, gUnk_081223D8[super->animationState]) == 0) { super->direction = DirectionTurnAround(super->direction); super->animationState = AnimationStateFlip90(super->animationState); } else { - switch (uVar3) { + switch (vvv) { case 0x64: super->flags &= ~ENT_PERSIST; super->hitType = 1; @@ -200,7 +198,7 @@ void Minecart_Action3(MinecartEntity* this) { case 0x6d: case 0x6e: case 0x6f: - if (uVar3 == GetTileUnderEntity(super)) { + if (vvv == GetVvvAtEntity(super)) { Minecart_Action4(this); gPlayerEntity.animationState = super->animationState << 1; return; @@ -222,7 +220,7 @@ void Minecart_Action3(MinecartEntity* this) { void Minecart_Action4(MinecartEntity* this) { sub_08004168(super); CopyPosition(super, &gPlayerEntity); - switch (GetTileUnderEntity(super)) { + switch (GetVvvAtEntity(super)) { case 0x67: if (super->direction == DirectionWest) { super->direction = DirectionNorth; @@ -312,8 +310,8 @@ void Minecart_Action7(MinecartEntity* this) { bool32 sub_08091DDC(MinecartEntity* this) { static const s8 gUnk_081223D0[] = { 0, -8, 8, 0, 0, 8, -8, 0 }; - if ((sub_080B1AF0(super, gUnk_081223D0[super->animationState * 2], gUnk_081223D0[super->animationState * 2 + 1]) == - 0xff) && + if ((GetCollisionDataRelativeTo(super, gUnk_081223D0[super->animationState * 2], + gUnk_081223D0[super->animationState * 2 + 1]) == 0xff) && (sub_0807BD14(&gPlayerEntity, super->animationState))) { super->updatePriority = 6; super->action = 5; @@ -332,3 +330,31 @@ bool32 sub_08091DDC(MinecartEntity* this) { return 0; } } + +extern const KeyValuePair gUnk_081223E8[]; +extern const KeyValuePair gUnk_08122402[]; +extern const KeyValuePair gUnk_0812241C[]; +extern const KeyValuePair gUnk_08122436[]; + +const KeyValuePair* const gUnk_081223D8[] = { + gUnk_081223E8, + gUnk_08122402, + gUnk_0812241C, + gUnk_08122436, +}; +const KeyValuePair gUnk_081223E8[] = { + { 242, 1 }, { 101, 1 }, { 104, 1 }, { 106, 1 }, { 100, 1 }, { 41, 1 }, +}; +const u16 gUnk_081223E8End = 0; +const KeyValuePair gUnk_08122402[] = { + { 243, 1 }, { 102, 1 }, { 104, 1 }, { 105, 1 }, { 100, 1 }, { 41, 1 }, +}; +const u16 gUnk_08122402End = 0; +const KeyValuePair gUnk_0812241C[] = { + { 242, 1 }, { 101, 1 }, { 103, 1 }, { 105, 1 }, { 100, 1 }, { 41, 1 }, +}; +const u16 gUnk_0812241CEnd = 0; +const KeyValuePair gUnk_08122436[] = { + { 243, 1 }, { 102, 1 }, { 106, 1 }, { 103, 1 }, { 100, 1 }, { 41, 1 }, +}; +const u16 gUnk_08122436End = 0; diff --git a/src/object/object1F.c b/src/object/object1F.c index bff26637..5ee4382f 100644 --- a/src/object/object1F.c +++ b/src/object/object1F.c @@ -83,7 +83,7 @@ void Object1F_Action1(Object1FEntity* this) { void Object1F_Action2(Object1FEntity* this) { u8 bVar1; - bVar1 = sub_080B1B0C(super); + bVar1 = GetCollisionDataAtEntity(super); switch (bVar1) { case 0x21: CreateFx(super, FX_FALL_DOWN, 0); diff --git a/src/object/objectOnPillar.c b/src/object/objectOnPillar.c index 5b617169..ae4baa1d 100644 --- a/src/object/objectOnPillar.c +++ b/src/object/objectOnPillar.c @@ -38,11 +38,6 @@ typedef struct { /*0x86*/ u16 hitFlag; } EntityWithHitFlag; -typedef struct { - u16 key; - u16 value; -} KeyValuePair; - void sub_080970F4(ObjectOnPillarEntity*); void sub_080971E0(ObjectOnPillarEntity*); bool32 sub_08097194(ObjectOnPillarEntity*); @@ -180,8 +175,9 @@ bool32 sub_08097008(ObjectOnPillarEntity* this) { u32 sub_08097074(u32 tileType) { static const KeyValuePair gUnk_0812327C[] = { - { 0x4037, 1 }, { 0x4038, 1 }, { 0x4039, 1 }, { 0x403a, 1 }, { 0x7a, 2 }, { 0x78, 2 }, { 0, 0 }, + { 0x4037, 1 }, { 0x4038, 1 }, { 0x4039, 1 }, { 0x403a, 1 }, { 0x7a, 2 }, { 0x78, 2 }, }; + static const u16 gUnk_0812327CEnd = 0; const KeyValuePair* entry = gUnk_0812327C; for (; entry->key != 0; entry++) { if (entry->key == tileType) { @@ -211,7 +207,7 @@ void sub_080970F4(ObjectOnPillarEntity* this) { bool32 sub_08097144(ObjectOnPillarEntity* this) { LinearMoveUpdate(super); sub_0800445C(super); - if (GetTileUnderEntity(super) == 0x19) { + if (GetVvvAtEntity(super) == 0x19) { super->spriteOffsetY = 2; } if ((--this->unk_76 == 0) && sub_08097194(this) == FALSE) { diff --git a/src/object/playerClone.c b/src/object/playerClone.c index e898dcfe..48618a99 100644 --- a/src/object/playerClone.c +++ b/src/object/playerClone.c @@ -110,7 +110,7 @@ void PlayerClone_Action2(PlayerCloneEntity* this) { if (gPlayerEntity.iframes >= 1) { gPlayerState.chargeState.action = 1; } else { - GetTileUnderEntity(super); + GetVvvAtEntity(super); // TODO why is the return value not used? sub_08084B1C(this); super->x.HALF.HI = gPlayerEntity.x.HALF.HI + this->unk78; super->y.HALF.HI = gPlayerEntity.y.HALF.HI + this->unk7a; diff --git a/src/object/pot.c b/src/object/pot.c index 0e024f6f..2d635253 100644 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -118,7 +118,7 @@ void Pot_Action1(Entity* this) { DeleteThisEntity(); break; default: - if (GetTileUnderEntity(this) == 13) { + if (GetVvvAtEntity(this) == 13) { CreateFx(this, FX_FALL_DOWN, 0); } else if (tileType == 0x4005) { gPlayerState.lastSwordMove = SWORD_MOVE_BREAK_POT; diff --git a/src/object/pullableLever.c b/src/object/pullableLever.c index 7c2a738f..7c7186c6 100644 --- a/src/object/pullableLever.c +++ b/src/object/pullableLever.c @@ -114,7 +114,7 @@ void PullableLever_HandleSubAction0(PullableLeverEntity* this) { if (-player->animationState + super->type2 * 2 == 0) { x = gUnk_081222B8[super->type2 * 2] + super->x.HALF_U.HI; y = gUnk_081222B8[super->type2 * 2 + 1] + super->y.HALF_U.HI; - if (0x10 < sub_080B1B18(x, y, player->collisionLayer) - 0xf) { + if (0x10 < GetCollisionDataAtWorldCoords(x, y, player->collisionLayer) - 0xf) { player->x.HALF.HI = x; player->y.HALF.HI = y; } diff --git a/src/object/pushableFurniture.c b/src/object/pushableFurniture.c index 2d3b77da..e7310174 100644 --- a/src/object/pushableFurniture.c +++ b/src/object/pushableFurniture.c @@ -223,7 +223,7 @@ bool32 sub_0808FC5C(PushableFurnitureEntity* this) { } else { super->spriteOffsetY = 0; } - if (sub_080B1B0C(super)) { + if (GetCollisionDataAtEntity(super)) { return 0; } if (super->subtimer == 0) { @@ -312,27 +312,27 @@ void sub_0808FDE8(PushableFurnitureEntity* this) { u32 uVar3; uVar3 = (u32)this->unk_70; - uVar1 = GetCollisionData(uVar3 - 1, 1); + uVar1 = GetCollisionDataAtMetaTilePos(uVar3 - 1, 1); iVar2 = GetTileIndex(uVar3, 1); if (iVar2 == 0x402e) { if ((((uVar1 & 0xf0) != 0) && ((uVar1 & 0xf0) != 0x50)) || ((uVar1 & 5) == 0)) { SetTile(0x402c, uVar3, 1); } } else { - iVar2 = GetCollisionData(uVar3, 1); + iVar2 = GetCollisionDataAtMetaTilePos(uVar3, 1); if ((iVar2 == 5) && ((((uVar1 & 0xf0) == 0 || ((uVar1 & 0xf0) == 0x50)) && ((uVar1 & 5) != 0)))) { SetTile(0x402e, uVar3, 1); } } uVar3 = (u32)this->unk_72; - uVar1 = GetCollisionData(uVar3 + 1, 1); + uVar1 = GetCollisionDataAtMetaTilePos(uVar3 + 1, 1); iVar2 = GetTileIndex(uVar3, 1); if (iVar2 == 0x402f) { if ((((uVar1 & 0xf0) != 0) && ((uVar1 & 0xf0) != 0x50)) || ((uVar1 & 10) == 0)) { SetTile(0x402d, uVar3, 1); } } else { - iVar2 = GetCollisionData(uVar3, 1); + iVar2 = GetCollisionDataAtMetaTilePos(uVar3, 1); if (((iVar2 == 10) && (((uVar1 & 0xf0) == 0 || ((uVar1 & 0xf0) == 0x50)))) && ((uVar1 & 10) != 0)) { SetTile(0x402f, uVar3, 1); } @@ -411,7 +411,7 @@ void sub_08090094(PushableFurnitureEntity* this, u32 param_2, u32 tilePos) { u32 index; u32 tmp2; - tmp1 = GetCollisionData(tilePos, 1); + tmp1 = GetCollisionDataAtMetaTilePos(tilePos, 1); index = GetTileIndex(tilePos, 1); if ((index & 0x4000) == 0) { index = param_2; diff --git a/src/object/pushableRock.c b/src/object/pushableRock.c index f0a90128..464bb24a 100644 --- a/src/object/pushableRock.c +++ b/src/object/pushableRock.c @@ -89,12 +89,12 @@ void PushableRock_Action3(PushableRockEntity* this) { } void sub_0808A644(PushableRockEntity* this) { - u32 tmp; + u32 vvv; this->tilePosition = COORD_TO_TILE(super); this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer); - this->unk_72 = GetCollisionData(this->tilePosition, super->collisionLayer); - tmp = sub_080B1AE0(this->tilePosition, super->collisionLayer); - if ((tmp == 0x19) || (tmp == 0xf0)) { + this->unk_72 = GetCollisionDataAtMetaTilePos(this->tilePosition, super->collisionLayer); + vvv = GetVvvAtMetaTilePos(this->tilePosition, super->collisionLayer); + if ((vvv == 0x19) || (vvv == 0xf0)) { SetTile(0x4015, this->tilePosition, super->collisionLayer); super->action = 3; if (!CheckFlags(this->pushedFlag)) { diff --git a/src/object/pushableStatue.c b/src/object/pushableStatue.c index b29ca269..f6722b71 100644 --- a/src/object/pushableStatue.c +++ b/src/object/pushableStatue.c @@ -212,7 +212,7 @@ bool32 sub_080895C0(PushableStatueEntity* this) { LinearMoveUpdate(super); if ((--this->unk_86 == 0) && (sub_0800442E(super) == 0)) { super->spriteOffsetY = 0; - if (!sub_080B1B0C(super)) { + if (!GetCollisionDataAtEntity(super)) { sub_08089454(this); return TRUE; } @@ -258,14 +258,14 @@ bool32 sub_080896B0(void) { const s16* ptr; u32 tmp1; u32 tmp2; - u32 val; + u32 vvv; if (((gPlayerState.heldObject & 0x1f) == 0x12) && ((gPlayerEntity.frame & 1) != 0)) { ptr = &gUnk_080B4468[gPlayerEntity.animationState & 6]; uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1]; uVar4 = COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]) - uVar1; - val = sub_080B1AE0(uVar4, gPlayerEntity.collisionLayer); - if ((val - 0x26 > 1) && (val != 0x29)) { + vvv = GetVvvAtMetaTilePos(uVar4, gPlayerEntity.collisionLayer); + if ((vvv - 0x26 > 1) && (vvv != 0x29)) { layer = GetLayerByIndex(gPlayerEntity.collisionLayer); iVar2 = (uVar4 * 0x10000) >> 0x10; tmp1 = layer->collisionData[iVar2]; diff --git a/src/object/smokeParticle.c b/src/object/smokeParticle.c index de97206b..dacd282f 100644 --- a/src/object/smokeParticle.c +++ b/src/object/smokeParticle.c @@ -72,7 +72,7 @@ void sub_080878CC(Entity* this) { for (itX = -0x10; itX < 0x11; itX += 0x10) { for (itY = -0x10; itY < 0x11; itY += 0x10) { pos = TILE((u32)x + itX, (u32)y + itY); - if (sub_080B1AE0(pos, (u8)layer) == 0x2e) { + if (GetVvvAtMetaTilePos(pos, (u8)layer) == 0x2e) { switch (GetTileType(pos, layer)) { case 0x368: case 0x367: diff --git a/src/object/treeHidingPortal.c b/src/object/treeHidingPortal.c index 9a5ac61e..8887c9db 100644 --- a/src/object/treeHidingPortal.c +++ b/src/object/treeHidingPortal.c @@ -104,15 +104,15 @@ static void sub_0809E96C(Entity* this) { } static u32 sub_0809E9A0(void) { - u32 rv; + u32 vvv; const s16* ptr; if (gPlayerEntity.action != PLAYER_BOUNCE) { - rv = 0; + vvv = 0; } else { ptr = &gUnk_080B4468[gPlayerEntity.animationState & 6]; - rv = sub_080B1AE0(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]), 1); + vvv = GetVvvAtMetaTilePos(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]), 1); } - return rv; + return vvv; } diff --git a/src/object/well.c b/src/object/well.c index 29a04181..8f866a41 100644 --- a/src/object/well.c +++ b/src/object/well.c @@ -28,14 +28,14 @@ void Well_Init(Entity* this) { this->action = 1; tilePos = COORD_TO_TILE(this); this->field_0x80.HWORD = tilePos; - SetTile(16509, this->field_0x80.HWORD, 1); + SetTile(0x407d, this->field_0x80.HWORD, 1); } void Well_Action1(Entity* this) { s32 tileIndex; tileIndex = GetTileType(this->field_0x80.HWORD, 1); - if (tileIndex != 0x407D) { + if (tileIndex != 0x407d) { sub_08078B48(); gPlayerEntity.x.WORD = this->x.WORD; gPlayerEntity.y.HALF.HI = this->y.HALF.HI + 4; diff --git a/src/physics.c b/src/physics.c index 0929fb35..24bc75f8 100644 --- a/src/physics.c +++ b/src/physics.c @@ -18,7 +18,7 @@ const u8 gUnk_08114F38[]; extern u16 gExtraFrameOffsets[]; extern s8 gUnk_08126EE4[]; -extern const u16 gUnk_080046A4[]; +extern const KeyValuePair gUnk_080046A4[]; extern const u16 gUnk_080047F6[]; static void sub_0806FEE8(struct_gUnk_020000C0_1*, u32, u32, u32); @@ -402,7 +402,7 @@ bool32 CheckPlayerProximity(u32 x, u32 y, u32 distX, u32 DistY) { bool32 sub_0806FC24(u32 param_1, u32 param_2) { register u32 rv asm("r0"); - u32 val = sub_08007DD6(param_1, gUnk_080046A4); + u32 val = FindValueForKey(param_1, gUnk_080046A4); if (val) { rv = (*(gUnk_080047F6 + (val << 2)) >> param_2) & 0x1; } else { @@ -413,7 +413,7 @@ bool32 sub_0806FC24(u32 param_1, u32 param_2) { const u16* sub_0806FC50(u32 param_1, u32 param_2) { const u16* rv; - u32 val = sub_08007DD6(param_1, gUnk_080046A4); + u32 val = FindValueForKey(param_1, gUnk_080046A4); if (!val || ((gUnk_080047F6[val << 2] >> param_2) & 0x1) == 0) { rv = 0; } else { diff --git a/src/player.c b/src/player.c index 9c3b725f..985c1739 100644 --- a/src/player.c +++ b/src/player.c @@ -1974,7 +1974,7 @@ static void PlayerRoomTransition(Entity* this) { static void sub_080724DC(Entity* this) { this->knockbackDuration = 0; DeleteClones(); - if (GetTileUnderEntity(this) != 0x29) { + if (GetVvvAtEntity(this) != 0x29) { if ((gPlayerState.remainingDiveTime == 0) && (gPlayerState.swim_state != 0)) { PlayerUpdateSwimming(this); } @@ -2000,7 +2000,7 @@ static void sub_080724DC(Entity* this) { static void sub_0807258C(Entity* this) { if (gRoomControls.reload_flags == 0) { - if (GetCollisionTileInFront(this) == 0x29) { + if (GetVvvInFront(this) == 0x29) { UpdatePlayerMovement(); if (sub_080797C4() != 0) { gPlayerState.startPosX = gPlayerEntity.x.HALF.HI; @@ -2336,15 +2336,21 @@ static void sub_08072CFC(Entity* this) { ResetActiveItems(); } -static const u16 sTiles[] = { - 0x1AD, 1, 0, 0x1AE, 1, 0, 0x1AC, 1, 0, 0x1AF, 1, 0, -}; +// TODO Why would this use FindValueForKey just to do a normal comparison? +static const KeyValuePair sTiles0 = { 0x1AD, 1 }; +static const u16 sTiles0End = 0; +static const KeyValuePair sTiles1 = { 0x1AE, 1 }; +static const u16 sTiles1End = 0; +static const KeyValuePair sTiles2 = { 0x1AC, 1 }; +static const u16 sTiles2End = 0; +static const KeyValuePair sTiles3 = { 0x1AF, 1 }; +static const u16 sTiles3End = 0; -static const u16* const sTileTable[] = { - sTiles, - sTiles + 3, - sTiles + 6, - sTiles + 9, +static const KeyValuePair* const sTileTable[] = { + &sTiles0, + &sTiles1, + &sTiles2, + &sTiles3, }; static void sub_08072D54(Entity* this) { @@ -2359,13 +2365,13 @@ static void sub_08072D54(Entity* this) { uVar2 = GetTileType(sub_0806F730(this), this->collisionLayer); switch (this->subtimer) { case 0: - if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { + if (FindValueForKey(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { this->timer = 1; this->subtimer = 1; } break; case 1: - if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { + if (FindValueForKey(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { this->timer = 1; } else { this->subtimer = 2; @@ -2373,7 +2379,7 @@ static void sub_08072D54(Entity* this) { break; case 2: this->animationState ^= 4; - if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1]) != 0) { + if (FindValueForKey(uVar2, sTileTable[gPlayerEntity.animationState >> 1]) != 0) { this->timer = 1; this->subtimer = 3; } @@ -2381,7 +2387,7 @@ static void sub_08072D54(Entity* this) { break; case 3: this->animationState ^= 4; - if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { + if (FindValueForKey(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { this->timer = 1; } else { this->subtimer = 4; @@ -2616,7 +2622,7 @@ static void sub_080731D8(Entity* this) { static void sub_080732D0(Entity* this) { UpdateAnimationSingleFrame(this); - if (GetTileUnderEntity(this) != 40) { + if (GetVvvAtEntity(this) != 40) { this->direction = DirectionNorth; LinearMoveUpdate(this); } else { @@ -2878,7 +2884,7 @@ static void sub_080737BC(Entity* this) { pos = this->y.HALF.HI; tmp = 0xf; tmp &= pos; - if (tmp == 8 && !sub_080B1B0C(this)) { + if (tmp == 8 && !GetCollisionDataAtEntity(this)) { gPlayerState.jump_status |= 0x40; PlayerSetNormalAndCollide(); } @@ -4100,7 +4106,7 @@ void sub_0807529C(Entity* this) { void sub_080752AC(Entity* this, ScriptExecutionContext* ctx) { LinearMoveUpdate(this); if (!ctx->unk_18) { - if (GetTileUnderEntity(this) != 41) { + if (GetVvvAtEntity(this) != 41) { ctx->unk_18 = 1; ctx->unk_19 = 6; } diff --git a/src/playerItem/playerItemBottle.c b/src/playerItem/playerItemBottle.c index 798dc95e..ac6337f1 100644 --- a/src/playerItem/playerItemBottle.c +++ b/src/playerItem/playerItemBottle.c @@ -272,7 +272,7 @@ void PlayerItemBottle_UseEmptyBottle(Entity* this) { if (this->spriteSettings.flipX != 0) { iVar2 = -iVar2; } - if (GetRelativeCollisionTile(this, iVar2, (s8)ptr2[1]) == 0x10) { + if (GetVvvRelativeToEntity(this, iVar2, (s8)ptr2[1]) == 0x10) { this->type2 = ITEM_BOTTLE_WATER; } } diff --git a/src/playerItem/playerItemCellOverwriteSet.c b/src/playerItem/playerItemCellOverwriteSet.c index 3c9e766a..fe87694e 100644 --- a/src/playerItem/playerItemCellOverwriteSet.c +++ b/src/playerItem/playerItemCellOverwriteSet.c @@ -1,12 +1,36 @@ +#include "asm.h" +#include "common.h" #include "entity.h" #include "player.h" #include "room.h" -#include "common.h" -#include "asm.h" -extern const u8 gUnk_080B7910[]; -extern const u8 gUnk_080B79A7[]; -extern const u8 gUnk_080B7A3E[]; // TODO figure out type from arm_sub_080B1B84 and arm_sub_080B1BA4 +// vvv for specialMetaTile +const u8 gUnk_080B7910[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 0, 0, 83, 242, 243, + 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 61, 61, 61, 61, 61, 61, 61, 61, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 0, 116, 116, 41, 0, + 35, 41, 41, 41, 41, 41, 41, 16, 16, 16, 16, 41, 80, 81, 0, 15, 0, 0, 0, 0, 0, +}; + +const u8 gUnk_080B79A7[] = { + 29, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 40, 40, + 40, 15, 0, 0, 0, 0, 32, 0, 15, 3, 5, 10, 12, 1, 2, 4, 8, 15, 5, 10, 69, 68, 0, 0, 15, 0, + 0, 0, 15, 0, 0, 0, 0, 15, 0, 0, 15, 0, 1, 3, 2, 5, 15, 10, 4, 12, 8, 71, 15, 0, 0, 0, + 0, 0, 15, 15, 3, 5, 0, 13, 12, 11, 10, 0, 15, 15, 15, 15, 15, 15, 15, 15, 80, 7, 11, 13, 14, 15, + 15, 39, 15, 15, 16, 17, 18, 19, 0, 0, 15, 15, 0, 1, 2, 3, 4, 5, 8, 10, 12, 15, 5, 12, 0, 0, + 95, 39, 103, 104, 105, 106, 107, 49, 50, 58, 60, 35, 43, 43, 5, 34, 1, 2, 4, 8, 12, +}; + +const u16 gUnk_080B7A3E[] = { + 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 129, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 16, 0, 64, 0, 3, 3, 3, 3, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, +}; // TODO no need to store this in an u16? +// TODO figure out type from arm_sub_080B1B84 and arm_sub_080B1BA4, also related to specialMetaTiles void PlayerItemCellOverwriteSet(Entity* this) { static const s8 gUnk_080B7B6C[] = { 0x0, -0x10, 0x10, 0x0, 0x0, 0x10, -0x10, 0x0 }; diff --git a/src/playerItem/playerItemGustBig.c b/src/playerItem/playerItemGustBig.c index 7e69b965..b417720b 100644 --- a/src/playerItem/playerItemGustBig.c +++ b/src/playerItem/playerItemGustBig.c @@ -1,9 +1,8 @@ -#include "global.h" -#include "entity.h" -#include "player.h" -#include "functions.h" -#include "sound.h" #include "asm.h" +#include "entity.h" +#include "functions.h" +#include "player.h" +#include "sound.h" extern void sub_08078CD0(Entity*); extern void sub_08018FA0(Entity*); @@ -12,8 +11,6 @@ extern void sub_08018DE8(Entity*); extern void sub_08018E68(Entity*); extern void sub_08018F6C(Entity*); -extern u32 sub_08007DD6(u32, const u16*); - extern const u8 gUnk_08003E44[]; void PlayerItemGustBig(Entity* this) { @@ -40,9 +37,11 @@ static const Hitbox* const gUnk_080B3DE8[] = { &gUnk_080B3E20, &gUnk_080B3E28, }; -static const u16 gUnk_080B3DF4[] = { - 0x75, 0x1, 0x76, 0x1, 0x3ac, 0x1, 0x4050, 0x1, 0x377, 0x1, 0x378, 0x1, 0x71, 0x1, 0x72, 0x1, 0, 0, +static const KeyValuePair gUnk_080B3DF4[] = { + { 0x75, 0x1 }, { 0x76, 0x1 }, { 0x3ac, 0x1 }, { 0x4050, 0x1 }, + { 0x377, 0x1 }, { 0x378, 0x1 }, { 0x71, 0x1 }, { 0x72, 0x1 }, }; +static const u16 gUnk_080B3DF4End = 0; static const Hitbox gUnk_080B3E18 = { 0, 0, { 6, 3, 3, 6 }, 6, 6 }; static const Hitbox gUnk_080B3E20 = { 0, 0, { 6, 3, 3, 6 }, 8, 8 }; @@ -161,10 +160,10 @@ void sub_08018E68(Entity* this) { if (this->type2 == 0) { sub_0800451C(this); } - if (sub_08007DD6(sub_080B1A0C(this, x, y), gUnk_080B3DF4) != 0) { + if (FindValueForKey(sub_080B1A0C(this, x, y), gUnk_080B3DF4) != 0) { return; } - if (GetRelativeCollisionTile(this, x, y) == 0x74) { + if (GetVvvRelativeToEntity(this, x, y) == 0x74) { return; } if (sub_080040D8(this, (u8*)gUnk_08003E44, this->x.HALF.HI + x, this->y.HALF.HI + y) == 0) { diff --git a/src/playerItem/playerItemHeldObject.c b/src/playerItem/playerItemHeldObject.c index b470c242..bb2340f8 100644 --- a/src/playerItem/playerItemHeldObject.c +++ b/src/playerItem/playerItemHeldObject.c @@ -122,11 +122,11 @@ void sub_080AD040(PlayerItemHeldObjectEntity* this) { super->direction = super->knockbackDirection; super->knockbackDuration = 0; } - if (GetRelativeCollisionTile(super, gUnk_081320C4[super->direction >> 2], - gUnk_081320C4[(super->direction >> 2) + 1]) == 0x74) { + if (GetVvvRelativeToEntity(super, gUnk_081320C4[super->direction >> 2], + gUnk_081320C4[(super->direction >> 2) + 1]) == 0x74) { LinearMoveUpdate(super); } else { - tile = sub_080B1B0C(super); + tile = GetCollisionDataAtEntity(super); if ((tile != 0x24) && (tile != 0x26)) { ProcessMovement10(super); } @@ -136,7 +136,7 @@ void sub_080AD040(PlayerItemHeldObjectEntity* this) { (child->base).x = super->x; (child->base).y = super->y; (child->base).z = super->z; - tile = GetTileUnderEntity(super); + tile = GetVvvAtEntity(super); switch (tile) { case 0xd: case 0x10: diff --git a/src/playerItem/playerItemPacciCaneProjectile.c b/src/playerItem/playerItemPacciCaneProjectile.c index bdb9e215..255e49c0 100644 --- a/src/playerItem/playerItemPacciCaneProjectile.c +++ b/src/playerItem/playerItemPacciCaneProjectile.c @@ -109,7 +109,7 @@ void sub_080701F8(Entity* this) { } if (sub_080B1BA4(COORD_TO_TILE(this), gPlayerEntity.collisionLayer, 0x80) == 0) { if (sub_080040D8(this, &gUnk_08003E44, this->x.HALF.HI, this->y.HALF.HI) == 0) { - if (GetTileUnderEntity(this) == 0x19) { + if (GetVvvAtEntity(this) == 0x19) { this->action = 4; COLLISION_OFF(this); this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8; diff --git a/src/playerItem/playerItemSword.c b/src/playerItem/playerItemSword.c index 43471e77..21e836cc 100644 --- a/src/playerItem/playerItemSword.c +++ b/src/playerItem/playerItemSword.c @@ -340,35 +340,35 @@ void sub_080A7A54(PlayerItemSwordEntity* this) { void sub_080A7A84(PlayerItemSwordEntity* this) { u32 one; Entity* effect; - s16 new_var; + s16 xOffset; s32 uVar3; - Entity* new_var2; + Entity* entity; const s8* ptr; u32 tmp; u32 tmp2; - u32 r5; + u32 yOffset; if ((gPlayerEntity.frame & 0xf) != 0) { uVar3 = gUnk_08129072[((gPlayerEntity.frame & 0xf) - 1)][0]; one = 1; - r5 = gUnk_08129072[(gPlayerEntity.frame & 0xf) - 1][one]; + yOffset = gUnk_08129072[(gPlayerEntity.frame & 0xf) - 1][one]; if (((gPlayerState.sword_state & 0xc0) == 0) && (gPlayerEntity.spriteSettings.flipX == 1)) { uVar3 = -uVar3; } if (super->type != 0) { - sub_08008796(super, 0, super->x.HALF.HI + uVar3, super->y.HALF.HI + r5); + sub_08008796(super, 0, super->x.HALF.HI + uVar3, super->y.HALF.HI + yOffset); } else if (super->z.WORD == 0) { if (gPlayerState.skills & SKILL_ROCK_BREAKER) { tmp2 = 1; } else { tmp2 = 0; } - new_var = uVar3; - if (((sub_08008796(super, tmp2, super->x.HALF.HI + new_var, super->y.HALF.HI + r5) == NULL) && + xOffset = uVar3; + if (((sub_08008796(super, tmp2, super->x.HALF.HI + xOffset, super->y.HALF.HI + yOffset) == NULL) && (gPlayerState.sword_state != 0)) && ((gPlayerState.sword_state & 0xc0) == 0)) { - new_var2 = super; - if (GetRelativeCollisionTile(new_var2, new_var, r5) == 0x2e) { + entity = super; + if (GetVvvRelativeToEntity(entity, xOffset, yOffset) == 0x2e) { SoundReqClipped(&gPlayerEntity, SFX_ITEM_GLOVES_KNOCKBACK); } else { SoundReqClipped(&gPlayerEntity, SFX_METAL_CLINK); @@ -376,10 +376,10 @@ void sub_080A7A84(PlayerItemSwordEntity* this) { effect = CreateObject(SPECIAL_FX, FX_LIGHTNING, 0); if (effect != NULL) { ptr = gUnk_0812908E; - effect->x.HALF.HI = new_var2->x.HALF.HI + ptr[new_var2->animationState]; - tmp = new_var2->animationState + 1; - effect->y.HALF.HI = new_var2->y.HALF.HI + ptr[tmp]; - effect->z = new_var2->z; + effect->x.HALF.HI = entity->x.HALF.HI + ptr[entity->animationState]; + tmp = entity->animationState + 1; + effect->y.HALF.HI = entity->y.HALF.HI + ptr[tmp]; + effect->z = entity->z; } } } diff --git a/src/playerUtils.c b/src/playerUtils.c index 220fe9d1..0d3a1422 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -79,7 +79,7 @@ InteractableObject* sub_080784E4(void); u32 sub_08079778(void); u32 GetPlayerTilePos(void); -extern const u16 gUnk_08007CAC[]; +extern const KeyValuePair gMapVvvToSurfaceType[]; u32 sub_0807BEEC(u32 param_1, u32 param_2, u32 param_3); @@ -107,7 +107,7 @@ extern const u16* sub_0806FC50(u32 param_1, u32 param_2); bool32 sub_08079F48(u32 param_1, u32 param_2); -extern void FillUnkData3ForLayer(LayerStruct*); +extern void FillVvvForLayer(LayerStruct*); extern void RenderTilemapToScreenblock(u16*, LayerStruct*); extern u16 gUnk_080B77C0[]; @@ -140,7 +140,8 @@ void sub_0807C5B0(void); extern u8 gUnk_080082DC[]; extern u32 sub_08004202(Entity*, u8*, u32); -extern u32 gUnk_02022830[]; +// This just reuses the first 12 bytes of gUnk_02022830 to store a MapDataDefinition there temporarily. +extern MapDataDefinition gUnk_02022830; extern u16* gUnk_0800823C[]; void UpdateActiveItems(PlayerEntity* this) { @@ -733,7 +734,7 @@ void SurfaceAction_AutoLadder(Entity*); void SurfaceAction_ClimbWall(Entity*); void SurfaceAction_2C(Entity*); -void (*const gUnk_0811C120[])(Entity*) = { +void (*const gSurfaceActions[])(Entity*) = { SurfaceAction_DoNothing, SurfaceAction_Pit, NULL, @@ -782,37 +783,47 @@ void (*const gUnk_0811C120[])(Entity*) = { SurfaceAction_Dust, }; -const u16 gUnk_0811C240[]; -const u16 gUnk_0811C24A[]; -const u16 gUnk_0811C254[]; -const u16 gUnk_0811C25E[]; -const u16 gUnk_0811C1F8[]; -const u16 gUnk_0811C20A[]; -const u16 gUnk_0811C21C[]; -const u16 gUnk_0811C22E[]; +const KeyValuePair gUnk_0811C240[]; +const KeyValuePair gUnk_0811C24A[]; +const KeyValuePair gUnk_0811C254[]; +const KeyValuePair gUnk_0811C25E[]; +const KeyValuePair gUnk_0811C1F8[]; +const KeyValuePair gUnk_0811C20A[]; +const KeyValuePair gUnk_0811C21C[]; +const KeyValuePair gUnk_0811C22E[]; -const u16* const gUnk_0811C1D8[] = { +const KeyValuePair* const gUnk_0811C1D8[] = { gUnk_0811C240, gUnk_0811C24A, gUnk_0811C254, gUnk_0811C25E, }; -const u16* const gUnk_0811C1E8[] = { +const KeyValuePair* const gUnk_0811C1E8[] = { gUnk_0811C1F8, gUnk_0811C20A, gUnk_0811C21C, gUnk_0811C22E, }; -const u16 gUnk_0811C1F8[] = { 43, 1, 65, 1, 78, 8, 76, 2, 0 }; -const u16 gUnk_0811C20A[] = { 44, 3, 66, 3, 76, 2, 77, 4, 0 }; -const u16 gUnk_0811C21C[] = { 42, 5, 64, 5, 79, 6, 77, 4, 0 }; -const u16 gUnk_0811C22E[] = { 45, 7, 67, 7, 78, 8, 79, 6, 0 }; -const u16 gUnk_0811C240[] = { 42, 1, 38, 1, 0 }; -const u16 gUnk_0811C24A[] = { 45, 1, 39, 1, 0 }; -const u16 gUnk_0811C254[] = { 43, 1, 38, 1, 0 }; -const u16 gUnk_0811C25E[] = { 44, 1, 39, 1, 0 }; -const u16 gUnk_0811C268[] = { 16, 1, 90, 1, 17, 1, 19, 1, 0, 0 }; +const KeyValuePair gUnk_0811C1F8[] = { { 43, 1 }, { 65, 1 }, { 78, 8 }, { 76, 2 } }; +const u16 gUnk_0811C1F8End = 0; +const KeyValuePair gUnk_0811C20A[] = { { 44, 3 }, { 66, 3 }, { 76, 2 }, { 77, 4 } }; +const u16 gUnk_0811C20AEnd = 0; +const KeyValuePair gUnk_0811C21C[] = { { 42, 5 }, { 64, 5 }, { 79, 6 }, { 77, 4 } }; +const u16 gUnk_0811C21CEnd = 0; +const KeyValuePair gUnk_0811C22E[] = { { 45, 7 }, { 67, 7 }, { 78, 8 }, { 79, 6 } }; +const u16 gUnk_0811C22EEnd = 0; +const KeyValuePair gUnk_0811C240[] = { { 42, 1 }, { 38, 1 } }; +const u16 gUnk_0811C240End = 0; +const KeyValuePair gUnk_0811C24A[] = { { 45, 1 }, { 39, 1 } }; +const u16 gUnk_0811C24AEnd = 0; +const KeyValuePair gUnk_0811C254[] = { { 43, 1 }, { 38, 1 } }; +const u16 gUnk_0811C254End = 0; +const KeyValuePair gUnk_0811C25E[] = { { 44, 1 }, { 39, 1 } }; +const u16 gUnk_0811C25EEnd = 0; +const KeyValuePair gUnk_0811C268[] = { { 16, 1 }, { 90, 1 }, { 17, 1 }, { 19, 1 } }; +const u16 gUnk_0811C268EEnd = 0; + void sub_0807B114(PlayerEntity*); void sub_0807B128(PlayerEntity*); void (*const gUnk_0811C27C[])(PlayerEntity*) = { @@ -1506,7 +1517,7 @@ void ResetPlayerVelocity(void) { bool32 sub_08078F74(Entity* this) { if ((gArea.portal_mode == 3) && (gPlayerState.field_0x35 != 0xff)) { gPlayerState.jump_status = 0x81; - this->action = 0x15; + this->action = PLAYER_USEPORTAL; this->subAction = 0; this->zVelocity = Q_16_16(2.0); return TRUE; @@ -1734,7 +1745,7 @@ void RespawnPlayer(void) { index = 0; if (gPlayerState.path_memory[0] != 0xffffffff) { ptr1 = gPlayerState.path_memory; - while (GetCollisionData((u16)*ptr1, *ptr1 >> 0x1e) == 0xf) { + while (GetCollisionDataAtMetaTilePos((u16)*ptr1, *ptr1 >> 0x1e) == 0xf) { ptr1++; index++; if ((index > 0xf) || (*ptr1 == -1)) { @@ -1788,11 +1799,11 @@ bool32 sub_08079550(void) { tilePos2 = COORD_TO_TILE_OFFSET(&gPlayerEntity, (gPlayerEntity.hitbox)->unk2[2], -ptr[1]); } - uVar3 = sub_080B1AE0(tilePos1, gPlayerEntity.collisionLayer); - uVar3 = sub_08007DD6(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); + uVar3 = GetVvvAtMetaTilePos(tilePos1, gPlayerEntity.collisionLayer); + uVar3 = FindValueForKey(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); if (uVar3 != 0) { - uVar3 = sub_080B1AE0(tilePos2, gPlayerEntity.collisionLayer); - uVar3 = sub_08007DD6(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); + uVar3 = GetVvvAtMetaTilePos(tilePos2, gPlayerEntity.collisionLayer); + uVar3 = FindValueForKey(uVar3, gUnk_0811C1E8[gPlayerEntity.animationState >> 1]); if (uVar3 != 0) { gPlayerState.pushedObject |= 0x80; if (gPlayerState.dash_state == 0 && (++gPlayerEntity.subtimer <= 5)) { @@ -1800,7 +1811,7 @@ bool32 sub_08079550(void) { } gPlayerEntity.animationState = uVar3 - 1; - gPlayerEntity.action = 4; + gPlayerEntity.action = PLAYER_JUMP; gPlayerEntity.subAction = 0; COLLISION_OFF(&gPlayerEntity); gPlayerState.jump_status = 0x81; @@ -1817,7 +1828,7 @@ void sub_08079708(Entity* this) { gPlayerState.framestate = PL_STATE_DIE; gPlayerState.field_0x3c = 0xff; this->flags &= ~ENT_COLLIDE; - this->action = 0xa; + this->action = PLAYER_MINISHDIE; this->subAction = 0; sub_080085B0(this); if ((gPlayerState.flags & (PL_CAPTURED | PL_DISABLE_ITEMS)) == 0) { @@ -1884,7 +1895,7 @@ void sub_080797EC(void) { } else { animation = 0x16c; if (sub_080793E4(0)) { - if (GetCollisionData(GetPlayerTilePos(), gPlayerEntity.collisionLayer) != 0xff) { + if (GetCollisionDataAtMetaTilePos(GetPlayerTilePos(), gPlayerEntity.collisionLayer) != 0xff) { gPlayerState.sword_state &= ~8; animation = 0x170; } @@ -1918,7 +1929,8 @@ void sub_080797EC(void) { } else if (gPlayerState.sword_state != 0) { animation = 0x16c; if (sub_080793E4(0)) { - if (GetCollisionData(GetPlayerTilePos(), (u32)gPlayerEntity.collisionLayer) != 0xff) { + if (GetCollisionDataAtMetaTilePos(GetPlayerTilePos(), (u32)gPlayerEntity.collisionLayer) != + 0xff) { gPlayerState.sword_state &= ~8; animation = 0x170; } @@ -2117,13 +2129,13 @@ bool32 sub_08079C30(Entity* param_1) { return TRUE; } - if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 0, -1), (u16*)gUnk_08007CAC)) + if (gPlayerState.floor_type != FindValueForKey(GetVvvRelativeToEntity(param_1, 0, -1), gMapVvvToSurfaceType)) return FALSE; - if (gPlayerState.floor_type != sub_08007DD6(GetRelativeCollisionTile(param_1, 2, 0), (u16*)gUnk_08007CAC)) + if (gPlayerState.floor_type != FindValueForKey(GetVvvRelativeToEntity(param_1, 2, 0), gMapVvvToSurfaceType)) return FALSE; - if (gPlayerState.floor_type == sub_08007DD6(GetRelativeCollisionTile(param_1, -2, 0), (u16*)gUnk_08007CAC)) { + if (gPlayerState.floor_type == FindValueForKey(GetVvvRelativeToEntity(param_1, -2, 0), gMapVvvToSurfaceType)) { return TRUE; } } @@ -2135,7 +2147,7 @@ bool32 sub_08079D48(void) { return TRUE; } else { if (!PlayerCheckNEastTile()) { - if (!sub_08007DD6((u16)GetTileUnderEntity(&gPlayerEntity), gUnk_0811C268)) { + if (!FindValueForKey((u16)GetVvvAtEntity(&gPlayerEntity), gUnk_0811C268)) { return TRUE; } } @@ -2205,13 +2217,13 @@ bool32 sub_08079E90(u32 param_1) { tmp1 = -gPlayerEntity.hitbox->unk2[3]; } } - if (!sub_08079F48(param_1, sub_080B1AF0(&gPlayerEntity, tmp2, tmp1))) { + if (!sub_08079F48(param_1, GetCollisionDataRelativeTo(&gPlayerEntity, tmp2, tmp1))) { if ((gPlayerEntity.direction & DirectionSouth) != 0) { tmp1 = -tmp1; } else { tmp2 = -tmp2; } - if (!sub_08079F48(param_1, sub_080B1AF0(&gPlayerEntity, tmp2, tmp1))) { + if (!sub_08079F48(param_1, GetCollisionDataRelativeTo(&gPlayerEntity, tmp2, tmp1))) { return FALSE; } } @@ -2351,7 +2363,7 @@ void sub_0807A180(Entity* param_1, u32 param_2, u32 param_3, u32 param_4) { void UpdateFloorType(void) { gPlayerState.floor_type = GetSurfaceCalcType(&gPlayerEntity, 0, 0); - gUnk_0811C120[gPlayerState.floor_type](&gPlayerEntity); + gSurfaceActions[gPlayerState.floor_type](&gPlayerEntity); } SurfaceType GetSurfaceCalcType(Entity* param_1, s32 x, s32 y) { @@ -2373,8 +2385,8 @@ SurfaceType GetSurfaceCalcType(Entity* param_1, s32 x, s32 y) { gPlayerState.surfaceTimer++; } gPlayerState.floor_type_last = gPlayerState.floor_type; - tileType = GetRelativeCollisionTile(param_1, x, y); - return sub_08007DD6(tileType, (u16*)gUnk_08007CAC); + tileType = GetVvvRelativeToEntity(param_1, x, y); + return FindValueForKey(tileType, gMapVvvToSurfaceType); } void EnablePlayerDraw(Entity* this) { @@ -2474,7 +2486,8 @@ void sub_0807A750(u32 param_1, u32 param_2, const u8* param_3, u32 param_4) { index = param_1 % 16; } if ((index != 0) && (index != 0xf)) { - uVar2 = GetCollisionData((param_1 >> 4 & 0x3f) | (param_2 >> 4 & 0x3f) << 6, gPlayerEntity.collisionLayer); + uVar2 = GetCollisionDataAtMetaTilePos((param_1 >> 4 & 0x3f) | (param_2 >> 4 & 0x3f) << 6, + gPlayerEntity.collisionLayer); if (uVar2 > 0xf) { if (uVar2 != 0xff) { uVar2 = param_3[uVar2 - 0x10]; @@ -2531,7 +2544,7 @@ void sub_0807A750(u32 param_1, u32 param_2, const u8* param_3, u32 param_4) { } } -u32 GetCollisionTileInFront(Entity* this) { +u32 GetVvvInFront(Entity* this) { s32 x; s32 y; switch (this->direction) { @@ -2556,7 +2569,7 @@ u32 GetCollisionTileInFront(Entity* this) { x = 0; break; } - return GetRelativeCollisionTile(this, x, y); + return GetVvvRelativeToEntity(this, x, y); } void nullsub_505(void) { @@ -2657,7 +2670,7 @@ bool32 sub_0807AC54(Entity* this) { this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8; // fallthrough case SURFACE_CLIMB_WALL: - this->action = 0x1d; + this->action = PLAYER_CLIMB; this->subAction = 0; this->y.HALF.LO = 0; gPlayerState.animation = 0x2cf; @@ -2666,7 +2679,7 @@ bool32 sub_0807AC54(Entity* this) { this->x.HALF.HI = (this->x.HALF.HI & 0xfff0) | 8; // fallthrough case SURFACE_2C: - this->action = 0x1d; + this->action = PLAYER_CLIMB; this->subAction = 1; this->y.HALF.LO = 0; return TRUE; @@ -2733,7 +2746,8 @@ bool32 ToggleDiving(Entity* this) { } void PlayerUpdateSwimming(Entity* this) { - if ((((this->action != 0x17) || (gPlayerState.field_0xa == 0)) && (gRoomControls.reload_flags == 0)) && + if ((((this->action != PLAYER_ROOMTRANSITION) || (gPlayerState.field_0xa == 0)) && + (gRoomControls.reload_flags == 0)) && ((gPlayerState.playerInput.newInput & PLAYER_INPUT_8) != 0)) { if (GetInventoryValue(ITEM_SWIM_BUTTERFLY) == 1) { this->speed = 0x1c0; @@ -2975,7 +2989,7 @@ void SetTileType(u32 tileType, u32 position, u32 layer) { if ((gRoomControls.scroll_flags & 2) != 0) { gMapBottom.collisionData[position] = collisionData; } - data->unkData3[position] = gUnk_080B37A0[tileType]; + data->vvv[position] = gUnk_080B37A0[tileType]; if ((gRoomControls.scroll_flags & 1) == 0) { u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; if (layer != 2) { @@ -3000,18 +3014,18 @@ void SetTileType(u32 tileType, u32 position, u32 layer) { } } -bool32 sub_0807B434(u32 position, u32 layer) { - switch (GetTileType(position, layer)) { +bool32 sub_0807B434(u32 metaTilePos, u32 layer) { + switch (GetTileType(metaTilePos, layer)) { case 0x36: case 0x37: return FALSE; default: - return sub_080B1AE0(position, layer) != 0xd; + return GetVvvAtMetaTilePos(metaTilePos, layer) != 0xd; } } -bool32 sub_0807B464(u32 param_1, u32 param_2) { - return sub_080B1AE0(param_1, param_2) == 0x56; +bool32 sub_0807B464(u32 metaTilePos, u32 layer) { + return GetVvvAtMetaTilePos(metaTilePos, layer) == 0x56; } void sub_0807B480(u32 tilePos, u32 param_2) { @@ -3073,7 +3087,7 @@ u32 sub_0807B600(u32 param_1) { u32 tile; tile = param_1 - 0x40; - if (sub_080B1AE0(param_1, 1) != 0x56) { + if (GetVvvAtMetaTilePos(param_1, 1) != 0x56) { return FALSE; } else { tileType = GetTileType(param_1, 1); @@ -3092,10 +3106,10 @@ u32 sub_0807B600(u32 param_1) { } else { if (GetTileType(param_1, 2) != 0) { SetTileType(0x2f2, param_1, 1); - if (GetCollisionData(tile, 1) == 3) { + if (GetCollisionDataAtMetaTilePos(tile, 1) == 3) { SetTileType(0x2f4, tile, 1); } - if (GetCollisionData(param_1 + 0x40, 1) == 3) { + if (GetCollisionDataAtMetaTilePos(param_1 + 0x40, 1) == 3) { SetTileType(0x2f4, param_1, 1); } } else { @@ -3121,7 +3135,7 @@ u32 sub_0807B600(u32 param_1) { void sub_0807B778(u32 position, u32 layer) { u32 tmp; - if (sub_080B1AE0(position, layer) == 0xd) { + if (GetVvvAtMetaTilePos(position, layer) == 0xd) { tmp = sub_0807B434(position - 0x40, layer); tmp |= sub_0807B434(position + 1, layer) << 1; tmp |= sub_0807B434(position + 0x40, layer) << 2; @@ -3190,7 +3204,7 @@ void SetMetaTileByIndex(u32 tileIndex, u32 position, u32 layer) { data->mapData[position] = tileIndex; tileType = data->metatileTypes[tileIndex]; data->collisionData[position] = gUnk_080B3E80[tileType]; - data->unkData3[position] = gUnk_080B37A0[tileType]; + data->vvv[position] = gUnk_080B37A0[tileType]; if ((gRoomControls.scroll_flags & 1) == 0) { u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; if (layer != 2) { @@ -3221,7 +3235,7 @@ void RestorePrevTileEntity(u32 position, u32 layer) { data->mapData[position] = tileIndex = data->mapDataClone[position]; tileType = data->metatileTypes[tileIndex]; data->collisionData[position] = gUnk_080B3E80[tileType]; - data->unkData3[position] = gUnk_080B37A0[tileType]; + data->vvv[position] = gUnk_080B37A0[tileType]; if ((gRoomControls.scroll_flags & 1) == 0) { u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; if (layer != 2) { @@ -3517,18 +3531,18 @@ void LoadRoomGfx(void) { MemCopy(gMapBottom.mapData, gMapBottom.mapDataClone, sizeof(gMapBottom.mapData)); MemCopy(gMapTop.mapData, gMapTop.mapDataClone, sizeof(gMapBottom.mapData)); } else if (gRoomTransition.field_0x2c[0] == 2) { - MemCopy(gMapBottom.mapData, gMapBottom.unkData3, 0x1000); + MemCopy(gMapBottom.mapData, gMapBottom.vvv, 0x1000); MemCopy(gMapBottom.mapDataClone, gMapBottom.mapData, 0x1000); - MemCopy(gMapBottom.unkData3, gMapBottom.mapDataClone, 0x1000); - MemCopy(gMapBottom.mapData + 0x800, gMapBottom.unkData3, 0x1000); + MemCopy(gMapBottom.vvv, gMapBottom.mapDataClone, 0x1000); + MemCopy(gMapBottom.mapData + 0x800, gMapBottom.vvv, 0x1000); MemCopy(gMapBottom.mapDataClone + 0x800, gMapBottom.mapData + 0x800, 0x1000); - MemCopy(gMapBottom.unkData3, gMapBottom.mapDataClone + 0x800, 0x1000); - MemCopy(gMapTop.mapData, gMapTop.unkData3, 0x1000); + MemCopy(gMapBottom.vvv, gMapBottom.mapDataClone + 0x800, 0x1000); + MemCopy(gMapTop.mapData, gMapTop.vvv, 0x1000); MemCopy(gMapTop.mapDataClone, gMapTop.mapData, 0x1000); - MemCopy(gMapTop.unkData3, gMapTop.mapDataClone, 0x1000); - MemCopy(gMapTop.mapData + 0x800, gMapTop.unkData3, 0x1000); + MemCopy(gMapTop.vvv, gMapTop.mapDataClone, 0x1000); + MemCopy(gMapTop.mapData + 0x800, gMapTop.vvv, 0x1000); MemCopy(gMapTop.mapDataClone + 0x800, gMapTop.mapData + 0x800, 0x1000); - MemCopy(gMapTop.unkData3, gMapTop.mapDataClone + 0x800, 0x1000); + MemCopy(gMapTop.vvv, gMapTop.mapDataClone + 0x800, 0x1000); } if (!clearBottomMap) { sub_0807BBE4(); @@ -3538,8 +3552,8 @@ void LoadRoomGfx(void) { sub_0807C460(); } CreateCollisionDataBorderAroundRoom(); - FillUnkData3ForLayer(&gMapBottom); - FillUnkData3ForLayer(&gMapTop); + FillVvvForLayer(&gMapBottom); + FillVvvForLayer(&gMapTop); if (!clearBottomMap) { // Render the complete bottom and top metatilemaps into the tilemaps. RenderTilemapToScreenblock((u16*)&gMapDataBottomSpecial, &gMapBottom); @@ -3627,26 +3641,27 @@ void sub_0807C460(void) { } void sub_0807C4F8(void) { - // TODO convert to MapDataDefinition* - u32* puVar1; - u32* ptr; + MapDataDefinition* ptr1; + MapDataDefinition* ptr2; if (gRoomControls.area != AREA_PALACE_OF_WINDS_BOSS) { MemClear(gMapDataBottomSpecial, 0x8000); MemClear(gMapDataTopSpecial, 0x8000); - ptr = gUnk_02022830; - puVar1 = (u32*)(gArea.pCurrentRoomInfo)->map; - puVar1 -= 3; + ptr1 = &gUnk_02022830; + ptr2 = (MapDataDefinition*)(gArea.pCurrentRoomInfo)->map; + ptr2 -= 1; do { - puVar1 += 3; - if (((u16*)puVar1[1] == gMapDataBottomSpecial) || ((u16*)puVar1[1] == (u16*)&gMapDataTopSpecial)) { - // only store the map data definitions for bitmap backgrounds in gUnk_02022830? - ptr[0] = puVar1[0] & 0x7fffffff; - ptr[1] = puVar1[1]; - ptr[2] = puVar1[2]; - LoadMapData((MapDataDefinition*)ptr); + ptr2 += 1; + // TODO why does this not match with ptr2->dest? + if (((u16*)((u32*)ptr2)[1] == gMapDataBottomSpecial) || + ((u16*)((u32*)ptr2)[1] == (u16*)&gMapDataTopSpecial)) { + // only load the map data definitions for bitmap backgrounds? + ptr1->src = ptr2->src & 0x7fffffff; + ptr1->dest = ptr2->dest; + ptr1->size = ptr2->size; + LoadMapData(ptr1); } - } while ((s32)*puVar1 < 0); + } while ((s32)ptr2->src < 0); MemCopy(gMapDataBottomSpecial, gMapDataBottomSpecial + 0x2000, 0x4000); sub_0807C5F4(gMapDataBottomSpecial, gMapDataBottomSpecial + 0x2000); diff --git a/src/projectile/projectile5.c b/src/projectile/projectile5.c index 49b63628..9a89c450 100644 --- a/src/projectile/projectile5.c +++ b/src/projectile/projectile5.c @@ -4,7 +4,7 @@ #include "room.h" #include "physics.h" -extern u32 GetCollisionData(u32, u32); +extern u32 GetCollisionDataAtMetaTilePos(u32, u32); extern void (*const Projectile5_Functions[])(Entity*); extern void (*const Projectile5_Actions[])(Entity*); @@ -28,7 +28,8 @@ void sub_080A86F0(Entity* this) { pbVar2 = &this->parent->field_0x82.HALF.HI; if ((this->parent->field_0x82.HALF.HI & 0x3f) == 3) { if (gPlayerState.hurtBlinkSpeed != 0) { - if (GetCollisionData(TILE(this->x.HALF.HI, this->y.HALF.HI), gPlayerEntity.collisionLayer) == 0) { + if (GetCollisionDataAtMetaTilePos(TILE(this->x.HALF.HI, this->y.HALF.HI), + gPlayerEntity.collisionLayer) == 0) { if (this->contactFlags == 0x80) { *pbVar2 = *pbVar2 & 0x7f; DeleteThisEntity(); diff --git a/src/projectile/removableDust.c b/src/projectile/removableDust.c index 7927339f..51ce0d95 100644 --- a/src/projectile/removableDust.c +++ b/src/projectile/removableDust.c @@ -5,8 +5,6 @@ #include "object.h" #include "room.h" -extern u32 sub_080B1AE0(u16, u8); - extern void (*const RemovableDust_Functions[])(Entity*); extern const u16 gUnk_08129FD0[]; extern const u16 gUnk_08129FE4[]; @@ -88,7 +86,7 @@ void sub_080AA534(Entity* this) { void sub_080AA544(Entity* this) { u8* pbVar1; - s32 iVar2; + s32 vvv; u32 uVar3; s32 iVar4; const u16* puVar5; @@ -101,8 +99,8 @@ void sub_080AA544(Entity* this) { uVar3 = 0; iVar4 = 0; do { - iVar2 = sub_080B1AE0((param - tmp[uVar3]) & 0xffff, this->collisionLayer); - if (iVar2 == 0x3e) { + vvv = GetVvvAtMetaTilePos((param - tmp[uVar3]) & 0xffff, this->collisionLayer); + if (vvv == 0x3e) { iVar4++; } uVar3++; diff --git a/src/projectile/spiderWeb.c b/src/projectile/spiderWeb.c index 59ecd7dc..a089d75a 100644 --- a/src/projectile/spiderWeb.c +++ b/src/projectile/spiderWeb.c @@ -158,7 +158,7 @@ void SpiderWeb_SubAction0(Entity* this) { if (tmp * 2 - entity->animationState == 0) { x = gUnk_0812A064[tmp * 2] + this->x.HALF.HI; y = gUnk_0812A064[tmp * 2 + 1] + this->y.HALF.HI; - if (sub_080B1B18(x, y, entity->collisionLayer) == 0) { + if (GetCollisionDataAtWorldCoords(x, y, entity->collisionLayer) == 0) { entity->x.HALF.HI = x; entity->y.HALF.HI = y; } @@ -225,7 +225,7 @@ void sub_080AA9E0(Entity* this) { } void sub_080AAA68(Entity* this) { - static const u16 typeTiles[] = { 16419, 16421, 16422, 16420 }; + static const u16 typeTiles[] = { 0x4023, 0x4025, 0x4026, 0x4024 }; SetTile(typeTiles[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer); } diff --git a/src/scroll.c b/src/scroll.c index a92e4619..8131f5e0 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -28,8 +28,8 @@ extern void sub_0805E248(); extern u8 gUpdateVisibleTiles; extern u16 gUnk_0200B640; extern MapDataDefinition** gCaveBorderMapData[]; -extern u32 gUnk_02022830[]; -extern u16 gUnk_020246B0[]; +extern u16 gUnk_02022830[0xc00]; +extern u16 gUnk_020246B0[0xc00]; extern u8 gUnk_080B7910[]; void Scroll0(RoomControls*); @@ -54,7 +54,7 @@ u32 sub_080803D0(); u32 sub_08080278(); void sub_08080C80(MapDataDefinition*); void sub_08080368(); -void FillUnkData3ForLayer(LayerStruct*); +void FillVvvForLayer(LayerStruct*); bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4); bool32 sub_08080808(const Transition* transition, u32 param_2, u32 param_3, u32 param_4); void sub_080808D8(s32); @@ -357,8 +357,8 @@ void Scroll5Sub3(RoomControls* controls) { sub_08080368(); gUnk_02034480.unk_00 = gUnk_0200B640; MemCopy(gUnk_02022830, gUnk_020246B0, 0x1800); - FillUnkData3ForLayer(&gMapBottom); - FillUnkData3ForLayer(&gMapTop); + FillVvvForLayer(&gMapBottom); + FillVvvForLayer(&gMapTop); sub_0807BBE4(); CreateCollisionDataBorderAroundRoom(); sub_0805E248(); @@ -435,7 +435,7 @@ u32 sub_08080278(void) { u16* ptr1; u32 tmp; - ptr1 = (u16*)gUnk_02022830; + ptr1 = gUnk_02022830; width = gRoomControls.width >> 4; height = (gRoomControls.height >> 4) << 6; result = 0; @@ -803,9 +803,10 @@ void UpdateDoorTransition() { case 0x1d: uVar4 = controls->camera_target->y.HALF.HI - controls->origin_y; uVar3 = controls->camera_target->x.HALF.HI - controls->origin_x; - uVar1 = sub_080B1AE0((((controls->camera_target->x.HALF.HI - controls->origin_x) >> 4) & 0x3F) | - ((((controls->camera_target->y.HALF.HI - controls->origin_y) >> 4) & 0x3F) << 6), - controls->camera_target->collisionLayer); + uVar1 = GetVvvAtMetaTilePos( + (((controls->camera_target->x.HALF.HI - controls->origin_x) >> 4) & 0x3F) | + ((((controls->camera_target->y.HALF.HI - controls->origin_y) >> 4) & 0x3F) << 6), + controls->camera_target->collisionLayer); gRoomTransition.stairs_idx = sub_080B1A48(uVar3, uVar4, controls->camera_target->collisionLayer); switch (uVar1) { case 0x3f: @@ -818,19 +819,19 @@ void UpdateDoorTransition() { } } -// fill the unkData3 for the whole layer -void FillUnkData3ForLayer(LayerStruct* layer) { - u32 index; +// fill the vvv for the whole layer +void FillVvvForLayer(LayerStruct* layer) { + u32 metaTilePos; u16* metatileTypes = layer->metatileTypes; const u8* ptr = gUnk_080B37A0; - u8* ptr3 = layer->unkData3; + u8* ptr3 = layer->vvv; u16* mapData = layer->mapData; - for (index = 0; index < 0x1000; index++) { - u16 metaTileIndex = mapData[index]; + for (metaTilePos = 0; metaTilePos < 0x40 * 0x40; metaTilePos++) { + u16 metaTileIndex = mapData[metaTilePos]; if (metaTileIndex < 0x4000) { - layer->unkData3[index] = ptr[metatileTypes[metaTileIndex]]; + layer->vvv[metaTilePos] = ptr[metatileTypes[metaTileIndex]]; } else { - layer->unkData3[index] = gUnk_080B7910[metaTileIndex - 0x4000]; + layer->vvv[metaTilePos] = gUnk_080B7910[metaTileIndex - 0x4000]; } } }