Use metatile enum

This commit is contained in:
octorock 2023-07-05 18:30:27 +02:00
parent f89bb66911
commit b6a94d5062
155 changed files with 5374 additions and 3749 deletions

View File

@ -187,11 +187,11 @@ arm_GetCollisionDataAtMetaTilePos:
ldrb r0, [r1, r0]
bx lr
arm_func_start arm_sub_080B1B54
arm_sub_080B1B54: @ 0x080B1B54
arm_func_start arm_GetVvvForMetaTileType
arm_GetVvvForMetaTileType: @ 0x080B1B54
lsls r0, r0, #0x12
ldrlo r1, _080B1C30 @ =gUnk_080B37A0
ldrhs r1, _080B1C34 @ =gUnk_080B7910
ldrlo r1, _080B1C30 @ =gMapMetaTileTypeToVvv
ldrhs r1, _080B1C34 @ =gMapSpecialMetaTileToVvv
ldrb r0, [r1, r0, lsr #18]
bx lr
@ -257,8 +257,8 @@ _080B1C20: .4byte gRoomControls
_080B1C24: .4byte gVvvPtrs
_080B1C28: .4byte gRoomControls
_080B1C2C: .4byte gCollisionDataPtrs
_080B1C30: .4byte gUnk_080B37A0
_080B1C34: .4byte gUnk_080B7910
_080B1C30: .4byte gMapMetaTileTypeToVvv
_080B1C34: .4byte gMapSpecialMetaTileToVvv
_080B1C38: .4byte gMetatileTypesPtrs
_080B1C3C: .4byte gUnk_08000360
_080B1C40: .4byte gUnk_080B7A3E

View File

@ -84,7 +84,7 @@ ResolveCollisionLayer: @ 0x08016A30
movs r3, #1
cmp r0, #0
beq _08016A62
bl sub_080B1B54
bl GetVvvForMetaTileType
movs r3, #2
add r1, pc, #0x40
_08016A54:

View File

@ -69,11 +69,11 @@ SetMetaTile: @ r0 = tile type, r1, = tile position, r2 = layer
blo _0800019A @ jump if metaTile < 0x4000
push {r1, r2}
subs r4, r0, r6 @ r4 = metaTile - 0x4000
ldr r3, _08000210 @ =gUnk_080B7910
ldrb r0, [r3, r4] @ r0 = gUnk_080B7910[metaTile - 0x4000]
ldr r3, _08000210 @ =gMapSpecialMetaTileToVvv
ldrb r0, [r3, r4] @ r0 = gMapSpecialMetaTileToVvv[metaTile - 0x4000]
bl SetVvvAtMetaTilePos
ldr r3, _08000214 @ =gUnk_080B79A7
ldrb r0, [r3, r4] @ r0 = gUnk_080B79A7[metaTile - 0x4000]
ldr r3, _08000214 @ =gMapSpecialMetaTileToCollisionData
ldrb r0, [r3, r4] @ r0 = gMapSpecialMetaTileToCollisionData[metaTile - 0x4000]
lsrs r2, r2, #2 @ r2 = layer
bl SetCollisionData
pop {r0, r1} @ tilepos, layer
@ -89,11 +89,11 @@ _0800019A:
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] @ r0 = gUnk_080B37A0[metaTileType]
ldr r3, _08000218 @ =gMapMetaTileTypeToVvv
ldrb r0, [r3, r4] @ r0 = gMapMetaTileTypeToVvv[metaTileType]
bl SetVvvAtMetaTilePos
ldr r3, _0800021C @ =gUnk_080B3E80
ldrb r0, [r3, r4] @ r0 = gUnk_080B3E80[metaTileType]
ldr r3, _0800021C @ =gMapMetaTileTypeToCollisionData
ldrb r0, [r3, r4] @ r0 = gMapMetaTileTypeToCollisionData[metaTileType]
lsrs r2, r2, #2 @ r2 = layer
bl SetCollisionData
pop {r0, r1}
@ -105,7 +105,7 @@ _080001C4: .4byte gMapBottom+0x6004
_080001C8: .4byte gMapTop+0x6004
_080001CC: .4byte gMapBottom+0x6004
@ r0: @see gUnk_080B7910 r1: metaTilePos, r2: layer
@ r0: @see gMapSpecialMetaTileToVvv r1: metaTilePos, r2: layer
thumb_func_start SetVvvAtMetaTilePos
SetVvvAtMetaTilePos: @ 0x080001D0
lsls r2, r2, #2
@ -133,10 +133,10 @@ _08000200: .4byte gBG2Buffer+0x40
_08000204: .4byte gCollisionDataPtrs
_08000208: .4byte gMapDataPtrs
_0800020C: .4byte 0x00004000
_08000210: .4byte gUnk_080B7910
_08000214: .4byte gUnk_080B79A7
_08000218: .4byte gUnk_080B37A0
_0800021C: .4byte gUnk_080B3E80
_08000210: .4byte gMapSpecialMetaTileToVvv
_08000214: .4byte gMapSpecialMetaTileToCollisionData
_08000218: .4byte gMapMetaTileTypeToVvv
_0800021C: .4byte gMapMetaTileTypeToCollisionData
_08000220: .4byte gVvvPtrs
_08000224: .4byte gMapDataPtrs
@ -374,9 +374,9 @@ GetCollisionDataAtMetaTilePos: @ 0x080002E0
@ call 0x080B1B54
@ r0: u32 (tileIndex)
thumb_func_start sub_080B1B54
sub_080B1B54: @ 0x080002E4
ldr r3, _08000350 @ =ram_sub_080B1B54
thumb_func_start GetVvvForMetaTileType
GetVvvForMetaTileType: @ 0x080002E4
ldr r3, _08000350 @ =ram_GetVvvForMetaTileType
bx r3
@ call 0x080B1B68
@ -427,7 +427,7 @@ _08000340: .4byte ram_GetCollisionDataAtWorldCoords
_08000344: .4byte ram_GetCollisionDataAtRoomCoords
_08000348: .4byte ram_GetCollisionDataAtRoomTile
_0800034C: .4byte ram_GetCollisionDataAtMetaTilePos
_08000350: .4byte ram_sub_080B1B54
_08000350: .4byte ram_GetVvvForMetaTileType
_08000354: .4byte ram_sub_080B1B68
_08000358: .4byte ram_sub_080B1B84
_0800035C: .4byte ram_sub_080B1BA4

View File

@ -40,7 +40,7 @@ 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 bool32 GetVvvForMetaTileType(u32);
extern u32 CheckRectOnScreen(s32, s32, u32, u32);
extern u32 GetVvvRelativeToEntity(struct Entity_* entity, s32 xOffset, s32 yOffset);

View File

@ -32,13 +32,29 @@ typedef enum {
RESULT_COLLISION_WITHOUT_SET = 2,
} CollisionResult;
bool32 IsTileCollision(const u8*, s32, s32, u32);
/**
* @brief
*
* @param collisionData
* @param x x world coordinate
* @param y y world coordinate
* @param collisionType @see CollisionType
* @return bool32
*/
bool32 IsTileCollision(const u8* collisionData, s32 x, s32 y, u32 collisionType);
bool32 IsColliding(Entity*, Entity*);
bool32 IsCollidingPlayer(Entity*);
void CalculateEntityTileCollisions(Entity*, u32, u32);
/**
* @brief Calculates the collisions with the tiles around the entity and stores the result in Entity.collisions.
*
* @param this
* @param direction
* @param collisionType @see CollisionType
*/
void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType);
bool32 ProcessMovementInternal(Entity*, s32, s32, u32);
u32 sub_080176E4(Entity*);
extern const u8 gUnk_080B37A0[]; // vvv for tileType?
extern const u8 gMapMetaTileTypeToVvv[]; // vvv for tileType?
#endif // COLLISION_H

View File

@ -184,7 +184,7 @@ typedef struct Entity_ {
/*0x24*/ s16 speed; /**< Magnitude of speed. */
/*0x26*/ u8 spriteAnimation[3];
/*0x29*/ SpritePriority spritePriority;
/*0x2a*/ u16 collisions; /**< Collision flags for each direction. */
/*0x2a*/ u16 collisions; /**< Collision flags for each direction. @see Collisions*/
/*0x2c*/ union SplitWord x; /**< X position, fixed point Q16.16. */
/*0x30*/ union SplitWord y; /**< Y position, fixed point Q16.16. */
/*0x34*/ union SplitWord z; /**< Z position, fixed point Q16.16. */

View File

@ -1,5 +1,5 @@
#ifndef GUARD_GBA_GBA_H
#define GUARD_GBA_GBA_H
#ifndef GBA_H
#define GBA_H
#include <string.h>
#include "defines.h"
@ -10,4 +10,4 @@
#include "macro.h"
#include "isagbprint.h"
#endif // GUARD_GBA_GBA_H
#endif // GBA_H

View File

@ -6,8 +6,8 @@
typedef struct {
struct Manager base;
u8 field_0x20[0x18];
s16 field_0x38;
s16 field_0x3a;
s16 metaTilePos; // x
s16 field_0x3a; // y
} FlameManager;
#endif // FLAMEMANAGER_H

View File

@ -6,9 +6,9 @@
typedef struct {
Manager base;
u8 field_0x20[0x16];
u8 field_0x36;
u8 layer;
u8 field_0x37;
s16 field_0x38;
s16 metaTilePos;
u16 field_0x3a;
u8 field_0x3c;
u8 field_0x3d;

View File

@ -53,7 +53,6 @@ typedef struct {
extern MapLayer gMapTop;
extern MapLayer gMapBottom;
extern MapLayer* GetLayerByIndex(u32 layer);
/*

View File

@ -506,14 +506,13 @@ void sub_08078D60(void);
void PlayerSetNormalAndCollide(void);
bool32 PlayerTryDropObject(ItemBehavior* arg0, u32 unk);
void InitItemGetSequence(u32, u32, u32);
void sub_0807B7D8(u32, u32, u32);
void sub_0807B7D8(u32 metaTileType, u32 metaTilePos, u32 layer);
void SetInteractableObjectCollision(Entity*, u32, u32, const void*);
void sub_08079D84(void);
u32 sub_0807953C(void);
void sub_0807BB68(const s16*, u32, u32);
void SetMetaTileByIndex(u32 tileIndex, u32 position, u32 layer);
void sub_0807B7D8(u32, u32, u32);
void RestorePrevTileEntity(u32, u32);
void SetMetaTileByIndex(u32 tileIndex, u32 metaTilePos, u32 layer);
void RestorePrevTileEntity(u32 metaTilePos, u32 layer);
void UpdateItemAnim(ItemBehavior*);
void PlayerCancelHoldItem(ItemBehavior*, u32);
void RegisterCarryEntity(Entity*);

View File

@ -34,8 +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 = ?? (apply collision value on bottom map no matter the layer SetMetaTileType is called
// for), 0x4 = camera scrolling
/*0x0F*/ u8 scroll_flags; // 0x2 = ?? (apply collision value on bottom map no matter the layer SetMetaTileType is
// called for), 0x4 = camera scrolling
/*0x10*/ u8 scroll_direction;
/*0x11*/ s8 oam_offset_x;
/*0x12*/ s8 oam_offset_y;
@ -154,7 +154,7 @@ typedef struct {
/* 0x06 */ u16 field_0x6;
/* 0x08 */ bool8 transitioningOut;
/* 0x09 */ u8 type; // transition when changing areas
/* 0x0a */ u16 stairs_idx; // seems to be a tile type
/* 0x0a */ u16 stairs_idx; // seems to be a tile type @see MetaTileType, set in UpdateDoorTransition()
/* 0x0c */ PlayerRoomStatus player_status;
/* 0x2c */ u8 entity_update_type; // differentiates entity priority on kinstone menu?
/* 0x2d */ u8 field_0x2c[0x8];

View File

@ -3,8 +3,8 @@
#include "global.h"
// gMapDataTopSpecial and gMapDataBottomSpecial are tilemaps of 8x8 pixels. But they are also reused for other data in other parts of the game.
// gMapDataTopSpecial and gMapDataBottomSpecial are tilemaps of 8x8 pixels. But they are also reused for other data in
// other parts of the game.
// Rendered tilemaps https://www.coranac.com/tonc/text/regbg.htm#sec-map
extern u16 gMapDataTopSpecial[0x4000];

View File

@ -1,20 +1,6 @@
#ifndef TILES_H
#define TILES_H
typedef enum {
CUT_BUSH = 0x1C,
CUT_GRASS = 0x1D,
CUT_SIGNPOST = 0x1E,
CUT_TREE = 0x1F,
ROCK = 0x55,
CHEST = 0x73,
SIGNPOST = 0x176,
PERMA_ROCK = 0x1D3,
PERMA_ROCK2 = 0x1D4,
PERMA_ROCK3 = 0x1D5,
PERMA_ROCK4 = 0x1D6,
} Tile;
typedef enum {
META_TILE_TYPE_0, // 0x0
META_TILE_TYPE_1, // 0x1
@ -44,10 +30,10 @@ typedef enum {
META_TILE_TYPE_25, // 0x19
META_TILE_TYPE_26, // 0x1a
META_TILE_TYPE_27, // 0x1b
META_TILE_TYPE_28, // 0x1c
META_TILE_TYPE_29, // 0x1d
META_TILE_TYPE_30, // 0x1e
META_TILE_TYPE_31, // 0x1f
META_TILE_TYPE_28, // 0x1c CUT_BUSH
META_TILE_TYPE_29, // 0x1d CUT_GRASS
META_TILE_TYPE_30, // 0x1e CUT_SIGNPOST
META_TILE_TYPE_31, // 0x1f CUT_TREE
META_TILE_TYPE_32, // 0x20
META_TILE_TYPE_33, // 0x21
META_TILE_TYPE_34, // 0x22
@ -101,7 +87,7 @@ typedef enum {
META_TILE_TYPE_82, // 0x52
META_TILE_TYPE_83, // 0x53
META_TILE_TYPE_84, // 0x54
META_TILE_TYPE_85, // 0x55
META_TILE_TYPE_85, // 0x55 ROCK
META_TILE_TYPE_86, // 0x56
META_TILE_TYPE_87, // 0x57
META_TILE_TYPE_88, // 0x58
@ -131,7 +117,7 @@ typedef enum {
META_TILE_TYPE_112, // 0x70
META_TILE_TYPE_113, // 0x71
META_TILE_TYPE_114, // 0x72
META_TILE_TYPE_115, // 0x73
META_TILE_TYPE_115, // 0x73 CHEST
META_TILE_TYPE_116, // 0x74
META_TILE_TYPE_117, // 0x75
META_TILE_TYPE_118, // 0x76
@ -390,7 +376,7 @@ typedef enum {
META_TILE_TYPE_371, // 0x173
META_TILE_TYPE_372, // 0x174
META_TILE_TYPE_373, // 0x175
META_TILE_TYPE_374, // 0x176
META_TILE_TYPE_374, // 0x176 SIGNPOST
META_TILE_TYPE_375, // 0x177
META_TILE_TYPE_376, // 0x178
META_TILE_TYPE_377, // 0x179
@ -483,10 +469,10 @@ typedef enum {
META_TILE_TYPE_464, // 0x1d0
META_TILE_TYPE_465, // 0x1d1
META_TILE_TYPE_466, // 0x1d2
META_TILE_TYPE_467, // 0x1d3
META_TILE_TYPE_468, // 0x1d4
META_TILE_TYPE_469, // 0x1d5
META_TILE_TYPE_470, // 0x1d6
META_TILE_TYPE_467, // 0x1d3 PERMA_ROCK
META_TILE_TYPE_468, // 0x1d4 PERMA_ROCK2
META_TILE_TYPE_469, // 0x1d5 PERMA_ROCK3
META_TILE_TYPE_470, // 0x1d6 PERMA_ROCK4
META_TILE_TYPE_471, // 0x1d7
META_TILE_TYPE_472, // 0x1d8
META_TILE_TYPE_473, // 0x1d9
@ -807,8 +793,8 @@ typedef enum {
META_TILE_TYPE_788, // 0x314
META_TILE_TYPE_789, // 0x315
META_TILE_TYPE_790, // 0x316
META_TILE_TYPE_791, // 0x317
META_TILE_TYPE_792, // 0x318
META_TILE_TYPE_791, // 0x317 RED_TILE
META_TILE_TYPE_792, // 0x318 BLUE_TILE
META_TILE_TYPE_793, // 0x319
META_TILE_TYPE_794, // 0x31a
META_TILE_TYPE_795, // 0x31b
@ -1412,163 +1398,165 @@ typedef enum {
META_TILE_TYPE_1393, // 0x571
META_TILE_TYPE_1394, // 0x572
META_TILE_TYPE_1395, // 0x573
} MetaTile;
} MetaTileType;
typedef enum {
SPECIAL_META_TILE_0 = 0x4000,
SPECIAL_META_TILE_1, // 0x4001
SPECIAL_META_TILE_2, // 0x4002
SPECIAL_META_TILE_3, // 0x4003
SPECIAL_META_TILE_4, // 0x4004
SPECIAL_META_TILE_5, // 0x4005
SPECIAL_META_TILE_6, // 0x4006
SPECIAL_META_TILE_7, // 0x4007
SPECIAL_META_TILE_8, // 0x4008
SPECIAL_META_TILE_9, // 0x4009
SPECIAL_META_TILE_10, // 0x400a
SPECIAL_META_TILE_11, // 0x400b
SPECIAL_META_TILE_12, // 0x400c
SPECIAL_META_TILE_13, // 0x400d
SPECIAL_META_TILE_14, // 0x400e
SPECIAL_META_TILE_15, // 0x400f
SPECIAL_META_TILE_16, // 0x4010
SPECIAL_META_TILE_17, // 0x4011
SPECIAL_META_TILE_18, // 0x4012
SPECIAL_META_TILE_19, // 0x4013
SPECIAL_META_TILE_20, // 0x4014
SPECIAL_META_TILE_21, // 0x4015
SPECIAL_META_TILE_22, // 0x4016
SPECIAL_META_TILE_23, // 0x4017
SPECIAL_META_TILE_24, // 0x4018
SPECIAL_META_TILE_25, // 0x4019
SPECIAL_META_TILE_26, // 0x401a
SPECIAL_META_TILE_27, // 0x401b
SPECIAL_META_TILE_28, // 0x401c
SPECIAL_META_TILE_29, // 0x401d
SPECIAL_META_TILE_30, // 0x401e
SPECIAL_META_TILE_31, // 0x401f
SPECIAL_META_TILE_32, // 0x4020
SPECIAL_META_TILE_33, // 0x4021
SPECIAL_META_TILE_34, // 0x4022
SPECIAL_META_TILE_35, // 0x4023
SPECIAL_META_TILE_36, // 0x4024
SPECIAL_META_TILE_37, // 0x4025
SPECIAL_META_TILE_38, // 0x4026
SPECIAL_META_TILE_39, // 0x4027
SPECIAL_META_TILE_40, // 0x4028
SPECIAL_META_TILE_41, // 0x4029
SPECIAL_META_TILE_42, // 0x402a
SPECIAL_META_TILE_43, // 0x402b
SPECIAL_META_TILE_44, // 0x402c
SPECIAL_META_TILE_45, // 0x402d
SPECIAL_META_TILE_46, // 0x402e
SPECIAL_META_TILE_0 = 0x4000, // Pots
SPECIAL_META_TILE_1, // 0x4001 // Move Pot Up
SPECIAL_META_TILE_2, // 0x4002 // Move Pot Right
SPECIAL_META_TILE_3, // 0x4003 // Move Pot Down
SPECIAL_META_TILE_4, // 0x4004 // Move Pot Left
SPECIAL_META_TILE_5, // 0x4005
SPECIAL_META_TILE_6, // 0x4006
SPECIAL_META_TILE_7, // 0x4007
SPECIAL_META_TILE_8, // 0x4008
SPECIAL_META_TILE_9, // 0x4009
SPECIAL_META_TILE_10, // 0x400a
SPECIAL_META_TILE_11, // 0x400b // Statues/ Pillar Gates
SPECIAL_META_TILE_12, // 0x400c // Move Statue Up
SPECIAL_META_TILE_13, // 0x400d // Move Statue Right
SPECIAL_META_TILE_14, // 0x400e // Move Statue Down
SPECIAL_META_TILE_15, // 0x400f // Move Statue Left
SPECIAL_META_TILE_16, // 0x4010
SPECIAL_META_TILE_17, // 0x4011
SPECIAL_META_TILE_18, // 0x4012
SPECIAL_META_TILE_19, // 0x4013
SPECIAL_META_TILE_20, // 0x4014 // Beanstalk/Ladder Top (Transition)
SPECIAL_META_TILE_21, // 0x4015 // Boulder in Hole
SPECIAL_META_TILE_22, // 0x4016
SPECIAL_META_TILE_23, // 0x4017 // Beanstalk/Ladder
SPECIAL_META_TILE_24, // 0x4018
SPECIAL_META_TILE_25, // 0x4019
SPECIAL_META_TILE_26, // 0x401a
SPECIAL_META_TILE_27, // 0x401b // Boulder
SPECIAL_META_TILE_28, // 0x401c // Move Bolder Up
SPECIAL_META_TILE_29, // 0x401d // Move Bolder Right
SPECIAL_META_TILE_30, // 0x401e // Move Bolder Down
SPECIAL_META_TILE_31, // 0x401f // Move Bolder Left
SPECIAL_META_TILE_32, // 0x4020 // Spring hole (Cane shot hole)
SPECIAL_META_TILE_33, // 0x4021
SPECIAL_META_TILE_34, // 0x4022 // Furniture Center Locked Door/Frozen Element/Octo/O Shaped Ice (ToD) Big Chest
// Closed (ToD) Gust Jar Mushrooms (ToD) Perhaps this is just tiles that change on
// interaction?
SPECIAL_META_TILE_35, // 0x4023 // Object Top
SPECIAL_META_TILE_36, // 0x4024 // Object Left
SPECIAL_META_TILE_37, // 0x4025 // Object Right
SPECIAL_META_TILE_38, // 0x4026 // Object Bottom
SPECIAL_META_TILE_39, // 0x4027 // Object Top Left Corner
SPECIAL_META_TILE_40, // 0x4028 // Object Top Right Corner
SPECIAL_META_TILE_41, // 0x4029 // Object Bottom Left Corner
SPECIAL_META_TILE_42, // 0x402a // Object Bottom Right Corner
SPECIAL_META_TILE_43, // 0x402b // Push Object Either (1 off)
SPECIAL_META_TILE_44, // 0x402c // Push Object Left (1 off)
SPECIAL_META_TILE_45, // 0x402d // Push Object Right (1 off)
SPECIAL_META_TILE_46, // 0x402e // Push Object Either
SPECIAL_META_TILE_47, // 0x402f
SPECIAL_META_TILE_48, // 0x4030
SPECIAL_META_TILE_49, // 0x4031
SPECIAL_META_TILE_50, // 0x4032
SPECIAL_META_TILE_49, // 0x4031 // Pushed Object
SPECIAL_META_TILE_50, // 0x4032 // Blue Bean in Hole
SPECIAL_META_TILE_51, // 0x4033
SPECIAL_META_TILE_52, // 0x4034
SPECIAL_META_TILE_53, // 0x4035
SPECIAL_META_TILE_54, // 0x4036
SPECIAL_META_TILE_55, // 0x4037
SPECIAL_META_TILE_56, // 0x4038
SPECIAL_META_TILE_57, // 0x4039
SPECIAL_META_TILE_58, // 0x403a
SPECIAL_META_TILE_59, // 0x403b
SPECIAL_META_TILE_54, // 0x4036 // Pillar w/ Object
SPECIAL_META_TILE_55, // 0x4037 // Move pillar Up
SPECIAL_META_TILE_56, // 0x4038 // Move pillar Right
SPECIAL_META_TILE_57, // 0x4039 // Move pillar Down
SPECIAL_META_TILE_58, // 0x403a // Move pillar Left
SPECIAL_META_TILE_59, // 0x403b // Green Bean in Hole
SPECIAL_META_TILE_60, // 0x403c
SPECIAL_META_TILE_61, // 0x403d
SPECIAL_META_TILE_62, // 0x403e
SPECIAL_META_TILE_61, // 0x403d // Minish Path Under Stick, Stone over hole in light rooms (ToD), Object Blocking
// Town doors
SPECIAL_META_TILE_62, // 0x403e // Grave
SPECIAL_META_TILE_63, // 0x403f
SPECIAL_META_TILE_64, // 0x4040
SPECIAL_META_TILE_65, // 0x4041
SPECIAL_META_TILE_66, // 0x4042
SPECIAL_META_TILE_67, // 0x4043
SPECIAL_META_TILE_68, // 0x4044
SPECIAL_META_TILE_69, // 0x4045
SPECIAL_META_TILE_70, // 0x4046
SPECIAL_META_TILE_71, // 0x4047
SPECIAL_META_TILE_72, // 0x4048
SPECIAL_META_TILE_64, // 0x4040 // Portal Top Left
SPECIAL_META_TILE_65, // 0x4041 // Portal Top
SPECIAL_META_TILE_66, // 0x4042 // Portal Top Right
SPECIAL_META_TILE_67, // 0x4043 // Portal Left
SPECIAL_META_TILE_68, // 0x4044 // Portal Center
SPECIAL_META_TILE_69, // 0x4045 // Portal Right
SPECIAL_META_TILE_70, // 0x4046 // Portal Bottom Left
SPECIAL_META_TILE_71, // 0x4047 // Portal Bottom
SPECIAL_META_TILE_72, // 0x4048 // Portal Bottom Right
SPECIAL_META_TILE_73, // 0x4049
SPECIAL_META_TILE_74, // 0x404a
SPECIAL_META_TILE_75, // 0x404b
SPECIAL_META_TILE_76, // 0x404c
SPECIAL_META_TILE_77, // 0x404d
SPECIAL_META_TILE_78, // 0x404e
SPECIAL_META_TILE_74, // 0x404a // Push Box
SPECIAL_META_TILE_75, // 0x404b // Move Block Up
SPECIAL_META_TILE_76, // 0x404c // Move Block Right
SPECIAL_META_TILE_77, // 0x404d // Move Block Down
SPECIAL_META_TILE_78, // 0x404e // Push Box Locked
SPECIAL_META_TILE_79, // 0x404f
SPECIAL_META_TILE_80, // 0x4050
SPECIAL_META_TILE_80, // 0x4050 // Impact Switch
SPECIAL_META_TILE_81, // 0x4051
SPECIAL_META_TILE_82, // 0x4052
SPECIAL_META_TILE_83, // 0x4053
SPECIAL_META_TILE_84, // 0x4054
SPECIAL_META_TILE_85, // 0x4055
SPECIAL_META_TILE_86, // 0x4056
SPECIAL_META_TILE_87, // 0x4057
SPECIAL_META_TILE_88, // 0x4058
SPECIAL_META_TILE_82, // 0x4052 // Lever (facing left)
SPECIAL_META_TILE_83, // 0x4053 // Lever (facing up)
SPECIAL_META_TILE_84, // 0x4054 // After Lever push (facing left)
SPECIAL_META_TILE_85, // 0x4055 // Big lever (facing left inside)
SPECIAL_META_TILE_86, // 0x4056 // Big lever (facing left outside)
SPECIAL_META_TILE_87, // 0x4057 // Big lever (facing up inside)
SPECIAL_META_TILE_88, // 0x4058 // Big lever (facing up outside)
SPECIAL_META_TILE_89, // 0x4059
SPECIAL_META_TILE_90, // 0x405a
SPECIAL_META_TILE_91, // 0x405b
SPECIAL_META_TILE_92, // 0x405c
SPECIAL_META_TILE_93, // 0x405d
SPECIAL_META_TILE_94, // 0x405e
SPECIAL_META_TILE_90, // 0x405a // Ice Blocks
SPECIAL_META_TILE_91, // 0x405b // Move Block Up
SPECIAL_META_TILE_92, // 0x405c // Move Block Right
SPECIAL_META_TILE_93, // 0x405d // Move Block Down
SPECIAL_META_TILE_94, // 0x405e // Move Block Left
SPECIAL_META_TILE_95, // 0x405f
SPECIAL_META_TILE_96, // 0x4060
SPECIAL_META_TILE_97, // 0x4061
SPECIAL_META_TILE_96, // 0x4060 // Skull
SPECIAL_META_TILE_97, // 0x4061 // Lit Fireplace
SPECIAL_META_TILE_98, // 0x4062
SPECIAL_META_TILE_99, // 0x4063
SPECIAL_META_TILE_100, // 0x4064
SPECIAL_META_TILE_101, // 0x4065
SPECIAL_META_TILE_102, // 0x4066
SPECIAL_META_TILE_101, // 0x4065 // Tree Thorns Right
SPECIAL_META_TILE_102, // 0x4066 // Tree Thorns Left
SPECIAL_META_TILE_103, // 0x4067
SPECIAL_META_TILE_104, // 0x4068
SPECIAL_META_TILE_105, // 0x4069
SPECIAL_META_TILE_104, // 0x4068 // Hot Ash Covering Objects
SPECIAL_META_TILE_105, // 0x4069 // Loading Zone
SPECIAL_META_TILE_106, // 0x406a
SPECIAL_META_TILE_107, // 0x406b
SPECIAL_META_TILE_108, // 0x406c
SPECIAL_META_TILE_109, // 0x406d
SPECIAL_META_TILE_110, // 0x406e
SPECIAL_META_TILE_111, // 0x406f
SPECIAL_META_TILE_112, // 0x4070
SPECIAL_META_TILE_108, // 0x406c // Acorn Top Left
SPECIAL_META_TILE_109, // 0x406d // Acorn Top Right
SPECIAL_META_TILE_110, // 0x406e // Acorn Bottom Left
SPECIAL_META_TILE_111, // 0x406f // Acorn Bottom Right
SPECIAL_META_TILE_112, // 0x4070 // Link in a hole
SPECIAL_META_TILE_113, // 0x4071
SPECIAL_META_TILE_114, // 0x4072
SPECIAL_META_TILE_114, // 0x4072 // Blocking Library, all kinds of objects?
SPECIAL_META_TILE_115, // 0x4073
SPECIAL_META_TILE_116, // 0x4074
SPECIAL_META_TILE_117, // 0x4075
SPECIAL_META_TILE_118, // 0x4076
SPECIAL_META_TILE_119, // 0x4077
SPECIAL_META_TILE_120, // 0x4078
SPECIAL_META_TILE_121, // 0x4079
SPECIAL_META_TILE_122, // 0x407a
SPECIAL_META_TILE_123, // 0x407b
SPECIAL_META_TILE_124, // 0x407c
SPECIAL_META_TILE_125, // 0x407d
SPECIAL_META_TILE_116, // 0x4074 // Leaf
SPECIAL_META_TILE_117, // 0x4075 // Chest Ice Block Top Left
SPECIAL_META_TILE_118, // 0x4076 // Chest Ice Block Top Right
SPECIAL_META_TILE_119, // 0x4077 // Chest Ice Block Top
SPECIAL_META_TILE_120, // 0x4078 // Chest Ice Block Bottom Left
SPECIAL_META_TILE_121, // 0x4079 // Chest Ice Block Left
SPECIAL_META_TILE_122, // 0x407a // Chest Ice Block Bottom Right
SPECIAL_META_TILE_123, // 0x407b // Chest Ice Block Right
SPECIAL_META_TILE_124, // 0x407c // Chest Ice Block Bottom
SPECIAL_META_TILE_125, // 0x407d // Town Well
SPECIAL_META_TILE_126, // 0x407e
SPECIAL_META_TILE_127, // 0x407f
SPECIAL_META_TILE_128, // 0x4080
SPECIAL_META_TILE_128, // 0x4080 // Dig Cave Outside
SPECIAL_META_TILE_129, // 0x4081
SPECIAL_META_TILE_130, // 0x4082
SPECIAL_META_TILE_131, // 0x4083
SPECIAL_META_TILE_130, // 0x4082 // Bookshelf slider
SPECIAL_META_TILE_131, // 0x4083 // Minish House doorways
SPECIAL_META_TILE_132, // 0x4084
SPECIAL_META_TILE_133, // 0x4085
SPECIAL_META_TILE_134, // 0x4086
SPECIAL_META_TILE_135, // 0x4087
SPECIAL_META_TILE_136, // 0x4088
SPECIAL_META_TILE_137, // 0x4089
SPECIAL_META_TILE_138, // 0x408a
SPECIAL_META_TILE_139, // 0x408b
SPECIAL_META_TILE_140, // 0x408c
SPECIAL_META_TILE_137, // 0x4089 // Shallow Water Outside ToD
SPECIAL_META_TILE_138, // 0x408a // Shallow Water Outside ToD
SPECIAL_META_TILE_139, // 0x408b // Shallow Water Outside ToD
SPECIAL_META_TILE_140, // 0x408c // Shallow Water Outside ToD
SPECIAL_META_TILE_141, // 0x408d
SPECIAL_META_TILE_142, // 0x408e
SPECIAL_META_TILE_143, // 0x408f
SPECIAL_META_TILE_142, // 0x408e // Climb Wall Down, Library book ladder, Rock Boost
SPECIAL_META_TILE_143, // 0x408f // Climb Wall Up, Rock Boost
SPECIAL_META_TILE_144, // 0x4090
SPECIAL_META_TILE_145, // 0x4091
SPECIAL_META_TILE_146, // 0x4092
SPECIAL_META_TILE_147, // 0x4093
SPECIAL_META_TILE_148, // 0x4094
SPECIAL_META_TILE_149, // 0x4095
SPECIAL_META_TILE_145, // 0x4091 // Shallow Water Outside ToD
SPECIAL_META_TILE_146, // 0x4092 // Minish Pot Top Left Flipping
SPECIAL_META_TILE_147, // 0x4093 // Minish Pot Top Right Flipping
SPECIAL_META_TILE_148, // 0x4094 // Minish Pot Bottom Left Flipping
SPECIAL_META_TILE_149, // 0x4095 // Minish Pot Botom Right Flipping
SPECIAL_META_TILE_150, // 0x4096
} SpecialMetaTile;
typedef enum {
VVV_0 = 0,
VVV_1 = 1,
@ -1584,14 +1572,14 @@ typedef enum {
VVV_11 = 11, // sub_0801FDE4(leever)
VVV_12 = 12, // sub_0801FDE4(leever)
VVV_13 = 13, // -> SURFACE_PIT, sub_08094E30(cutsceneMiscObject), sub_08085B40(lilypadLarge), Pot_Action1,
// sub_080AD040(playerItemHeldObject), UpdatePlayerCollision, sub_0807B434(playerUtils)
// sub_080AD040(playerItemHeldObject), UpdatePlayerCollision, sub_0807B434(playerUtils), FX_FALL_DOWN
VVV_14 = 14, // -> SURFACE_SLOPE_GNDWATER
VVV_15 = 15, // -> SURFACE_SHALLOW_WATER, SPECIAL_META_TILE_145
VVV_16 = 16, // -> SURFACE_WATER, sub_0801FBD0(chuchu), PlayerItemBottle_UseEmptyBottle, SPECIAL_META_TILE_137 -
// 140, sub_080AD040(playerItemHeldObject)
VVV_17 = 17, // -> SURFACE_14, sub_08085A44(lilypadLarge), sub_080AD040(playerItemHeldObject)
// 140, sub_080AD040(playerItemHeldObject), FX_WATER_SPLASH
VVV_17 = 17, // -> SURFACE_14, sub_08085A44(lilypadLarge), sub_080AD040(playerItemHeldObject), FX_WATER_SPLASH
VVV_18 = 18, // -> SURFACE_ICE, SPECIAL_META_TILE_117 - 124
VVV_19 = 19, // -> SURFACE_SWAMP, sub_0803163C(rope), sub_080AD040(playerItemHeldObject)
VVV_19 = 19, // -> SURFACE_SWAMP, sub_0803163C(rope), sub_080AD040(playerItemHeldObject), FX_GREEN_SPLASH
VVV_20 = 20,
VVV_21 = 21,
VVV_22 = 22, // -> SURFACE_DUST
@ -1615,7 +1603,8 @@ typedef enum {
VVV_39 = 39, // -> SURFACE_SLOPE_GNDGND_H
VVV_40 = 40, // -> SURFACE_DOOR_13, SPECIAL_META_TILE_105, sub_080732D0(player), UpdateDoorTransition
VVV_41 = 41, // -> SURFACE_DOOR, sub_08076DF4(itemGustJar), Minecart_Action3, sub_080896B0(pushableStatue),
// SPECIAL_META_TILE_128, SPECIAL_META_TILE_131 - 136, SPECIAL_META_TILE_141, sub_080724DC(player), UpdateDoorTransition
// SPECIAL_META_TILE_128, SPECIAL_META_TILE_131 - 136, SPECIAL_META_TILE_141, sub_080724DC(player),
// UpdateDoorTransition
VVV_42 = 42, // -> SURFACE_E, sub_080611D4(npc5)
VVV_43 = 43, // -> SURFACE_D, sub_080611D4(npc5)
VVV_44 = 44, // -> SURFACE_10, sub_080611D4(npc5)
@ -1664,16 +1653,16 @@ typedef enum {
VVV_87 = 87, // -> SURFACE_CLONE_TILE, sub_0806B0E0(townMinish)
VVV_88 = 88,
VVV_89 = 89,
VVV_90 = 90, // -> SURFACE_1C, sub_080AD040(playerItemHeldObject)
VVV_90 = 90, // -> SURFACE_1C, sub_080AD040(playerItemHeldObject), FX_LAVA_SPLASH
VVV_91 = 91,
VVV_92 = 92,
VVV_93 = 93,
VVV_94 = 94,
VVV_95 = 95,
VVV_96 = 96,
VVV_97 = 97, // -> SURFACE_1B
VVV_98 = 98, // -> SURFACE_21
VVV_99 = 99, // -> SURFACE_24
VVV_97 = 97, // -> SURFACE_1B
VVV_98 = 98, // -> SURFACE_21
VVV_99 = 99, // -> SURFACE_24
VVV_100 = 100, // Minecart_Action3
VVV_101 = 101, // -> SURFACE_6, Minecart_Action3
VVV_102 = 102, // -> SURFACE_6, Minecart_Action3
@ -1700,10 +1689,94 @@ typedef enum {
// up to VVV_255 -> sub_0802F300(tektite)
} Vvv;
typedef enum {
COLLISION_TYPE_0,
} CollisionType;
COLLISION_DATA_0 = 0,
COLLISION_DATA_1 = 1,
COLLISION_DATA_2 = 2,
COLLISION_DATA_3 = 3,
COLLISION_DATA_4 = 4,
COLLISION_DATA_5 = 5,
COLLISION_DATA_6 = 6,
COLLISION_DATA_7 = 7,
COLLISION_DATA_8 = 8,
COLLISION_DATA_9 = 9,
COLLISION_DATA_10 = 10,
COLLISION_DATA_11 = 11,
COLLISION_DATA_12 = 12,
COLLISION_DATA_13 = 13,
COLLISION_DATA_14 = 14,
COLLISION_DATA_15 = 15,
COLLISION_DATA_16 = 16,
COLLISION_DATA_17 = 17,
COLLISION_DATA_18 = 18,
COLLISION_DATA_19 = 19,
COLLISION_DATA_20 = 20,
COLLISION_DATA_21 = 21,
COLLISION_DATA_23 = 23,
COLLISION_DATA_24 = 24,
COLLISION_DATA_25 = 25,
COLLISION_DATA_26 = 26,
COLLISION_DATA_27 = 27,
COLLISION_DATA_28 = 28,
COLLISION_DATA_29 = 29,
COLLISION_DATA_32 = 32,
COLLISION_DATA_33 = 33, // FX_FALL_DOWN
COLLISION_DATA_34 = 34,
COLLISION_DATA_35 = 35,
COLLISION_DATA_36 = 36, // FX_WATER_SPLASH
COLLISION_DATA_37 = 37, // FX_LAVA_SPLASH
COLLISION_DATA_38 = 38,
COLLISION_DATA_39 = 39,
COLLISION_DATA_40 = 40,
COLLISION_DATA_41 = 41,
COLLISION_DATA_42 = 42,
COLLISION_DATA_43 = 43,
COLLISION_DATA_44 = 44,
COLLISION_DATA_45 = 45,
COLLISION_DATA_46 = 46,
COLLISION_DATA_47 = 47,
COLLISION_DATA_48 = 48, // FX_WATER_SPLASH
COLLISION_DATA_49 = 49,
COLLISION_DATA_50 = 50,
COLLISION_DATA_58 = 58,
COLLISION_DATA_60 = 60,
COLLISION_DATA_63 = 63,
COLLISION_DATA_66 = 66,
COLLISION_DATA_67 = 67,
COLLISION_DATA_68 = 68,
COLLISION_DATA_69 = 69,
COLLISION_DATA_70 = 70,
COLLISION_DATA_71 = 71,
COLLISION_DATA_72 = 72,
COLLISION_DATA_74 = 74,
COLLISION_DATA_75 = 75,
COLLISION_DATA_80 = 80,
COLLISION_DATA_81 = 81,
COLLISION_DATA_82 = 82,
COLLISION_DATA_83 = 83,
COLLISION_DATA_84 = 84,
COLLISION_DATA_85 = 85,
COLLISION_DATA_87 = 87,
COLLISION_DATA_88 = 88,
COLLISION_DATA_89 = 89,
COLLISION_DATA_90 = 90,
COLLISION_DATA_91 = 91,
COLLISION_DATA_92 = 92,
COLLISION_DATA_93 = 93,
COLLISION_DATA_94 = 94,
COLLISION_DATA_95 = 95,
COLLISION_DATA_96 = 96,
COLLISION_DATA_97 = 97,
COLLISION_DATA_98 = 98,
COLLISION_DATA_99 = 99,
COLLISION_DATA_100 = 100,
COLLISION_DATA_101 = 101,
COLLISION_DATA_102 = 102,
COLLISION_DATA_103 = 103,
COLLISION_DATA_104 = 104,
COLLISION_DATA_105 = 105,
COLLISION_DATA_106 = 106,
COLLISION_DATA_107 = 107,
COLLISION_DATA_255 = 255,
} CollisionData;
#endif // TILES_H

View File

@ -177,7 +177,7 @@ SECTIONS {
. = 0x000058A0; ram_GetCollisionDataAtRoomCoords = .;
. = 0x000058B0; ram_GetCollisionDataAtRoomTile = .;
. = 0x000058B8; ram_GetCollisionDataAtMetaTilePos = .;
. = 0x000058C8; ram_sub_080B1B54 = .;
. = 0x000058C8; ram_GetVvvForMetaTileType = .;
. = 0x000058DC; ram_sub_080B1B68 = .;
. = 0x000058F8; ram_sub_080B1B84 = .;
. = 0x00005918; ram_sub_080B1BA4 = .;

View File

@ -203,7 +203,7 @@ u32 UpdatePlayerCollision(void) {
if (index != 0xff && (gRoomControls.scroll_flags & 4) == 0) {
ptr1 = &gUnk_080B4490[index * 2];
if (GetCollisionDataAtMetaTilePos(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]),
gPlayerEntity.collisionLayer) == 0xff) {
gPlayerEntity.collisionLayer) == COLLISION_DATA_255) {
if ((((gPlayerState.flags & (PL_FLAGS10000 | PL_FLAGS2)) != 0) ||
((gPlayerState.sword_state & 0x10) != 0)) ||
((sub_080806BC(gPlayerEntity.x.HALF.HI - gRoomControls.origin_x,
@ -222,7 +222,7 @@ u32 UpdatePlayerCollision(void) {
position = COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr1[0], -ptr1[1]);
tileType = GetMetaTileType(position, gPlayerEntity.collisionLayer);
if (tileType < 0x4000) {
direction = sub_080B1B54(tileType);
direction = GetVvvForMetaTileType(tileType);
} else {
direction = tileType;
}
@ -230,7 +230,7 @@ u32 UpdatePlayerCollision(void) {
animationState2 = animationState1 & 0xff;
switch (direction) {
case 0x4000:
case SPECIAL_META_TILE_0:
if (sub_0801A458(mapLayer, position, 2) == 0) {
return 0;
}
@ -246,7 +246,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x28:
case VVV_40:
if ((gPlayerState.flags & PL_MINISH) != 0) {
return 0;
}
@ -260,7 +260,7 @@ u32 UpdatePlayerCollision(void) {
if ((gPlayerEntity.direction & 0x80) != 0) {
return 0;
}
if (GetCollisionDataAtMetaTilePos(position, gPlayerEntity.collisionLayer) != 0xf) {
if (GetCollisionDataAtMetaTilePos(position, gPlayerEntity.collisionLayer) != COLLISION_DATA_15) {
return 0;
}
if (sub_08079778() == 0) {
@ -280,11 +280,12 @@ u32 UpdatePlayerCollision(void) {
}
sub_08078AC0(4, 0, 1);
return 0;
case 0x401b:
case SPECIAL_META_TILE_27:
if (sub_0801A2B0(mapLayer, position, 0xb) == 0) {
return 0;
}
mapLayer->mapData[position] = 0x401c + (gPlayerEntity.animationState >> 1);
// Start moving the boulder.
mapLayer->mapData[position] = SPECIAL_META_TILE_28 + (gPlayerEntity.animationState / 2);
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@ -293,7 +294,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
gPlayerEntity.type = 1;
return 1;
case 0x70:
case VVV_112:
if ((gPlayerState.field_0x35 & 0x80) == 0) {
if ((gPlayerEntity.frame & 1) != 0) {
if (sub_0801A9F0(gPlayerState.field_0x35 << 2, tileType, position) != 0) {
@ -302,9 +303,9 @@ u32 UpdatePlayerCollision(void) {
}
}
return 0;
case 0x3a:
case 0x5b:
case 0x4051:
case VVV_58:
case VVV_91:
case SPECIAL_META_TILE_81:
if ((gPlayerState.flags & PL_MINISH) != 0) {
return 0;
}
@ -318,7 +319,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerState.mobility = 1;
sub_080A7CFC(position, gPlayerEntity.collisionLayer);
return 1;
case 0x1a:
case VVV_26:
if ((animationState1 & 0xff) != 0) {
return 0;
}
@ -332,7 +333,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerState.mobility = 1;
OpenSmallChest(position, gPlayerEntity.collisionLayer);
return 2;
case 0x71:
case VVV_113:
if (HasDungeonSmallKey() == 0) {
return 0;
}
@ -343,8 +344,8 @@ u32 UpdatePlayerCollision(void) {
gPlayerState.mobility = 1;
sub_0804B388(position, gPlayerEntity.collisionLayer);
return 2;
case 0x3d:
case 0x4040 ... 0x4048:
case VVV_61:
case SPECIAL_META_TILE_64 ... SPECIAL_META_TILE_72:
if ((gPlayerState.flags & PL_DRUGGED) != 0) {
return 0;
}
@ -371,14 +372,14 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.zVelocity = 0x20000;
COLLISION_OFF(&gPlayerEntity);
return 1;
case 0x400b:
case SPECIAL_META_TILE_11:
if (sub_0801A2B0(mapLayer, position, 8) == 0) {
return 0;
}
if ((gPlayerEntity.collisionLayer == 3) && (gMapTop.mapData[position] == 0x400b)) {
gMapTop.mapData[position] = 0x400c + (gPlayerEntity.animationState >> 1);
if ((gPlayerEntity.collisionLayer == 3) && (gMapTop.mapData[position] == SPECIAL_META_TILE_11)) {
gMapTop.mapData[position] = SPECIAL_META_TILE_12 + (gPlayerEntity.animationState >> 1);
} else {
mapLayer->mapData[position] = 0x400c + (gPlayerEntity.animationState >> 1);
mapLayer->mapData[position] = SPECIAL_META_TILE_12 + (gPlayerEntity.animationState >> 1);
}
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = PLAYER_PUSH;
@ -387,11 +388,12 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x405a:
case SPECIAL_META_TILE_90:
if (sub_0801A2B0(mapLayer, position, 2) == 0) {
return 0;
}
mapLayer->mapData[position] = 0x405b + (gPlayerEntity.animationState >> 1);
// Move ice block.
mapLayer->mapData[position] = SPECIAL_META_TILE_91 + (gPlayerEntity.animationState >> 1);
gPlayerState.pushedObject = 0x98;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@ -399,11 +401,11 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x4036:
case SPECIAL_META_TILE_54:
if (sub_0801A2B0(mapLayer, position, 0xb) == 0) {
return 0;
}
mapLayer->mapData[position] = 0x4037 + (gPlayerEntity.animationState >> 1);
mapLayer->mapData[position] = SPECIAL_META_TILE_55 + (gPlayerEntity.animationState >> 1);
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@ -411,7 +413,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x403e:
case SPECIAL_META_TILE_62:
if ((animationState1 & 0xff) != 0) {
return 0;
}
@ -421,7 +423,7 @@ u32 UpdatePlayerCollision(void) {
if ((gPlayerEntity.frame & 2) == 0) {
return 0;
}
mapLayer->mapData[position] = 0x403f;
mapLayer->mapData[position] = SPECIAL_META_TILE_63;
gPlayerState.pushedObject = 0x82;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@ -429,7 +431,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x72:
case VVV_114:
if ((gPlayerState.field_0x35 & 0x80) != 0) {
return 0;
}
@ -470,9 +472,9 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = pushedBlock->direction;
return 1;
case 0x402b ... 0x402d:
case SPECIAL_META_TILE_43 ... SPECIAL_META_TILE_45:
if (sub_0801A370(mapLayer, position) != 0) {
mapLayer->mapData[position] = 0x4030 + ((gPlayerEntity.animationState & 4) >> 2);
mapLayer->mapData[position] = SPECIAL_META_TILE_48 + ((gPlayerEntity.animationState & 4) >> 2);
if ((gPlayerState.flags & PL_MINISH) != 0) {
gPlayerState.pushedObject = 0xa0;
} else {
@ -487,11 +489,11 @@ u32 UpdatePlayerCollision(void) {
} else {
return 0;
}
case 0x404a:
case SPECIAL_META_TILE_74:
if (sub_0801A458(mapLayer, position, 8) == 0) {
return 0;
}
mapLayer->mapData[position] = 0x404b + (gPlayerEntity.animationState >> 1);
mapLayer->mapData[position] = SPECIAL_META_TILE_75 + (gPlayerEntity.animationState >> 1);
if ((gPlayerState.flags & PL_MINISH) != 0) {
gPlayerState.pushedObject = 0xc0;
} else {
@ -503,22 +505,22 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x4052:
case SPECIAL_META_TILE_82:
if (gPlayerState.field_0x35 != 0) {
return 0;
}
SetMetaTile(0x4054, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_84, position, gPlayerEntity.collisionLayer);
return 4;
case 0x4053:
case SPECIAL_META_TILE_83:
if (gPlayerState.field_0x35 != 6) {
return 0;
}
SetMetaTile(0x4054, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_84, position, gPlayerEntity.collisionLayer);
return 4;
case 0x4055:
case SPECIAL_META_TILE_85:
position--;
// fallthrough
case 0x4056:
case SPECIAL_META_TILE_86:
if (gPlayerState.field_0x35 != 0) {
return 0;
}
@ -527,15 +529,15 @@ u32 UpdatePlayerCollision(void) {
}
for (index = 0; index < 3; index++) {
if (sub_0801A8D0(gPlayerClones[index], 0) == position) {
SetMetaTile(0x4059, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_89, position, gPlayerEntity.collisionLayer);
return 4;
}
}
return 0;
case 0x4057:
case SPECIAL_META_TILE_87:
position -= 0x40;
// fallthrough
case 0x4058:
case SPECIAL_META_TILE_88:
if (gPlayerState.field_0x35 != 6) {
return 0;
}
@ -544,12 +546,12 @@ u32 UpdatePlayerCollision(void) {
}
for (index = 0; index < 3; index++) {
if (sub_0801A8D0(gPlayerClones[index], 6) == position) {
SetMetaTile(0x4059, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_89, position, gPlayerEntity.collisionLayer);
return 4;
}
}
return 0;
case 0x405f:
case SPECIAL_META_TILE_95:
animationState3 = 2;
animationState3 &= animationState1;
if (animationState3 == 0) {
@ -561,7 +563,7 @@ u32 UpdatePlayerCollision(void) {
if ((gPlayerEntity.frame & 1) == 0) {
return 0;
}
SetMetaTile(0x4074, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_116, position, gPlayerEntity.collisionLayer);
gPlayerState.pushedObject = 0xa0;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@ -569,7 +571,7 @@ u32 UpdatePlayerCollision(void) {
gPlayerEntity.y.HALF.LO = 0;
gPlayerEntity.direction = Direction8FromAnimationState(gPlayerEntity.animationState);
return 1;
case 0x407d:
case SPECIAL_META_TILE_125:
animationState3 = gPlayerEntity.animationState;
if ((animationState2) != 4) {
return 0;
@ -580,7 +582,7 @@ u32 UpdatePlayerCollision(void) {
if ((gPlayerEntity.frame & 1) == 0) {
return 0;
}
SetMetaTile(0x4074, position, gPlayerEntity.collisionLayer);
SetMetaTile(SPECIAL_META_TILE_116, position, gPlayerEntity.collisionLayer);
SetVvvAtMetaTilePos(VVV_13, position, gPlayerEntity.collisionLayer);
return 1;
default:
@ -597,7 +599,7 @@ bool32 sub_0801A2B0(MapLayer* mapLayer, u32 position, u32 collisionType) {
uVar1 = gUnk_080B4488[gPlayerEntity.animationState >> 1];
if ((((gPlayerState.field_0x35 | gPlayerState.direction) & 0x80) == 0) && ((gPlayerEntity.frame & 1) != 0)) {
position = (u16)(position - (-uVar1)); // necessary for match
temp4 = sub_080B1B54(GetMetaTileType(position, gPlayerEntity.collisionLayer));
temp4 = GetVvvForMetaTileType(GetMetaTileType(position, gPlayerEntity.collisionLayer));
switch (temp4) {
case 0x52:
break;
@ -640,16 +642,16 @@ bool32 sub_0801A370(MapLayer* mapLayer, u32 position) {
pos = position + offset;
tileType = GetMetaTileType(pos, gPlayerEntity.collisionLayer);
switch (tileType) {
case 0x402b:
case SPECIAL_META_TILE_43:
pos += offset;
break;
case 0x402c ... 0x402f:
case SPECIAL_META_TILE_44 ... SPECIAL_META_TILE_47:
return TRUE;
}
if (topLayer->collisionData[pos - 0x80] == 0x46) {
return FALSE;
}
switch ((u16)sub_080B1B54(GetMetaTileType(pos, gPlayerEntity.collisionLayer))) {
switch ((u16)GetVvvForMetaTileType(GetMetaTileType(pos, gPlayerEntity.collisionLayer))) {
case 0x52:
return FALSE;
case 0x26:
@ -686,7 +688,7 @@ bool32 sub_0801A458(MapLayer* mapLayer, u32 position, u32 collisionType) {
if (sub_0801A4F8()) {
pos = position + offset;
tileType = GetMetaTileType(pos, gPlayerEntity.collisionLayer);
switch (sub_080B1B54(tileType)) {
switch (GetVvvForMetaTileType(tileType)) {
case 0x52:
case 0x26:
case 0x27:
@ -747,19 +749,19 @@ u32 sub_0801A8D0(Entity* this, u32 param_2) {
if (param_2 == 0) {
position = COORD_TO_TILE_OFFSET(this, 0, 8);
tile = mapData[position];
if (tile == 0x4055) {
if (tile == SPECIAL_META_TILE_85) {
return position - 1;
}
if (tile == 0x4056) {
if (tile == SPECIAL_META_TILE_86) {
return position;
}
} else {
position = COORD_TO_TILE_OFFSET(this, 8, 0);
tile = mapData[position];
if (tile == 0x4057) {
if (tile == SPECIAL_META_TILE_87) {
return position - 0x40;
}
if (tile == 0x4058) {
if (tile == SPECIAL_META_TILE_88) {
return position;
}
}
@ -773,7 +775,7 @@ bool32 sub_0801A980(void) {
ptr = &gUnk_080B44A8[gPlayerEntity.animationState & 6];
tileType = GetMetaTileType(COORD_TO_TILE_OFFSET(&gPlayerEntity, -ptr[0], -ptr[1]), gPlayerEntity.collisionLayer);
if (tileType < 0x4000) {
sub_080B1B54(tileType);
GetVvvForMetaTileType(tileType);
}
return FALSE;
}
@ -1113,8 +1115,10 @@ void DeleteLoadedTileEntity(u32 metaTilePos, s32 layer) {
}
const struct_080B44D0 gUnk_080B44D0[] = {
{ 0x67, 0x4084 }, { 0x68, 0x4085 }, { 0x69, 0x4086 }, { 0x6a, 0x4087 },
{ 0x6b, 0x4088 }, { 0x27, 0x4083 }, { 0x23, 0x408d }, { 0x0, 0x0 },
{ 0x67, SPECIAL_META_TILE_132 }, { 0x68, SPECIAL_META_TILE_133 },
{ 0x69, SPECIAL_META_TILE_134 }, { 0x6a, SPECIAL_META_TILE_135 },
{ 0x6b, SPECIAL_META_TILE_136 }, { 0x27, SPECIAL_META_TILE_131 },
{ 0x23, SPECIAL_META_TILE_141 }, { 0x0, 0x0 },
};
// used for minish houses, seems to overwrite all tiles with certain collision values on layer 1 for them?
@ -1127,13 +1131,13 @@ void sub_0801AFE4(void) {
u32 height;
collisionData = gMapBottom.collisionData;
width = gRoomControls.width >> 4;
height = gRoomControls.height >> 4;
width = gRoomControls.width / 16;
height = gRoomControls.height / 16;
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
for (ptr = gUnk_080B44D0; ptr->collision != 0; ptr++) {
if (ptr->collision == *collisionData) {
SetMetaTile(ptr->tileIndex, y * 0x40 + x, 1);
SetMetaTile(ptr->tileIndex, y * 0x40 + x, LAYER_BOTTOM);
break;
}
}

View File

@ -79,7 +79,7 @@ void UpdatePlayerInput(void) {
PlayerMacroEntry* playerMacro;
u32 zero;
if (gPlayerState.playerInput.playerMacro != NULL) {
if (gPlayerState.playerInput.playerMacro != NULL) {
// Player is controlled by macro.
playerInput = &gPlayerState.playerInput;
playerMacro = playerInput->playerMacro;

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@
#include "npc.h"
#include "object.h"
#include "screen.h"
#include "tiles.h"
void sub_08051F78(void);
void sub_08051FF0(void);
@ -595,10 +596,10 @@ void sub_08053D34(void) {
if (gMenu.field_0xa != 0) {
gMenu.field_0xa = 0;
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3d)) {
SetMetaTileType(0x74, 0xc4, 1);
SetMetaTileType(META_TILE_TYPE_116, TILE_POS(4, 3), LAYER_BOTTOM);
}
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3e)) {
SetMetaTileType(0x74, 0xcc, 1);
SetMetaTileType(META_TILE_TYPE_116, TILE_POS(12, 3), LAYER_BOTTOM);
}
}
if (gFadeControl.active == 0) {

View File

@ -36,7 +36,7 @@ const u16 gUnk_080047F6[] = {
#define PLAYER_MACRO_JUMPTO 0x4000 // Jump
#define PLAYER_MACRO_IGNORE 0x8000 // Do not set playerMacroWaiting and playerMacroHeldKeys?
#define PLAYER_MACRO_END 0xC000 // End // 49152
#define PLAYER_MACRO_END 0xC000 // End // 49152
// Link tries out the shield.
const PlayerMacroEntry gPlayerMacroTryOutShield[] = {
@ -96,4 +96,4 @@ const PlayerMacroEntry gPlayerMacroBladeBrothers7[] = {
{ 4, 0 }, { 4, B_BUTTON }, { 4, 0 }, { 4, B_BUTTON }, { 4, 0 }, { 4, B_BUTTON },
{ 4, 0 }, { 4, B_BUTTON }, { 4, 0 }, { 4, B_BUTTON }, { 30, 0 },
};
const u16 gPlayerMacroBladeBrothers7End = PLAYER_MACRO_END;
const u16 gPlayerMacroBladeBrothers7End = PLAYER_MACRO_END;

View File

@ -1,74 +1,75 @@
#include "asm.h"
#include "player.h"
#include "tiles.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 },
{ VVV_13, SURFACE_PIT },
{ VVV_38, SURFACE_SLOPE_GNDGND_V },
{ VVV_39, SURFACE_SLOPE_GNDGND_H },
{ VVV_82, SURFACE_26 },
{ VVV_99, SURFACE_24 },
{ VVV_116, SURFACE_EDGE },
{ VVV_8, SURFACE_7 },
{ VVV_31, SURFACE_MINISH_DOOR_FRONT },
{ VVV_32, SURFACE_MINISH_DOOR_BACK },
{ VVV_33, SURFACE_A },
{ VVV_34, SURFACE_B },
{ VVV_24, SURFACE_16 },
{ VVV_18, SURFACE_ICE },
{ VVV_15, SURFACE_SHALLOW_WATER },
{ VVV_14, SURFACE_SLOPE_GNDWATER },
{ VVV_16, SURFACE_WATER },
{ VVV_27, SURFACE_BUTTON },
{ VVV_29, SURFACE_BUTTON },
{ VVV_97, SURFACE_1B },
{ VVV_90, SURFACE_1C },
{ VVV_17, SURFACE_14 },
{ VVV_98, SURFACE_21 },
{ VVV_101, SURFACE_6 },
{ VVV_102, SURFACE_6 },
{ VVV_103, SURFACE_6 },
{ VVV_104, SURFACE_6 },
{ VVV_105, SURFACE_6 },
{ VVV_106, SURFACE_6 },
{ VVV_108, SURFACE_6 },
{ VVV_109, SURFACE_6 },
{ VVV_110, SURFACE_6 },
{ VVV_111, SURFACE_6 },
{ VVV_107, SURFACE_6 },
{ VVV_48, SURFACE_22 },
{ VVV_49, SURFACE_22 },
{ VVV_50, SURFACE_22 },
{ VVV_51, SURFACE_22 },
{ VVV_22, SURFACE_DUST },
{ VVV_25, SURFACE_HOLE },
{ VVV_240, SURFACE_HOLE },
{ VVV_87, SURFACE_CLONE_TILE },
{ VVV_83, SURFACE_LADDER },
{ VVV_241, SURFACE_LADDER },
{ VVV_63, SURFACE_AUTO_LADDER },
{ VVV_80, SURFACE_CLIMB_WALL },
{ VVV_81, SURFACE_2C },
{ VVV_52, SURFACE_LIGHT_GRADE },
{ VVV_53, SURFACE_29 },
{ VVV_42, SURFACE_E },
{ VVV_43, SURFACE_D },
{ VVV_44, SURFACE_10 },
{ VVV_45, SURFACE_F },
{ VVV_64, SURFACE_E },
{ VVV_65, SURFACE_D },
{ VVV_66, SURFACE_10 },
{ VVV_67, SURFACE_F },
{ VVV_72, SURFACE_10 },
{ VVV_74, SURFACE_E },
{ VVV_69, SURFACE_E },
{ VVV_71, SURFACE_E },
{ VVV_70, SURFACE_D },
{ VVV_73, SURFACE_D },
{ VVV_68, SURFACE_D },
{ VVV_75, SURFACE_D },
{ VVV_19, SURFACE_SWAMP },
{ VVV_41, SURFACE_DOOR },
{ VVV_23, SURFACE_2D },
{ VVV_40, SURFACE_DOOR_13 },
};
// const u16 gMapVvvToSurfaceTypeEnd = 0;

View File

@ -427,7 +427,7 @@ bool32 sub_0803086C(ArmosEntity* this) {
centerY = super->y.HALF_U.HI - gRoomControls.origin_y;
// TODO for some reason the 0x3f of COORD_TO_TILE(super) needs to be forced to r2 here.
metaTilePos = ((((((super)->x.HALF.HI) - gRoomControls.origin_x) >> 4) & (r2 = 0x3f)) |
(((((super)->y.HALF.HI) - gRoomControls.origin_y) >> 4) & r2) << 6);
(((((super)->y.HALF.HI) - gRoomControls.origin_y) >> 4) & r2) << 6);
if (GetMetaTileType(metaTilePos, super->collisionLayer) == SPECIAL_META_TILE_73) {
if (CheckPlayerInRegion(centerX, centerY, 2, 0xc) != 0) {

View File

@ -7,13 +7,14 @@
#include "asm.h"
#include "enemy.h"
#include "message.h"
#include "save.h"
#include "npc.h"
#include "functions.h"
#include "game.h"
#include "item.h"
#include "kinstone.h"
#include "message.h"
#include "npc.h"
#include "save.h"
#include "tiles.h"
void sub_08028E9C(Entity*);
void sub_08028EDC(Entity*);
@ -429,7 +430,7 @@ void sub_08028FFC(Entity* this) {
this->x.HALF.HI = this->field_0x78.HWORD;
this->y.HALF.HI = this->field_0x7a.HWORD;
InitializeAnimation(this, 0);
SetMetaTile(0x4022, this->field_0x76.HWORD, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->field_0x76.HWORD, this->collisionLayer);
}
void sub_08029078(Entity* this) {

View File

@ -5,10 +5,10 @@
*
* @brief Chuchu Boss enemy
*/
#include "global.h"
#include "enemy.h"
#include "object.h"
#include "functions.h"
#include "tiles.h"
typedef struct {
u8 unk_00;
@ -563,7 +563,7 @@ void sub_080262A8(ChuchuBossEntity* this) {
gPlayerEntity.animationState = 0;
gRoomControls.camera_target = super;
gRoomControls.scrollSpeed = 1;
SetMetaTile(0x4022, 0x2c8, 1);
SetMetaTile(SPECIAL_META_TILE_34, TILE_POS(8, 11), LAYER_BOTTOM);
}
}

View File

@ -6,11 +6,11 @@
*/
#define NENT_DEPRECATED
#include "global.h"
#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "physics.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -241,18 +241,18 @@ void sub_080387F0(CloudPiranhaEntity* this) {
};
u8 bVar1;
u8 bVar2;
s32 iVar4;
s32 collisionData;
const s8* ptr;
if ((super->action != 4) && (this->unk_82 == 0)) {
iVar4 = GetCollisionDataAtMetaTilePos(COORD_TO_TILE(super), super->collisionLayer);
if ((iVar4 == 0xf) || (iVar4 == 0x2a)) {
collisionData = GetCollisionDataAtMetaTilePos(COORD_TO_TILE(super), super->collisionLayer);
if ((collisionData == COLLISION_DATA_15) || (collisionData == COLLISION_DATA_42)) {
this->unk_82 = 0x20;
}
ptr = &gUnk_080CF520[super->direction >> 1];
bVar1 = super->direction;
iVar4 = GetCollisionDataRelativeTo(super, ptr[0], ptr[1]);
if ((iVar4 == 0xf) || (iVar4 == 0x2a)) {
collisionData = GetCollisionDataRelativeTo(super, ptr[0], ptr[1]);
if ((collisionData == COLLISION_DATA_15) || (collisionData == COLLISION_DATA_42)) {
super->direction = (super->direction + 0x10) & 0x1f;
} else {
if (super->collisions != COL_NONE) {

View File

@ -5,9 +5,10 @@
* @brief Door Mimic enemy
*/
#include "sound.h"
#include "enemy.h"
#include "functions.h"
#include "sound.h"
#include "tiles.h"
void sub_080221C0(Entity*);
@ -114,10 +115,10 @@ void sub_08022198(Entity* this) {
}
void sub_080221C0(Entity* this) {
u32 tile = COORD_TO_TILE(this) + gUnk_080B4488[this->type2];
this->field_0x7c.HALF.HI = tile;
this->field_0x7c.HALF.LO = GetMetaTileIndex(tile, this->collisionLayer);
SetMetaTile(gUnk_080CB79C[this->type2], tile, this->collisionLayer);
u32 tilePos = COORD_TO_TILE(this) + gUnk_080B4488[this->type2];
this->field_0x7c.HALF.HI = tilePos;
this->field_0x7c.HALF.LO = GetMetaTileIndex(tilePos, this->collisionLayer);
SetMetaTile(gUnk_080CB79C[this->type2], tilePos, this->collisionLayer);
}
// clang-format off
@ -182,10 +183,10 @@ const PosOffset gUnk_080CB76C[][6] = {
};
const u16 gUnk_080CB79C[] = {
0x4023,
0x4025,
0x4026,
0x4024,
SPECIAL_META_TILE_35,
SPECIAL_META_TILE_37,
SPECIAL_META_TILE_38,
SPECIAL_META_TILE_36,
};

View File

@ -6,10 +6,10 @@
*/
#define NENT_DEPRECATED
#include "global.h"
#include "enemy.h"
#include "functions.h"
#include "fade.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -88,16 +88,16 @@ void Enemy64_Init(Enemy64Entity* this) {
Entity* tail;
if (CheckFlags(0x7c)) {
SetMetaTile(0x4081, 10, 2);
SetMetaTile(0x4081, 0x4a, 2);
SetMetaTile(0x4081, 0x8a, 2);
SetMetaTile(0x4081, 0xca, 2);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 0), LAYER_TOP);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 1), LAYER_TOP);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 2), LAYER_TOP);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 3), LAYER_TOP);
DeleteThisEntity();
} else {
sub_0807B7D8(0x323, 10, 1);
sub_0807B7D8(0x323, 0x4a, 1);
sub_0807B7D8(0x323, 0x8a, 1);
sub_0807B7D8(0x323, 0xca, 1);
sub_0807B7D8(0x323, TILE_POS(10, 0), LAYER_BOTTOM);
sub_0807B7D8(0x323, TILE_POS(10, 1), LAYER_BOTTOM);
sub_0807B7D8(0x323, TILE_POS(10, 2), LAYER_BOTTOM);
sub_0807B7D8(0x323, TILE_POS(10, 3), LAYER_BOTTOM);
}
tail = CreateProjectile(GYORG_TAIL);
if (tail != NULL) {
@ -442,20 +442,20 @@ void Enemy64_Action4_SubAction7(Enemy64Entity* this) {
if (--super->timer == 0) {
DeleteThisEntity();
} else if (super->timer == 16) {
sub_0807B7D8(0x36, 0xca, 1);
SetMetaTile(0x4081, 0xca, 2);
sub_0807B7D8(0x36, TILE_POS(10, 3), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 3), LAYER_TOP);
SoundReq(SFX_HEART_GET);
} else if (super->timer == 24) {
sub_0807B7D8(0x36, 0x8a, 1);
SetMetaTile(0x4081, 0x8a, 2);
sub_0807B7D8(0x36, TILE_POS(10, 2), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 2), LAYER_TOP);
SoundReq(SFX_HEART_GET);
} else if (super->timer == 32) {
sub_0807B7D8(0x36, 0x4a, 1);
SetMetaTile(0x4081, 0x4a, 2);
sub_0807B7D8(0x36, TILE_POS(10, 1), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 1), LAYER_TOP);
SoundReq(SFX_HEART_GET);
} else if (super->timer == 40) {
sub_0807B7D8(0x36, 10, 1);
SetMetaTile(0x4081, 10, 2);
sub_0807B7D8(0x36, TILE_POS(10, 0), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_129, TILE_POS(10, 0), LAYER_TOP);
SoundReq(SFX_HEART_GET);
}
}

View File

@ -6,12 +6,12 @@
*/
#define NENT_DEPRECATED
#include "global.h"
#include "enemy.h"
#include "functions.h"
#include "fade.h"
#include "object.h"
#include "hitbox.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -27,16 +27,16 @@ typedef struct {
/*0x7c*/ u16 unk_7c;
/*0x7e*/ u8 unk_7e;
/*0x7f*/ u8 unk_7f;
/*0x80*/ u16 unk_80;
/*0x82*/ u16 unk_82;
/*0x84*/ u16 unk_84;
/*0x86*/ u16 unk_86;
/*0x80*/ u16 tileIndex1;
/*0x82*/ u16 tileIndex2;
/*0x84*/ u16 tileIndex3;
/*0x86*/ u16 tileIndex4;
} EyegoreEntity;
extern Entity* sub_08017A90(Entity*, Entity*);
extern Entity* gUnk_020000B0;
extern const u8 gUnk_080B3E80[];
extern const u8 gMapMetaTileTypeToCollisionData[];
void sub_08031344(EyegoreEntity*);
void sub_08031344(EyegoreEntity*);
@ -329,27 +329,27 @@ void sub_08030E80(EyegoreEntity* this) {
}
void sub_08030F00(EyegoreEntity* this) {
u32 position = COORD_TO_TILE_OFFSET(super, 8, 0x14);
u16 tileIndex = GetMetaTileIndex(position, super->collisionLayer);
this->unk_80 = tileIndex;
tileIndex = GetMetaTileIndex(position + 1, super->collisionLayer);
this->unk_82 = tileIndex;
tileIndex = GetMetaTileIndex(position + 0x40, super->collisionLayer);
this->unk_84 = tileIndex;
tileIndex = GetMetaTileIndex(position + 0x41, super->collisionLayer);
this->unk_86 = tileIndex;
SetMetaTile(0x4022, position, super->collisionLayer);
SetMetaTile(0x4022, position + 1, super->collisionLayer);
SetMetaTile(0x4022, position + 0x40, super->collisionLayer);
SetMetaTile(0x4022, position + 0x41, super->collisionLayer);
u32 metaTilePos = COORD_TO_TILE_OFFSET(super, 8, 20);
u16 tileIndex = GetMetaTileIndex(metaTilePos + TILE_POS(0, 0), super->collisionLayer);
this->tileIndex1 = tileIndex;
tileIndex = GetMetaTileIndex(metaTilePos + TILE_POS(1, 0), super->collisionLayer);
this->tileIndex2 = tileIndex;
tileIndex = GetMetaTileIndex(metaTilePos + TILE_POS(0, 1), super->collisionLayer);
this->tileIndex3 = tileIndex;
tileIndex = GetMetaTileIndex(metaTilePos + TILE_POS(1, 1), super->collisionLayer);
this->tileIndex4 = tileIndex;
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos + 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos + TILE_POS(1, 1), super->collisionLayer);
}
void sub_08030FB4(EyegoreEntity* this) {
u32 position = COORD_TO_TILE_OFFSET(super, 8, 0x14);
SetMetaTile(this->unk_80, position, super->collisionLayer);
SetMetaTile(this->unk_82, position + 1, super->collisionLayer);
SetMetaTile(this->unk_84, position + 0x40, super->collisionLayer);
SetMetaTile(this->unk_86, position + 0x41, super->collisionLayer);
u32 metaTilePos = COORD_TO_TILE_OFFSET(super, 8, 20);
SetMetaTile(this->tileIndex1, metaTilePos + TILE_POS(0, 0), super->collisionLayer);
SetMetaTile(this->tileIndex2, metaTilePos + TILE_POS(1, 0), super->collisionLayer);
SetMetaTile(this->tileIndex3, metaTilePos + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(this->tileIndex4, metaTilePos + TILE_POS(1, 1), super->collisionLayer);
}
void sub_08031024(EyegoreEntity* this) {
@ -403,10 +403,11 @@ void sub_08031024(EyegoreEntity* this) {
} else {
tmp2 = this->unk_7b >> 1;
uVar5 = GetMetaTileTypeByPos(super->x.HALF.HI + gUnk_080CE2C0[tmp2],
super->y.HALF.HI + gUnk_080CE2C0[tmp2 + 1], super->collisionLayer);
super->y.HALF.HI + gUnk_080CE2C0[tmp2 + 1], super->collisionLayer);
uVar8 = GetMetaTileTypeByPos(super->x.HALF.HI + gUnk_080CE2C0[tmp2 + 2],
super->y.HALF.HI + gUnk_080CE2C0[tmp2 + 3], super->collisionLayer);
if (!(((gUnk_080B3E80[uVar5] == 0) && (gUnk_080B3E80[uVar8] == 0)) ||
super->y.HALF.HI + gUnk_080CE2C0[tmp2 + 3], super->collisionLayer);
if (!(((gMapMetaTileTypeToCollisionData[uVar5] == 0) &&
(gMapMetaTileTypeToCollisionData[uVar8] == 0)) ||
((this->unk_7b | 1) & 1) == 0)) {
if (super->direction >> 3 == super->animationState) {
this->unk_78 |= 0x20;

View File

@ -10,6 +10,7 @@
#include "enemy.h"
#include "player.h"
#include "room.h"
#include "tiles.h"
extern Hitbox gUnk_080FD34C;
@ -39,26 +40,26 @@ enum FlyingPotSubActions {
};
// Functions
void FlyingPot_OnTick(FlyingPotEntity*); // 0803708C
void FlyingPot_OnCollision(FlyingPotEntity*); // 080370A4
void FlyingPot_OnGrabbed(FlyingPotEntity*); // 0803712C
void FlyingPot_OnTick(FlyingPotEntity*);
void FlyingPot_OnCollision(FlyingPotEntity*);
void FlyingPot_OnGrabbed(FlyingPotEntity*);
// Subactions
void FlyingPot_SubAction0(FlyingPotEntity*); // 08037144
void FlyingPot_SubAction1(FlyingPotEntity*); // 0803715C
void FlyingPot_SubAction2(FlyingPotEntity*); // 0803718C
void FlyingPot_SubAction3(FlyingPotEntity*); // 080371F8
void FlyingPot_SubAction0(FlyingPotEntity*);
void FlyingPot_SubAction1(FlyingPotEntity*);
void FlyingPot_SubAction2(FlyingPotEntity*);
void FlyingPot_SubAction3(FlyingPotEntity*);
void FlyingPot_SubActionDoNothing(FlyingPotEntity*);
void FlyingPot_SubAction5(FlyingPotEntity*); // 08037218
void FlyingPot_SubAction5(FlyingPotEntity*);
// Actions
void FlyingPot_Init(FlyingPotEntity*); // ? // 08037220
void FlyingPot_Action1(FlyingPotEntity*); // 08037280
void FlyingPot_Action2(FlyingPotEntity*); // 080372E8
void FlyingPot_Action3(FlyingPotEntity*); // 0803737C
void FlyingPot_Action4(FlyingPotEntity*); // 080373B0
void FlyingPot_Action5(FlyingPotEntity*); // 080373C8
void FlyingPot_Action6(FlyingPotEntity*); // 080373E0
void FlyingPot_Init(FlyingPotEntity*);
void FlyingPot_Action1(FlyingPotEntity*);
void FlyingPot_Action2(FlyingPotEntity*);
void FlyingPot_Action3(FlyingPotEntity*);
void FlyingPot_Action4(FlyingPotEntity*);
void FlyingPot_Action5(FlyingPotEntity*);
void FlyingPot_Action6(FlyingPotEntity*);
void sub_08037408(FlyingPotEntity*);
void sub_08037418(FlyingPotEntity*);
@ -178,14 +179,14 @@ void FlyingPot_Init(FlyingPotEntity* this) {
tile = TILE(super->x.HALF.HI, super->y.HALF.HI);
this->tileIndex = GetMetaTileIndex(tile, super->collisionLayer);
SetMetaTile(0x4000, tile, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_0, tile, super->collisionLayer);
InitializeAnimation(super, 5);
}
void FlyingPot_Action1(FlyingPotEntity* this) {
sub_08037418(this);
if (GetMetaTileTypeByEntity(super) != 0x4000) {
if (GetMetaTileTypeByEntity(super) != SPECIAL_META_TILE_0) {
SetMetaTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
sub_08037408(this);
}
@ -255,10 +256,10 @@ void sub_08037408(FlyingPotEntity* this) {
}
void sub_08037418(FlyingPotEntity* this) {
u32 tile = COORD_TO_TILE(super);
u32 tilePos = COORD_TO_TILE(super);
if (GetMetaTileIndex(tile, super->collisionLayer) == 0x4067) {
SetMetaTile(this->tileIndex, tile, super->collisionLayer);
if (GetMetaTileIndex(tilePos, super->collisionLayer) == SPECIAL_META_TILE_103) {
SetMetaTile(this->tileIndex, tilePos, super->collisionLayer);
DeleteThisEntity();
}
}

View File

@ -4,11 +4,12 @@
#include "enemy.h"
#include "functions.h"
#include "hitbox.h"
#include "tiles.h"
typedef struct {
Entity base;
u8 filler[0xc];
u16 unk_0x74;
u16 metaTileIndex;
u8 unk_0x76;
} FlyingSkullEntity;
@ -45,7 +46,7 @@ void FlyingSkull_OnCollision(FlyingSkullEntity* this) {
COLLISION_OFF(super);
super->zVelocity = Q_16_16(2.625);
super->spritePriority.b1 = 1;
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
} else if (super->z.HALF.HI) {
sub_0803A0E0(this);
}
@ -84,7 +85,7 @@ void sub_08039CE0(FlyingSkullEntity* this) {
super->timer = 1;
super->z.HALF.HI = -1;
super->spriteOffsetX = 0;
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
}
if (sub_0806F520(super)) {
@ -108,15 +109,15 @@ void sub_08039D6C(FlyingSkullEntity* this) {
}
void sub_08039D74(FlyingSkullEntity* this) {
u32 tmp;
u32 tilePos;
super->action = 1;
super->gustJarFlags = 2;
super->carryFlags = 0;
super->y.HALF.HI += 3;
tmp = COORD_TO_TILE(super);
this->unk_0x74 = GetMetaTileIndex(tmp, super->collisionLayer);
SetMetaTile(0x4060, tmp, super->collisionLayer);
tilePos = COORD_TO_TILE(super);
this->metaTileIndex = GetMetaTileIndex(tilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_96, tilePos, super->collisionLayer);
InitializeAnimation(super, 0);
}
@ -124,8 +125,8 @@ void sub_08039DD8(FlyingSkullEntity* this) {
sub_0803A100(this);
if (super->type == 0) {
if (GetMetaTileTypeByEntity(super) == 0x4073) {
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
if (GetMetaTileTypeByEntity(super) == SPECIAL_META_TILE_115) {
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
sub_0803A0E0(this);
}
@ -142,7 +143,7 @@ void sub_08039DD8(FlyingSkullEntity* this) {
if (ent != NULL) {
ent->type2 = 1;
CopyPosition(super, ent);
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
DeleteEntity(super);
}
}
@ -162,7 +163,7 @@ void sub_08039EE4(FlyingSkullEntity* this) {
super->hitbox = (Hitbox*)&gUnk_080FD340;
gPlayerEntity.animationState;
this->unk_0x76 = gPlayerEntity.animationState;
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
}
void sub_08039F4C(FlyingSkullEntity* this) {
@ -195,7 +196,7 @@ void sub_08039FAC(FlyingSkullEntity* this) {
super->hitType = 0xa0;
super->flags2 = 0xf;
super->hitbox = (Hitbox*)&gUnk_080FD34C;
SetMetaTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(this->metaTileIndex, COORD_TO_TILE(super), super->collisionLayer);
}
}
@ -242,9 +243,9 @@ void sub_0803A0E0(FlyingSkullEntity* this) {
}
void sub_0803A100(FlyingSkullEntity* this) {
u32 tile = COORD_TO_TILE(super);
if (GetMetaTileIndex(tile, super->collisionLayer) == 0x4067) {
SetMetaTile(this->unk_0x74, tile, super->collisionLayer);
u32 tilePos = COORD_TO_TILE(super);
if (GetMetaTileIndex(tilePos, super->collisionLayer) == SPECIAL_META_TILE_103) {
SetMetaTile(this->metaTileIndex, tilePos, super->collisionLayer);
DeleteThisEntity();
}
}

View File

@ -28,7 +28,7 @@ void sub_08046518(void);
void sub_080467DC(GyorgFemaleEntity*);
extern u8 gUpdateVisibleTiles;
extern u8 gUnk_080B3E80[];
extern u8 gMapMetaTileTypeToCollisionData[];
extern const MapDataDefinition gGyorgMapping0[];
extern const MapDataDefinition gGyorgMapping1[];
@ -255,8 +255,8 @@ void sub_08046518(void) {
u16 new_var;
stack1[j] = sl[j];
new_var = ptr[sl[j]];
stack2[j] = gUnk_080B37A0[new_var];
r6[j] = gUnk_080B3E80[new_var];
stack2[j] = gMapMetaTileTypeToVvv[new_var];
r6[j] = gMapMetaTileTypeToCollisionData[new_var];
}
sl += 0x40;
stack1 += 0x40;

View File

@ -10,6 +10,7 @@
#include "screenTransitions.h"
#include "script.h"
#include "structures.h"
#include "tiles.h"
extern void sub_0807B600(u32);
@ -83,7 +84,7 @@ void sub_08034CC4(Entity* this) {
this->field_0x78.HWORD = 0x4b0;
sub_08034F70(this);
InitializeAnimation(this, this->type);
SetMetaTile(0x4022, COORD_TO_TILE(this), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, COORD_TO_TILE(this), this->collisionLayer);
entity = CreateEnemy(MAZAAL_MACRO, 2);
if (entity != NULL) {
this->child = entity;

View File

@ -8,9 +8,10 @@
#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "tiles.h"
extern void SoundReqClipped(Entity*, u32);
extern bool32 sub_08023A38(u32);
extern bool32 sub_08023A38(u32 metaTileType);
extern void sub_08023990(Entity*, u32, u32);
extern void sub_08023A88(Entity*, u32);
@ -487,12 +488,12 @@ void sub_080239F0(Entity* this) {
*(u8*)((int)&this->field_0x86 + 1) = 0x88;
}
bool32 sub_08023A38(u32 tileType) {
if (tileType == 0x1a || tileType == 0x29) {
bool32 sub_08023A38(u32 metaTileType) {
if (metaTileType == META_TILE_TYPE_26 || metaTileType == META_TILE_TYPE_41) {
return TRUE;
} else {
tileType = gUnk_080B37A0[tileType];
if (tileType == 9 || tileType == 11 || tileType == 10 || tileType == 12) {
metaTileType = gMapMetaTileTypeToVvv[metaTileType];
if (metaTileType == VVV_9 || metaTileType == VVV_11 || metaTileType == VVV_10 || metaTileType == VVV_12) {
return TRUE;
} else {
return FALSE;

View File

@ -10,7 +10,7 @@
#include "object.h"
#include "tiles.h"
extern u8 gUnk_080B3E80[];
extern u8 gMapMetaTileTypeToCollisionData[];
bool32 sub_080258C4(Entity*);
void sub_08025B18(Entity*);
@ -414,23 +414,27 @@ bool32 sub_0802571C(Entity* this) {
}
bool32 sub_080257EC(Entity* this, u32 x, u32 y) {
u16 tileType = sub_080B1A48(x - 0x00, y - 0x00, this->collisionLayer);
if (tileType != 0x312 && gUnk_080B37A0[tileType] != 0x16 && gUnk_080B3E80[tileType] == 0) {
u16 metaTileType = sub_080B1A48(x - 0x00, y - 0x00, this->collisionLayer);
if (metaTileType != 0x312 && gMapMetaTileTypeToVvv[metaTileType] != VVV_22 &&
gMapMetaTileTypeToCollisionData[metaTileType] == 0) {
return TRUE;
}
tileType = sub_080B1A48(x - 0x10, y - 0x00, this->collisionLayer);
if (tileType != 0x312 && gUnk_080B37A0[tileType] != 0x16 && gUnk_080B3E80[tileType] == 0) {
metaTileType = sub_080B1A48(x - 0x10, y - 0x00, this->collisionLayer);
if (metaTileType != 0x312 && gMapMetaTileTypeToVvv[metaTileType] != VVV_22 &&
gMapMetaTileTypeToCollisionData[metaTileType] == 0) {
return TRUE;
}
tileType = sub_080B1A48(x - 0x00, y - 0x10, this->collisionLayer);
if (tileType != 0x312 && gUnk_080B37A0[tileType] != 0x16 && gUnk_080B3E80[tileType] == 0) {
metaTileType = sub_080B1A48(x - 0x00, y - 0x10, this->collisionLayer);
if (metaTileType != 0x312 && gMapMetaTileTypeToVvv[metaTileType] != VVV_22 &&
gMapMetaTileTypeToCollisionData[metaTileType] == 0) {
return TRUE;
}
tileType = sub_080B1A48(x - 0x10, y - 0x10, this->collisionLayer);
if (tileType != 0x312 && gUnk_080B37A0[tileType] != 0x16 && gUnk_080B3E80[tileType] == 0) {
metaTileType = sub_080B1A48(x - 0x10, y - 0x10, this->collisionLayer);
if (metaTileType != 0x312 && gMapMetaTileTypeToVvv[metaTileType] != VVV_22 &&
gMapMetaTileTypeToCollisionData[metaTileType] == 0) {
return TRUE;
}
@ -469,9 +473,9 @@ bool32 sub_0802594C(Entity* this, u32 param_2) {
s16 xDiff;
s16 yDiff;
s16 iVar9;
u32 uVar1;
u32 layer;
const s8* unk = gUnk_080CC090[param_2];
uVar1 = this->collisionLayer;
layer = this->collisionLayer;
xDiff = (this->x.HALF.HI - gRoomControls.origin_x + 8) & -0x10;
yDiff = (this->y.HALF.HI - gRoomControls.origin_y + 8) & -0x10;
do {
@ -482,10 +486,10 @@ bool32 sub_0802594C(Entity* this, u32 param_2) {
u8 bVar6;
iVar9 = xDiff + unk[0];
iVar11 = yDiff + unk[1];
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);
bVar4 = GetCollisionDataAtWorldCoords(iVar9 - 0x00, iVar11 - 0x00, layer);
bVar5 = GetCollisionDataAtWorldCoords(iVar9 - 0x10, iVar11 - 0x00, layer);
bVar6 = GetCollisionDataAtWorldCoords(iVar9 - 0x00, iVar11 - 0x10, layer);
bVar7 = GetCollisionDataAtWorldCoords(iVar9 - 0x10, iVar11 - 0x10, layer);
if ((bVar4 | bVar5 | bVar6 | bVar7) == 0) {
this->field_0x7c.HALF.LO = gRoomControls.origin_x + iVar9;
this->field_0x7c.HALF.HI = gRoomControls.origin_y + iVar11;

View File

@ -5,11 +5,12 @@
* @brief Rollobite enemy
*/
#include "collision.h"
#include "enemy.h"
#include "physics.h"
#include "player.h"
#include "room.h"
#include "collision.h"
#include "tiles.h"
extern void (*const Rollobite_Functions[])(Entity*);
extern void (*const gRollobiteActions[])(Entity*);
@ -243,11 +244,11 @@ void sub_08020A30(Entity* this) {
}
void sub_08020A7C(Entity* this) {
int tmp = Random();
s32 tmp = Random();
u32 state = DirectionRound(this->direction + gUnk_080CA6D4[tmp % 3]);
if (sub_08049FA0(this) == 0) {
int tmp = DirectionRoundUp(sub_08049EE4(this));
u32 tmp = DirectionRoundUp(sub_08049EE4(this));
if ((state ^ 0x10) == tmp)
state ^= 0x10;
}
@ -259,9 +260,9 @@ void sub_08020A7C(Entity* this) {
bool32 Rollobite_TryToHoleUp(Entity* this) {
if (Rollobite_IsRolledUp(this) && this->z.HALF.HI == 0) {
int tile = COORD_TO_TILE(this);
int iVar1 = GetMetaTileType(tile, this->collisionLayer);
if ((iVar1 * 0x10000 - 0x710000U) >> 0x10 < 2) {
u32 tilePos = COORD_TO_TILE(this);
u32 tileType = GetMetaTileType(tilePos, this->collisionLayer);
if ((tileType * 0x10000 - 0x710000U) >> 0x10 < 2) {
this->action = 6;
COLLISION_OFF(this);
this->x.HALF.HI &= 0xfff0;
@ -270,7 +271,7 @@ bool32 Rollobite_TryToHoleUp(Entity* this) {
this->y.HALF.HI += 13;
this->zVelocity = Q_16_16(2.0);
InitializeAnimation(this, this->animationState + 0x14);
SetMetaTile(0x4034, tile, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_52, tilePos, this->collisionLayer);
return TRUE;
}
}

View File

@ -133,21 +133,21 @@ void sub_080450A8(Entity* this) {
DeleteEntity(this);
}
void sub_08045178(Entity* this, Entity* child, int h, int v) {
void sub_08045178(Entity* this, Entity* child, int offsetX, int offsetY) {
int x, y;
if (child == NULL)
return;
sub_0804A4E4(this, child);
if (GetCollisionDataRelativeTo(child, h, v))
if (GetCollisionDataRelativeTo(child, offsetX, offsetY))
return;
x = child->x.HALF.HI + h;
x = child->x.HALF.HI + offsetX;
if (0 <= x && x < (gRoomControls.origin_x + gRoomControls.width))
child->x.HALF.HI = x;
y = child->y.HALF.HI + v;
y = child->y.HALF.HI + offsetY;
if (0 <= y && y < (gRoomControls.origin_y + gRoomControls.height))
child->y.HALF.HI = y;
}

View File

@ -3,6 +3,7 @@
#include "enemy.h"
#include "functions.h"
#include "object.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -89,7 +90,7 @@ void SpinyBeetle_Init(SpinyBeetleEntity* this) {
this->unk_7b = 0;
this->tile = COORD_TO_TILE(super);
this->tileIndex = GetMetaTileIndex(this->tile, super->collisionLayer);
SetMetaTile(0x4022, this->tile, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tile, super->collisionLayer);
obj = CreateObject(OBJECT_ON_BEETLE, super->type, 0);
if (obj == NULL) {
@ -234,7 +235,7 @@ void sub_08033B44(SpinyBeetleEntity* this) {
this->tile = COORD_TO_TILE(super);
this->tileIndex = GetMetaTileIndex(this->tile, super->collisionLayer);
if (this->tileIndex != 0x4022) {
if (this->tileIndex != SPECIAL_META_TILE_34) {
stop++;
} else {
switch (DirectionRound(super->direction) >> 2) {
@ -254,7 +255,7 @@ void sub_08033B44(SpinyBeetleEntity* this) {
}
}
SetMetaTile(0x4022, this->tile, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tile, super->collisionLayer);
InitializeAnimation(super, 0);
}

View File

@ -6,10 +6,10 @@
*/
#define NENT_DEPRECATED
#include "global.h"
#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -440,7 +440,7 @@ void sub_08039AD4(StalfosEntity* this) {
super->action = 0xb;
super->child = projectile;
InitAnimationForceUpdate(super, super->animationState + 0x18);
SetMetaTile(0x4067, position, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_103, position, super->collisionLayer);
return;
}
}

View File

@ -4,11 +4,12 @@
#include "room.h"
#include "physics.h"
#include "player.h"
#include "tiles.h"
typedef struct {
Entity base;
u8 filler[0xc];
u16 unk_74;
u16 metaTilePos;
u16 filler2;
u16 unk_78;
u16 projectileTimer;
@ -40,7 +41,7 @@ void TorchTrap_Init(TorchTrapEntity* this) {
this->unk_84 &= 0xfff;
sub_0804A720(super);
super->action = 1;
this->unk_74 = this->unk_82 & 0xfff;
this->metaTilePos = this->unk_82 & 0xfff;
super->x.HALF.HI = ((this->unk_82 & 0x3f) << 4) + 8 + gRoomControls.origin_x;
super->y.HALF.HI = ((this->unk_82 & 0xfc0) >> 2) + (gRoomControls.origin_y + 8);
super->direction = ((s16)this->unk_82 & 0xf000) >> 10;
@ -70,7 +71,7 @@ void sub_0803CF38(TorchTrapEntity* this) {
}
void sub_0803CF94(TorchTrapEntity* this) {
if (GetMetaTileType(this->unk_74, super->collisionLayer) == 0x76) {
if (GetMetaTileType(this->metaTilePos, super->collisionLayer) == META_TILE_TYPE_118) {
this->unk_80 = 0;
TorchTrap_Reset(this);
} else if (this->unk_7c && sub_0803CFD8(this)) {
@ -79,35 +80,34 @@ void sub_0803CF94(TorchTrapEntity* this) {
}
bool32 sub_0803CFD8(TorchTrapEntity* this) {
u32 rv;
u32 result;
if (this->unk_7c == 0) {
rv = 1;
result = TRUE;
} else {
rv = CheckFlags(this->unk_7c);
result = CheckFlags(this->unk_7c);
}
return rv;
return result;
}
bool32 sub_0803CFF0(TorchTrapEntity* this) {
u32 rv;
u32 result;
if (this->unk_80 != 0) {
if (this->unk_80 == this->unk_7c) {
u32 val = CheckFlags(this->unk_80);
rv = 0;
result = FALSE;
if (val == 0) {
rv = 1;
result = TRUE;
}
return rv;
return result;
} else {
return CheckFlags(this->unk_80);
}
}
return 0;
return FALSE;
}
void TorchTrap_Reset(TorchTrapEntity* this) {
u32 val;
super->action = 2;
if (this->unk_78) {
this->projectileTimer = this->unk_78;
@ -136,7 +136,7 @@ void TorchTrap_CreateProjectile(TorchTrapEntity* this) {
void sub_0803D0B0(TorchTrapEntity* this) {
super->action = 3;
sub_0807B7D8(0x75, this->unk_74, super->collisionLayer);
sub_0807B7D8(META_TILE_TYPE_117, this->metaTilePos, super->collisionLayer);
}
void (*const gTorchTrapActions[])(TorchTrapEntity*) = {
@ -147,12 +147,12 @@ void (*const gTorchTrapActions[])(TorchTrapEntity*) = {
};
const u16 gTorchTrapTimerLengths[] = {
0x3c, 0x3c, 0x5a, 0x5a, 0x5a, 0x78, 0x78, 0x96,
60, 60, 90, 90, 90, 120, 120, 150,
};
const u16 gTorchTrapProjectileSpeeds[] = {
0x80,
0x100,
0x180,
0x200,
128,
256,
384,
512,
};

View File

@ -221,7 +221,7 @@ void sub_0802EFB8(Entity* this) {
u32 uVar1;
u32 rand;
u32 uVar3;
int iVar4;
u32 collisionData;
rand = Random();
if ((rand >> 0x10 & 3) != 0) {
@ -230,8 +230,9 @@ void sub_0802EFB8(Entity* this) {
uVar3 = GetFacingDirection(&gPlayerEntity, this);
uVar1 = (uVar3 + 4) & 0x18;
}
iVar4 = GetCollisionDataAtMetaTilePos(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1);
if (iVar4 != 0) {
collisionData =
GetCollisionDataAtMetaTilePos(TILE(this->x.HALF.HI, this->y.HALF.HI) + gUnk_080B4488[((uVar1) >> 3)], 1);
if (collisionData != 0) {
this->direction = 0xff;
} else {
this->timer = (rand & 3) + 1;

View File

@ -8,6 +8,7 @@
#include "enemy.h"
#include "functions.h"
#include "screenTransitions.h"
#include "tiles.h"
extern Entity* gUnk_020000B0;
@ -273,10 +274,8 @@ bool32 sub_0803E4A0(Entity* this) {
}
void sub_0803E4D8(Entity* this) {
u32 tile;
tile = TILE(this->x.HALF.HI, this->y.HALF.HI + 8);
if (GetCollisionDataAtMetaTilePos(tile, gPlayerEntity.collisionLayer) != 0xff) {
SetMetaTile(0x4074, tile, gPlayerEntity.collisionLayer);
u32 metaTilePos = TILE(this->x.HALF.HI, this->y.HALF.HI + 8);
if (GetCollisionDataAtMetaTilePos(metaTilePos, gPlayerEntity.collisionLayer) != COLLISION_DATA_255) {
SetMetaTile(SPECIAL_META_TILE_116, metaTilePos, gPlayerEntity.collisionLayer);
}
}

View File

@ -6,12 +6,12 @@
*/
#define NENT_DEPRECATED
#include "global.h"
#include "collision.h"
#include "enemy.h"
#include "enemy/wizzrobe.h"
#include "functions.h"
#include "object.h"
#include "tiles.h"
extern void (*const WizzrobeWind_Functions[])(WizzrobeEntity*);
extern void (*const WizzrobeWind_Actions[])(WizzrobeEntity*);
@ -211,13 +211,13 @@ void sub_0802F888(WizzrobeEntity* this) {
super->direction = (sub_08049F84(super, 3) + 4) & 0x18;
this->tilePosition = COORD_TO_TILE(super);
this->tileIndex = GetMetaTileIndex(this->tilePosition, super->collisionLayer);
SetMetaTile(0x4071, this->tilePosition, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_113, this->tilePosition, super->collisionLayer);
}
void sub_0802F8E4(WizzrobeEntity* this) {
u16 uVar1;
s32 iVar4;
u32 uVar6;
u32 metaTilePos;
u32 uVar7;
u32 uVar8;
@ -235,9 +235,9 @@ void sub_0802F8E4(WizzrobeEntity* this) {
uVar1 = this->unk_72;
iVar4 = ((s32)(rand)&0x7ff0) % (this->unk_6f << 3);
uVar7 = (uVar1 + iVar4) | 8;
uVar6 = TILE(uVar8, uVar7);
if ((GetCollisionDataAtMetaTilePos(uVar6, super->collisionLayer) == 0) &&
(GetMetaTileIndex(uVar6, super->collisionLayer) != 0x4071)) {
metaTilePos = TILE(uVar8, uVar7);
if ((GetCollisionDataAtMetaTilePos(metaTilePos, super->collisionLayer) == 0) &&
(GetMetaTileIndex(metaTilePos, super->collisionLayer) != SPECIAL_META_TILE_113)) {
super->x.HALF.HI = (s16)uVar8;
super->y.HALF.HI = (s16)uVar7;
if (sub_08049FA0(super) != 0) {

View File

@ -5,6 +5,7 @@
#include "message.h"
#include "npc.h"
#include "manager/diggingCaveEntranceManager.h"
#include "tiles.h"
extern u8 gUpdateVisibleTiles;
extern Manager gUnk_02033290;
@ -40,29 +41,29 @@ const u8 gUnk_081091E4[] = {
};
void sub_0805E248(void) {
s32 v0;
s32 metaTilePos;
v0 = gDiggingCaveEntranceTransition.entrance->targetTilePosition;
metaTilePos = gDiggingCaveEntranceTransition.entrance->targetTilePosition;
if (gRoomControls.area == AREA_VEIL_FALLS || gRoomControls.area == AREA_VEIL_FALLS_DIG_CAVE) {
SetMetaTileType(0x27c, v0 + TILE_POS(-1, -1), 1);
SetMetaTileType(0x283, v0 + TILE_POS(-1, -1), 2);
SetMetaTileType(0x27d, v0 + TILE_POS(0, -1), 1);
SetMetaTileType(0x284, v0 + TILE_POS(0, -1), 2);
SetMetaTileType(0x27e, v0 + TILE_POS(1, -1), 1);
SetMetaTileType(0x285, v0 + TILE_POS(1, -1), 2);
SetMetaTileType(0x27f, v0 + TILE_POS(-1, 0), 1);
SetMetaTileType(0x280, v0 + TILE_POS(0, 0), 1);
SetMetaTileType(0x282, v0 + TILE_POS(1, 0), 1);
SetMetaTileType(META_TILE_TYPE_636, metaTilePos + TILE_POS(-1, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_643, metaTilePos + TILE_POS(-1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_637, metaTilePos + TILE_POS(0, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_644, metaTilePos + TILE_POS(0, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_638, metaTilePos + TILE_POS(1, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_645, metaTilePos + TILE_POS(1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_639, metaTilePos + TILE_POS(-1, 0), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_640, metaTilePos + TILE_POS(0, 0), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_642, metaTilePos + TILE_POS(1, 0), LAYER_BOTTOM);
} else {
SetMetaTileType(0x26c, v0 + TILE_POS(-1, -1), 1);
SetMetaTileType(0x273, v0 + TILE_POS(-1, -1), 2);
SetMetaTileType(0x26d, v0 + TILE_POS(0, -1), 1);
SetMetaTileType(0x274, v0 + TILE_POS(0, -1), 2);
SetMetaTileType(0x26e, v0 + TILE_POS(1, -1), 1);
SetMetaTileType(0x275, v0 + TILE_POS(1, -1), 2);
SetMetaTileType(0x26f, v0 + TILE_POS(-1, 0), 1);
SetMetaTileType(0x270, v0 + TILE_POS(0, 0), 1);
SetMetaTileType(0x272, v0 + TILE_POS(1, 0), 1);
SetMetaTileType(META_TILE_TYPE_620, metaTilePos + TILE_POS(-1, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_627, metaTilePos + TILE_POS(-1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_621, metaTilePos + TILE_POS(0, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_628, metaTilePos + TILE_POS(0, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_622, metaTilePos + TILE_POS(1, -1), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_629, metaTilePos + TILE_POS(1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_623, metaTilePos + TILE_POS(-1, 0), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_624, metaTilePos + TILE_POS(0, 0), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_626, metaTilePos + TILE_POS(1, 0), LAYER_BOTTOM);
}
gUpdateVisibleTiles = 0;
}

View File

@ -853,7 +853,7 @@ void DummyHandler(u32* a1) {
}
void sub_08053434(u32* a1) {
if (gArea.locationIndex == 29 && *a1) {
if (gArea.locationIndex == 29 && *a1) { // AREA_DARK_HYRULE_CASTLE
if (!--*a1) {
ResetTimerFlags();
MenuFadeIn(5, 6);

View File

@ -176,17 +176,17 @@ void sub_08077448(ItemBehavior* this, u32 index) {
s32 sub_080774A0(void) {
static const s8 gUnk_0811BE1E[] = { 0, -13, 13, 0, 0, 16, -13, 0, 0, 0 };
u32 iVar2;
u32 collisionData;
u32 metaTilePos;
metaTilePos = COORD_TO_TILE_OFFSET((&gPlayerEntity), -gUnk_0811BE1E[gPlayerEntity.animationState & 6],
-gUnk_0811BE1E[(gPlayerEntity.animationState & 6) + 1]);
-gUnk_0811BE1E[(gPlayerEntity.animationState & 6) + 1]);
iVar2 = GetCollisionDataAtMetaTilePos(metaTilePos, gPlayerEntity.collisionLayer);
collisionData = GetCollisionDataAtMetaTilePos(metaTilePos, gPlayerEntity.collisionLayer);
if (iVar2 > 0x16)
if (collisionData > 0x16)
return 0;
if (iVar2 < 0xf)
if (collisionData < 0xf)
return 0;
if (GetVvvAtMetaTilePos(metaTilePos, gPlayerEntity.collisionLayer) != VVV_86) {
return 1;

View File

@ -2,7 +2,6 @@
#include "asm.h"
#include "common.h"
#include "flags.h"
#include "global.h"
#include "item.h"
#include "kinstone.h"
#include "manager.h"
@ -10,6 +9,7 @@
#include "player.h"
#include "room.h"
#include "subtask.h"
#include "tiles.h"
extern const struct_gUnk_080B3D20 gUnk_080B3D20[];
extern EntityData gUnk_080FEC28[];
@ -340,7 +340,7 @@ void sub_0801876C(u32 worldEventId, bool32 isKinstoneFused) {
if (isKinstoneFused == 0) {
return;
}
SetMetaTileType(0x168, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
SetMetaTileType(META_TILE_TYPE_360, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, LAYER_BOTTOM);
break;
case WORLD_EVENT_TYPE_11:
if (isKinstoneFused != 0) {
@ -358,12 +358,12 @@ void sub_0801876C(u32 worldEventId, bool32 isKinstoneFused) {
*(u16*)&ent->gustJarState = ptr->y + gRoomControls.origin_y;
}
if (ptr->entity_idx == 0) {
SetMetaTileType(0x8d, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
SetMetaTileType(META_TILE_TYPE_141, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, LAYER_BOTTOM);
} else {
uVar5 = (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6;
SetMetaTileType(0x8c, uVar5 - 1, 1);
uVar3 = 0x8e;
SetMetaTileType(uVar3, uVar5, 1);
SetMetaTileType(META_TILE_TYPE_140, uVar5 - 1, LAYER_BOTTOM);
uVar3 = META_TILE_TYPE_142;
SetMetaTileType(uVar3, uVar5, LAYER_BOTTOM);
}
break;
case WORLD_EVENT_TYPE_24:
@ -394,67 +394,67 @@ void sub_0801876C(u32 worldEventId, bool32 isKinstoneFused) {
void sub_080189EC(u32 worldEventId) {
u32 i;
int iVar1;
int tilePosition;
int metaTilePos;
const WorldEvent* ptr;
ptr = &gWorldEvents[worldEventId];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x42;
metaTilePos = (ptr->x >> 4) & 0x3f;
metaTilePos |= ((ptr->y >> 4) & 0x3f) << 6;
metaTilePos -= TILE_POS(2, 1);
for (i = 0; i < 4; i++) {
SetMetaTileType(i + 0x1df, tilePosition + i, 2);
SetMetaTileType(i + META_TILE_TYPE_479, metaTilePos + i, LAYER_TOP);
}
tilePosition += 0x40;
metaTilePos += TILE_POS(0, 1);
for (i = 0; i < 4; i++) {
SetMetaTileType(i + 0x1e3, tilePosition + i, 2);
SetMetaTileType(i + 0x1db, tilePosition + i, 1);
SetMetaTileType(i + META_TILE_TYPE_483, metaTilePos + i, LAYER_TOP);
SetMetaTileType(i + META_TILE_TYPE_475, metaTilePos + i, LAYER_BOTTOM);
}
}
void sub_08018A58(u32 worldEventId) {
u32 i;
int iVar2;
int metaTileType;
u32 j;
int tilePosition;
int metaTilePos;
const WorldEvent* ptr;
ptr = &gWorldEvents[worldEventId];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x43;
iVar2 = 0x232;
metaTilePos = (ptr->x >> 4) & 0x3f;
metaTilePos |= ((ptr->y >> 4) & 0x3f) << 6;
metaTilePos -= TILE_POS(3, 1);
metaTileType = META_TILE_TYPE_562;
for (i = 0; i < 4; tilePosition += 0x40, i++) {
for (i = 0; i < 4; metaTilePos += TILE_POS(0, 1), i++) {
for (j = 0; j < 7; j++) {
SetMetaTileType(iVar2++, tilePosition + j, 1);
SetMetaTileType(metaTileType++, metaTilePos + j, LAYER_BOTTOM);
}
}
}
void sub_08018AB4(int param_1) {
void sub_08018AB4(int metaTilePos) {
u32 i;
int iVar2;
u32 j;
int iVar6;
iVar2 = 0x1e8;
iVar6 = 500;
iVar2 = META_TILE_TYPE_488;
iVar6 = META_TILE_TYPE_500;
for (i = 0; i < 3; i++) {
j = 0;
for (; j < 4; j++) {
SetMetaTileType(iVar2++, param_1 + j, 1);
SetMetaTileType(iVar6++, param_1 - 0x40 + j, 2);
SetMetaTileType(iVar2++, metaTilePos + j, LAYER_BOTTOM);
SetMetaTileType(iVar6++, metaTilePos + TILE_POS(0, -1) + j, LAYER_TOP);
}
param_1 += 0x40;
metaTilePos += TILE_POS(0, 1);
}
}
void sub_08018B10(int param_1) {
void sub_08018B10(int metaTilePos) {
int iVar1;
u32 index;
int iVar3;
@ -463,34 +463,34 @@ void sub_08018B10(int param_1) {
iVar4 = 0x1f0;
iVar3 = 0x1fc;
index = 0;
iVar1 = param_1 - 0x40;
iVar1 = metaTilePos - TILE_POS(0, 1);
for (; index < 4; iVar1++, index++) {
SetMetaTileType(iVar4++, param_1 + index, 1);
SetMetaTileType(iVar3++, iVar1, 2);
SetMetaTileType(iVar4++, metaTilePos + index, LAYER_BOTTOM);
SetMetaTileType(iVar3++, iVar1, LAYER_TOP);
}
}
void sub_08018B50(u32 worldEventId) {
u32 i;
int iVar2;
int metaTileType;
u32 j;
int tilePosition;
int metaTilePos;
const WorldEvent* ptr;
ptr = &gWorldEvents[worldEventId];
if ((ptr->entity_idx & 0x80) == 0) {
iVar2 = 0x200;
metaTileType = META_TILE_TYPE_512;
} else {
iVar2 = 0x219;
metaTileType = META_TILE_TYPE_537;
}
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
tilePosition -= 0x82;
metaTilePos = (ptr->x >> 4) & 0x3f;
metaTilePos |= ((ptr->y >> 4) & 0x3f) << 6;
metaTilePos -= TILE_POS(2, 2);
for (i = 0; i < 5; tilePosition += 0x40, i++) {
for (i = 0; i < 5; metaTilePos += 0x40, i++) {
for (j = 0; j < 5; j++) {
SetMetaTileType(iVar2++, tilePosition + j, 1);
SetMetaTileType(metaTileType++, metaTilePos + j, LAYER_BOTTOM);
}
}
}
@ -513,7 +513,7 @@ void sub_08018BB4(u32 worldEventId) {
} else {
layer = 2;
}
SetMetaTileType(0x73, position, layer);
SetMetaTileType(META_TILE_TYPE_115, position, layer);
}
}
@ -523,7 +523,7 @@ void CreateMinishEntrance(u32 tilePos) {
for (y = 0; y <= 3; y++) {
for (x = 0; x <= 4; x++) {
SetMetaTileType(tileID++, tilePos + x, 1);
SetMetaTileType(tileID++, tilePos + x, LAYER_BOTTOM);
}
tilePos += 0x40;
}
@ -533,7 +533,7 @@ void sub_08018C58(u32 tilePos) {
u32 i;
for (i = 0; i < 6; i += 2, tilePos += 0x40) {
SetMetaTileType(0x260 + i, tilePos, 1);
SetMetaTileType(0x261 + i, tilePos + 1, 1);
SetMetaTileType(META_TILE_TYPE_608 + i, tilePos, LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_609 + i, tilePos + 1, LAYER_BOTTOM);
}
}

View File

@ -91,7 +91,8 @@ u32 BombableWallManager_GetBombableType(u32 metaTilePos, u32 layer) {
void BombableWallManager_DestroyWall(BombableWallManager* this) {
static void (*const gUnk_08108CE8[])(u32, u32) = {
BombableWallManager_DestroyWall0, BombableWallManager_DestroyWall1, BombableWallManager_DestroyWall2, BombableWallManager_DestroyWall3, BombableWallManager_DestroyWall4,
BombableWallManager_DestroyWall0, BombableWallManager_DestroyWall1, BombableWallManager_DestroyWall2,
BombableWallManager_DestroyWall3, BombableWallManager_DestroyWall4,
};
if (super->type != 0xff) {
gUnk_08108CE8[super->type](this->metaTilePos, this->layer);
@ -99,11 +100,11 @@ void BombableWallManager_DestroyWall(BombableWallManager* this) {
}
void BombableWallManager_DestroyWall0(u32 metaTilePos, u32 layer) {
SetMetaTileType(META_TILE_TYPE_177, metaTilePos - 0x41, layer);
SetMetaTileType(META_TILE_TYPE_178, metaTilePos - 0x40, layer);
SetMetaTileType(META_TILE_TYPE_179, metaTilePos - 0x3f, layer);
SetMetaTileType(META_TILE_TYPE_180, metaTilePos - 1, layer);
SetMetaTileType(META_TILE_TYPE_183, metaTilePos + 1, layer);
SetMetaTileType(META_TILE_TYPE_177, metaTilePos + TILE_POS(-1, -1), layer);
SetMetaTileType(META_TILE_TYPE_178, metaTilePos + TILE_POS(0, -1), layer);
SetMetaTileType(META_TILE_TYPE_179, metaTilePos + TILE_POS(1, -1), layer);
SetMetaTileType(META_TILE_TYPE_180, metaTilePos + TILE_POS(-1, 0), layer);
SetMetaTileType(META_TILE_TYPE_183, metaTilePos + TILE_POS(1, 0), layer);
if (layer == LAYER_BOTTOM) {
if (AreaHasEnemies()) {
Entity* object = CreateObject(ARCHWAY, 0xe, 0);
@ -120,9 +121,9 @@ void BombableWallManager_DestroyWall0(u32 metaTilePos, u32 layer) {
}
}
SetMetaTileType(META_TILE_TYPE_184, metaTilePos - 0x41, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_185, metaTilePos - 0x40, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_186, metaTilePos - 0x3f, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_184, metaTilePos + TILE_POS(-1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_185, metaTilePos + TILE_POS(0, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_186, metaTilePos + TILE_POS(1, -1), LAYER_TOP);
} else {
Entity* object;
SetMetaTileType(META_TILE_TYPE_181, metaTilePos, LAYER_TOP);
@ -142,11 +143,11 @@ void BombableWallManager_DestroyWall0(u32 metaTilePos, u32 layer) {
void BombableWallManager_DestroyWall1(u32 metaTilePos, u32 layer) {
Entity* object;
SetMetaTileType(META_TILE_TYPE_241, metaTilePos - 0x40, layer);
SetMetaTileType(META_TILE_TYPE_245, metaTilePos - 0x3f, layer);
SetMetaTileType(META_TILE_TYPE_246, metaTilePos + 1, layer);
SetMetaTileType(META_TILE_TYPE_244, metaTilePos + 0x40, layer);
SetMetaTileType(META_TILE_TYPE_247, metaTilePos + 0x41, layer);
SetMetaTileType(META_TILE_TYPE_241, metaTilePos + TILE_POS(0, -1), layer);
SetMetaTileType(META_TILE_TYPE_245, metaTilePos + TILE_POS(1, -1), layer);
SetMetaTileType(META_TILE_TYPE_246, metaTilePos + TILE_POS(1, 0), layer);
SetMetaTileType(META_TILE_TYPE_244, metaTilePos + TILE_POS(0, 1), layer);
SetMetaTileType(META_TILE_TYPE_247, metaTilePos + TILE_POS(1, 1), layer);
if (layer == LAYER_BOTTOM) {
if (AreaHasEnemies()) {
@ -163,9 +164,9 @@ void BombableWallManager_DestroyWall1(u32 metaTilePos, u32 layer) {
SetMetaTileType(META_TILE_TYPE_243, metaTilePos, LAYER_BOTTOM);
}
}
SetMetaTileType(META_TILE_TYPE_248, metaTilePos - 0x3f, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_248, metaTilePos + TILE_POS(1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_249, metaTilePos + 1, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_250, metaTilePos + 0x41, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_250, metaTilePos + TILE_POS(1, 1), LAYER_TOP);
} else {
SetMetaTileType(META_TILE_TYPE_242, metaTilePos, LAYER_TOP);
if (!AreaIsDungeon()) {
@ -184,11 +185,11 @@ void BombableWallManager_DestroyWall1(u32 metaTilePos, u32 layer) {
void BombableWallManager_DestroyWall2(u32 metaTilePos, u32 layer) {
Entity* object;
SetMetaTileType(META_TILE_TYPE_209, metaTilePos - 1, layer);
SetMetaTileType(META_TILE_TYPE_212, metaTilePos + 1, layer);
SetMetaTileType(META_TILE_TYPE_213, metaTilePos + 0x3f, layer);
SetMetaTileType(META_TILE_TYPE_214, metaTilePos + 0x40, layer);
SetMetaTileType(META_TILE_TYPE_215, metaTilePos + 0x41, layer);
SetMetaTileType(META_TILE_TYPE_209, metaTilePos + TILE_POS(-1, 0), layer);
SetMetaTileType(META_TILE_TYPE_212, metaTilePos + TILE_POS(1, 0), layer);
SetMetaTileType(META_TILE_TYPE_213, metaTilePos + TILE_POS(-1, 1), layer);
SetMetaTileType(META_TILE_TYPE_214, metaTilePos + TILE_POS(0, 1), layer);
SetMetaTileType(META_TILE_TYPE_215, metaTilePos + TILE_POS(1, 1), layer);
if (layer == LAYER_BOTTOM) {
if (AreaHasEnemies()) {
object = CreateObject(ARCHWAY, 0xe, 2);
@ -204,9 +205,9 @@ void BombableWallManager_DestroyWall2(u32 metaTilePos, u32 layer) {
SetMetaTileType(META_TILE_TYPE_211, metaTilePos, LAYER_BOTTOM);
}
}
SetMetaTileType(META_TILE_TYPE_216, metaTilePos + 0x3f, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_217, metaTilePos + 0x40, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_218, metaTilePos + 0x41, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_216, metaTilePos + TILE_POS(-1, 1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_217, metaTilePos + TILE_POS(0, 1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_218, metaTilePos + TILE_POS(1, 1), LAYER_TOP);
} else {
SetMetaTileType(META_TILE_TYPE_210, metaTilePos, LAYER_TOP);
if (AreaIsDungeon() == 0) {
@ -225,11 +226,11 @@ void BombableWallManager_DestroyWall2(u32 metaTilePos, u32 layer) {
void BombableWallManager_DestroyWall3(u32 metaTilePos, u32 layer) {
Entity* object;
SetMetaTileType(META_TILE_TYPE_225, metaTilePos - 0x41, layer);
SetMetaTileType(META_TILE_TYPE_228, metaTilePos - 0x40, layer);
SetMetaTileType(META_TILE_TYPE_226, metaTilePos - 1, layer);
SetMetaTileType(META_TILE_TYPE_227, metaTilePos + 0x3f, layer);
SetMetaTileType(META_TILE_TYPE_231, metaTilePos + 0x40, layer);
SetMetaTileType(META_TILE_TYPE_225, metaTilePos + TILE_POS(-1, -1), layer);
SetMetaTileType(META_TILE_TYPE_228, metaTilePos + TILE_POS(0, -1), layer);
SetMetaTileType(META_TILE_TYPE_226, metaTilePos + TILE_POS(-1, 0), layer);
SetMetaTileType(META_TILE_TYPE_227, metaTilePos + TILE_POS(-1, 1), layer);
SetMetaTileType(META_TILE_TYPE_231, metaTilePos + TILE_POS(0, 1), layer);
if (layer == LAYER_BOTTOM) {
if (AreaHasEnemies()) {
object = CreateObject(ARCHWAY, 0xe, 3);
@ -245,9 +246,9 @@ void BombableWallManager_DestroyWall3(u32 metaTilePos, u32 layer) {
SetMetaTileType(META_TILE_TYPE_230, metaTilePos, LAYER_BOTTOM);
}
}
SetMetaTileType(META_TILE_TYPE_232, metaTilePos - 0x41, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_233, metaTilePos - 1, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_234, metaTilePos + 0x3f, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_232, metaTilePos + TILE_POS(-1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_233, metaTilePos + TILE_POS(-1, 0), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_234, metaTilePos + TILE_POS(-1, 1), LAYER_TOP);
} else {
SetMetaTileType(META_TILE_TYPE_229, metaTilePos, LAYER_TOP);
if (!AreaIsDungeon()) {
@ -267,11 +268,11 @@ void BombableWallManager_DestroyWall3(u32 metaTilePos, u32 layer) {
void BombableWallManager_DestroyWall4(u32 metaTilePos, u32 layer) {
Entity* object;
SetMetaTileType(META_TILE_TYPE_193, metaTilePos - 0x41, layer);
SetMetaTileType(META_TILE_TYPE_194, metaTilePos - 0x40, layer);
SetMetaTileType(META_TILE_TYPE_195, metaTilePos - 0x3f, layer);
SetMetaTileType(META_TILE_TYPE_196, metaTilePos - 1, layer);
SetMetaTileType(META_TILE_TYPE_199, metaTilePos + 1, layer);
SetMetaTileType(META_TILE_TYPE_193, metaTilePos + TILE_POS(-1, -1), layer);
SetMetaTileType(META_TILE_TYPE_194, metaTilePos + TILE_POS(0, -1), layer);
SetMetaTileType(META_TILE_TYPE_195, metaTilePos + TILE_POS(1, -1), layer);
SetMetaTileType(META_TILE_TYPE_196, metaTilePos + TILE_POS(-1, 0), layer);
SetMetaTileType(META_TILE_TYPE_199, metaTilePos + TILE_POS(1, 0), layer);
if (layer == LAYER_BOTTOM) {
if (AreaHasEnemies()) {
object = CreateObject(ARCHWAY, 0xe, 0);
@ -287,9 +288,9 @@ void BombableWallManager_DestroyWall4(u32 metaTilePos, u32 layer) {
SetMetaTileType(META_TILE_TYPE_198, metaTilePos, LAYER_BOTTOM);
}
}
SetMetaTileType(META_TILE_TYPE_200, metaTilePos - 0x41, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_201, metaTilePos - 0x40, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_202, metaTilePos - 0x3f, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_200, metaTilePos + TILE_POS(-1, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_201, metaTilePos + TILE_POS(0, -1), LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_202, metaTilePos + TILE_POS(1, -1), LAYER_TOP);
} else {
SetMetaTileType(META_TILE_TYPE_197, metaTilePos, LAYER_TOP);
if (!AreaIsDungeon()) {

View File

@ -11,6 +11,7 @@
#include "player.h"
#include "room.h"
#include "scroll.h"
#include "tiles.h"
void DiggingCaveEntranceManager_Main(DiggingCaveEntranceManager*);
void DiggingCaveEntranceManager_Init(DiggingCaveEntranceManager*);
@ -31,7 +32,7 @@ void DiggingCaveEntranceManager_Init(DiggingCaveEntranceManager* this) {
const DiggingCaveEntrance* entrance;
u8 room;
u8 area;
u16 tile = 0x81 << 7;
u16 tile = SPECIAL_META_TILE_128;
UpdateIsDiggingCave();
if (gDiggingCaveEntranceTransition.isDiggingCave) {
if (gDiggingCaveEntranceTransition.entrance == NULL) {
@ -50,12 +51,12 @@ void DiggingCaveEntranceManager_Init(DiggingCaveEntranceManager* this) {
}
room = gRoomControls.room;
entrance = diggingCaveEntrances[gRoomControls.area];
tile = 0x81 << 7; // 0x4080
tile = SPECIAL_META_TILE_128;
for (entrance = GetDiggingCaveEntranceForRoom(entrance, room); entrance != 0;
entrance = GetDiggingCaveEntranceForRoom(entrance, room)) {
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(-1, 1), 1);
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(0, 1), 1);
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(1, 1), 1);
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(-1, 1), LAYER_BOTTOM);
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(0, 1), LAYER_BOTTOM);
SetMetaTile(tile, entrance->sourceTilePosition + TILE_POS(1, 1), LAYER_BOTTOM);
entrance++;
}
}

View File

@ -10,23 +10,24 @@
#include "asm.h"
#include "functions.h"
#include "room.h"
#include "tiles.h"
void FlameManager_Main(FlameManager* this) {
if (super->action == 0) {
this->field_0x38 = TILE(this->field_0x38, this->field_0x3a);
if (GetMetaTileType(this->field_0x38, 2) == 0x75) {
this->metaTilePos = TILE(this->metaTilePos, this->field_0x3a);
if (GetMetaTileType(this->metaTilePos, LAYER_TOP) == META_TILE_TYPE_117) {
super->action = 1;
SetMetaTile(0x406a, this->field_0x38, 1);
SetMetaTile(SPECIAL_META_TILE_106, this->metaTilePos, LAYER_BOTTOM);
} else {
DeleteThisEntity();
}
}
if (GetMetaTileType(this->field_0x38, 1) == 0x406b) {
sub_0807B7D8(0x76, this->field_0x38, 2);
if (GetMetaTileType(this->metaTilePos, LAYER_BOTTOM) == SPECIAL_META_TILE_107) {
sub_0807B7D8(META_TILE_TYPE_118, this->metaTilePos, LAYER_TOP);
DeleteThisEntity();
}
if (GetMetaTileType(this->field_0x38, 2) == 0x76) {
SetMetaTile(0x406b, this->field_0x38, 1);
if (GetMetaTileType(this->metaTilePos, LAYER_TOP) == META_TILE_TYPE_118) {
SetMetaTile(SPECIAL_META_TILE_107, this->metaTilePos, LAYER_BOTTOM);
DeleteThisEntity();
}
}

View File

@ -14,7 +14,6 @@
extern void (*const HoleManager_Actions[])(HoleManager*);
void HoleManager_Main(HoleManager* this) {
HoleManager_Actions[super->action](this);
}

View File

@ -11,6 +11,7 @@
#include "functions.h"
#include "main.h"
#include "room.h"
#include "tiles.h"
void sub_08059A58(HyruleTownTilesetManager*);
void sub_08059A2C(HyruleTownTilesetManager*);
@ -113,32 +114,32 @@ void sub_08059B18(void) {
if (CheckGlobalFlag(TATEKAKE_HOUSE) != 0) {
for (loopVar = 0; loopVar < 4; ++loopVar) {
for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) {
SetMetaTileByIndex(loopVar * 0x10 + 0x4ab + innerLoopVar,
SetMetaTileByIndex(loopVar * 0x10 + META_TILE_TYPE_1195 + innerLoopVar,
COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1);
}
}
for (loopVar = 0; loopVar < 3; ++loopVar) {
for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) {
SetMetaTileByIndex(loopVar * 0x10 + 0x440 + innerLoopVar,
SetMetaTileByIndex(loopVar * 0x10 + META_TILE_TYPE_1088 + innerLoopVar,
COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 2);
}
}
SetMetaTileByIndex(0xd6, 0x5c2, 2);
SetMetaTileByIndex(0xd7, 0x5c3, 2);
SetMetaTileByIndex(META_TILE_TYPE_214, TILE_POS(2, 23), LAYER_TOP);
SetMetaTileByIndex(META_TILE_TYPE_215, TILE_POS(3, 23), LAYER_TOP);
LoadResourceAsync(&gUnk_086E8460, 0x6001800, 0x800);
} else {
if (CheckGlobalFlag(TATEKAKE_TOCHU) != 0) {
for (loopVar = 0; loopVar < 5; ++loopVar) {
for (innerLoopVar = 0; innerLoopVar < 4; ++innerLoopVar) {
SetMetaTileByIndex(loopVar * 0x10 + 0x4a6 + innerLoopVar,
SetMetaTileByIndex(loopVar * 0x10 + META_TILE_TYPE_1190 + innerLoopVar,
COMMON(0x28 + 0x10 * innerLoopVar, loopVar * 0x10), 1);
}
}
SetMetaTileByIndex(0x444, 0x602, 2);
SetMetaTileByIndex(0x445, 0x605, 2);
SetMetaTileByIndex(0x454, 0x642, 2);
SetMetaTileByIndex(0x455, 0x645, 2);
SetMetaTileByIndex(META_TILE_TYPE_1092, TILE_POS(2, 24), LAYER_TOP);
SetMetaTileByIndex(META_TILE_TYPE_1093, TILE_POS(5, 24), LAYER_TOP);
SetMetaTileByIndex(META_TILE_TYPE_1108, TILE_POS(2, 25), LAYER_TOP);
SetMetaTileByIndex(META_TILE_TYPE_1109, TILE_POS(5, 25), LAYER_TOP);
}
}
}

View File

@ -79,7 +79,7 @@ void LightLevelSetManager_Type2(LightLevelSetManager* this) {
((s16)this->field_0x38 >> 4 & 0x3fU) | ((s32)((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6);
super->action = 1;
} else {
if (GetMetaTileType(this->field_0x20, super->type2) == 0x76) {
if (GetMetaTileType(this->field_0x20, super->type2) == META_TILE_TYPE_118) {
SetFlag(this->field_0x3e);
ChangeLightLevel(super->timer);
DeleteThisEntity();
@ -103,7 +103,7 @@ void LightLevelSetManager_Type3(LightLevelSetManager* this) {
break;
case 1:
if (GetMetaTileType(this->field_0x20, super->type2) != 0x76) {
if (GetMetaTileType(this->field_0x20, super->type2) != META_TILE_TYPE_118) {
return;
}
SetFlag(this->field_0x3e);
@ -133,13 +133,14 @@ void LightLevelSetManager_Type3(LightLevelSetManager* this) {
void sub_0805BE70(LightLevelSetManager* this, u32 metaTileType) {
SetMetaTileType(metaTileType,
((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
super->type2);
((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
super->type2);
}
void sub_0805BE94(LightLevelSetManager* this) {
SetMetaTileType(META_TILE_TYPE_118, ((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
super->type2);
SetMetaTileType(META_TILE_TYPE_118,
((this->field_0x38 << 0x10) >> 0x14 & 0x3fU) | ((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6,
super->type2);
ChangeLightLevel(super->timer);
DeleteThisEntity();
}

View File

@ -121,9 +121,9 @@ void MiscManager_Type0(MiscManager* this) {
void sub_08058F44(u32 x, u32 y, u32 flag) {
if (CheckRoomFlag(flag))
return;
if (sub_080B1A48(x, y, 1) != 0x61)
if (sub_080B1A48(x, y, LAYER_BOTTOM) != META_TILE_TYPE_97)
return;
SetMetaTileType(0x26, ((x >> 4) & 0x3F) | (((y >> 4) & 0x3F) << 6), 1);
SetMetaTileType(META_TILE_TYPE_38, ((x >> 4) & 0x3F) | (((y >> 4) & 0x3F) << 6), LAYER_BOTTOM);
sub_08058F84(x, y);
}
@ -240,7 +240,7 @@ void MiscManager_Type5(MiscManager* this) {
DeleteThisEntity();
}
super->action = 1;
SetMetaTileType(0x365, TILE_LOCAL(this->x, this->y), super->type2);
SetMetaTileType(META_TILE_TYPE_869, TILE_LOCAL(this->x, this->y), super->type2);
break;
case 1:
if (CheckFlags(this->flags)) {
@ -338,10 +338,10 @@ void sub_0805930C(MiscManager* this) {
tmp->collisionLayer = 1;
}
void SetDirtTile(u32 tile) {
SetMetaTileType(CUT_GRASS, tile, 1);
SetMetaTileType(0, tile, 2);
SetMetaTileType(0, tile - 0x40, 2);
void SetDirtTile(u32 metaTilePos) {
SetMetaTileType(META_TILE_TYPE_29, metaTilePos, LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_0, metaTilePos, LAYER_TOP);
SetMetaTileType(META_TILE_TYPE_0, metaTilePos + TILE_POS(0, -1), LAYER_TOP);
}
void MiscManager_TypeA(MiscManager* this) {

View File

@ -7,6 +7,7 @@
#include "manager/railIntersectionManager.h"
#include "flags.h"
#include "room.h"
#include "tiles.h"
void sub_0805B778(RailIntersectionManager*);
void RailIntersectionManager_Init(RailIntersectionManager*);
@ -25,7 +26,7 @@ void RailIntersectionManager_Init(RailIntersectionManager* this) {
super->type2 = 1;
}
super->action = 1;
this->field_0x38 = (this->field_0x38 >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6);
this->metaTilePos = (this->metaTilePos >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6);
sub_0805B778(this);
}
@ -44,6 +45,7 @@ void RailIntersectionManager_Action1(RailIntersectionManager* this) {
}
void sub_0805B778(RailIntersectionManager* this) {
static const u16 gUnk_08108C9C[] = { 0x358, 0x359, 0x356, 0x35a, 0x35a, 0x357 };
SetMetaTileType(gUnk_08108C9C[super->type * 2 + super->type2], this->field_0x38, this->field_0x36);
static const u16 gUnk_08108C9C[] = { META_TILE_TYPE_856, META_TILE_TYPE_857, META_TILE_TYPE_854,
META_TILE_TYPE_858, META_TILE_TYPE_858, META_TILE_TYPE_855 };
SetMetaTileType(gUnk_08108C9C[super->type * 2 + super->type2], this->metaTilePos, this->layer);
}

View File

@ -12,6 +12,7 @@
#include "flags.h"
#include "functions.h"
#include "sound.h"
#include "tiles.h"
enum { INIT, IN_PROGRESS, FAILED, SUCCEEDED };
@ -31,15 +32,15 @@ void TilePuzzleManager_Main(TilePuzzleManager* this) {
if (this->player_current_tile != this->player_previous_tile) {
this->player_previous_tile = this->player_current_tile;
switch (GetMetaTileType(this->player_current_tile, super->type2)) {
case 0x317:
case META_TILE_TYPE_791:
// stepped on a red tile again
super->action = FAILED;
SoundReq(SFX_MENU_ERROR);
break;
case 0x318:
case META_TILE_TYPE_792:
// stepped on a blue tile
// turn the tile into a red tile
sub_0807B7D8(0x317, this->player_current_tile, super->type2);
sub_0807B7D8(META_TILE_TYPE_791, this->player_current_tile, super->type2);
SoundReq(SFX_6B);
// decrease the number of remaining tiles and check if we're done
if (--super->timer == 0) {

View File

@ -8,9 +8,10 @@
#include "asm.h"
#include "entity.h"
#include "functions.h"
#include "tiles.h"
void WaterfallBottomManager_Main(WaterfallBottomManager* this) {
SetMetaTile(0x4014, 0x5c3, 1);
SetMetaTile(SPECIAL_META_TILE_20, TILE_POS(3, 23), LAYER_BOTTOM);
if ((gRoomControls.origin_y + 200 < gPlayerEntity.y.HALF.HI) &&
((u32)(gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) - 0x30 < 0x11)) {
gPlayerEntity.collisionLayer = 3;

View File

@ -1603,7 +1603,7 @@ bool32 IsTileCollision(const u8* collisionData, s32 x, s32 y, u32 collisionType)
}
void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionType) {
u8* layer;
u8* collisionData;
u32 colResult;
Hitbox* hb;
s32 xMin;
@ -1612,7 +1612,7 @@ void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionTyp
u32 hitboxUnkX;
u32 hitboxUnkY;
layer = GetLayerByIndex(this->collisionLayer)->collisionData;
collisionData = GetLayerByIndex(this->collisionLayer)->collisionData;
hb = this->hitbox;
xMin = this->x.HALF.HI + hb->offset_x;
yMin = this->y.HALF.HI + hb->offset_y;
@ -1621,35 +1621,35 @@ void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionTyp
if ((direction & 0xf) != 0) {
if (0xf >= direction) {
temp = xMin + hitboxUnkX;
colResult = IsTileCollision(layer, temp, yMin, collisionType);
colResult = IsTileCollision(collisionData, temp, yMin, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin + hitboxUnkY, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin - hitboxUnkY, collisionType);
colResult <<= 6;
} else {
temp = xMin - hitboxUnkX;
colResult = IsTileCollision(layer, temp, yMin, collisionType);
colResult = IsTileCollision(collisionData, temp, yMin, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin + hitboxUnkY, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin - hitboxUnkY, collisionType);
colResult <<= 2;
}
} else {
temp = xMin + hitboxUnkX;
colResult = IsTileCollision(layer, temp, yMin, collisionType);
colResult = IsTileCollision(collisionData, temp, yMin, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin + hitboxUnkY, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin - hitboxUnkY, collisionType);
colResult <<= 2;
temp = xMin - hitboxUnkX;
colResult |= IsTileCollision(layer, temp, yMin, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin + hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin + hitboxUnkY, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, temp, yMin - hitboxUnkY, collisionType);
colResult |= IsTileCollision(collisionData, temp, yMin - hitboxUnkY, collisionType);
colResult <<= 2;
}
@ -1660,36 +1660,36 @@ void CalculateEntityTileCollisions(Entity* this, u32 direction, u32 collisionTyp
if (((direction)&0xf) != 0) {
if (direction < 0x10) {
temp = yMin + hitboxUnkY;
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin + hitboxUnkX, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin - hitboxUnkX, temp, collisionType);
colResult <<= 5;
} else {
temp = yMin - hitboxUnkY;
colResult <<= 4;
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin + hitboxUnkX, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin - hitboxUnkX, temp, collisionType);
colResult <<= 1;
}
} else {
temp = yMin + hitboxUnkY;
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin + hitboxUnkX, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin - hitboxUnkX, temp, collisionType);
colResult <<= 2;
temp = yMin - hitboxUnkY;
colResult |= IsTileCollision(layer, xMin, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin + hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin + hitboxUnkX, temp, collisionType);
colResult <<= 1;
colResult |= IsTileCollision(layer, xMin - hitboxUnkX, temp, collisionType);
colResult |= IsTileCollision(collisionData, xMin - hitboxUnkX, temp, collisionType);
colResult <<= 1;
}
this->collisions = colResult;

View File

@ -40,8 +40,17 @@ extern const PlayerMacroEntry gPlayerMacroBladeBrothers5;
extern const PlayerMacroEntry gPlayerMacroBladeBrothers6;
extern const PlayerMacroEntry gPlayerMacroBladeBrothers7;
const PlayerMacroEntry* const BladeBrothers_PlayerMacros[] = {
&gPlayerMacroBladeBrothers0, &gPlayerMacroBladeBrothers1, &gPlayerMacroBladeBrothers2, &gPlayerMacroBladeBrothers3, &gPlayerMacroBladeBrothers4, &gPlayerMacroBladeBrothers5,
&gPlayerMacroBladeBrothers6, &gPlayerMacroBladeBrothers7, NULL, NULL, NULL,
&gPlayerMacroBladeBrothers0,
&gPlayerMacroBladeBrothers1,
&gPlayerMacroBladeBrothers2,
&gPlayerMacroBladeBrothers3,
&gPlayerMacroBladeBrothers4,
&gPlayerMacroBladeBrothers5,
&gPlayerMacroBladeBrothers6,
&gPlayerMacroBladeBrothers7,
NULL,
NULL,
NULL,
};
const u8 BladeBrothers_EquippedItem[] = {

View File

@ -1,10 +1,11 @@
#include "sound.h"
#include "entity.h"
#include "script.h"
#include "functions.h"
#include "flags.h"
#include "effects.h"
#include "entity.h"
#include "flags.h"
#include "functions.h"
#include "npc.h"
#include "script.h"
#include "sound.h"
#include "tiles.h"
static const Hitbox gUnk_08110E94;
@ -67,20 +68,20 @@ void sub_08067418(Entity* this) {
this->field_0x74.HWORD = COORD_TO_TILE(this);
if (this->type == 0) {
this->hitbox = (Hitbox*)&gUnk_08110E94;
SetMetaTile(0x4022, this->field_0x74.HWORD - 1, this->collisionLayer);
SetMetaTile(0x4022, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTile(0x4022, this->field_0x74.HWORD + 0x3f, this->collisionLayer);
SetMetaTile(0x4022, this->field_0x74.HWORD + 0x40, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->field_0x74.HWORD - 1, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->field_0x74.HWORD + 0x3f, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->field_0x74.HWORD + 0x40, this->collisionLayer);
} else {
this->collisionLayer = 3;
this->spriteOrientation.flipY = 1;
this->spriteRendering.b3 = 1;
this->spritePriority.b0 = 2;
if (CheckLocalFlag(HIKYOU_00_SEKIZOU) == 0) {
SetMetaTile(0x4022, 0xe81, 1);
SetMetaTile(0x4022, 0xe82, 1);
SetMetaTile(0x4022, 0xe83, 1);
SetMetaTile(0x4022, 0xec3, 1);
SetMetaTile(SPECIAL_META_TILE_34, TILE_POS(1, 58), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, TILE_POS(2, 58), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, TILE_POS(3, 58), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, TILE_POS(3, 59), LAYER_BOTTOM);
}
}
sub_0807DD50(this);

View File

@ -1,4 +1,5 @@
#include "npc.h"
#include "tiles.h"
void sub_0806DD90(Entity*);
void sub_0806DEC8(Entity*);
@ -31,12 +32,12 @@ void sub_0806DD90(Entity* this) {
InitializeAnimation(this, uVar2);
x = this->x.HALF.HI;
y = this->y.HALF.HI;
SetMetaTile(0x4072, TILE(x - 0x18, y - 0x10), this->collisionLayer);
SetMetaTile(0x4072, TILE(x - 0x18, y), this->collisionLayer);
SetMetaTile(0x4072, TILE(x - 0x18, y + 0x10), this->collisionLayer);
SetMetaTile(0x4072, TILE(x + 0x18, y - 0x10), this->collisionLayer);
SetMetaTile(0x4072, TILE(x + 0x18, y), this->collisionLayer);
SetMetaTile(0x4072, TILE(x + 0x18, y + 0x10), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x - 24, y - 16), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x - 24, y), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x - 24, y + 16), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x + 24, y - 16), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x + 24, y), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(x + 24, y + 16), this->collisionLayer);
}
void sub_0806DEC8(Entity* this) {

View File

@ -1,11 +1,12 @@
#include "global.h"
#include "entity.h"
#include "player.h"
#include "room.h"
#include "flags.h"
#include "item.h"
#include "map.h"
#include "message.h"
#include "npc.h"
#include "item.h"
#include "player.h"
#include "room.h"
#include "tiles.h"
void Dampe(Entity* this) {
switch (this->action) {
@ -93,10 +94,10 @@ void sub_0806BEC8(Entity* this, ScriptExecutionContext* context) {
}
void sub_0806BEFC(void) {
SetMetaTileType(0x17E, 0x58E, 1);
SetMetaTileType(0x17F, 0x58F, 1);
SetMetaTileType(0x180, 0x5CE, 1);
SetMetaTileType(0x181, 0x5CF, 1);
SetMetaTileType(META_TILE_TYPE_382, TILE_POS(14, 22), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_383, TILE_POS(15, 22), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_384, TILE_POS(14, 23), LAYER_BOTTOM);
SetMetaTileType(META_TILE_TYPE_385, TILE_POS(15, 23), LAYER_BOTTOM);
}
void sub_0806BF44(Entity* this, ScriptExecutionContext* context) {

View File

@ -1,8 +1,9 @@
#include "entity.h"
#include "collision.h"
#include "entity.h"
#include "functions.h"
#include "npc.h"
#include "item.h"
#include "npc.h"
#include "tiles.h"
void sub_08069FE8(Entity*);
bool32 sub_08069EF0(Entity*);
@ -217,7 +218,7 @@ void sub_08069B44(Entity* this) {
this->action = 4;
}
if ((this->type == 2) && (CheckLocalFlag(MACHI_02_DOG) == 0)) {
SetMetaTile(0x4072, TILE(this->x.HALF.HI, this->y.HALF.HI - 8), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, TILE(this->x.HALF.HI, this->y.HALF.HI - 8), this->collisionLayer);
}
}
}

View File

@ -1,6 +1,7 @@
#include "functions.h"
#include "message.h"
#include "npc.h"
#include "tiles.h"
const SpriteLoadData gUnk_0810BD7C[] = {
{ 58, 59, 4 },
@ -567,21 +568,21 @@ void sub_080626E0(Entity* this, ScriptExecutionContext* context) {
}
void sub_08062788(Entity* this, ScriptExecutionContext* context) {
SetMetaTile(0x4072, 0x60b, 1);
SetMetaTile(0x4072, 0x60c, 1);
SetMetaTile(0x4072, 0x60d, 1);
SetMetaTile(0x4072, 0x64b, 1);
SetMetaTile(0x4072, 0x64c, 1);
SetMetaTile(0x4072, 0x64d, 1);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(11, 24), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(12, 24), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(13, 24), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(11, 25), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(12, 25), LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_114, TILE_POS(13, 25), LAYER_BOTTOM);
}
void sub_080627E8(Entity* this, ScriptExecutionContext* context) {
RestorePrevTileEntity(0x60b, 1);
RestorePrevTileEntity(0x60c, 1);
RestorePrevTileEntity(0x60d, 1);
RestorePrevTileEntity(0x64b, 1);
RestorePrevTileEntity(0x64c, 1);
RestorePrevTileEntity(0x64d, 1);
RestorePrevTileEntity(TILE_POS(11, 24), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(12, 24), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(13, 24), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(11, 25), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(12, 25), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(13, 25), LAYER_BOTTOM);
}
void Kid_Head(Entity* this) {

View File

@ -10,6 +10,7 @@
#include "save.h"
#include "screenTransitions.h"
#include "sound.h"
#include "tiles.h"
typedef struct {
Rect customHitbox;
@ -183,18 +184,18 @@ void NPC4E_RestoreEquippedItems(Entity* this) {
void sub_0806DC7C(void) {
const u16* tiles = gUnk_081141F4;
while (*tiles != 0) {
u32 tile = *tiles;
u32 metaTilePos = *tiles;
tiles = tiles + 1;
SetMetaTileType(0x4072, tile, 1);
SetMetaTileType(SPECIAL_META_TILE_114, metaTilePos, LAYER_BOTTOM);
}
}
void sub_0806DCA0(void) {
const u16* tiles = gUnk_081141F4;
while (*tiles != 0) {
u32 tile = *tiles;
u32 metaTilePos = *tiles;
tiles = tiles + 1;
RestorePrevTileEntity(tile, 1);
RestorePrevTileEntity(metaTilePos, LAYER_BOTTOM);
}
}

View File

@ -471,11 +471,7 @@ u32 sub_080611D4(Entity* this) {
static const u8 gUnk_0810AC54[] = {
// vvv, animationState
VVV_43, 0x10,
VVV_42, 0x0,
VVV_45, 0x8,
VVV_44, 0x18,
0x0,
VVV_43, 0x10, VVV_42, 0x0, VVV_45, 0x8, VVV_44, 0x18, 0x0,
};
u32 vvv;

View File

@ -7,6 +7,7 @@
#include "screenTransitions.h"
#include "script.h"
#include "sound.h"
#include "tiles.h"
typedef struct {
u8 filler[4];
@ -29,7 +30,7 @@ void sub_0806C224(void) {
void Simon_CreateChest(Entity* this) {
CreateObjectWithParent(this, SPECIAL_FX, FX_BIG_EXPLOSION2, 0);
SetMetaTileType(0x73, COORD_TO_TILE(this), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_115, COORD_TO_TILE(this), this->collisionLayer);
SoundReq(SFX_SECRET_BIG);
}

View File

@ -1,9 +1,9 @@
#include "global.h"
#include "sound.h"
#include "entity.h"
#include "functions.h"
#include "flags.h"
#include "functions.h"
#include "npc.h"
#include "sound.h"
#include "tiles.h"
void ZeldaFollower_Hide(Entity*, Entity*);
void ZeldaFollower_Show(Entity*, Entity*);
@ -165,14 +165,14 @@ static const u16 gUnk_08110BE0[] = {
};
void sub_08066F94(void) {
u16 uVar1;
u16 metaTilePos;
const u16* puVar2;
puVar2 = gUnk_08110BE0;
while (*puVar2 != 0) {
uVar1 = *puVar2;
metaTilePos = *puVar2;
puVar2++;
SetMetaTileType(0x4072, uVar1, 1);
SetMetaTileType(SPECIAL_META_TILE_114, metaTilePos, LAYER_BOTTOM);
}
}

View File

@ -11,6 +11,7 @@
#include "projectile.h"
#include "room.h"
#include "sound.h"
#include "tiles.h"
void AngryStatue_Init(Entity*);
void AngryStatue_Action1(Entity*);
@ -29,7 +30,7 @@ void AngryStatue(Entity* this) {
void AngryStatue_Init(Entity* this) {
this->action = 1;
this->hitbox = (Hitbox*)&gUnk_080FD178;
SetMetaTile(0x4022, COORD_TO_TILE(this), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, COORD_TO_TILE(this), this->collisionLayer);
InitializeAnimation(this, this->type);
}

View File

@ -6,6 +6,7 @@
*/
#include "functions.h"
#include "object.h"
#include "tiles.h"
extern void SoundReqClipped(Entity*, u32);
void sub_0809CDF0(Entity*);
@ -95,18 +96,18 @@ void BakerOven_Action2(Entity* this) {
}
void sub_0809CDF0(Entity* this) {
u32 y;
u32 metaTilePos;
this->field_0x80.HWORD = (((this->x.HALF.HI - gRoomControls.origin_x) >> 4) & 0x3f) |
(((this->y.HALF.HI - gRoomControls.origin_y) >> 4 & 0x3f) << 6);
y = this->field_0x80.HWORD;
SetMetaTile(0x402e, y - 0x01, this->collisionLayer);
SetMetaTile(0x4022, y - 0x00, this->collisionLayer);
SetMetaTile(0x4022, y + 0x01, this->collisionLayer);
SetMetaTile(0x4026, y - 0x41, this->collisionLayer);
SetMetaTile(0x4026, y - 0x40, this->collisionLayer);
SetMetaTile(0x4024, y - 0x3f, this->collisionLayer);
SetMetaTile(0x4026, y - 0x81, this->collisionLayer);
SetMetaTile(0x4026, y - 0x80, this->collisionLayer);
metaTilePos = this->field_0x80.HWORD;
SetMetaTile(SPECIAL_META_TILE_46, metaTilePos + TILE_POS(-1, 0), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos + TILE_POS(0, 0), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos + TILE_POS(1, 0), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, metaTilePos + TILE_POS(-1, -1), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, metaTilePos + TILE_POS(0, -1), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_36, metaTilePos + TILE_POS(1, -1), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, metaTilePos + TILE_POS(-1, -2), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, metaTilePos + TILE_POS(0, -2), this->collisionLayer);
}

View File

@ -5,15 +5,15 @@
* @brief Beanstalk object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[4];
/*0x6c*/ u32 unk_6c;
/*0x70*/ u16 unk_70;
/*0x70*/ u16 tilePos;
/*0x72*/ u16 unk_72;
} BeanstalkEntity;
@ -256,11 +256,11 @@ void Beanstalk_Action1Type7(BeanstalkEntity* this) {
return;
}
this->unk_6c = gRoomControls.origin_y;
this->unk_70 = TILE(super->x.HALF.HI, this->unk_6c);
this->tilePos = TILE(super->x.HALF.HI, this->unk_6c);
while (TRUE) {
this->unk_70 = TILE(super->x.HALF.HI, this->unk_6c);
SetMetaTile(0x4017, this->unk_70, 2);
SetMetaTile(0x4017, this->unk_70, 1);
this->tilePos = TILE(super->x.HALF.HI, this->unk_6c);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos, LAYER_TOP);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos, LAYER_BOTTOM);
this->unk_6c += 0x10;
if (this->unk_6c >= gRoomControls.origin_y + gRoomControls.height)
break;
@ -308,8 +308,8 @@ void Beanstalk_Action1Type8SubAction0(BeanstalkEntity* this) {
Entity* obj;
super->spriteOrientation.flipY = 2;
this->unk_70 = COORD_TO_TILE(super);
SetMetaTile(0x4017, this->unk_70, 1);
this->tilePos = COORD_TO_TILE(super);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos, LAYER_BOTTOM);
super->subAction = 1;
obj = CreateObjectWithParent(super, CHUCHU_BOSS_PARTICLE, 0, 0);
if (obj != NULL) {
@ -334,19 +334,19 @@ void Beanstalk_Action1Type9(BeanstalkEntity* this) {
if (super->subAction == 0) {
super->subAction = 1;
super->y.HALF.HI += 0x28;
this->unk_72 = sub_080B1A0C(super, 0, -0x18);
this->unk_72 = sub_080B1A0C(super, 0, -24);
}
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
if (gPlayerState.floor_type == SURFACE_LADDER) {
super->spritePriority.b0 = 0;
if (sub_080B1A0C(super, 0, -0x18) != 0x4014) {
SetMetaTile(0x4014, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1);
if (sub_080B1A0C(super, 0, -24) != SPECIAL_META_TILE_20) {
SetMetaTile(SPECIAL_META_TILE_20, COORD_TO_TILE_OFFSET(super, 0, 24), LAYER_BOTTOM);
}
} else {
super->spritePriority.b0 = 5;
if (this->unk_72 != sub_080B1A0C(super, 0, -0x18)) {
SetMetaTile(this->unk_72, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1);
if (this->unk_72 != sub_080B1A0C(super, 0, -24)) {
SetMetaTile(this->unk_72, COORD_TO_TILE_OFFSET(super, 0, 24), LAYER_BOTTOM);
}
}
}

View File

@ -9,10 +9,12 @@
#include "common.h"
#include "entity.h"
#include "flags.h"
#include "map.h"
#include "object.h"
#include "room.h"
#include "save.h"
#include "sound.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -293,7 +295,7 @@ void sub_08088F20(BigBarrelEntity* this) {
pEVar3->collisionLayer = 2;
pEVar3->spritePriority.b0 = 2;
}
SetMetaTileType(0x76, COORD_TO_TILE(super), 2);
SetMetaTileType(META_TILE_TYPE_118, COORD_TO_TILE(super), LAYER_TOP);
break;
case 2:
if (--super->timer) {

View File

@ -140,116 +140,116 @@ void sub_08099910(BigIceBlockEntity* this) {
switch (uVar2) {
default:
SetMetaTile(0x4022, metaTilePos - 0x41, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos - 0x40, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos - 1, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos - 0x41, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos - 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos - 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos, super->collisionLayer);
break;
case 1:
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x41, super->collisionLayer);
tileIndex = 0x4024;
tileIndex = SPECIAL_META_TILE_36;
if (vvv == VVV_18) {
tileIndex = 0x4079;
tileIndex = SPECIAL_META_TILE_121;
}
SetMetaTile(tileIndex, metaTilePos - 0x41, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos - 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos - 0x40, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x3f, super->collisionLayer);
tileIndex = 0x4025;
tileIndex = SPECIAL_META_TILE_37;
if (vvv == VVV_18) {
tileIndex = 0x407b;
tileIndex = SPECIAL_META_TILE_123;
}
SetMetaTile(tileIndex, metaTilePos - 0x3f, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 1, super->collisionLayer);
tileIndex = 0x4024;
tileIndex = SPECIAL_META_TILE_36;
if (vvv == VVV_18) {
tileIndex = 0x4079;
tileIndex = SPECIAL_META_TILE_121;
}
SetMetaTile(tileIndex, metaTilePos - 1, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 1, super->collisionLayer);
tileIndex = 0x4025;
tileIndex = SPECIAL_META_TILE_37;
if (vvv == VVV_18) {
tileIndex = 0x407b;
tileIndex = SPECIAL_META_TILE_123;
}
SetMetaTile(tileIndex, metaTilePos + 1, super->collisionLayer);
return;
break;
case 2:
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x41, super->collisionLayer);
tileIndex = 0x4023;
tileIndex = SPECIAL_META_TILE_35;
if (vvv == VVV_18) {
tileIndex = 0x4077;
tileIndex = SPECIAL_META_TILE_119;
}
SetMetaTile(tileIndex, metaTilePos - 0x41, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x40, super->collisionLayer);
tileIndex = 0x4023;
tileIndex = SPECIAL_META_TILE_35;
if (vvv == VVV_18) {
tileIndex = 0x4077;
tileIndex = SPECIAL_META_TILE_119;
}
SetMetaTile(tileIndex, metaTilePos - 0x40, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos - 1, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos - 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 0x3f, super->collisionLayer);
tileIndex = 0x4026;
tileIndex = SPECIAL_META_TILE_38;
if (vvv == VVV_18) {
tileIndex = 0x407c;
tileIndex = SPECIAL_META_TILE_124;
}
SetMetaTile(tileIndex, metaTilePos + 0x3f, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 0x40, super->collisionLayer);
tileIndex = 0x4026;
tileIndex = SPECIAL_META_TILE_38;
if (vvv == VVV_18) {
tileIndex = 0x407c;
tileIndex = SPECIAL_META_TILE_124;
}
SetMetaTile(tileIndex, metaTilePos + 0x40, super->collisionLayer);
break;
case 3:
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x41, super->collisionLayer);
tileIndex = 0x4027;
tileIndex = SPECIAL_META_TILE_39;
if (vvv == VVV_18) {
tileIndex = 0x4075;
tileIndex = SPECIAL_META_TILE_117;
}
SetMetaTile(tileIndex, metaTilePos - 0x41, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x40, super->collisionLayer);
tileIndex = 0x4023;
tileIndex = SPECIAL_META_TILE_35;
if (vvv == VVV_18) {
tileIndex = 0x4077;
tileIndex = SPECIAL_META_TILE_119;
}
SetMetaTile(tileIndex, metaTilePos - 0x40, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 0x3f, super->collisionLayer);
tileIndex = 0x4028;
tileIndex = SPECIAL_META_TILE_40;
if (vvv == VVV_18) {
tileIndex = 0x4076;
tileIndex = SPECIAL_META_TILE_118;
}
SetMetaTile(tileIndex, metaTilePos - 0x3f, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos - 1, super->collisionLayer);
tileIndex = 0x4024;
tileIndex = SPECIAL_META_TILE_36;
if (vvv == VVV_18) {
tileIndex = 0x4079;
tileIndex = SPECIAL_META_TILE_121;
}
SetMetaTile(tileIndex, metaTilePos - 1, super->collisionLayer);
SetMetaTile(0x4022, metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, metaTilePos, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 1, super->collisionLayer);
tileIndex = 0x4025;
tileIndex = SPECIAL_META_TILE_37;
if (vvv == VVV_18) {
tileIndex = 0x407b;
tileIndex = SPECIAL_META_TILE_123;
}
SetMetaTile(tileIndex, metaTilePos + 1, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 0x3f, super->collisionLayer);
tileIndex = 0x4029;
tileIndex = SPECIAL_META_TILE_41;
if (vvv == VVV_18) {
tileIndex = 0x4078;
tileIndex = SPECIAL_META_TILE_120;
}
SetMetaTile(tileIndex, metaTilePos + 0x3f, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 0x40, super->collisionLayer);
tileIndex = 0x4026;
tileIndex = SPECIAL_META_TILE_38;
if (vvv == VVV_18) {
tileIndex = 0x407c;
tileIndex = SPECIAL_META_TILE_124;
}
SetMetaTile(tileIndex, metaTilePos + 0x40, super->collisionLayer);
vvv = GetVvvAtMetaTilePos(metaTilePos + 0x41, super->collisionLayer);
tileIndex = 0x402a;
tileIndex = SPECIAL_META_TILE_42;
if (vvv == VVV_18) {
tileIndex = 0x407a;
tileIndex = SPECIAL_META_TILE_122;
}
SetMetaTile(tileIndex, metaTilePos + 0x41, super->collisionLayer);
break;

View File

@ -7,8 +7,8 @@
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -38,9 +38,6 @@ bool32 BigPushableLever_ShouldStartPushing(BigPushableLeverEntity*);
void BigPushableLever_SetMetaTiles(BigPushableLeverEntity*);
void BigPushableLever_CalculateSpriteOffsets(BigPushableLeverEntity*);
#define TILE_INITIAL 0x4058
#define TILE_PUSHED 0x4056
void BigPushableLever(BigPushableLeverEntity* this) {
BigPushableLever_Actions[super->action](this);
}
@ -93,8 +90,8 @@ void BigPushableLever_SetMetaTiles(BigPushableLeverEntity* this) {
this->tilePositionLower = this->tilePositionUpper - 0x40;
this->tileIndexUpper = GetMetaTileIndex(this->tilePositionUpper, super->collisionLayer);
this->tileIndexLower = GetMetaTileIndex(this->tilePositionLower, super->collisionLayer);
SetMetaTile(0x4057, this->tilePositionUpper, super->collisionLayer);
SetMetaTile(0x4058, this->tilePositionLower, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_87, this->tilePositionUpper, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_88, this->tilePositionLower, super->collisionLayer);
InitializeAnimation(super, 1);
} else {
super->type2 = 1;
@ -102,14 +99,14 @@ void BigPushableLever_SetMetaTiles(BigPushableLeverEntity* this) {
this->tilePositionLower = this->tilePositionUpper - 1;
this->tileIndexUpper = GetMetaTileIndex(this->tilePositionUpper, super->collisionLayer);
this->tileIndexLower = GetMetaTileIndex(this->tilePositionLower, super->collisionLayer);
SetMetaTile(0x4055, this->tilePositionUpper, super->collisionLayer);
SetMetaTile(0x4056, this->tilePositionLower, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_85, this->tilePositionUpper, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_86, this->tilePositionLower, super->collisionLayer);
InitializeAnimation(super, 0);
}
}
bool32 BigPushableLever_ShouldStartPushing(BigPushableLeverEntity* this) {
if (GetMetaTileIndex(this->tilePositionLower, super->collisionLayer) == 0x4059) {
if (GetMetaTileIndex(this->tilePositionLower, super->collisionLayer) == SPECIAL_META_TILE_89) {
if (--this->timer == 0) {
return TRUE;
}
@ -144,8 +141,8 @@ void (*const BigPushableLever_Actions[])(BigPushableLeverEntity*) = {
BigPushableLever_Pushing,
};
const u16 gUnk_081236E8[] = {
TILE_INITIAL,
TILE_PUSHED,
SPECIAL_META_TILE_88,
SPECIAL_META_TILE_86,
};
const u8 BigPushableLever_InitialOffsets[] = {
0, 0, 0, 0, 255, 0, 0, 0,

View File

@ -6,9 +6,10 @@
*/
#define NENT_DEPRECATED
#include "area.h"
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -27,11 +28,11 @@ void BlockPushed(BlockPushedEntity* this) {
void BlockPushed_Init(BlockPushedEntity* this) {
u16 tmp;
u32 pos;
u32 metaTilePos;
if (gRoomControls.area == 0x11) {
if (gRoomControls.area == AREA_MINISH_PATHS) {
UnloadGFXSlots(super);
if (LoadFixedGFX(super, 0x1c1) == 0) {
if (LoadFixedGFX(super, 449) == 0) {
super->spriteSettings.draw = 0;
return;
}
@ -41,50 +42,50 @@ void BlockPushed_Init(BlockPushedEntity* this) {
super->timer = 32;
super->speed = 0x80;
super->spritePriority.b0 = 6;
pos = COORD_TO_TILE(super);
metaTilePos = COORD_TO_TILE(super);
tmp = super->type * 8;
super->x.HALF.HI += tmp;
super->y.HALF.HI += tmp;
super->hitbox = (Hitbox*)gUnk_0811F64C[super->type];
this->unk_68 = GetMetaTileType(pos, (u32)super->collisionLayer);
this->unk_68 = GetMetaTileType(metaTilePos, super->collisionLayer);
switch (super->type) {
case 0:
sub_080832D8(pos, this);
sub_080832D8(metaTilePos, this);
break;
case 1:
sub_080832D8(pos, this);
sub_080832D8(pos + 1, this);
sub_080832D8(pos + 0x40, this);
sub_080832D8(pos + 0x41, this);
sub_080832D8(metaTilePos, this);
sub_080832D8(metaTilePos + 1, this);
sub_080832D8(metaTilePos + 0x40, this);
sub_080832D8(metaTilePos + 0x41, this);
break;
case 2:
sub_080832D8(pos, this);
sub_080832D8(pos + 1, this);
sub_080832D8(pos + 2, this);
sub_080832D8(pos + 0x40, this);
sub_080832D8(pos + 0x41, this);
sub_080832D8(pos + 0x42, this);
sub_080832D8(pos + 0x80, this);
sub_080832D8(pos + 0x81, this);
sub_080832D8(pos + 0x82, this);
sub_080832D8(metaTilePos, this);
sub_080832D8(metaTilePos + 1, this);
sub_080832D8(metaTilePos + 2, this);
sub_080832D8(metaTilePos + 0x40, this);
sub_080832D8(metaTilePos + 0x41, this);
sub_080832D8(metaTilePos + 0x42, this);
sub_080832D8(metaTilePos + 0x80, this);
sub_080832D8(metaTilePos + 0x81, this);
sub_080832D8(metaTilePos + 0x82, this);
break;
default:
sub_080832D8(pos, this);
sub_080832D8(pos + 1, this);
sub_080832D8(pos + 2, this);
sub_080832D8(pos + 3, this);
sub_080832D8(pos + 0x40, this);
sub_080832D8(pos + 0x41, this);
sub_080832D8(pos + 0x42, this);
sub_080832D8(pos + 0x43, this);
sub_080832D8(pos + 0x80, this);
sub_080832D8(pos + 0x81, this);
sub_080832D8(pos + 0x82, this);
sub_080832D8(pos + 0x83, this);
sub_080832D8(pos + 0xc0, this);
sub_080832D8(pos + 0xc1, this);
sub_080832D8(pos + 0xc2, this);
sub_080832D8(pos + 0xc3, this);
sub_080832D8(metaTilePos, this);
sub_080832D8(metaTilePos + 1, this);
sub_080832D8(metaTilePos + 2, this);
sub_080832D8(metaTilePos + 3, this);
sub_080832D8(metaTilePos + 0x40, this);
sub_080832D8(metaTilePos + 0x41, this);
sub_080832D8(metaTilePos + 0x42, this);
sub_080832D8(metaTilePos + 0x43, this);
sub_080832D8(metaTilePos + 0x80, this);
sub_080832D8(metaTilePos + 0x81, this);
sub_080832D8(metaTilePos + 0x82, this);
sub_080832D8(metaTilePos + 0x83, this);
sub_080832D8(metaTilePos + 0xc0, this);
sub_080832D8(metaTilePos + 0xc1, this);
sub_080832D8(metaTilePos + 0xc2, this);
sub_080832D8(metaTilePos + 0xc3, this);
break;
}
EnqueueSFX(SFX_10F);
@ -148,18 +149,18 @@ void sub_080830B8(BlockPushedEntity* this) {
DeleteEntity(super);
}
void sub_080832D8(u32 param_1, BlockPushedEntity* this) {
void sub_080832D8(u32 metaTilePos, BlockPushedEntity* this) {
if (super->collisionLayer != 2) {
if ((super->direction & 8) != 0) {
sub_0807B7D8(0x21, param_1, super->collisionLayer);
sub_0807B7D8(META_TILE_TYPE_33, metaTilePos, super->collisionLayer);
} else {
sub_0807B7D8(0x20, param_1, super->collisionLayer);
sub_0807B7D8(META_TILE_TYPE_32, metaTilePos, super->collisionLayer);
}
} else {
if ((super->direction & 8) != 0) {
sub_0807B7D8(0x2f, param_1, super->collisionLayer);
sub_0807B7D8(META_TILE_TYPE_47, metaTilePos, super->collisionLayer);
} else {
sub_0807B7D8(0x2e, param_1, super->collisionLayer);
sub_0807B7D8(META_TILE_TYPE_46, metaTilePos, super->collisionLayer);
}
}
}

View File

@ -10,6 +10,7 @@
#include "functions.h"
#include "player.h"
#include "room.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -54,7 +55,7 @@ void Board_Init(BoardEntity* this) {
UpdateSpriteForCollisionLayer(super);
super->spritePriority.b0 = 6;
if (super->type == 0) {
SetMetaTile(0x4074, this->tile - 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_116, this->tile + TILE_POS(0, -1), super->collisionLayer);
}
sub_08098BE8(this);
}

View File

@ -11,13 +11,14 @@
#include "functions.h"
#include "room.h"
#include "sound.h"
#include "tiles.h"
typedef struct {
Entity base;
u8 filler[0x8];
u16 tile;
u16 tileIndex;
u8 unk74;
u16 metaTilePos;
u16 metaTileIndex;
u8 collisionData;
u8 unk75;
u8 filler2[0x10];
u16 flags;
@ -59,7 +60,7 @@ void Bollard_Action1(BollardEntity* this) {
}
super->action = 2;
InitializeAnimation(super, 3);
SetMetaTile(this->tileIndex, this->tile, super->collisionLayer);
SetMetaTile(this->metaTileIndex, this->metaTilePos, super->collisionLayer);
EnqueueSFX(SFX_1A5);
}
@ -93,10 +94,10 @@ void Bollard_Action4(BollardEntity* this) {
void sub_0808B3AC(BollardEntity* this) {
super->spritePriority.b0 = 4;
this->tile = COORD_TO_TILE(super);
this->tileIndex = GetMetaTileIndex(this->tile, super->collisionLayer);
this->unk74 = GetCollisionDataAtMetaTilePos(this->tile, super->collisionLayer);
SetMetaTile(0x400b, this->tile, super->collisionLayer);
this->metaTilePos = COORD_TO_TILE(super);
this->metaTileIndex = GetMetaTileIndex(this->metaTilePos, super->collisionLayer);
this->collisionData = GetCollisionDataAtMetaTilePos(this->metaTilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_11, this->metaTilePos, super->collisionLayer);
}
void sub_0808B41C(BollardEntity* this) {

View File

@ -7,9 +7,9 @@
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "hitbox.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -180,16 +180,16 @@ void sub_0808C500(BossDoorEntity* this) {
this->unk_78 = GetMetaTileIndex(this->unk_74 - 1, super->collisionLayer);
this->unk_7a = GetMetaTileIndex(this->unk_74, super->collisionLayer);
this->unk_7c = GetMetaTileIndex(this->unk_74 + 1, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74 - 1, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74 + 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74 - 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74 + 1, super->collisionLayer);
} else {
this->unk_78 = GetMetaTileIndex(this->unk_74 - 0x40, super->collisionLayer);
this->unk_7a = GetMetaTileIndex(this->unk_74, super->collisionLayer);
this->unk_7c = GetMetaTileIndex(this->unk_74 + 0x40, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74 - 0x40, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74, super->collisionLayer);
SetMetaTile(0x4022, this->unk_74 + 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74 - 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_74 + 0x40, super->collisionLayer);
}
}

View File

@ -5,10 +5,10 @@
* @brief Bush object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
#include "hitbox.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -70,7 +70,7 @@ void Bush_Init(BushEntity* this) {
super->hitbox = (Hitbox*)&gUnk_081205B4;
this->unk_72 = 0;
this->unk_70 = GetMetaTileIndex(COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(0x4022, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, COORD_TO_TILE(super), super->collisionLayer);
InitializeAnimation(super, gUnk_08120588[super->type].unk_0);
}

View File

@ -6,6 +6,7 @@
*/
#include "object.h"
#include "functions.h"
#include "tiles.h"
void Button_Init(Entity*);
void Button_Action1(Entity*);
@ -35,7 +36,7 @@ void Button_Init(Entity* this) {
this->field_0x70.HALF.HI = GetMetaTileType(this->field_0x74.HWORD, this->collisionLayer);
if (this->type == 0 && CheckFlags(this->field_0x86.HWORD)) {
this->action = 5;
SetMetaTileType(0x7A, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_122, this->field_0x74.HWORD, this->collisionLayer);
} else {
if (sub_08081E3C(this)) {
this->action = 2;
@ -69,12 +70,12 @@ void Button_Action2(Entity* this) {
}
}
u32 sub_08081F7C(Entity*, u32);
u32 sub_08081F7C(Entity*, u32 metaTileType);
u32 sub_08081D28(Entity*);
void sub_08081E6C(Entity*);
void Button_Action3(Entity* this) {
if (!sub_08081F7C(this, 0x78))
if (!sub_08081F7C(this, META_TILE_TYPE_120))
return;
if (!sub_08081D28(this)) {
this->action = 4;
@ -94,7 +95,7 @@ void Button_Action4(Entity* this) {
this->timer--;
if (this->subtimer != 0) {
this->subtimer = 0;
SetMetaTile(0x4035, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_53, this->field_0x74.HWORD, this->collisionLayer);
}
if (sub_08081CB0(this)) {
this->action = 3;
@ -103,13 +104,13 @@ void Button_Action4(Entity* this) {
} else {
this->action = 2;
ClearFlag(this->field_0x86.HWORD);
SetMetaTileType(0x77, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_119, this->field_0x74.HWORD, this->collisionLayer);
SoundReq(SFX_BUTTON_PRESS);
}
}
void Button_Action5(Entity* this) {
if (sub_08081F7C(this, 0x7a)) {
if (sub_08081F7C(this, META_TILE_TYPE_122)) {
sub_08081E6C(this);
}
}
@ -117,16 +118,16 @@ void Button_Action5(Entity* this) {
Entity* sub_08081D74(Entity*);
u32 sub_08081CB0(Entity* this) {
u16 tmp;
u16 tileType;
if (sub_08081D74(this)) {
this->field_0x70.HALF.LO = -1;
if (GetMetaTileType(this->field_0x74.HWORD, this->collisionLayer) == 0x4035) {
if (GetMetaTileType(this->field_0x74.HWORD, this->collisionLayer) == SPECIAL_META_TILE_53) {
sub_0807B7D8(0x78, this->field_0x74.HWORD, this->collisionLayer);
}
return 1;
} else {
tmp = GetMetaTileType(this->field_0x74.HWORD, this->collisionLayer);
if (tmp != 0x77 && tmp != 0x79 && tmp != 0x4035) {
tileType = GetMetaTileType(this->field_0x74.HWORD, this->collisionLayer);
if (tileType != 0x77 && tileType != 0x79 && tileType != SPECIAL_META_TILE_53) {
this->field_0x70.HALF.LO = GetMetaTileIndex(this->field_0x74.HWORD, this->collisionLayer);
return 1;
}
@ -154,8 +155,8 @@ u32 sub_08081E0C(Entity*);
Entity* sub_08081D74(Entity* this) {
Entity* ent;
if (GetCollisionDataAtMetaTilePos(this->field_0x74.HWORD, this->collisionLayer) == 0xF) {
return 0;
if (GetCollisionDataAtMetaTilePos(this->field_0x74.HWORD, this->collisionLayer) == COLLISION_DATA_15) {
return NULL;
}
ent = 0;
if (sub_08081E0C(this)) {
@ -208,27 +209,27 @@ extern u16 gMapDataTopSpecial[0x2000];
extern u16 gMapDataBottomSpecial[];
void sub_08081E6C(Entity* this) {
u32 tileType;
u32 metaTileType;
MapLayer* mapLayer;
u16* tmp2;
u16* tmp;
u16* tmp3;
u32 tilePosition = this->field_0x74.HWORD;
u32 metaTilePos = this->field_0x74.HWORD;
u32 layer = this->collisionLayer;
u32 tile = GetMetaTileType(tilePosition, layer);
u32 specialMetaTile = GetMetaTileType(metaTilePos, layer);
if (tile < 0x4000)
if (specialMetaTile < 0x4000)
return;
mapLayer = GetLayerByIndex(layer);
tileType = (this->type == 0 ? 0x7a : 0x78);
metaTileType = (this->type == 0 ? META_TILE_TYPE_122 : META_TILE_TYPE_120);
tmp = mapLayer->metatiles;
tmp = tmp + (mapLayer->unkData2[tileType] << 2);
tmp = tmp + (mapLayer->unkData2[metaTileType] << 2);
tmp2 = (layer == 2 ? gMapDataTopSpecial : gMapDataBottomSpecial);
tmp2 += (((0x3f & tilePosition) << 1) + ((0xfc0 & tilePosition) << 2));
tmp2 += (((0x3f & metaTilePos) << 1) + ((0xfc0 & metaTilePos) << 2));
if (sub_08081F00((u32*)tmp2, (u32*)tmp))
return;
SetMetaTileType(tileType, tilePosition, layer);
SetMetaTile(tile, tilePosition, layer);
SetMetaTileType(metaTileType, metaTilePos, layer);
SetMetaTile(specialMetaTile, metaTilePos, layer);
}
// Are the two tiles already set to the correct one
@ -255,7 +256,7 @@ void sub_08081F24(Entity* this) {
}
}
u32 sub_08081F7C(Entity* this, u32 r7) {
u32 sub_08081F7C(Entity* this, u32 metaTileType) {
u16 tmp;
if (this->timer == 0)
return 1;
@ -265,7 +266,7 @@ u32 sub_08081F7C(Entity* this, u32 r7) {
} else {
if (this->timer == 6) {
SetFlag(this->field_0x86.HWORD);
SetMetaTileType(r7, this->field_0x74.HWORD, this->collisionLayer);
SetMetaTileType(metaTileType, this->field_0x74.HWORD, this->collisionLayer);
sub_08081F24(this);
SoundReq(SFX_BUTTON_PRESS);
if (this->field_0x70.HALF_U.LO != 0xFFFF)

View File

@ -9,6 +9,7 @@
#include "entity.h"
#include "flags.h"
#include "room.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -31,12 +32,12 @@ void CabinFurniture(Entity* this) {
}
void CabinFurniture_Init(CabinFurnitureEntity* this) {
u32 uVar1;
u32 layer;
u32 uVar6;
u32 uVar7;
this->tile = COORD_TO_TILE(super);
uVar1 = super->collisionLayer;
layer = super->collisionLayer;
UpdateSpriteForCollisionLayer(super);
switch (super->type) {
case 0:
@ -44,38 +45,38 @@ void CabinFurniture_Init(CabinFurnitureEntity* this) {
super->spritePriority.b0 = 6;
uVar7 = this->tile;
uVar6 = uVar7 - 1;
SetMetaTile(0x4022, uVar6, uVar1);
SetMetaTile(0x4022, uVar7, uVar1);
SetMetaTile(0x4022, uVar7 + 1, uVar1);
SetMetaTile(0x4022, uVar7 + 0x3f, uVar1);
SetMetaTile(0x4022, uVar7 + 0x40, uVar1);
SetMetaTile(0x4022, uVar7 + 0x41, uVar1);
SetMetaTile(0x403d, uVar7 - 0x41, uVar1);
SetMetaTile(0x403d, uVar7 - 0x40, uVar1);
SetMetaTile(0x4026, uVar7 - 0x3f, uVar1);
SetMetaTile(0x4026, uVar7 - 0x81, uVar1);
SetMetaTile(0x4026, uVar7 - 0x80, uVar1);
SetMetaTile(SPECIAL_META_TILE_34, uVar6, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 + 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 + 0x3f, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 + 0x40, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 + 0x41, layer);
SetMetaTile(SPECIAL_META_TILE_61, uVar7 - 0x41, layer);
SetMetaTile(SPECIAL_META_TILE_61, uVar7 - 0x40, layer);
SetMetaTile(SPECIAL_META_TILE_38, uVar7 - 0x3f, layer);
SetMetaTile(SPECIAL_META_TILE_38, uVar7 - 0x81, layer);
SetMetaTile(SPECIAL_META_TILE_38, uVar7 - 0x80, layer);
break;
case 1:
super->action = 1;
uVar6 = this->tile;
SetMetaTile(0x4022, uVar6, uVar1);
SetMetaTile(0x4022, uVar6 + 0x40, uVar1);
SetMetaTile(0x4025, uVar6 + 0x41, uVar1);
SetMetaTile(SPECIAL_META_TILE_34, uVar6, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar6 + 0x40, layer);
SetMetaTile(SPECIAL_META_TILE_37, uVar6 + 0x41, layer);
if (CheckLocalFlag(0x4f) == 0) {
SetMetaTile(0x402f, uVar6 + 1, uVar1);
SetMetaTile(SPECIAL_META_TILE_47, uVar6 + 1, layer);
} else {
SetMetaTile(0x402d, uVar6 + 1, uVar1);
SetMetaTile(SPECIAL_META_TILE_45, uVar6 + 1, layer);
}
break;
case 2:
super->action = 1;
uVar7 = this->tile;
uVar6 = uVar7 - 0x41;
SetMetaTile(0x4022, uVar6, uVar1);
SetMetaTile(0x4022, uVar7 - 0x40, uVar1);
SetMetaTile(0x4022, uVar7 - 1, uVar1);
SetMetaTile(0x4022, uVar7, uVar1);
SetMetaTile(SPECIAL_META_TILE_34, uVar6, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 - 0x40, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7 - 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, uVar7, layer);
break;
}
}

View File

@ -6,8 +6,8 @@
*/
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -99,7 +99,7 @@ void CarlovObject_Type1Init(CarlovObjectEntity* this) {
if (super->timer == 0) {
super->action = 1;
super->subtimer = 120;
SetMetaTile(0x4022, this->unk_76, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_76, super->collisionLayer);
} else {
super->action = 3;
super->spriteSettings.draw = 0;
@ -142,7 +142,7 @@ void CarlovObject_Type1Action4(CarlovObjectEntity* this) {
super->action = 5;
sub_08083814(super, 2);
EnqueueSFX(SFX_10B);
SetMetaTile(0x4022, this->unk_76, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_76, super->collisionLayer);
}
}

View File

@ -7,11 +7,11 @@
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "item.h"
#include "object.h"
#include "screen.h"
#include "structures.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -29,7 +29,7 @@ void sub_080842D8(ChestSpawnerEntity*);
void AddInteractableChest(ChestSpawnerEntity*);
void sub_08083E20(ChestSpawnerEntity*);
void sub_08084074(u32);
void sub_080840A8(s32, s32);
void sub_080840A8(s32 x, s32 y);
void ChestSpawner_Type0(ChestSpawnerEntity*);
void ChestSpawner_Type2(ChestSpawnerEntity*);
void ChestSpawner_Type0Init(ChestSpawnerEntity*);
@ -164,7 +164,7 @@ void ChestSpawner_Type2Action4(ChestSpawnerEntity* this) {
GetNextFrame(super);
if ((super->frame & ANIM_DONE) != 0) {
if (--super->subtimer == 0) {
if (super->timer == 0x18) {
if (super->timer == 24) {
super->action = 6;
super->timer = 8;
super->subtimer = 16;
@ -189,18 +189,18 @@ void sub_08084074(u32 param_1) {
}
}
void sub_080840A8(s32 param_1, s32 param_2) {
void sub_080840A8(s32 x, s32 y) {
static const u8 gUnk_0811F838[] = { 84, 84, 84, 84, 85, 85, 85, 86 };
static const s32 gUnk_0811F840[] = { 393216, 458752, 524288, 589824 };
static const s8 gUnk_0811F850[] = { -6, 0, 0, 6 };
static const s32 zVelocities[] = { 0x60000, 0x70000, 0x80000, 0x90000 };
static const s8 xOffsets[] = { -6, 0, 0, 6 };
Entity* obj = CreateObject(GROUND_ITEM, gUnk_0811F838[Random() & 7], 0);
if (obj != NULL) {
obj->timer = 6;
obj->direction = ((Random() & 7) + 0xc) | 0x80;
obj->speed = (Random() & 0xf) * 2 + 0x20;
obj->zVelocity = gUnk_0811F840[Random() & 3];
obj->x.HALF.HI = gUnk_0811F850[Random() & 3] + param_1;
obj->y.HALF.HI = param_2 + 1;
obj->zVelocity = zVelocities[Random() & 3];
obj->x.HALF.HI = xOffsets[Random() & 3] + x;
obj->y.HALF.HI = y + 1;
obj->z.HALF.HI = -8;
ResolveCollisionLayer(obj);
obj = CreateFx(obj, FX_DASH, 0);
@ -232,7 +232,7 @@ void ChestSpawner_Type0Init(ChestSpawnerEntity* this) {
super->action++;
this->tilePosition = COORD_TO_TILE(super);
super->hitbox = (Hitbox*)&gUnk_0811F8A8;
if (GetMetaTileTypeByEntity(super) == 0x74) {
if (GetMetaTileTypeByEntity(super) == META_TILE_TYPE_116) {
DeleteThisEntity();
}
if (CheckFlags(this->unk_86)) {
@ -271,7 +271,7 @@ void ChestSpawner_Type0Action2(ChestSpawnerEntity* this) {
void ChestSpawner_Type0Action3(ChestSpawnerEntity* this) {
if ((super->type == 1) || (super->type == 7)) {
if (GetMetaTileTypeByEntity(super) == 0x74) {
if (GetMetaTileTypeByEntity(super) == META_TILE_TYPE_116) {
DeleteEntity(super);
} else {
if (!CheckFlags(this->unk_86)) {

View File

@ -56,13 +56,13 @@ void CrenelBeanSprout_Init(CrenelBeanSproutEntity* this) {
if (CheckGlobalFlag(WATERBEAN_OUT)) {
if (CheckGlobalFlag(WATERBEAN_PUT) == 0) {
PositionRelative(&gPlayerEntity, super, 0, 0x10000);
SetMetaTile(0x4022, 0xdc, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, 0xdc, super->collisionLayer);
} else {
if (CheckLocalFlag(super->type2) == 0) {
InitializeAnimation(super, 10);
super->y.HALF.HI += 4;
super->action = 4;
SetMetaTile(0x403b, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_59, COORD_TO_TILE(super), super->collisionLayer);
return;
}
super->type2 = 0;
@ -109,7 +109,7 @@ void CrenelBeanSprout_Init(CrenelBeanSproutEntity* this) {
InitializeAnimation(super, 0xb);
super->y.HALF.HI += 4;
super->action = 4;
SetMetaTile(0x4032, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_50, COORD_TO_TILE(super), super->collisionLayer);
return;
} else {
super->type2 = 0;
@ -234,7 +234,7 @@ void CrenelBeanSprout_Action3(CrenelBeanSproutEntity* this) {
}
void CrenelBeanSprout_Action4(CrenelBeanSproutEntity* this) {
static const u16 gUnk_0812319C[] = { 0x403c, 0x4033 };
static const u16 gUnk_0812319C[] = { SPECIAL_META_TILE_60, SPECIAL_META_TILE_51 };
if (gUnk_0812319C[super->type >> 1] == GetMetaTileTypeByEntity(super)) {
GetNextFrame(super);
gPlayerState.keepFacing |= 0x80;
@ -331,5 +331,5 @@ void sub_08096A78(CrenelBeanSproutEntity* this) {
sub_08004168(super);
super->y.HALF.HI += 4;
super->action = 3;
SetMetaTile(0x403b, COORD_TO_TILE(super), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_59, COORD_TO_TILE(super), super->collisionLayer);
}

View File

@ -10,10 +10,11 @@
#include "entity.h"
#include "fileselect.h"
#include "functions.h"
#include "item.h"
#include "npc.h"
#include "object.h"
#include "script.h"
#include "item.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -363,17 +364,17 @@ void CuccoMinigame_TellObjective(void) {
}
void sub_080A1648(void) {
SetMetaTileType(0x407f, 0xd36, 1);
SetMetaTileType(0x407f, 0xd37, 1);
SetMetaTileType(0x407f, 0xd38, 1);
SetMetaTileType(0x407e, 0xd75, 1);
SetMetaTileType(0x407e, 0xe75, 1);
SetMetaTileType(SPECIAL_META_TILE_127, TILE_POS(54, 52), LAYER_BOTTOM);
SetMetaTileType(SPECIAL_META_TILE_127, TILE_POS(55, 52), LAYER_BOTTOM);
SetMetaTileType(SPECIAL_META_TILE_127, TILE_POS(56, 52), LAYER_BOTTOM);
SetMetaTileType(SPECIAL_META_TILE_126, TILE_POS(53, 53), LAYER_BOTTOM);
SetMetaTileType(SPECIAL_META_TILE_126, TILE_POS(53, 57), LAYER_BOTTOM);
}
void sub_080A169C(void) {
RestorePrevTileEntity(0xd36, 1);
RestorePrevTileEntity(0xd37, 1);
RestorePrevTileEntity(0xd38, 1);
RestorePrevTileEntity(0xd75, 1);
RestorePrevTileEntity(0xe75, 1);
RestorePrevTileEntity(TILE_POS(54, 52), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(55, 52), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(56, 52), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(53, 53), LAYER_BOTTOM);
RestorePrevTileEntity(TILE_POS(53, 57), LAYER_BOTTOM);
}

View File

@ -12,6 +12,7 @@
#include "object.h"
#include "screen.h"
#include "script.h"
#include "tiles.h"
extern u8 gUnk_08122AE0[];
extern u16 gUnk_08122AE8[];
@ -335,7 +336,7 @@ void sub_08094E30(CutsceneMiscObjectEntity* this) {
super->zVelocity = 0;
SetDefaultPriority(super, PRIO_PLAYER_EVENT);
InitializeAnimation(super, 0);
if (GetVvvAtEntity(super) == 13) {
if (GetVvvAtEntity(super) == VVV_13) {
super->action = 3;
}
break;

View File

@ -6,13 +6,13 @@
*/
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[0x18];
/*0x80*/ u16 unk_80;
/*0x80*/ u16 metaTilePos;
/*0x82*/ u16 unk_82;
/*0x84*/ u8 unk_84;
/*0x85*/ u8 unk_85;
@ -43,7 +43,7 @@ void DoubleBookshelf(DoubleBookshelfEntity* this) {
void DoubleBookshelf_Init(DoubleBookshelfEntity* this) {
DoubleBookshelfEntity* child;
super->frameIndex = super->type;
this->unk_80 = COORD_TO_TILE(super);
this->metaTilePos = COORD_TO_TILE(super);
if (super->type != 0) {
super->action = 1;
if (this->unk_84 == 0) {
@ -82,7 +82,7 @@ void DoubleBookshelf_Action2(DoubleBookshelfEntity* this) {
LinearMoveUpdate(super);
if (--super->timer == 0) {
super->action = 1;
this->unk_80 = COORD_TO_TILE(super);
this->metaTilePos = COORD_TO_TILE(super);
SetPlayerControl(CONTROL_ENABLED);
sub_0809B0B0(this);
EnqueueSFX(SFX_BUTTON_PRESS);
@ -94,45 +94,45 @@ void DoubleBookshelf_Action3(DoubleBookshelfEntity* this) {
}
void sub_0809B0B0(DoubleBookshelfEntity* this) {
u32 position = this->unk_80 - 1;
u32 tilePos = this->metaTilePos - 1;
u32 layer = super->collisionLayer;
switch (super->subAction) {
case 0:
this->unk_84 = 0;
this->unk_82 = position + 2;
SetMetaTile(0x4082, position - 1, layer);
SetMetaTile(0x4022, position, layer);
SetMetaTile(0x4022, position + 1, layer);
SetMetaTile(0x4022, position + 2, layer);
this->unk_82 = tilePos + 2;
SetMetaTile(SPECIAL_META_TILE_130, tilePos - 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 2, layer);
break;
case 1:
this->unk_84 = 1;
this->unk_82 = position;
SetMetaTile(0x405f, position, layer);
SetMetaTile(0x4022, position + 1, layer);
SetMetaTile(0x4022, position + 2, layer);
SetMetaTile(0x4082, position + 3, layer);
this->unk_82 = tilePos;
SetMetaTile(SPECIAL_META_TILE_95, tilePos, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 2, layer);
SetMetaTile(SPECIAL_META_TILE_130, tilePos + 3, layer);
break;
case 2:
this->unk_84 = 1;
this->unk_82 = position;
SetMetaTile(0x4082, position + 3, layer);
SetMetaTile(0x4022, position + 2, layer);
SetMetaTile(0x405f, position, layer);
this->unk_82 = tilePos;
SetMetaTile(SPECIAL_META_TILE_130, tilePos + 3, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 2, layer);
SetMetaTile(SPECIAL_META_TILE_95, tilePos, layer);
SetFlag(((DoubleBookshelfEntity*)super->parent)->unk_86);
break;
case 3:
this->unk_84 = 0;
this->unk_82 = position + 2;
SetMetaTile(0x4082, position - 1, layer);
SetMetaTile(0x4022, position, layer);
SetMetaTile(0x405f, position + 2, layer);
this->unk_82 = tilePos + 2;
SetMetaTile(SPECIAL_META_TILE_130, tilePos - 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos, layer);
SetMetaTile(SPECIAL_META_TILE_95, tilePos + 2, layer);
ClearFlag(((DoubleBookshelfEntity*)super->parent)->unk_86);
break;
case 4:
SetMetaTile(0x4022, position, layer);
SetMetaTile(0x4022, position + 1, layer);
SetMetaTile(0x4022, position + 2, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 1, layer);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + 2, layer);
break;
}
}
@ -159,7 +159,7 @@ void sub_0809B274(DoubleBookshelfEntity* this) {
case 1:
if (player->x.HALF.HI + 0x1c > super->x.HALF.HI) {
this->unk_84 = 2;
SetMetaTile(0x4022, this->unk_80 + 2, 1);
SetMetaTile(SPECIAL_META_TILE_34, this->metaTilePos + 2, LAYER_BOTTOM);
sub_0809B358((DoubleBookshelfEntity*)super->child);
return;
}
@ -174,7 +174,7 @@ void sub_0809B274(DoubleBookshelfEntity* this) {
return;
}
this->unk_84 = 1;
RestorePrevTileEntity(this->unk_80 + 2, 1);
RestorePrevTileEntity(this->metaTilePos + 2, 1);
sub_0809B38C((DoubleBookshelfEntity*)super->child);
return;
}
@ -182,33 +182,34 @@ void sub_0809B274(DoubleBookshelfEntity* this) {
void sub_0809B334(DoubleBookshelfEntity* this) {
s32 index;
u32 position = this->unk_80 - 0x81;
for (index = 2; index >= 0; index--, position++) {
SetMetaTile(0x4026, position, 1);
u32 tilePos = this->metaTilePos - 0x81;
for (index = 2; index >= 0; index--, tilePos++) {
SetMetaTile(SPECIAL_META_TILE_38, tilePos, LAYER_BOTTOM);
}
}
void sub_0809B358(DoubleBookshelfEntity* this) {
static const u16 gUnk_08123D68[] = {
0x4022, 0x4022, 0x4074, 0x4026, 0x4074, 0x4074, 0x4026, 0x4074, 0x4022, 0x4022
};
static const u16 gUnk_08123D68[] = { SPECIAL_META_TILE_34, SPECIAL_META_TILE_34, SPECIAL_META_TILE_116,
SPECIAL_META_TILE_38, SPECIAL_META_TILE_116, SPECIAL_META_TILE_116,
SPECIAL_META_TILE_38, SPECIAL_META_TILE_116, SPECIAL_META_TILE_34,
SPECIAL_META_TILE_34 };
s32 index;
const u16* array = &gUnk_08123D68[this->unk_84];
u32 position = this->unk_80 - 0x82;
u32 metaTilePos = this->metaTilePos + TILE_POS(-2, -2);
for (index = 4; index >= 0;) {
SetMetaTile(*array, position, 1);
SetMetaTile(*array, metaTilePos, LAYER_BOTTOM);
index--;
position++;
metaTilePos++;
array += 2;
}
}
void sub_0809B38C(DoubleBookshelfEntity* this) {
s32 index;
u32 uVar1 = this->unk_80 - 0x82;
u32 metaTilePos = this->metaTilePos + TILE_POS(-2, -2);
for (index = 4; index >= 0;) {
RestorePrevTileEntity(uVar1, 1);
RestorePrevTileEntity(metaTilePos, 1);
index--;
uVar1++;
metaTilePos++;
}
}

View File

@ -9,11 +9,12 @@
#include "figurineMenu.h"
#include "fileselect.h"
#include "functions.h"
#include "kinstone.h"
#include "item.h"
#include "kinstone.h"
#include "message.h"
#include "object.h"
#include "screen.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -307,9 +308,9 @@ void sub_08087F58(FigurineDeviceEntity* this) {
switch (super->type) {
case 0:
case 1:
SetMetaTile(0x4022, this->unk_78 - 1, 1);
SetMetaTile(0x4022, this->unk_78, 1);
SetMetaTile(0x4022, this->unk_78 + 1, 1);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_78 - 1, LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_78, LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, this->unk_78 + 1, LAYER_BOTTOM);
break;
}
}

View File

@ -6,6 +6,7 @@
*/
#include "functions.h"
#include "object.h"
#include "tiles.h"
void Fireplace_Action1(Entity* this);
void sub_0809B7DC(Entity* this);
@ -29,7 +30,7 @@ void Fireplace_Init(Entity* this) {
DeleteThisEntity();
} else {
sub_0807B7D8(0x30b, TILE(this->x.HALF.HI, this->y.HALF.HI), 2);
SetMetaTile(0x4061, TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_97, TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
}
Fireplace_Action1(this);
}
@ -44,13 +45,13 @@ void Fireplace_Action1(Entity* this) {
void sub_0809B7C0(Entity* this) {
u32 tileType = GetMetaTileTypeByEntity(this);
if (tileType != 0x4061 && tileType != 0x4062) {
if (tileType != SPECIAL_META_TILE_97 && tileType != SPECIAL_META_TILE_98) {
sub_0809B7DC(this);
}
}
void sub_0809B7DC(Entity* this) {
sub_0807B7D8(0xc3 << 2, TILE(this->x.HALF.HI, this->y.HALF.HI), 2);
SetMetaTile(0x4062, TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_98, TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
this->timer = 1;
}

View File

@ -6,8 +6,8 @@
*/
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -115,62 +115,62 @@ void FrozenWaterElement_Action2(FrozenWaterElementEntity* this) {
void sub_0809C0A8(FrozenWaterElementEntity* this) {
u32 position = COORD_TO_TILE(super);
SetMetaTile(0x4022, position - 0x41, super->collisionLayer);
SetMetaTile(0x4022, position - 0x40, super->collisionLayer);
SetMetaTile(0x4022, position - 0x3f, super->collisionLayer);
SetMetaTile(0x4022, position - 2, super->collisionLayer);
SetMetaTile(0x4022, position - 1, super->collisionLayer);
SetMetaTile(0x4022, position, super->collisionLayer);
SetMetaTile(0x4022, position + 1, super->collisionLayer);
SetMetaTile(0x4022, position + 2, super->collisionLayer);
SetMetaTile(0x4022, position + 0x3e, super->collisionLayer);
SetMetaTile(0x4022, position + 0x3f, super->collisionLayer);
SetMetaTile(0x4022, position + 0x40, super->collisionLayer);
SetMetaTile(0x4022, position + 0x41, super->collisionLayer);
SetMetaTile(0x4022, position + 0x42, super->collisionLayer);
SetMetaTile(0x4022, position + 0x7f, super->collisionLayer);
SetMetaTile(0x4022, position + 0x80, super->collisionLayer);
SetMetaTile(0x4022, position + 0x81, super->collisionLayer);
SetMetaTile(0x4022, position + 0x13f, super->collisionLayer);
SetMetaTile(0x4022, position + 0x140, super->collisionLayer);
SetMetaTile(0x4022, position + 0x141, super->collisionLayer);
SetMetaTile(0x4022, position + 0x17f, super->collisionLayer);
SetMetaTile(0x4022, position + 0x181, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1bd, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1be, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1bf, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1c1, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1c2, super->collisionLayer);
SetMetaTile(0x4022, position + 0x1c3, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(0, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-2, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(0, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(2, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-2, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(2, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(0, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 5), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(0, 5), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 5), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 6), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 6), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-3, 7), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-2, 7), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(-1, 7), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(1, 7), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(2, 7), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, position + TILE_POS(3, 7), super->collisionLayer);
}
void sub_0809C23C(FrozenWaterElementEntity* this) {
u32 position = COORD_TO_TILE(super);
RestorePrevTileEntity(position - 0x41, super->collisionLayer);
RestorePrevTileEntity(position - 0x40, super->collisionLayer);
RestorePrevTileEntity(position - 0x3f, super->collisionLayer);
RestorePrevTileEntity(position - 2, super->collisionLayer);
RestorePrevTileEntity(position - 1, super->collisionLayer);
RestorePrevTileEntity(position, super->collisionLayer);
RestorePrevTileEntity(position + 1, super->collisionLayer);
RestorePrevTileEntity(position + 2, super->collisionLayer);
RestorePrevTileEntity(position + 0x3e, super->collisionLayer);
RestorePrevTileEntity(position + 0x3f, super->collisionLayer);
RestorePrevTileEntity(position + 0x40, super->collisionLayer);
RestorePrevTileEntity(position + 0x41, super->collisionLayer);
RestorePrevTileEntity(position + 0x42, super->collisionLayer);
RestorePrevTileEntity(position + 0x7f, super->collisionLayer);
RestorePrevTileEntity(position + 0x80, super->collisionLayer);
RestorePrevTileEntity(position + 0x81, super->collisionLayer);
RestorePrevTileEntity(position + 0x13f, super->collisionLayer);
RestorePrevTileEntity(position + 0x140, super->collisionLayer);
RestorePrevTileEntity(position + 0x141, super->collisionLayer);
RestorePrevTileEntity(position + 0x17f, super->collisionLayer);
RestorePrevTileEntity(position + 0x181, super->collisionLayer);
RestorePrevTileEntity(position + 0x1bd, super->collisionLayer);
RestorePrevTileEntity(position + 0x1be, super->collisionLayer);
RestorePrevTileEntity(position + 0x1bf, super->collisionLayer);
RestorePrevTileEntity(position + 0x1c1, super->collisionLayer);
RestorePrevTileEntity(position + 0x1c2, super->collisionLayer);
RestorePrevTileEntity(position + 0x1c3, super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, -1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(0, -1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, -1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-2, 0), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 0), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(0, 0), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 0), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(2, 0), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-2, 1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(0, 1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(2, 1), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 2), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(0, 2), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 2), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 5), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(0, 5), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 5), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 6), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 6), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-3, 7), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-2, 7), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(-1, 7), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(1, 7), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(2, 7), super->collisionLayer);
RestorePrevTileEntity(position + TILE_POS(3, 7), super->collisionLayer);
}

View File

@ -99,7 +99,7 @@ typedef enum {
typedef struct {
Entity base;
/* 0x68 */ u8 pad[0x10];
/* 0x78 */ u16 tile;
/* 0x78 */ u16 tilePos;
/* 0x7a */ u16 unk1;
/* 0x7c */ u16 unk2;
/* 0x7e */ u16 unk3;
@ -202,11 +202,11 @@ void Furniture(Entity* this) {
}
static void FurnitureInit(FurnitureEntity* this) {
u32 i, tile, cnt;
u32 i, tilePos, cnt;
Entity* e;
super->action = FURNITURE_UPDATE;
this->tile = COORD_TO_TILE(super);
this->tilePos = COORD_TO_TILE(super);
sub_08090DC4(this);
switch (this->flags & 0x7fff) {
case 0x100:
@ -217,14 +217,14 @@ static void FurnitureInit(FurnitureEntity* this) {
break;
case 0x40:
super->y.HALF.HI = (super->y.HALF.HI & ~0xF) | 4;
SetMetaTile(0x4017, this->tile - 128, 1);
SetMetaTile(0x4017, this->tile - 64, 1);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos - 128, LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos - 64, LAYER_BOTTOM);
break;
case 0x80:
super->frameIndex = 0;
super->y.HALF.HI = (super->y.HALF.HI & ~0xF) | 6;
this->tile = COORD_TO_TILE(super);
SetMetaTile(0x4026, this->tile, super->collisionLayer);
this->tilePos = COORD_TO_TILE(super);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePos, super->collisionLayer);
break;
case 0x200:
break;
@ -242,14 +242,14 @@ static void FurnitureInit(FurnitureEntity* this) {
if (this->height != 16) {
switch (this->height & 0x70) {
case 0x30:
this->tile -= 64;
this->tilePos -= 64;
sub_08090B6C(this);
this->tile = COORD_TO_TILE(super);
this->tilePos = COORD_TO_TILE(super);
case 0x20:
this->tile += 64;
this->tilePos += 64;
sub_08090B6C(this);
}
this->tile = COORD_TO_TILE(super);
this->tilePos = COORD_TO_TILE(super);
}
switch (this->flags & 0x7fff) {
@ -257,12 +257,12 @@ static void FurnitureInit(FurnitureEntity* this) {
ChangeObjPalette(super, 0x7E);
break;
case 0x2:
tile = this->tile - 129;
tilePos = this->tilePos - 129;
cnt = super->type != 26 ? 3 : 2;
for (i = 0; i < cnt; ++i, ++tile) {
SetMetaTile(0x4026, tile, 2);
SetMetaTile(0x4026, tile, 1);
SetVvvAtMetaTilePos(VVV_0, tile + 64, 1);
for (i = 0; i < cnt; ++i, ++tilePos) {
SetMetaTile(SPECIAL_META_TILE_38, tilePos, LAYER_TOP);
SetMetaTile(SPECIAL_META_TILE_38, tilePos, LAYER_BOTTOM);
SetVvvAtMetaTilePos(VVV_0, tilePos + TILE_POS(0, 1), 1);
}
break;
}
@ -282,27 +282,27 @@ static void FurnitureInit(FurnitureEntity* this) {
}
break;
case SHOE_DESK:
sub_0807B7D8(774, this->tile + 65, 2);
sub_0807B7D8(774, this->tilePos + 65, 2);
break;
case STAIRCASE:
super->collisionLayer = 1;
super->spriteOrientation.flipY = 2;
SetMetaTile(0x4074, this->tile - 64, super->collisionLayer);
SetVvvAtMetaTilePos(VVV_63, this->tile - 64, super->collisionLayer);
SetMetaTile(0x4017, this->tile, super->collisionLayer);
SetMetaTile(0x4017, this->tile + 64, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_116, this->tilePos - 64, super->collisionLayer);
SetVvvAtMetaTilePos(VVV_63, this->tilePos - 64, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos + 64, super->collisionLayer);
break;
case MINISH_CHEESE:
if (super->type2 != 0)
super->spriteOffsetX = -4;
break;
case WOODEN_TABLE:
SetMetaTile(0x4023, this->tile - 65, super->collisionLayer);
SetMetaTile(0x4023, this->tile - 64, super->collisionLayer);
SetMetaTile(0x4023, this->tile - 63, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_35, this->tilePos - 65, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_35, this->tilePos - 64, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_35, this->tilePos - 63, super->collisionLayer);
break;
case LOW_BOOKSHELF:
SetMetaTile(0x4022, this->tile + 65, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePos + 65, super->collisionLayer);
}
}
@ -338,20 +338,21 @@ static void FurnitureUpdate(FurnitureEntity* this) {
break;
case 0x80:
if (gPlayerEntity.y.HALF.HI < super->y.HALF.HI + 8) {
if (gPlayerState.floor_type != SURFACE_LADDER && GetMetaTileTypeByEntity(super) == 0x4017) {
SetMetaTile(0x4026, this->tile, super->collisionLayer);
SetMetaTile(0x403D, this->tile - 64, super->collisionLayer);
SetMetaTile(0x403D, this->tile - 128, super->collisionLayer);
if (gPlayerState.floor_type != SURFACE_LADDER &&
GetMetaTileTypeByEntity(super) == SPECIAL_META_TILE_23) {
SetMetaTile(SPECIAL_META_TILE_38, this->tilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePos + TILE_POS(0, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePos + TILE_POS(0, -2), super->collisionLayer);
}
} else {
if (gPlayerEntity.collisionLayer & 2) {
gPlayerEntity.collisionLayer = 1;
UpdateSpriteForCollisionLayer(&gPlayerEntity);
}
if (GetMetaTileTypeByEntity(super) != 0x4017) {
SetMetaTile(0x4017, this->tile, super->collisionLayer);
SetMetaTile(0x4017, this->tile - 64, super->collisionLayer);
SetMetaTile(0x4014, this->tile - 128, super->collisionLayer);
if (GetMetaTileTypeByEntity(super) != SPECIAL_META_TILE_23) {
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_23, this->tilePos + TILE_POS(0, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_20, this->tilePos + TILE_POS(0, -2), super->collisionLayer);
}
}
break;
@ -365,8 +366,8 @@ static void sub_08090B6C(FurnitureEntity* this) {
if (width != 0) {
u8 w2 = width / 8;
u32 px = super->x.HALF.HI & 0xF;
u32 tile = this->tile;
u32 cl = super->collisionLayer;
u32 tilePos = this->tilePos;
u32 layer = super->collisionLayer;
int i;
switch ((u32)w2 & 3) {
@ -376,104 +377,103 @@ static void sub_08090B6C(FurnitureEntity* this) {
num = 2;
}
for (i = -num; i <= num; ++i) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
}
if (px & 8) {
sub_08090CDC(0x4024, tile - i, cl);
sub_08090CDC(0x4025, tile + i, cl);
sub_08090CDC(SPECIAL_META_TILE_36, tilePos - i, layer);
sub_08090CDC(SPECIAL_META_TILE_37, tilePos + i, layer);
} else {
SetMetaTile(0x4022, tile - i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos - i, layer);
}
break;
case 1:
num = w2 / 8;
for (i = -num; i <= num; i++) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
}
if (px & 8) {
sub_08090CDC(0x4024, tile - i, cl);
sub_08090CDC(SPECIAL_META_TILE_36, tilePos - i, layer);
if (i != 0) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
}
} else {
if (i != 0) {
SetMetaTile(0x4022, tile - i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos - i, layer);
}
sub_08090CDC(0x4025, tile + i, cl);
sub_08090CDC(SPECIAL_META_TILE_37, tilePos + i, layer);
}
break;
case 2:
num = w2 / 4;
for (i = -num; i < num; ++i) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
}
if (px & 8) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
} else {
sub_08090CDC(0x4024, tile - i - 1, cl);
sub_08090CDC(0x4025, tile + i, cl);
sub_08090CDC(SPECIAL_META_TILE_36, tilePos - i - 1, layer);
sub_08090CDC(SPECIAL_META_TILE_37, tilePos + i, layer);
}
break;
case 3:
num = w2 / 4;
for (i = -num; i <= num; ++i) {
SetMetaTile(0x4022, tile + i, cl);
SetMetaTile(SPECIAL_META_TILE_34, tilePos + i, layer);
}
if (px & 8) {
sub_08090CDC(0x4025, tile + i, cl);
sub_08090CDC(SPECIAL_META_TILE_37, tilePos + i, layer);
} else {
sub_08090CDC(0x4024, tile - i, cl);
sub_08090CDC(SPECIAL_META_TILE_36, tilePos - i, layer);
}
break;
}
}
}
static void sub_08090CDC(u32 id, u32 pos, u32 layer) {
u16 cur = GetMetaTileIndex(pos, layer);
static void sub_08090CDC(u32 metaTileIndex, u32 metaTilePos, u32 layer) {
u16 cur = GetMetaTileIndex(metaTilePos, layer);
u32 next = cur;
u32 id2;
if ((cur & 0x4000) == 0) {
SetMetaTile(id, pos, layer);
SetMetaTile(metaTileIndex, metaTilePos, layer);
} else {
switch (cur) {
case 0x4025:
if (id == 0x4024)
next = 0x4022;
if (id == 0x402c)
next = 0x4022;
case SPECIAL_META_TILE_37:
if (metaTileIndex == SPECIAL_META_TILE_36)
next = SPECIAL_META_TILE_34;
if (metaTileIndex == SPECIAL_META_TILE_44)
next = SPECIAL_META_TILE_34;
break;
case 0x402D:
if (id == 0x402c)
next = 0x402b;
if (id == 0x4024)
next = 0x4022;
case SPECIAL_META_TILE_45:
if (metaTileIndex == SPECIAL_META_TILE_44)
next = SPECIAL_META_TILE_43;
if (metaTileIndex == SPECIAL_META_TILE_36)
next = SPECIAL_META_TILE_34;
break;
case 0x4024:
if (id == 0x4025)
next = 0x4022;
if (id == 0x402d)
next = 0x4022;
case SPECIAL_META_TILE_36:
if (metaTileIndex == SPECIAL_META_TILE_37)
next = SPECIAL_META_TILE_34;
if (metaTileIndex == SPECIAL_META_TILE_45)
next = SPECIAL_META_TILE_34;
break;
case 0x402C:
if (id == 0x402d)
next = 0x402b;
if (id == 0x4025)
next = 0x4022;
case SPECIAL_META_TILE_44:
if (metaTileIndex == SPECIAL_META_TILE_45)
next = SPECIAL_META_TILE_43;
if (metaTileIndex == SPECIAL_META_TILE_37)
next = SPECIAL_META_TILE_34;
break;
case 0x4022:
case 0x4023:
case 0x4026:
case 0x4027:
case 0x4028:
case 0x4029:
case 0x402a:
case 0x402b:
case SPECIAL_META_TILE_34:
case SPECIAL_META_TILE_35:
case SPECIAL_META_TILE_38:
case SPECIAL_META_TILE_39:
case SPECIAL_META_TILE_40:
case SPECIAL_META_TILE_41:
case SPECIAL_META_TILE_42:
case SPECIAL_META_TILE_43:
default:
return;
}
SetMetaTile(next, pos, layer);
SetMetaTile(next, metaTilePos, layer);
}
}

View File

@ -11,6 +11,7 @@
#include "functions.h"
#include "object.h"
#include "room.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -58,10 +59,10 @@ void GentariCurtain_Init(GentariCurtainEntity* this) {
UpdateSpriteForCollisionLayer(super);
this->tile = COORD_TO_TILE_OFFSET(super, 0, 8);
this->tile2 = COORD_TO_TILE_OFFSET(super, 0, -8);
this->tileIndex = GetMetaTileIndex(this->tile, 1);
this->tileIndex2 = GetMetaTileIndex(this->tile2, 1);
SetMetaTile(0x4022, this->tile, 1);
SetMetaTile(0x4022, this->tile2, 1);
this->tileIndex = GetMetaTileIndex(this->tile, LAYER_BOTTOM);
this->tileIndex2 = GetMetaTileIndex(this->tile2, LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, this->tile, LAYER_BOTTOM);
SetMetaTile(SPECIAL_META_TILE_34, this->tile2, LAYER_BOTTOM);
InitAnimationForceUpdate(super, 0);
} else {
super->action = 1;
@ -81,8 +82,8 @@ void GentariCurtain_Action2(GentariCurtainEntity* this) {
UpdateAnimationSingleFrame(super);
if ((super->frame & ANIM_DONE) != 0) {
super->action = 3;
SetMetaTile(this->tileIndex, this->tile, 1);
SetMetaTile(this->tileIndex2, this->tile2, 1);
SetMetaTile(this->tileIndex, this->tile, LAYER_BOTTOM);
SetMetaTile(this->tileIndex2, this->tile2, LAYER_BOTTOM);
sub_08092214(this);
sub_0809223C(this);
InitAnimationForceUpdate(super, 1);

View File

@ -5,8 +5,10 @@
* @brief Giant Book Ladder object
*/
#define NENT_DEPRECATED
#include "object.h"
#include "manager.h"
#include "map.h"
#include "object.h"
#include "tiles.h"
typedef struct {
Entity base;
@ -44,43 +46,43 @@ void sub_0808E55C(GiantBookLadderEntity* this) {
u32 uVar4;
u32 unaff_r9;
u32 uVar5;
u32 position;
u32 tilePos;
switch (super->type) {
case 0:
case 2:
position = this->unk74;
unaff_r9 = position - 0x101;
SetMetaTile(0x408f, unaff_r9, super->collisionLayer);
SetMetaTile(0x408f, position - 0x100, super->collisionLayer);
SetMetaTile(0x406c, position - 0x102, super->collisionLayer);
SetMetaTile(0x406d, position - 0xff, super->collisionLayer);
tilePos = this->unk74;
unaff_r9 = tilePos + TILE_POS(-1, -4);
SetMetaTile(SPECIAL_META_TILE_143, unaff_r9, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_143, tilePos + TILE_POS(0, -4), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_108, tilePos + TILE_POS(-2, -4), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_109, tilePos + TILE_POS(1, -4), super->collisionLayer);
type = super->type;
uVar5 = 6;
if (type != 0) {
uVar5 = 4;
SetMetaTile(0x4072, position + 0x3f, super->collisionLayer);
SetMetaTile(0x4072, position + 0x40, super->collisionLayer);
SetMetaTile(0x4072, position + 0x7f, super->collisionLayer);
SetMetaTile(0x4072, position + 0x80, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, tilePos + TILE_POS(-1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, tilePos + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, tilePos + TILE_POS(-1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_114, tilePos + TILE_POS(0, 2), super->collisionLayer);
}
break;
case 1:
position = this->unk74;
unaff_r9 = position - 1;
SetMetaTile(0x408e, unaff_r9, super->collisionLayer);
SetMetaTile(0x408e, position, super->collisionLayer);
tilePos = this->unk74;
unaff_r9 = tilePos - 1;
SetMetaTile(SPECIAL_META_TILE_142, unaff_r9, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_142, tilePos, super->collisionLayer);
uVar5 = 2;
break;
}
for (uVar4 = 0; uVar4 < uVar5; uVar4++) {
unaff_r9 += 0x40;
SetMetaTile(0x408e, unaff_r9, super->collisionLayer);
SetMetaTile(0x408e, unaff_r9 + 1, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_142, unaff_r9, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_142, unaff_r9 + 1, super->collisionLayer);
}
}
u32 sub_0808E670(GiantBookLadderEntity* this) {
return GetMetaTileType(this->unk74 - 0x101, 1);
return GetMetaTileType(this->unk74 - 0x101, LAYER_BOTTOM);
}

View File

@ -4,6 +4,7 @@
*
* @brief Giant Leaf object
*/
#include "map.h"
#include "object.h"
void sub_0808D618(Entity* ent);
@ -35,6 +36,6 @@ void sub_0808D618(Entity* ent) {
((((ent->y.HALF.HI - gRoomControls.origin_y) >> 4) & 0x3F) * 64);
for (i = 0; i < 13; i++) {
SetMetaTile(16500, tilePos + arr[i], 1);
SetMetaTile(16500, tilePos + arr[i], LAYER_BOTTOM);
}
}

View File

@ -8,11 +8,12 @@
#include "asm.h"
#include "entity.h"
#include "room.h"
#include "tiles.h"
typedef struct {
Entity base;
u8 filler[0xC];
u16 tile;
u16 metaTilePos;
} GiantRock2Entity;
void GiantRock2_Init(GiantRock2Entity*);
@ -28,22 +29,22 @@ void GiantRock2(Entity* this) {
void GiantRock2_Init(GiantRock2Entity* this) {
u32 collisionLayer;
u16 position;
u16 metaTilePos;
int index;
u32 tileIndex;
super->action = 1;
this->tile = COORD_TO_TILE(super);
this->metaTilePos = COORD_TO_TILE(super);
collisionLayer = super->collisionLayer;
super->spritePriority.b0 = 7;
position = (this->tile - 0x80);
tileIndex = 0x4022;
metaTilePos = (this->metaTilePos - TILE_POS(0, 2));
tileIndex = SPECIAL_META_TILE_34;
for (index = 4; index > -1; index--) {
SetMetaTile(tileIndex, position - 2, collisionLayer);
SetMetaTile(tileIndex, position - 1, collisionLayer);
SetMetaTile(tileIndex, position, collisionLayer);
SetMetaTile(tileIndex, position + 1, collisionLayer);
position += 0x40;
SetMetaTile(tileIndex, metaTilePos - 2, collisionLayer);
SetMetaTile(tileIndex, metaTilePos - 1, collisionLayer);
SetMetaTile(tileIndex, metaTilePos, collisionLayer);
SetMetaTile(tileIndex, metaTilePos + 1, collisionLayer);
metaTilePos += TILE_POS(0, 1);
}
}

View File

@ -7,8 +7,8 @@
#define NENT_DEPRECATED
#include "functions.h"
#include "global.h"
#include "object.h"
#include "tiles.h"
typedef struct {
/*0x00*/ Entity base;
@ -143,22 +143,28 @@ void GiantTwig_Type2Idle(GiantTwigEntity* this) {
void sub_08093984(GiantTwigEntity* this) {
u32 index;
const s16* array;
const s16* metaTileOffsets;
if (super->type2 != 0) {
static const s16 gUnk_081228F8[] = {
-130, -129, -128, -127, -66, -65, -64, -63, -62, -2, -1, 0, 1, 2, 63, 64, 65, 66, 67,
TILE_POS(-2, -2), TILE_POS(-1, -2), TILE_POS(0, -2), TILE_POS(1, -2), TILE_POS(-2, -1),
TILE_POS(-1, -1), TILE_POS(0, -1), TILE_POS(1, -1), TILE_POS(2, -1), TILE_POS(-2, 0),
TILE_POS(-1, 0), TILE_POS(0, 0), TILE_POS(1, 0), TILE_POS(2, 0), TILE_POS(-1, 1),
TILE_POS(0, 1), TILE_POS(1, 1), TILE_POS(2, 1), TILE_POS(3, 1),
};
array = gUnk_081228F8;
metaTileOffsets = gUnk_081228F8;
} else {
static const s16 gUnk_0812291E[] = {
-129, -128, -127, -126, -66, -65, -64, -63, -62, -2, -1, 0, 1, 2, 61, 62, 63, 64, 65,
TILE_POS(-1, -2), TILE_POS(0, -2), TILE_POS(1, -2), TILE_POS(2, -2), TILE_POS(-2, -1),
TILE_POS(-1, -1), TILE_POS(0, -1), TILE_POS(1, -1), TILE_POS(2, -1), TILE_POS(-2, 0),
TILE_POS(-1, 0), TILE_POS(0, 0), TILE_POS(1, 0), TILE_POS(2, 0), TILE_POS(-3, 1),
TILE_POS(-2, 1), TILE_POS(-1, 1), TILE_POS(0, 1), TILE_POS(1, 1),
};
array = gUnk_0812291E;
metaTileOffsets = gUnk_0812291E;
}
for (index = 0; index < 0x13; index++) {
SetMetaTile(0x4074, array[index] + this->tilePosition, 1);
SetMetaTile(SPECIAL_META_TILE_116, metaTileOffsets[index] + this->tilePosition, LAYER_BOTTOM);
}
}
@ -177,47 +183,47 @@ void GiantTwig_Type3Idle(GiantTwigEntity* this) {
void sub_08093A1C(GiantTwigEntity* this) {
switch (super->type) {
case 0:
SetMetaTile(0x4024, this->tilePosition + 0x3c, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x3d, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x3e, super->collisionLayer);
SetMetaTile(0x4029, this->tilePosition + 0x7c, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x7d, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x7e, super->collisionLayer);
SetMetaTile(0x403d, this->tilePosition + 0x40, super->collisionLayer);
SetMetaTile(0x403d, this->tilePosition + 0x80, super->collisionLayer);
SetMetaTile(0x4027, this->tilePosition + 0x41, super->collisionLayer);
SetMetaTile(0x4023, this->tilePosition + 0x42, super->collisionLayer);
SetMetaTile(0x406d, this->tilePosition + 0x43, super->collisionLayer);
SetMetaTile(0x4029, this->tilePosition + 0x81, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x82, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x83, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_36, this->tilePosition + TILE_POS(-4, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(-3, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(-2, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_41, this->tilePosition + TILE_POS(-4, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(-3, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(-2, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(0, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_39, this->tilePosition + TILE_POS(1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_35, this->tilePosition + TILE_POS(2, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_109, this->tilePosition + TILE_POS(3, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_41, this->tilePosition + TILE_POS(1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(2, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(3, 2), super->collisionLayer);
break;
case 1:
if ((super->type2 & 1) != 0) {
SetMetaTile(0x406d, this->tilePosition - 0x81, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition - 0x41, super->collisionLayer);
SetMetaTile(0x4029, this->tilePosition - 2, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition - 1, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition, super->collisionLayer);
SetMetaTile(0x406d, this->tilePosition + 1, super->collisionLayer);
SetMetaTile(0x406e, this->tilePosition + 0x40, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x41, super->collisionLayer);
SetMetaTile(0x406d, this->tilePosition + 0x42, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_109, this->tilePosition + TILE_POS(-1, -2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(-1, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_41, this->tilePosition + TILE_POS(-2, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(-1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(0, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_109, this->tilePosition + TILE_POS(1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_110, this->tilePosition + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_109, this->tilePosition + TILE_POS(2, 1), super->collisionLayer);
} else {
SetMetaTile(0x406c, this->tilePosition - 0x7f, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition - 0x3f, super->collisionLayer);
SetMetaTile(0x406c, this->tilePosition - 1, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 1, super->collisionLayer);
SetMetaTile(0x402a, this->tilePosition + 2, super->collisionLayer);
SetMetaTile(0x406c, this->tilePosition + 0x3e, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x3f, super->collisionLayer);
SetMetaTile(0x406f, this->tilePosition + 0x40, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_108, this->tilePosition + TILE_POS(1, -2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(1, -1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_108, this->tilePosition + TILE_POS(-1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(0, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(1, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_42, this->tilePosition + TILE_POS(2, 0), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_108, this->tilePosition + TILE_POS(-2, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(-1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_111, this->tilePosition + TILE_POS(0, 1), super->collisionLayer);
return;
}
break;
case 3:
SetMetaTile(0x4022, this->tilePosition, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition, super->collisionLayer);
break;
}
}
@ -226,12 +232,12 @@ void sub_08093C70(GiantTwigEntity* this) {
if (this->unk_78 != 0) {
if (gPlayerState.heldObject != 0) {
this->unk_78 = 0;
SetMetaTile(0x4022, this->tilePosition + 0x3f, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x40, super->collisionLayer);
SetMetaTile(0x4022, this->tilePosition + 0x41, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x7f, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x80, super->collisionLayer);
SetMetaTile(0x4026, this->tilePosition + 0x81, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(-1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_34, this->tilePosition + TILE_POS(1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(-1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(0, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_38, this->tilePosition + TILE_POS(1, 2), super->collisionLayer);
}
} else {
@ -239,12 +245,12 @@ void sub_08093C70(GiantTwigEntity* this) {
if (--this->unk_7a == 0) {
this->unk_78++;
this->unk_7a = 0x3c;
SetMetaTile(0x403d, this->tilePosition + 0x3f, super->collisionLayer);
SetMetaTile(0x403d, this->tilePosition + 0x40, super->collisionLayer);
SetMetaTile(0x4027, this->tilePosition + 0x41, super->collisionLayer);
SetMetaTile(0x403d, this->tilePosition + 0x7f, super->collisionLayer);
SetMetaTile(0x403d, this->tilePosition + 0x80, super->collisionLayer);
SetMetaTile(0x4029, this->tilePosition + 0x81, super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(-1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(0, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_39, this->tilePosition + TILE_POS(1, 1), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(-1, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_61, this->tilePosition + TILE_POS(0, 2), super->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_41, this->tilePosition + TILE_POS(1, 2), super->collisionLayer);
}
}
}

View File

@ -8,7 +8,7 @@
#include "entity.h"
#include "flags.h"
#include "functions.h"
#include "global.h"
#include "tiles.h"
void HiddenLadderDown_Init(Entity*);
void HiddenLadderDown_Action1(Entity*);
@ -34,15 +34,15 @@ void HiddenLadderDown_Init(Entity* this) {
if (CheckFlags(this->field_0x86.HWORD) != 0) {
this->action = 2;
this->spriteSettings.draw = TRUE;
SetMetaTileType(0x1a2, *puVar3 - 0x41, this->collisionLayer);
SetMetaTileType(0x1a3, *puVar3 - 0x40, this->collisionLayer);
SetMetaTileType(0x1a4, *puVar3 - 0x3f, this->collisionLayer);
SetMetaTileType(0x1a5, *puVar3 - 1, this->collisionLayer);
SetMetaTileType(0x1a6, *puVar3, this->collisionLayer);
SetMetaTileType(0x1a7, *puVar3 + 1, this->collisionLayer);
SetMetaTileType(0x1a8, *puVar3 + 0x3f, this->collisionLayer);
SetMetaTileType(0x1a9, *puVar3 + 0x40, this->collisionLayer);
SetMetaTileType(0x1aa, *puVar3 + 0x41, this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_418, *puVar3 + TILE_POS(-1, -1), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_419, *puVar3 + TILE_POS(0, -1), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_420, *puVar3 + TILE_POS(1, -1), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_421, *puVar3 + TILE_POS(-1, 0), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_422, *puVar3 + TILE_POS(0, 0), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_423, *puVar3 + TILE_POS(1, 0), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_424, *puVar3 + TILE_POS(-1, 1), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_425, *puVar3 + TILE_POS(0, 1), this->collisionLayer);
SetMetaTileType(META_TILE_TYPE_426, *puVar3 + TILE_POS(1, 1), this->collisionLayer);
}
}

View File

@ -8,13 +8,13 @@
#include "entity.h"
#include "flags.h"
#include "functions.h"
#include "global.h"
#include "hitbox.h"
#include "item.h"
#include "itemMetaData.h"
#include "object.h"
#include "player.h"
#include "sound.h"
#include "tiles.h"
void sub_08081150(Entity*);
u8 sub_0808147C(u32);
@ -282,7 +282,8 @@ void sub_080812A0(Entity* this) {
}
void sub_080812A8(Entity* this) {
if (GetCollisionDataAtEntity(this) != 0xF && this->field_0x6e.HWORD != GetMetaTileTypeByEntity(this)) {
if (GetCollisionDataAtEntity(this) != COLLISION_DATA_15 &&
this->field_0x6e.HWORD != GetMetaTileTypeByEntity(this)) {
this->direction = 0;
this->speed = 0;
this->spriteSettings.draw = 1;

View File

@ -7,9 +7,9 @@
#include "entity.h"
#include "flags.h"
#include "functions.h"
#include "global.h"
#include "room.h"
#include "sound.h"
#include "tiles.h"
static void SetJailBarTiles(Entity*, u32);
void JailBars_Init(Entity*);
@ -61,10 +61,36 @@ void JailBars_Action3(Entity* this) {
}
static void SetJailBarTiles(Entity* this, u32 arg1) {
static const s16 gUnk_08124960[] = { 0x4023, -0x3, 0x4023, -0x2, 0x4023, -0x1, 0x4023,
0x0, 0x4023, 0x1, 0x4023, 0x2, -0x1 };
static const s16 gUnk_0812497A[] = { 0x4023, -0x3, 0x4023, -0x2, 0x4088, -0x1, 0x4087,
0x0, 0x4023, 0x1, 0x4023, 0x2, -0x1 };
static const s16 gUnk_08124960[] = {
SPECIAL_META_TILE_35,
-0x3,
SPECIAL_META_TILE_35,
-0x2,
SPECIAL_META_TILE_35,
-0x1,
SPECIAL_META_TILE_35,
0x0,
SPECIAL_META_TILE_35,
0x1,
SPECIAL_META_TILE_35,
0x2,
-0x1,
};
static const s16 gUnk_0812497A[] = {
SPECIAL_META_TILE_35,
-0x3,
SPECIAL_META_TILE_35,
-0x2,
SPECIAL_META_TILE_136,
-0x1,
SPECIAL_META_TILE_135,
0x0,
SPECIAL_META_TILE_35,
0x1,
SPECIAL_META_TILE_35,
0x2,
-0x1,
};
const s16* puVar1;
puVar1 = gUnk_08124960;

View File

@ -7,6 +7,7 @@
#include "area.h"
#include "functions.h"
#include "object.h"
#include "tiles.h"
extern u32 PortalReadyForMinish(void);
@ -17,7 +18,7 @@ void JarPortal_Action1(Entity*);
void JarPortal_Action2(Entity*);
void JarPortal_Action3(Entity*);
void JarPortal_Action4(Entity*);
void sub_0808C148(Entity*, u32);
void sub_0808C148(Entity*, bool32);
void sub_0808C01C(Entity*, u32);
void JarPortal(Entity* this) {
@ -62,7 +63,7 @@ void JarPortal_Action1(Entity* this) {
} else {
ClearLocalFlag(this->type);
}
sub_0808C148(this, 0);
sub_0808C148(this, FALSE);
}
sub_0808C01C(this, 0);
}
@ -89,7 +90,7 @@ void JarPortal_Action2(Entity* this) {
++this->action;
this->subtimer = 0;
InitAnimationForceUpdate(this, 1);
sub_0808C148(this, 1);
sub_0808C148(this, TRUE);
}
break;
}
@ -103,7 +104,7 @@ void JarPortal_Action3(Entity* this) {
ClearLocalFlag(this->type);
else
SetLocalFlag(this->type);
sub_0808C148(this, 0);
sub_0808C148(this, FALSE);
}
sub_0808C01C(this, 1);
}
@ -156,7 +157,7 @@ void JarPortal_Action4(Entity* this) {
if (!this->z.HALF.HI) {
this->action = 1;
InitAnimationForceUpdate(this, 0);
sub_0808C148(this, 1);
sub_0808C148(this, TRUE);
}
break;
}
@ -171,19 +172,17 @@ void sub_0808C13C(Entity* this) {
this->zVelocity = Q_16_16(2.5);
}
void sub_0808C148(Entity* this, u32 a2) {
u32 pos;
pos = COORD_TO_TILE(this);
if (!a2) {
SetMetaTile(0x4092, pos - 1, this->collisionLayer);
SetMetaTile(0x4093, pos, this->collisionLayer);
SetMetaTile(0x4094, pos + 63, this->collisionLayer);
SetMetaTile(0x4095, pos + 64, this->collisionLayer);
void sub_0808C148(Entity* this, bool32 setTiles) {
u32 tilePos = COORD_TO_TILE(this);
if (!setTiles) {
SetMetaTile(SPECIAL_META_TILE_146, tilePos + TILE_POS(-1, 0), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_147, tilePos + TILE_POS(0, 0), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_148, tilePos + TILE_POS(-1, 1), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_149, tilePos + TILE_POS(0, 1), this->collisionLayer);
} else {
RestorePrevTileEntity(pos - 1, this->collisionLayer);
RestorePrevTileEntity(pos, this->collisionLayer);
RestorePrevTileEntity(pos + 63, this->collisionLayer);
RestorePrevTileEntity(pos + 64, this->collisionLayer);
RestorePrevTileEntity(tilePos + TILE_POS(-1, 0), this->collisionLayer);
RestorePrevTileEntity(tilePos + 0, this->collisionLayer);
RestorePrevTileEntity(tilePos + TILE_POS(-1, 1), this->collisionLayer);
RestorePrevTileEntity(tilePos + TILE_POS(0, 1), this->collisionLayer);
}
}

View File

@ -11,6 +11,7 @@
#include "player.h"
#include "room.h"
#include "sound.h"
#include "tiles.h"
void LadderUp(Entity* this) {
Entity* fxEnt;
@ -37,7 +38,7 @@ void LadderUp(Entity* this) {
return;
}
this->y.HALF.HI = (this->y.HALF.HI & 0xfff0) + 0xc;
SetMetaTile(0x4023, COORD_TO_TILE(this), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_35, COORD_TO_TILE(this), this->collisionLayer);
break;
case 1:
if (GravityUpdate(this, Q_8_8(16.0)) == 0) {
@ -65,17 +66,18 @@ void LadderUp(Entity* this) {
default:
if (this->type2 == 0) {
if (gPlayerEntity.y.HALF.HI < this->y.HALF.HI) {
if (gPlayerState.floor_type != SURFACE_LADDER && (GetMetaTileTypeByEntity(this) == 0x4017)) {
SetMetaTile(0x4023, COORD_TO_TILE(this), this->collisionLayer);
RestorePrevTileEntity(COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer);
if (gPlayerState.floor_type != SURFACE_LADDER &&
(GetMetaTileTypeByEntity(this) == SPECIAL_META_TILE_23)) {
SetMetaTile(SPECIAL_META_TILE_35, COORD_TO_TILE(this), this->collisionLayer);
RestorePrevTileEntity(COORD_TO_TILE_OFFSET(this, 0, 16), this->collisionLayer);
}
} else {
if (GetMetaTileTypeByEntity(this) != 0x4017) {
SetMetaTile(0x4017, COORD_TO_TILE(this), this->collisionLayer);
if (GetMetaTileTypeByEntity(this) != SPECIAL_META_TILE_23) {
SetMetaTile(SPECIAL_META_TILE_23, COORD_TO_TILE(this), this->collisionLayer);
if (this->type == 0) {
SetMetaTile(0x4017, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_23, COORD_TO_TILE_OFFSET(this, 0, 16), this->collisionLayer);
} else {
SetMetaTile(0x4014, COORD_TO_TILE_OFFSET(this, 0, 0x10), this->collisionLayer);
SetMetaTile(SPECIAL_META_TILE_20, COORD_TO_TILE_OFFSET(this, 0, 16), this->collisionLayer);
}
}
}

Some files were not shown because too many files have changed in this diff Show More