mirror of
https://github.com/zeldaret/tmc
synced 2026-07-08 14:36:41 -04:00
Merge branch 'master' into gyorg
This commit is contained in:
+2
-2
@@ -43,8 +43,8 @@ typedef struct {
|
||||
RoomResInfo roomResInfos[MAX_ROOMS];
|
||||
RoomResInfo currentRoomInfo;
|
||||
RoomResInfo* pCurrentRoomInfo;
|
||||
u32 musicIndex;
|
||||
u32 pMusicIndex;
|
||||
u32 bgm;
|
||||
u32 queued_bgm;
|
||||
u8 filler5[0x20];
|
||||
void* transitionManager;
|
||||
void (*onEnter)();
|
||||
|
||||
+22
-10
@@ -3,23 +3,35 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
struct Entity_;
|
||||
|
||||
extern u32 Random(void);
|
||||
extern void sub_08000152(u32);
|
||||
extern void sub_08000152(u32, u32, u32);
|
||||
extern u32 GetTileTypeByEntity(struct Entity_*);
|
||||
extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer);
|
||||
extern u32 GetTileType(u32 pos, u32 layer);
|
||||
extern void SetTile(u32 index, u32 position, u32 layer);
|
||||
extern void UpdateScrollVram(void);
|
||||
extern u32 sub_080002D0(struct Entity_*);
|
||||
extern u32 sub_080002F0(u32, u32, u32);
|
||||
extern void LoadResourceAsync(const void*, u32, u32);
|
||||
extern void sub_08001242(struct Entity_*);
|
||||
extern void sub_08001290(struct Entity_*, u32);
|
||||
extern void sub_08001324(struct Entity_*);
|
||||
extern u32 sub_08002632(struct Entity_*);
|
||||
extern u32 sub_08003FC4(struct Entity_*, u32);
|
||||
extern u32 sub_080043E8(struct Entity_*);
|
||||
extern void sub_08004484(struct Entity_*, struct Entity_*);
|
||||
extern u32 sub_080045D4(s16, s16, u32, u32);
|
||||
extern u32 sub_080045DA(s32, s32);
|
||||
extern void sub_08004596(struct Entity_*, u32);
|
||||
extern u32 sub_080045B4(struct Entity_*, u32, u32);
|
||||
extern u32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
|
||||
extern u32 GravityUpdate(struct Entity_*, u32);
|
||||
extern u32 CheckOnScreen(struct Entity_*);
|
||||
extern u32 EntityInRectRadius(struct Entity_*, struct Entity_*, u32, u32);
|
||||
extern void UpdateAnimationVariableFrames(struct Entity_*, u32);
|
||||
extern u32 sub_080043E8(struct Entity_*);
|
||||
extern void sub_08004484(struct Entity_*, struct Entity_*);
|
||||
extern void ResetCollisionLayer(struct Entity_*);
|
||||
extern void sub_08004596(struct Entity_*, u32);
|
||||
extern u32 sub_080045B4(struct Entity_*, u32, u32);
|
||||
extern u32 sub_080045D4(u32, u32, u32, u32);
|
||||
extern u32 sub_080045DA(s32, s32);
|
||||
extern u32 sub_080086B4(u32, u32, u8*);
|
||||
extern u32 ResolveCollisionLayer(struct Entity_*);
|
||||
extern void sub_0800417E(struct Entity_*, u32);
|
||||
extern u32 sub_0800442E(struct Entity_*);
|
||||
|
||||
#endif // ASM_H
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef COLOR_H
|
||||
#define COLOR_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u8 _0;
|
||||
u8 _1;
|
||||
u16 _2;
|
||||
} Palette;
|
||||
extern Palette gPaletteList[];
|
||||
|
||||
void ResetPaletteTable(u32 a1);
|
||||
void sub_0801D000(u32 a1);
|
||||
void LoadObjPalette(struct Entity_*, u32);
|
||||
void UnloadOBJPalette(struct Entity_* entity);
|
||||
void sub_0801D244(u32);
|
||||
void sub_0801D28C(struct Entity_* entity, u32 palette);
|
||||
void ChangeObjPalette(struct Entity_* entity, u32 palette);
|
||||
|
||||
#endif // COLOR_H
|
||||
@@ -0,0 +1,126 @@
|
||||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
struct Entity_;
|
||||
|
||||
/**
|
||||
* Holds input information from system registers.
|
||||
*/
|
||||
typedef struct {
|
||||
u16 heldKeys; /**< Keys held since last frame. */
|
||||
u16 newKeys; /** Keys newly pressed this frame. */
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} Input;
|
||||
extern Input gInput; /**< Input instance. */
|
||||
|
||||
void LoadPalettes(const u8*, s32, s32);
|
||||
|
||||
/**
|
||||
* Loads a packed group of palettes.
|
||||
*
|
||||
* @param group Group number.
|
||||
*/
|
||||
void LoadPaletteGroup(u32 group);
|
||||
|
||||
/**
|
||||
* Loads a packed group of tiles.
|
||||
*
|
||||
* @param group Group number.
|
||||
*/
|
||||
void LoadGfxGroup(u32 group);
|
||||
|
||||
/**
|
||||
* Set color in the palette.
|
||||
*
|
||||
* @param colorIndex Color index.
|
||||
* @param color Color.
|
||||
*/
|
||||
void SetColor(u32 colorIndex, u32 color);
|
||||
|
||||
void SetFillColor(u32 color, u32 arg1);
|
||||
|
||||
/**
|
||||
* Fill memory with 16 bit value.
|
||||
*
|
||||
* @param value Fill value.
|
||||
* @param dest Destination.
|
||||
* @param size Byte count.
|
||||
*/
|
||||
void MemFill16(u32 value, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Fill memory with 32 bit value.
|
||||
*
|
||||
* @param value Fill value.
|
||||
* @param dest Destination.
|
||||
* @param size Byte count.
|
||||
*/
|
||||
void MemFill32(u32 value, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Clear memory.
|
||||
*
|
||||
* @param dest Destination
|
||||
* @param size Byte count.
|
||||
*/
|
||||
void MemClear(void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Copy memory.
|
||||
*
|
||||
* @param src Source.
|
||||
* @param dest Destination.
|
||||
* @param size Byte count.
|
||||
*/
|
||||
void MemCopy(const void* src, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Refresh #gInput from system registers.
|
||||
*/
|
||||
void ReadKeyInput(void);
|
||||
|
||||
/**
|
||||
* Initialize the heap.
|
||||
*/
|
||||
void zMallocInit(void);
|
||||
|
||||
/**
|
||||
* Allocate memory on heap.
|
||||
*
|
||||
* The heap size is 0x1000 bytes and should be used sparingly.
|
||||
* It is customary for entities store the returned pointer in the Entity.myHeap field.
|
||||
*
|
||||
* @param size u32 Size to be allocated.
|
||||
* @return Pointer to allocated memory.
|
||||
*/
|
||||
void* zMalloc(u32 size);
|
||||
|
||||
/**
|
||||
* Free memory from heap.
|
||||
* The Entity system will automatically free the pointer stored in the Entity.myHeap field.
|
||||
*
|
||||
* @param ptr Pointer to be freed.
|
||||
*/
|
||||
void zFree(void* ptr);
|
||||
|
||||
/**
|
||||
* Reset All display system registers.
|
||||
*
|
||||
* @param refresh Request refresh of HUD layer (bg 0).
|
||||
*/
|
||||
void DispReset(bool32 refresh);
|
||||
|
||||
u32 CheckPlayerProximity(u32, u32, u32, u32);
|
||||
u32 CheckKinstoneFused(u32);
|
||||
void sub_0801E1EC(u32, u32, u32);
|
||||
void sub_0801DD58(u32, u32);
|
||||
void sub_0801E1B8(u32, u32);
|
||||
void sub_0801E738(u32);
|
||||
void sub_0801DFB4(struct Entity_*, u32, u32, u32);
|
||||
u32 sub_0801E00C(void);
|
||||
|
||||
#endif // COMMON_H
|
||||
+1
-1
@@ -17,7 +17,7 @@ void ResolveEntityBelow(Entity*, Entity*);
|
||||
|
||||
u32 sub_0806F5A4(u32 idx);
|
||||
u32 sub_0806F3E4(Entity*);
|
||||
void sub_0806F69C(Entity*);
|
||||
void LinearMoveUpdate(Entity*);
|
||||
|
||||
extern const s16 gSineTable[64];
|
||||
extern const s16 gCosineTable[256];
|
||||
|
||||
+114
-105
@@ -4,18 +4,27 @@
|
||||
#include "global.h"
|
||||
#include "asm.h"
|
||||
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
#include "effects.h"
|
||||
#include "flags.h"
|
||||
#include "utils.h"
|
||||
#include "common.h"
|
||||
|
||||
#include "entity.h"
|
||||
#include "projectile.h"
|
||||
|
||||
extern u32 GetNextFunction(Entity*);
|
||||
extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*));
|
||||
extern void EnemyFunctionHandler(Entity*, EntityActionArray);
|
||||
extern void sub_08001324(Entity*);
|
||||
extern Entity* CreateDeathFx(Entity*, u32, u32);
|
||||
|
||||
extern Entity* sub_0804A9FC(Entity*, u32);
|
||||
extern void SetChildOffset(Entity*, s32, s32, s32);
|
||||
extern Entity* CreateProjectileWithParent(Entity*, u8, u8);
|
||||
|
||||
extern void sub_0804A7D4(Entity*);
|
||||
extern void sub_08002724(void*, u8*);
|
||||
extern void sub_080026C4(u8*, u8*, u8*, u32);
|
||||
extern void sub_080026F2(u8*, void*, u8*, u32);
|
||||
|
||||
typedef enum {
|
||||
/*0x00*/ OCTOROK,
|
||||
@@ -123,107 +132,107 @@ typedef enum {
|
||||
/*0x66*/ ENEMY_66
|
||||
} Enemy;
|
||||
|
||||
extern void Octorok(Entity*);
|
||||
extern void Chuchu(Entity*);
|
||||
extern void Leever(Entity*);
|
||||
extern void Peahat(Entity*);
|
||||
extern void Rollobite(Entity*);
|
||||
extern void DarkNut(Entity*);
|
||||
extern void HangingSeed(Entity*);
|
||||
extern void Beetle(Entity*);
|
||||
extern void Keese(Entity*);
|
||||
extern void DoorMimic(Entity*);
|
||||
extern void RockChuchu(Entity*);
|
||||
extern void SpinyChuchu(Entity*);
|
||||
extern void CuccoChickAggr(Entity*);
|
||||
extern void Moldorm(Entity*);
|
||||
extern void EnemyE(Entity*);
|
||||
extern void Moldworm(Entity*);
|
||||
extern void Sluggula(Entity*);
|
||||
extern void Pesto(Entity*);
|
||||
extern void Puffstool(Entity*);
|
||||
extern void ChuchuBoss(Entity*);
|
||||
extern void LikeLike(Entity*);
|
||||
extern void SpearMoblin(Entity*);
|
||||
extern void BusinessScrub(Entity*);
|
||||
extern void RupeeLike(Entity*);
|
||||
extern void Madderpillar(Entity*);
|
||||
extern void WaterDrop(Entity*);
|
||||
extern void WallMaster(Entity*);
|
||||
extern void BombPeahat(Entity*);
|
||||
extern void Spark(Entity*);
|
||||
extern void Chaser(Entity*);
|
||||
extern void SpikedBeetle(Entity*);
|
||||
extern void SensorBladeTrap(Entity*);
|
||||
extern void Helmasaur(Entity*);
|
||||
extern void FallingBoulder(Entity*);
|
||||
extern void Bobomb(Entity*);
|
||||
extern void WallMaster2(Entity*);
|
||||
extern void Gleerok(Entity*);
|
||||
extern void VaatiEyesMacro(Entity*);
|
||||
extern void Tektite(Entity*);
|
||||
extern void WizzrobeWind(Entity*);
|
||||
extern void WizzrobeFire(Entity*);
|
||||
extern void WizzrobeIce(Entity*);
|
||||
extern void Armos(Entity*);
|
||||
extern void Eyegore(Entity*);
|
||||
extern void Rope(Entity*);
|
||||
extern void SmallPesto(Entity*);
|
||||
extern void AcroBandit(Entity*);
|
||||
extern void BladeTrap(Entity*);
|
||||
extern void Keaton(Entity*);
|
||||
extern void Crow(Entity*);
|
||||
extern void Mulldozer(Entity*);
|
||||
extern void Bombarossa(Entity*);
|
||||
extern void Wisp(Entity*);
|
||||
extern void SpinyBeetle(Entity*);
|
||||
extern void MazaalHead(Entity*);
|
||||
extern void MazaalMacro(Entity*);
|
||||
extern void MazaalHand(Entity*);
|
||||
extern void OctorokBoss(Entity*);
|
||||
extern void FlyingPot(Entity*);
|
||||
extern void Gibdo(Entity*);
|
||||
extern void OctorokGolden(Entity*);
|
||||
extern void TektiteGolden(Entity*);
|
||||
extern void RopeGolden(Entity*);
|
||||
extern void CloudPiranha(Entity*);
|
||||
extern void ScissorsBeetle(Entity*);
|
||||
extern void CuccoAggr(Entity*);
|
||||
extern void Stalfos(Entity*);
|
||||
extern void FlyingSkull(Entity*);
|
||||
extern void MazaalBracelet(Entity*);
|
||||
extern void Takkuri(Entity*);
|
||||
extern void BowMoblin(Entity*);
|
||||
extern void Lakitu(Entity*);
|
||||
extern void LakituCloud(Entity*);
|
||||
extern void Enemy49(Entity*);
|
||||
extern void VaatiRebornEnemy(Entity*);
|
||||
extern void VaatiProjectile(Entity*);
|
||||
extern void BallChainSoldier(Entity*);
|
||||
extern void Enemy4D(Entity*);
|
||||
extern void Ghini(Entity*);
|
||||
extern void VaatiTransfigured(Entity*);
|
||||
extern void Enemy50(Entity*);
|
||||
extern void VaatiWrath(Entity*);
|
||||
extern void VaatiArm(Entity*);
|
||||
extern void Dust(Entity*);
|
||||
extern void VaatiBall(Entity*);
|
||||
extern void Slime(Entity*);
|
||||
extern void MiniSlime(Entity*);
|
||||
extern void FireballGuy(Entity*);
|
||||
extern void MiniFireballGuy(Entity*);
|
||||
extern void VaatiTransfiguredEye(Entity*);
|
||||
extern void BusinessScrubPrologue(Entity*);
|
||||
extern void GyorgFemale();
|
||||
extern void GyorgMale();
|
||||
extern void Curtain(Entity*);
|
||||
extern void VaatiWrathEye(Entity*);
|
||||
extern void GyorgChild();
|
||||
extern void GyorgFemaleEye();
|
||||
extern void Enemy62(Entity*);
|
||||
extern void GyorgFemaleMouth();
|
||||
extern void Enemy64(Entity*);
|
||||
extern void TreeItem(Entity*);
|
||||
extern void Enemy66(Entity*);
|
||||
void Octorok(Entity*);
|
||||
void Chuchu(Entity*);
|
||||
void Leever(Entity*);
|
||||
void Peahat(Entity*);
|
||||
void Rollobite(Entity*);
|
||||
void DarkNut(Entity*);
|
||||
void HangingSeed(Entity*);
|
||||
void Beetle(Entity*);
|
||||
void Keese(Entity*);
|
||||
void DoorMimic(Entity*);
|
||||
void RockChuchu(Entity*);
|
||||
void SpinyChuchu(Entity*);
|
||||
void CuccoChickAggr(Entity*);
|
||||
void Moldorm(Entity*);
|
||||
void EnemyE(Entity*);
|
||||
void Moldworm(Entity*);
|
||||
void Sluggula(Entity*);
|
||||
void Pesto(Entity*);
|
||||
void Puffstool(Entity*);
|
||||
void ChuchuBoss(Entity*);
|
||||
void LikeLike(Entity*);
|
||||
void SpearMoblin(Entity*);
|
||||
void BusinessScrub(Entity*);
|
||||
void RupeeLike(Entity*);
|
||||
void Madderpillar(Entity*);
|
||||
void WaterDrop(Entity*);
|
||||
void WallMaster(Entity*);
|
||||
void BombPeahat(Entity*);
|
||||
void Spark(Entity*);
|
||||
void Chaser(Entity*);
|
||||
void SpikedBeetle(Entity*);
|
||||
void SensorBladeTrap(Entity*);
|
||||
void Helmasaur(Entity*);
|
||||
void FallingBoulder(Entity*);
|
||||
void Bobomb(Entity*);
|
||||
void WallMaster2(Entity*);
|
||||
void Gleerok(Entity*);
|
||||
void VaatiEyesMacro(Entity*);
|
||||
void Tektite(Entity*);
|
||||
void WizzrobeWind(Entity*);
|
||||
void WizzrobeFire(Entity*);
|
||||
void WizzrobeIce(Entity*);
|
||||
void Armos(Entity*);
|
||||
void Eyegore(Entity*);
|
||||
void Rope(Entity*);
|
||||
void SmallPesto(Entity*);
|
||||
void AcroBandit(Entity*);
|
||||
void BladeTrap(Entity*);
|
||||
void Keaton(Entity*);
|
||||
void Crow(Entity*);
|
||||
void Mulldozer(Entity*);
|
||||
void Bombarossa(Entity*);
|
||||
void Wisp(Entity*);
|
||||
void SpinyBeetle(Entity*);
|
||||
void MazaalHead(Entity*);
|
||||
void MazaalMacro(Entity*);
|
||||
void MazaalHand(Entity*);
|
||||
void OctorokBoss(Entity*);
|
||||
void FlyingPot(Entity*);
|
||||
void Gibdo(Entity*);
|
||||
void OctorokGolden(Entity*);
|
||||
void TektiteGolden(Entity*);
|
||||
void RopeGolden(Entity*);
|
||||
void CloudPiranha(Entity*);
|
||||
void ScissorsBeetle(Entity*);
|
||||
void CuccoAggr(Entity*);
|
||||
void Stalfos(Entity*);
|
||||
void FlyingSkull(Entity*);
|
||||
void MazaalBracelet(Entity*);
|
||||
void Takkuri(Entity*);
|
||||
void BowMoblin(Entity*);
|
||||
void Lakitu(Entity*);
|
||||
void LakituCloud(Entity*);
|
||||
void Enemy49(Entity*);
|
||||
void VaatiRebornEnemy(Entity*);
|
||||
void VaatiProjectile(Entity*);
|
||||
void BallChainSoldier(Entity*);
|
||||
void Enemy4D(Entity*);
|
||||
void Ghini(Entity*);
|
||||
void VaatiTransfigured(Entity*);
|
||||
void Enemy50(Entity*);
|
||||
void VaatiWrath(Entity*);
|
||||
void VaatiArm(Entity*);
|
||||
void Dust(Entity*);
|
||||
void VaatiBall(Entity*);
|
||||
void Slime(Entity*);
|
||||
void MiniSlime(Entity*);
|
||||
void FireballGuy(Entity*);
|
||||
void MiniFireballGuy(Entity*);
|
||||
void VaatiTransfiguredEye(Entity*);
|
||||
void BusinessScrubPrologue(Entity*);
|
||||
void GyorgFemale();
|
||||
void GyorgMale();
|
||||
void Curtain(Entity*);
|
||||
void VaatiWrathEye(Entity*);
|
||||
void GyorgChild();
|
||||
void GyorgFemaleEye();
|
||||
void Enemy62(Entity*);
|
||||
void GyorgFemaleMouth();
|
||||
void Enemy64(Entity*);
|
||||
void TreeItem(Entity*);
|
||||
void Enemy66(Entity*);
|
||||
|
||||
#endif
|
||||
|
||||
+349
-174
@@ -3,19 +3,73 @@
|
||||
#define ENTITY_H
|
||||
|
||||
#include "global.h"
|
||||
#include "color.h"
|
||||
#include "sprite.h"
|
||||
|
||||
#define MAX_ENTITIES 71
|
||||
|
||||
/** Kinds of Entity's supported by the game. */
|
||||
typedef enum {
|
||||
PLAYER = 1,
|
||||
ENEMY = 3,
|
||||
PROJECTILE = 4,
|
||||
OBJECT = 6,
|
||||
NPC = 7,
|
||||
PLAYER_ITEM = 8,
|
||||
MANAGER = 9,
|
||||
} EntityType;
|
||||
PLAYER = 1, /**< There is only one id assigned to the Player kind.
|
||||
* The player Entity shares much of its code with LTTP GBA, however the game only supports
|
||||
* one player Entity active at a time, assigned to the global #gPlayerEntity.
|
||||
* Works next to PlayerState to control player behavior.
|
||||
*/
|
||||
ENEMY = 3, /**< Can give and take damage in relation to the player.
|
||||
* Most enemies call the a set of external helper functions which calculate what behavior to execute.
|
||||
*/
|
||||
PROJECTILE = 4, /**< May damage the player. They are typically spawned by enemies.
|
||||
*/
|
||||
OBJECT = 6, /**< Encapsulates any sort of prop. Generally they cannot be interacted with directly,
|
||||
* but they may react to a player action or script event.
|
||||
*/
|
||||
NPC = 7, /**< May be interacted with by the player. Almost every NPC is assigned a script.
|
||||
* NPCs have three entry points: one for the head, one for the body, and one for kinstone fusion.
|
||||
*/
|
||||
PLAYER_ITEM = 8, /**< Displays sprites for items outside of the inventory (check).
|
||||
*/
|
||||
MANAGER = 9, /**< Utility Entity's that serve as a proxy between gameplay and the engine.
|
||||
* Examples: drawing clouds, ezlo hints, playing cutscenes.
|
||||
* Updates independently of other entities, and does not add to maximum entity count.
|
||||
*/
|
||||
} EntityKind;
|
||||
|
||||
/** Entity flags. */
|
||||
typedef enum {
|
||||
ENT_DID_INIT = 0x1, /**< Graphics and other data loaded. */
|
||||
ENT_SCRIPTED = 0x2, /**< Execute in a scripted environment. */
|
||||
ENT_DELETED = 0x10, /**< Queue deletion next frame. */
|
||||
ENT_PERSIST = 0x20, /**< Persist between rooms. */
|
||||
ENT_COLLIDE = 0x80, /**< Collide with other Entity's. */
|
||||
} EntityFlags;
|
||||
|
||||
/** Priority level to determine what events will block an Entity from updating. */
|
||||
typedef enum {
|
||||
PRIO_MIN, /**< Default priority. */
|
||||
PRIO_PLAYER, /**< Default priority for player. */
|
||||
PRIO_MESSAGE, /**< Do not block during message. */
|
||||
PRIO_NO_BLOCK, /**< Do not block during entity requested priority. @see RequestPriority */
|
||||
PRIO_4, /**< Unused. */
|
||||
PRIO_5, /**< Unused. */
|
||||
PRIO_PLAYER_EVENT, /**< Do not block during special player event. */
|
||||
PRIO_HIGHEST, /**< Do not block EVER. */
|
||||
} Priority;
|
||||
|
||||
/** Animation state. */
|
||||
typedef enum {
|
||||
IdleNorth = 0x0, /**< Idle facing north. */
|
||||
IdleEast = 0x2, /**< Idle facing east. */
|
||||
IdleSouth = 0x4, /**< Idle facing south. */
|
||||
IdleWest = 0x6, /**< Idle facing west. */
|
||||
} AnimationState;
|
||||
|
||||
/** Direction. */
|
||||
typedef enum {
|
||||
DirectionNorth = 0x00, /**< North. */
|
||||
DirectionEast = 0x08, /**< East. */
|
||||
DirectionSouth = 0x10, /**< South. */
|
||||
DirectionWest = 0x18, /**< West. */
|
||||
} Direction;
|
||||
|
||||
typedef struct {
|
||||
void* entity1;
|
||||
@@ -23,6 +77,9 @@ typedef struct {
|
||||
u8 filler[14];
|
||||
} UnkStruct;
|
||||
|
||||
/**
|
||||
* Hitbox structure.
|
||||
*/
|
||||
typedef struct {
|
||||
s8 offset_x;
|
||||
s8 offset_y;
|
||||
@@ -31,6 +88,9 @@ typedef struct {
|
||||
u8 height;
|
||||
} Hitbox;
|
||||
|
||||
/**
|
||||
* Hitbox structure supporting depth.
|
||||
*/
|
||||
typedef struct {
|
||||
s8 offset_x;
|
||||
s8 offset_y;
|
||||
@@ -41,38 +101,48 @@ typedef struct {
|
||||
u8 unknown2[3];
|
||||
} Hitbox3D;
|
||||
|
||||
typedef struct {
|
||||
u8 b0 : 3; // 1-4
|
||||
u8 b1 : 3; // 8
|
||||
u8 b2 : 1; // 0x40
|
||||
u8 b3 : 1; // 0x80
|
||||
} PACKED SpritePriority;
|
||||
|
||||
/**
|
||||
* Container for instantiable behavior.
|
||||
*/
|
||||
typedef struct Entity_ {
|
||||
/*0x00*/ struct Entity_* prev;
|
||||
/*0x04*/ struct Entity_* next;
|
||||
/*0x08*/ u8 kind;
|
||||
/*0x09*/ u8 id;
|
||||
/*0x0a*/ u8 type;
|
||||
/*0x0b*/ u8 type2;
|
||||
/*0x0c*/ u8 action;
|
||||
/*0x0d*/ u8 subAction;
|
||||
/*0x0e*/ u8 actionDelay;
|
||||
/*0x0f*/ u8 field_0xf;
|
||||
/*0x10*/ u8 flags;
|
||||
/*0x11*/ u8 updatePriority : 4; // Current priority -- See RequestPriority
|
||||
/* */ u8 updatePriorityPrev : 4; // Priority to restore after request is over
|
||||
/*0x00*/ struct Entity_* prev; /**< previous Entity */
|
||||
/*0x04*/ struct Entity_* next; /**< next Entity */
|
||||
/*0x08*/ u8 kind; /**< @see EntityKind */
|
||||
/*0x09*/ u8 id; /**< Entity id. */
|
||||
/*0x0a*/ u8 type; /**< For use internally to allow different variations. */
|
||||
/*0x0b*/ u8 type2; /**< For use internally. */
|
||||
/*0x0c*/ u8 action; /**< Current action. Usually used to index a function table. */
|
||||
/*0x0d*/ u8 subAction; /**< Optional sub-action. */
|
||||
/*0x0e*/ u8 actionDelay; /**< General purpose timer. */
|
||||
/*0x0f*/ u8 field_0xf; /**< General purpose timer. */
|
||||
/*0x10*/ u8 flags; /**< @see EntityFlags */
|
||||
/*0x11*/ u8 updatePriority : 4; /**< Current priority. @see Priority */
|
||||
/* */ u8 updatePriorityPrev : 4; /**< Priority to restore after request is over. @see RequestPriority. */
|
||||
/*0x12*/ s16 spriteIndex;
|
||||
/*0x14*/ u8 animationState;
|
||||
/*0x15*/ u8 direction;
|
||||
/*0x14*/ u8 animationState; /**< Animation state. @see AnimationState */
|
||||
/*0x15*/ u8 direction; /**< Facing direction. @see Direction */
|
||||
/*0x16*/ u8 field_0x16;
|
||||
/*0x17*/ u8 field_0x17;
|
||||
/*0x18*/ struct {
|
||||
/* */ u32 draw : 2; // 1-2
|
||||
/* */ u32 ss2 : 1; // 4
|
||||
/* */ u32 ss3 : 1; // 8
|
||||
/* */ u32 shadow : 2; //0x10-0x20
|
||||
/* */ u32 flipX : 1; //0x40
|
||||
/* */ u32 flipY : 1; //0x80
|
||||
/* */ u32 draw : 2; /**< Draw type. 0 = disabled, 1 = clip to screen, 3 = draw always */ /* 0x2 */
|
||||
/* */ u32 ss2 : 1; /* 4 */
|
||||
/* */ u32 ss3 : 1; /* 8 */
|
||||
/* */ u32 shadow : 2; /* 0x10-0x20 */
|
||||
/* */ u32 flipX : 1; /**< Flip sprite horizontally. */ /* 0x40 */
|
||||
/* */ u32 flipY : 1; /**< Flip sprite vertically. */ /* 0x80 */
|
||||
/* */ } PACKED spriteSettings;
|
||||
/*0x19*/ struct {
|
||||
/* */ u32 b0 : 2; // 1-2
|
||||
/* */ u32 alphaBlend : 2; // 4-8
|
||||
/* */ u32 b2 : 2; //0x10
|
||||
/* */ u32 b3 : 2; //0x40
|
||||
/* */ u32 b0 : 2; /* 1-2 */
|
||||
/* */ u32 alphaBlend : 2; /* 4-8 */
|
||||
/* */ u32 b2 : 2; /* 0x10 */
|
||||
/* */ u32 b3 : 2; /* 0x40 */
|
||||
/* */ } PACKED spriteRendering;
|
||||
/*0x1a*/ union {
|
||||
/* */ u8 raw;
|
||||
@@ -82,45 +152,41 @@ typedef struct Entity_ {
|
||||
/* */ } PACKED b;
|
||||
/* */ } PACKED palette;
|
||||
/*0x1b*/ struct {
|
||||
/* */ u32 b0 : 1;
|
||||
/* */ u32 b1 : 5; //0x10
|
||||
/* */ u32 flipY : 2; //0x40
|
||||
/* */ u32 b0 : 1; /* 1 */
|
||||
/* */ u32 b1 : 5; /* 0x2-0x10 */
|
||||
/* */ u32 flipY : 2; /* 0x20-0x40 */
|
||||
/* */ } PACKED spriteOrientation;
|
||||
/*0x1c*/ u8 field_0x1c;
|
||||
/*0x1d*/ u8 field_0x1d;
|
||||
/*0x1e*/ u8 frameIndex;
|
||||
/*0x1f*/ u8 lastFrameIndex;
|
||||
/*0x20*/ s32 zVelocity;
|
||||
/*0x24*/ s16 speed;
|
||||
/*0x20*/ s32 zVelocity; /**< Z axis speed. */
|
||||
/*0x24*/ s16 speed; /**< Magnitude of speed. */
|
||||
/*0x26*/ u8 spriteAnimation[3];
|
||||
/*0x29*/ struct {
|
||||
/* */ u8 b0 : 3; // 1-4
|
||||
/* */ u8 b1 : 3; // 8
|
||||
/* */ u8 b2 : 2; //0x40
|
||||
/* */ } PACKED spritePriority;
|
||||
/*0x29*/ SpritePriority spritePriority;
|
||||
/*0x2a*/ u16 collisions;
|
||||
/*0x2c*/ union SplitWord x;
|
||||
/*0x30*/ union SplitWord y;
|
||||
/*0x34*/ union SplitWord z;
|
||||
/*0x38*/ u8 collisionLayer;
|
||||
/*0x2c*/ union SplitWord x; /**< X position, fixed point. */
|
||||
/*0x30*/ union SplitWord y; /**< Y position, fixed point. */
|
||||
/*0x34*/ union SplitWord z; /**< Z position, fixed point. */
|
||||
/*0x38*/ u8 collisionLayer; /**< Collision layer. */
|
||||
/*0x39*/ s8 interactType;
|
||||
/*0x3a*/ u8 field_0x3a;
|
||||
/*0x3b*/ u8 flags2;
|
||||
/*0x3c*/ u8 field_0x3c;
|
||||
/*0x3d*/ s8 iframes;
|
||||
/*0x3e*/ u8 knockbackDirection;
|
||||
/*0x3f*/ u8 hitType; // behavior as a collision sender
|
||||
/*0x40*/ u8 hurtType; // behavior as a collision reciever
|
||||
/*0x3d*/ s8 iframes; /**< Invulnerability frames. */
|
||||
/*0x3e*/ u8 knockbackDirection; /**< Direction of knockback. */
|
||||
/*0x3f*/ u8 hitType; /**< Behavior as a collision sender. */
|
||||
/*0x40*/ u8 hurtType; /**< behavior as a collision receiver. */
|
||||
/*0x41*/ u8 bitfield;
|
||||
/*0x42*/ u8 knockbackDuration;
|
||||
/*0x42*/ u8 knockbackDuration; /**< Duration of knockback. */
|
||||
/*0x43*/ u8 field_0x43;
|
||||
/*0x44*/ u8 damage;
|
||||
/*0x45*/ u8 health;
|
||||
/*0x44*/ u8 damage; /**< Damage this Entity inflicts. */
|
||||
/*0x45*/ u8 health; /**< Health of this Entity. */
|
||||
/*0x46*/ u16 field_0x46;
|
||||
/*0x48*/ Hitbox* hitbox;
|
||||
/*0x48*/ Hitbox* hitbox; /**< Hitbox associated with this Entity. */
|
||||
/*0x4c*/ struct Entity_* field_0x4c;
|
||||
/*0x50*/ struct Entity_* parent;
|
||||
/*0x54*/ struct Entity_* child;
|
||||
/*0x50*/ struct Entity_* parent; /**< Parent Entity. Sometimes points to associated data. */
|
||||
/*0x54*/ struct Entity_* child; /**< Child Entity. Sometimes points to associated data. */
|
||||
/*0x58*/ u8 animIndex;
|
||||
/*0x59*/ u8 frameDuration;
|
||||
/*0x5a*/ u8 frame;
|
||||
@@ -129,7 +195,7 @@ typedef struct Entity_ {
|
||||
/*0x60*/ u16 spriteVramOffset;
|
||||
/*0x62*/ u8 spriteOffsetX;
|
||||
/*0x63*/ s8 spriteOffsetY;
|
||||
/*0x64*/ void* myHeap;
|
||||
/*0x64*/ void* myHeap; /**< Heap data allocated with #zMalloc. */
|
||||
#ifndef NENT_DEPRECATED
|
||||
/*0x68*/ union SplitHWord field_0x68;
|
||||
/*0x6a*/ union SplitHWord field_0x6a;
|
||||
@@ -166,77 +232,24 @@ typedef struct {
|
||||
/*0x86*/ union SplitHWord field_0x86;
|
||||
} GenericEntity;
|
||||
|
||||
/**
|
||||
* Entity linked list structure.
|
||||
*/
|
||||
typedef struct LinkedList {
|
||||
Entity* last;
|
||||
Entity* first;
|
||||
} LinkedList;
|
||||
|
||||
extern LinkedList gEntityLists[9];
|
||||
extern LinkedList gUnk_03003D90;
|
||||
typedef void(EntityAction)(Entity*);
|
||||
typedef void (*EntityActionPtr)(Entity*);
|
||||
typedef void (*const* EntityActionArray)(Entity*);
|
||||
|
||||
extern LinkedList gUnk_03003DA0;
|
||||
|
||||
enum {
|
||||
ENT_DID_INIT = 0x1,
|
||||
ENT_SCRIPTED = 0x2,
|
||||
ENT_ASLEEP = 0x10,
|
||||
ENT_20 = 0x20,
|
||||
ENT_COLLIDE = 0x80,
|
||||
};
|
||||
|
||||
#define COLLISION_OFF(entity) ((entity)->flags &= ~ENT_COLLIDE)
|
||||
#define COLLISION_ON(entity) ((entity)->flags |= ENT_COLLIDE)
|
||||
|
||||
#define TILE(x, y) \
|
||||
(((((x) - gRoomControls.roomOriginX) >> 4) & 0x3F) | \
|
||||
((((y) - gRoomControls.roomOriginY) >> 4) & 0x3F) << 6)
|
||||
|
||||
#define COORD_TO_TILE(entity) \
|
||||
TILE((entity)->x.HALF.HI, (entity)->y.HALF.HI)
|
||||
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
|
||||
TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff))
|
||||
|
||||
enum {
|
||||
IdleNorth = 0x0,
|
||||
IdleEast = 0x2,
|
||||
IdleSouth = 0x4,
|
||||
IdleWest = 0x6,
|
||||
};
|
||||
|
||||
enum {
|
||||
DirectionNorth = 0x00,
|
||||
DirectionEast = 0x08,
|
||||
DirectionSouth = 0x10,
|
||||
DirectionWest = 0x18,
|
||||
};
|
||||
|
||||
#define AnimationStateTurnAround(expr) ((expr) ^ 0x4)
|
||||
#define AnimationStateIdle(expr) ((expr) & 0x6)
|
||||
#define AnimationStateWalk(expr) ((expr) & 0xe)
|
||||
|
||||
#define DirectionRound(expr) ((expr) & 0x18)
|
||||
#define DirectionRoundUp(expr) DirectionRound((expr) + 4)
|
||||
#define DirectionIsHorizontal(expr) ((expr) & 0x08)
|
||||
#define DirectionIsVertical(expr) ((expr) & 0x10)
|
||||
#define DirectionTurnAround(expr) ((expr) ^ 0x10)
|
||||
#define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3)
|
||||
#define DirectionFromAnimationState(expr) ((expr) << 3)
|
||||
#define DirectionNormalize(expr) ((expr) & 0x1f)
|
||||
|
||||
#define Direction8Round(expr) ((expr) & 0x1c)
|
||||
#define Direction8RoundUp(expr) Direction8Round((expr) + 2)
|
||||
#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10)
|
||||
#define Direction8ToAnimationState(expr) ((expr) >> 2)
|
||||
#define Direction8FromAnimationState(expr) ((expr) << 2)
|
||||
|
||||
Entity* GetEmptyEntity(void);
|
||||
void DrawEntity(Entity*);
|
||||
Entity* CreateEnemy(u32 id, u32 type);
|
||||
Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
||||
Entity* CreateObject(u32 id, u32 type, u32 type2);
|
||||
Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
||||
Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
||||
/**
|
||||
* Draw an Entity.
|
||||
*
|
||||
* @param entity Entity to be drawn.
|
||||
*/
|
||||
void DrawEntity(Entity* entity);
|
||||
|
||||
void InitializeAnimation(Entity*, u32);
|
||||
void InitAnimationForceUpdate(Entity*, u32);
|
||||
@@ -247,111 +260,273 @@ u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
||||
void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||
void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||
void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
||||
|
||||
u32 GetFacingDirection(Entity*, Entity*);
|
||||
u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
|
||||
|
||||
/**
|
||||
* @brief Delete the entity currently in execution.
|
||||
* Return the direction pointing from one Entity to another.
|
||||
*
|
||||
* @param origin Entity to orient.
|
||||
* @param target Entity to look at.
|
||||
* @return Direction facing target.
|
||||
*/
|
||||
u32 GetFacingDirection(Entity* origin, Entity* target);
|
||||
|
||||
u32 ProcessMovement(Entity*);
|
||||
|
||||
/// @{
|
||||
/**
|
||||
* Allocate a new Entity.
|
||||
*
|
||||
* @return Allocated Entity or NULL if failed.
|
||||
*/
|
||||
Entity* GetEmptyEntity(void);
|
||||
Entity* CreateEnemy(u32 id, u32 type);
|
||||
Entity* CreateNPC(u32 id, u32 type, u32 type2);
|
||||
Entity* CreateObject(u32 id, u32 type, u32 type2);
|
||||
Entity* CreateObjectWithParent(Entity* parent, u32 id, u32 type, u32 type2);
|
||||
Entity* CreateFx(Entity* parent, u32 type, u32 type2);
|
||||
/// @}
|
||||
|
||||
/**
|
||||
* Iteratively execute every Entity. Call once per frame.
|
||||
*/
|
||||
void UpdateEntities(void);
|
||||
|
||||
/**
|
||||
* Iteratively execute every Manager. Call once per frame.
|
||||
*/
|
||||
void UpdateManagers(void);
|
||||
|
||||
/**
|
||||
* Delete a manager.
|
||||
*
|
||||
* @param manager Manager to delete.
|
||||
*/
|
||||
void DeleteManager(void* manager);
|
||||
/**
|
||||
* Delete Manager or Entity.
|
||||
*
|
||||
* @param entity Entity or Manager to be deleted.
|
||||
*/
|
||||
void DeleteEntityAny(Entity* entity);
|
||||
|
||||
/**
|
||||
* Erase all Entity's.
|
||||
*/
|
||||
void EraseAllEntities(void);
|
||||
|
||||
/**
|
||||
* Delete the Entity currently in execution.
|
||||
*
|
||||
* @see UpdateContext
|
||||
*/
|
||||
void DeleteThisEntity(void);
|
||||
|
||||
/**
|
||||
* @brief Delete an entity.
|
||||
* Delete an Entity.
|
||||
*
|
||||
* @param entity Entity to delete.
|
||||
*/
|
||||
void DeleteEntity(Entity*);
|
||||
void DeleteEntity(Entity* entity);
|
||||
|
||||
/**
|
||||
* Add an Entity to the end of a LinkedList.
|
||||
*
|
||||
* @param entity Entity to add.
|
||||
* @param listIndex Target LinkedList.
|
||||
*/
|
||||
void AppendEntityToList(Entity* entity, u32 listIndex);
|
||||
|
||||
/**
|
||||
* Add an Entity to the start of a LinkedList.
|
||||
*
|
||||
* @param entity Entity to add.
|
||||
* @param listIndex Target LinkedList.
|
||||
*/
|
||||
void PrependEntityToList(Entity* entity, u32 listIndex);
|
||||
|
||||
/**
|
||||
* @brief Find an entity for a given kind and ID.
|
||||
* @return Entity* First result or NULL if none found
|
||||
* Find an Entity for a given kind and id, and LinkedList.
|
||||
*
|
||||
* @return Entity* First result or NULL if none found.
|
||||
*/
|
||||
Entity* FindEntityByID(u32 kind, u32 id, u32 listIndex);
|
||||
|
||||
/**
|
||||
* @brief Search all lists for an entity of same kind and id.
|
||||
* @return Entity* First result or NULL if none found
|
||||
* Search all lists for an Entity of same kind and id.
|
||||
*
|
||||
* @return Entity* First result or NULL if none found.
|
||||
*/
|
||||
Entity* DeepFindEntityByID(u32 kind, u32 id);
|
||||
|
||||
/**
|
||||
* @brief Search all lists for entity of same kind and id.
|
||||
* @return bool32 Duplicate was entity found
|
||||
* Search all lists for Entity of same kind and id.
|
||||
*
|
||||
* @return bool32 Duplicate was found.
|
||||
*/
|
||||
bool32 EntityHasDuplicateID(Entity* ent);
|
||||
bool32 EntityHasDuplicateID(Entity* entity);
|
||||
|
||||
/**
|
||||
* @brief Find an entity of same kind and id in list.
|
||||
* @return Entity* First result or NULL if none found
|
||||
* Find an Entity of same kind and id in LinkedList.
|
||||
*
|
||||
* @return Entity* First result or NULL if none found.
|
||||
*/
|
||||
Entity* FindNextDuplicateID(Entity* ent, int listIndex);
|
||||
Entity* FindNextDuplicateID(Entity* entity, int listIndex);
|
||||
|
||||
/**
|
||||
* @brief Find Entity with full identifiers.
|
||||
* @return Entity* First result or NULL if none found
|
||||
* Find an Entity with full identifiers.
|
||||
*
|
||||
* @return Entity* First result or NULL if none found.
|
||||
*/
|
||||
Entity* FindEntity(u32 kind, u32 id, u32 listIndex, u32 type, u32 type2);
|
||||
|
||||
void DeleteManager(void*);
|
||||
void DeleteEntityAny(Entity* ent);
|
||||
|
||||
void UpdateEntities(void);
|
||||
void UpdateManagers(void);
|
||||
|
||||
void EraseAllEntities(void);
|
||||
|
||||
enum {
|
||||
PRIO_MIN = 0,
|
||||
PRIO_PLAYER = 1,
|
||||
PRIO_MESSAGE = 2, /* do not block during message */
|
||||
PRIO_NO_BLOCK = 3, /* do not block during entity requested priority */
|
||||
PRIO_PLAYER_EVENT = 6, /* do not block during special player event */
|
||||
PRIO_HIGHEST = 7, /* do not block EVER */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Set the default priority for entity.
|
||||
* Set the default priority for entity.
|
||||
*
|
||||
* @param entity Entity to set the priority of.
|
||||
* @param prio #Priority level.
|
||||
*/
|
||||
void SetDefaultPriority(Entity* ent, u32 prio);
|
||||
void SetDefaultPriority(Entity* entity, u32 prio);
|
||||
|
||||
/**
|
||||
* @brief Check if entity should sleep this frame (according to priority).
|
||||
* Check if entity will be deleted next frame.
|
||||
*/
|
||||
bool32 CheckDontUpdate(Entity* this);
|
||||
bool32 EntityIsDeleted(Entity* entity);
|
||||
|
||||
/**
|
||||
* @brief Check if system or entity is blocking updates.
|
||||
* Check if system or entity is blocking updates.
|
||||
*/
|
||||
bool32 AnyPrioritySet(void);
|
||||
|
||||
|
||||
/// Entity Priority: Update blocking events requested by an entity.
|
||||
|
||||
/**
|
||||
* Set the minimum Entity priority.
|
||||
*
|
||||
* @param prio Minimum #Priority.
|
||||
* @return Success.
|
||||
*/
|
||||
s32 SetMinPriority(u32 prio);
|
||||
|
||||
void RequestPriority(Entity* this);
|
||||
void RevokePriority(Entity* e);
|
||||
/**
|
||||
* Request indefinite priority for an Entity.
|
||||
*
|
||||
* @param entity Entity requesting priority.
|
||||
*/
|
||||
void RequestPriority(Entity* entity);
|
||||
|
||||
void RequestPriorityDuration(Entity* this, u32 time);
|
||||
/**
|
||||
* Revoke priority from an Entity.
|
||||
*
|
||||
* @param entity Entity which requested priority.
|
||||
*/
|
||||
void RevokePriority(Entity* entity);
|
||||
|
||||
/**
|
||||
* Request update priority over other Entity's for a period of time.
|
||||
*
|
||||
* @param entity Entity requesting priority.
|
||||
* @param time Number of frames.
|
||||
*/
|
||||
void RequestPriorityDuration(Entity* entity, u32 time);
|
||||
|
||||
/**
|
||||
* Set the remaining frames of Entity priority.
|
||||
*
|
||||
* @param time Number of frames.
|
||||
*/
|
||||
void SetPriorityTimer(u32 time);
|
||||
|
||||
void RequestPriorityOverPlayer(Entity* this);
|
||||
void RevokePriorityOverPlayer(Entity* this);
|
||||
/**
|
||||
* Request priority over player update.
|
||||
*
|
||||
* @param entity Entity requesting priority.
|
||||
*/
|
||||
void RequestPriorityOverPlayer(Entity* entity);
|
||||
|
||||
/**
|
||||
* Revoke priority over player update.
|
||||
*
|
||||
* @param entity Entity which requested priority.
|
||||
*/
|
||||
void RevokePriorityOverPlayer(Entity* entity);
|
||||
|
||||
/**
|
||||
* Reset a priority event requested by an Entity.
|
||||
*/
|
||||
void ResetEntityPriority(void);
|
||||
|
||||
|
||||
/// System Priority: Update blocking events sent by the engine.
|
||||
|
||||
/**
|
||||
* Set entity and system priority to #PRIO_PLAYER_EVENT.
|
||||
*/
|
||||
void SetPlayerEventPriority(void);
|
||||
|
||||
/**
|
||||
* Reset entity and system priority to defaults.
|
||||
*/
|
||||
void ResetPlayerEventPriority(void);
|
||||
|
||||
/**
|
||||
* Set system priority to #PRIO_PLAYER_EVENT.
|
||||
*/
|
||||
void SetRoomReloadPriority(void);
|
||||
|
||||
/**
|
||||
* Set system priority to #PRIO_HIGHEST.
|
||||
*/
|
||||
void SetInitializationPriority(void);
|
||||
|
||||
/**
|
||||
* Reset the system update priority.
|
||||
*/
|
||||
void ResetSystemPriority(void);
|
||||
|
||||
/**
|
||||
* LinkedList's which point to allocate Entities.
|
||||
* These work together with Entity.prev and Entity.next fields
|
||||
* to allow the iteration of all Entity's.
|
||||
*/
|
||||
extern LinkedList gEntityLists[9];
|
||||
|
||||
/**
|
||||
* Current number of entities.
|
||||
* @see Entity
|
||||
*/
|
||||
extern u8 gEntCount;
|
||||
/**
|
||||
* Current number of managers.
|
||||
* @see Manager
|
||||
*/
|
||||
extern u8 gManagerCount;
|
||||
|
||||
#endif
|
||||
#define COLLISION_OFF(entity) ((entity)->flags &= ~ENT_COLLIDE)
|
||||
#define COLLISION_ON(entity) ((entity)->flags |= ENT_COLLIDE)
|
||||
|
||||
/** @name Tile Macros */ /// @{
|
||||
#define TILE(x, y) (((((x)-gRoomControls.origin_x) >> 4) & 0x3F) | ((((y)-gRoomControls.origin_y) >> 4) & 0x3F) << 6)
|
||||
#define COORD_TO_TILE(entity) TILE((entity)->x.HALF.HI, (entity)->y.HALF.HI)
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) TILE((entity)->x.HALF.HI - (xOff), (entity)->y.HALF.HI - (yOff))
|
||||
/// @}
|
||||
|
||||
/** @name Animation State Macros */ ///@{
|
||||
#define AnimationStateTurnAround(expr) ((expr) ^ 0x4)
|
||||
#define AnimationStateIdle(expr) ((expr)&0x6)
|
||||
#define AnimationStateWalk(expr) ((expr)&0xe)
|
||||
///@}
|
||||
|
||||
/** @name Direction Macros */ ///@{
|
||||
#define DirectionRound(expr) ((expr)&0x18)
|
||||
#define DirectionRoundUp(expr) DirectionRound((expr) + 4)
|
||||
#define DirectionIsHorizontal(expr) ((expr) & 0x08)
|
||||
#define DirectionIsVertical(expr) ((expr) & 0x10)
|
||||
#define DirectionTurnAround(expr) ((expr) ^ 0x10)
|
||||
#define DirectionToAnimationState(expr) (DirectionRoundUp(expr) >> 3)
|
||||
#define DirectionFromAnimationState(expr) ((expr) << 3)
|
||||
#define DirectionNormalize(expr) ((expr) & 0x1f)
|
||||
#define Direction8Round(expr) ((expr) & 0x1c)
|
||||
#define Direction8RoundUp(expr) Direction8Round((expr) + 2)
|
||||
#define Direction8TurnAround(expr) (Direction8RoundUp(expr) ^ 0x10)
|
||||
#define Direction8ToAnimationState(expr) ((expr) >> 2)
|
||||
#define Direction8FromAnimationState(expr) ((expr) << 2)
|
||||
///@}
|
||||
|
||||
#endif // ENTITY_H
|
||||
// clang-format on
|
||||
|
||||
+83
-6
@@ -3,16 +3,93 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
void SetBrightness(u32 arg0);
|
||||
void DoFade(u32 type, u32 speed);
|
||||
/**
|
||||
* @struct FadeControl
|
||||
* @brief Controls screen fading effects.
|
||||
* @see gFadeControl
|
||||
*/
|
||||
typedef struct {
|
||||
bool8 active; /**< Currently fading. */
|
||||
u8 unused1;
|
||||
u8 color;
|
||||
u8 unused2;
|
||||
u32 mask; /**< Fade palette mask.
|
||||
* LSB = foreground, MSB = background. */
|
||||
u16 type;
|
||||
u16 speed;
|
||||
u16 progress;
|
||||
u16 sustain; /**< Fade progress to sustain. */
|
||||
s16 iris_size;
|
||||
s16 iris_x;
|
||||
s16 iris_y;
|
||||
u16 win_inside_cnt;
|
||||
u16 win_outside_cnt;
|
||||
} FadeControl;
|
||||
extern FadeControl gFadeControl; /**< FadeControl instance. */
|
||||
|
||||
void sub_08050008(void);
|
||||
void sub_08050038(u32);
|
||||
void sub_080500F4(u32 arg0);
|
||||
void sub_08050110(u32 param_1, u32 param_2, u32 fadeType, u32 fadeSpeed);
|
||||
/** Set game brightness.
|
||||
* @param brightness brightness level, 0-2
|
||||
*/
|
||||
void SetBrightness(u32 brightness);
|
||||
|
||||
/**
|
||||
* Start a fade effect.
|
||||
*
|
||||
* @param type Fade type. The following flags are supported:
|
||||
* 0x1 | 0x2 | 0x4 | 0x8 | 0x10
|
||||
* :-------|:------------|:--------|:-------|:-------------------------
|
||||
* in/out | black/white | instant | mosaic | iris fade
|
||||
* @param speed Effect speed, lower is slower. Negative values trigger an acid-like experience.
|
||||
*/
|
||||
void SetFade(u32 type, u32 speed);
|
||||
|
||||
/**
|
||||
* Perform the last fade effect in reverse.
|
||||
*
|
||||
* @param speed Fade speed.
|
||||
*/
|
||||
void SetFadeInverted(u32 speed);
|
||||
|
||||
/**
|
||||
* Peform an iris fade.
|
||||
*
|
||||
* @param x Screen x coordinate.
|
||||
* @param y Screen y coordinate.
|
||||
* @param type Fade type.
|
||||
* @param speed Fade speed.
|
||||
*/
|
||||
void SetFadeIris(u32 x, u32 y, u32 type, u32 speed);
|
||||
|
||||
/**
|
||||
* Set the fade progress.
|
||||
*
|
||||
* When used on a fade in effect, this will set the progress of the fade.
|
||||
* When used on a fade out effect, progress will be sustained at the value.
|
||||
*
|
||||
* @param progress Progress value. 0-256.
|
||||
*/
|
||||
void SetFadeProgress(u32 progress);
|
||||
|
||||
/**
|
||||
* Initialize the fade system.
|
||||
*
|
||||
* This will misbehave if called while a fade is active.
|
||||
*/
|
||||
void InitFade(void);
|
||||
|
||||
/**
|
||||
* Entry point for the fade system.
|
||||
*/
|
||||
void FadeMain(void);
|
||||
|
||||
/**
|
||||
* Fade VBlank entry point.
|
||||
*/
|
||||
void FadeVBlank(void);
|
||||
|
||||
/**
|
||||
* Reset the fade palette mask.
|
||||
*/
|
||||
void ResetFadeMask(void);
|
||||
|
||||
#endif // FADE_H
|
||||
|
||||
@@ -1,16 +1,22 @@
|
||||
#ifndef FILESELECT_H
|
||||
#define FILESELECT_H
|
||||
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
#include "global.h"
|
||||
#include "save.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x5];
|
||||
u8 unk_0x0;
|
||||
u8 filler0[0x4];
|
||||
u8 state;
|
||||
u8 subState;
|
||||
u16 timer;
|
||||
u8 fillerA[0x26];
|
||||
u8 fillerA[0x5];
|
||||
s16 unk_0x10;
|
||||
u16 unk_0x12;
|
||||
u8 fillerB[0xC];
|
||||
u8 unk_0x20;
|
||||
u8 fillerC[0xF];
|
||||
} ChooseFileState;
|
||||
static_assert(sizeof(ChooseFileState) == 0x30);
|
||||
|
||||
@@ -57,13 +63,14 @@ extern struct_02019EE0 gUnk_02019EE0;
|
||||
extern void sub_08056FEC(u32, struct_020227E8*);
|
||||
extern void sub_0805F46C(u32, void*);
|
||||
extern void RecoverUI(u32 bottomPt, u32 topPt);
|
||||
extern void sub_08080668(void);
|
||||
extern void ClearTilemaps(void);
|
||||
extern void sub_0805194C(u32);
|
||||
extern struct_02036540* sub_0805F2C8(void);
|
||||
extern void sub_0805F7DC(u32, struct_02036540*);
|
||||
extern void sub_0805F300(struct_02036540*);
|
||||
extern void sub_08050A64(u32);
|
||||
extern void sub_08050AFC(u32);
|
||||
extern void sub_08050384();
|
||||
|
||||
extern const struct_080FC844 gUnk_080FC844;
|
||||
extern const u16 gUnk_080FC85C[][3];
|
||||
@@ -72,7 +79,6 @@ extern const u8 gGlobalGfxAndPalettes[];
|
||||
extern void (*const gUnk_080FC93C[])();
|
||||
extern u32 gUsedPalettes;
|
||||
extern u8 gTextGfxBuffer[];
|
||||
extern u8 gUnk_02001B40;
|
||||
extern u8 gUnk_02022030;
|
||||
|
||||
#endif
|
||||
+4
-4
@@ -25,10 +25,10 @@ void SetLocalFlag(u32);
|
||||
void SetLocalFlagByBank(u32, u32);
|
||||
void SetRoomFlag(u32);
|
||||
|
||||
extern u32 ReadBit(u32*, u32);
|
||||
extern u32 CheckBits(u32*, u32, u32);
|
||||
extern void WriteBit(u32*, u32);
|
||||
extern void ClearBit(u32*, u32);
|
||||
extern u32 ReadBit(void*, u32);
|
||||
extern u32 CheckBits(void*, u32, u32);
|
||||
extern u32 WriteBit(void*, u32);
|
||||
extern u32 ClearBit(void*, u32);
|
||||
|
||||
extern u32 gGlobalFlags;
|
||||
extern u32 gRoomFlags;
|
||||
|
||||
+5
-104
@@ -12,53 +12,21 @@
|
||||
#include "script.h"
|
||||
|
||||
// Identified - to be sorted into header files
|
||||
extern u32 CheckKinstoneFused(u32);
|
||||
extern void ForceEquipItem(u32, u32);
|
||||
extern void LoadRoomEntityList(EntityData* listPtr);
|
||||
extern void SetChildOffset(Entity*, s32, s32, s32);
|
||||
extern Entity* CreatePlayerItem(u32, u32, u32, u32);
|
||||
extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer);
|
||||
extern u32 GetTileType(u32 pos, u32 layer);
|
||||
extern void SetTile(u32, u32, u32);
|
||||
extern void SetDirtTile(u32);
|
||||
extern Entity* CreateDeathFx(Entity*, u32, u32);
|
||||
extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
|
||||
extern bool32 LoadFixedGFX(Entity*, u32);
|
||||
extern void CreateItemEntity(u32, u32, u32);
|
||||
extern u32 ProcessMovement(Entity*);
|
||||
extern void MenuFadeIn(u32, u32);
|
||||
extern void LoadResourceAsync(const void*, u32, u32);
|
||||
extern void LoadPaletteGroup(u32);
|
||||
extern void TryLoadPrologueHyruleTown(void);
|
||||
extern void LoadGfxGroup(u32);
|
||||
extern void ResetPlayer(void);
|
||||
extern u32 IsItemEquipped(u32);
|
||||
extern bool32 CheckPlayerInRegion(u32 centerX, u32 centerY, u32 radiusX, u32 radiusY);
|
||||
extern Entity* CreateProjectileWithParent(Entity*, u8, u8);
|
||||
extern u32 GetTileTypeByEntity(Entity*);
|
||||
extern u32 GetSaleItemConfirmMessageID(u32);
|
||||
extern void FlushSprites(void);
|
||||
extern Entity* CreateProjectile(u32);
|
||||
extern void RegisterPlayerHitbox();
|
||||
extern s32 GetItemPrice();
|
||||
extern void DoExitTransition(const ScreenTransitionData*);
|
||||
extern void CreateDustAt(s32, s32, u32);
|
||||
extern void PutItemOnSlot(u32 itemID);
|
||||
extern Entity* CreateSpeechBubbleQuestionMark(Entity*, s32, s32);
|
||||
extern Entity* CreateSpeechBubbleExclamationMark(Entity*, s32, s32);
|
||||
extern Entity* CreateSpeechBubbleSleep(Entity*, s32, s32);
|
||||
|
||||
// Unidentified
|
||||
extern void sub_080791D0();
|
||||
extern void sub_0805EC9C();
|
||||
extern void sub_0805EC60(Entity*);
|
||||
extern void sub_0806D0B0(Entity*);
|
||||
extern void sub_0806D02C(Entity*);
|
||||
extern void ChangeObjPalette(Entity*, u32);
|
||||
extern void sub_0806FD3C(Entity*);
|
||||
extern void sub_0805ED14(u32*);
|
||||
extern void sub_080A7C18(u32, u32, u32);
|
||||
extern void sub_0804AA30(Entity*, void (*const funcs[])());
|
||||
extern void sub_0804AA30(Entity*, void (*const[])());
|
||||
extern void sub_0804A720(Entity*);
|
||||
extern u32 sub_080AEFE0(Entity*);
|
||||
extern u32 sub_08049FA0(Entity*);
|
||||
@@ -72,8 +40,8 @@ extern void sub_08077F50(ItemBehavior* beh, u32 arg1);
|
||||
extern void sub_0807AA80(Entity*);
|
||||
extern s32 sub_0807887C(Entity*, u32, u32);
|
||||
extern s32 sub_08078904();
|
||||
extern void sub_080AD9B0(void);
|
||||
extern void sub_080AD918(void);
|
||||
extern void DrawEntities(void);
|
||||
extern void CopyOAM(void);
|
||||
extern void sub_0801E104(void);
|
||||
extern void sub_080A57F4(void);
|
||||
extern void sub_08030118(u32);
|
||||
@@ -89,121 +57,58 @@ extern void sub_08059278(void);
|
||||
extern void sub_0804C128(u32);
|
||||
extern void sub_08058324(u32);
|
||||
extern void sub_0801AFE4(void);
|
||||
extern u32 sub_08060354(void);
|
||||
extern void sub_08057E64(void);
|
||||
extern void sub_0809F814(u32);
|
||||
extern void sub_080300E8(void);
|
||||
extern void sub_08058D34(void);
|
||||
extern void sub_0807AABC(Entity*);
|
||||
extern void sub_0805B4D0(u32);
|
||||
extern void sub_0804D0B4(void);
|
||||
extern void sub_080534AC();
|
||||
extern void sub_0807BA8C(u32, u32);
|
||||
extern void sub_0804D9B0();
|
||||
extern void sub_0807BB98(u32, u32, u32, u32);
|
||||
extern void sub_0801D000(u32);
|
||||
extern void sub_08018C58(u32);
|
||||
extern void sub_080AF284(void);
|
||||
extern void sub_080A71C4(u32, u32, u32, u32);
|
||||
extern void sub_08054564();
|
||||
extern void sub_0801DD58(u32, u32);
|
||||
extern void sub_0804ED18();
|
||||
extern void sub_080AF2E4(void);
|
||||
extern void sub_0804F578(void);
|
||||
extern void sub_08059994(void);
|
||||
extern s32 sub_0801CFA8(u32);
|
||||
extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4
|
||||
extern void sub_0801E1B8(u32, u32);
|
||||
extern void sub_0801E1EC(s32, s32, s32);
|
||||
extern void sub_080A3B74(void);
|
||||
extern void sub_080A4054(void);
|
||||
extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4
|
||||
extern void sub_0801C1D4(void);
|
||||
extern void sub_0801C208(void);
|
||||
extern void sub_080A4D34(void);
|
||||
extern u32 sub_080A4494(void);
|
||||
extern void sub_080A4528(void);
|
||||
extern void sub_080A4398(void);
|
||||
extern void sub_0801E738(u32);
|
||||
extern void sub_080A7114(u32);
|
||||
extern void DrawOAMCmd(void);
|
||||
extern u32 sub_0807953C(void);
|
||||
extern void sub_080AE068(Entity*);
|
||||
extern u32 sub_0800445C(Entity*);
|
||||
extern void sub_0807A108(void);
|
||||
extern u32 sub_0801766C(Entity*);
|
||||
extern void sub_08004168(Entity*);
|
||||
extern void sub_08056208(void);
|
||||
extern void sub_08050384();
|
||||
extern u32 sub_0806F520();
|
||||
extern void sub_0806F4E8(Entity*);
|
||||
extern void sub_0804A7D4(Entity*);
|
||||
extern void sub_08033744(Entity*);
|
||||
extern void sub_0800417E(Entity*, u32);
|
||||
extern void sub_080784C8();
|
||||
extern u32 sub_0808288C(Entity*, u32, u32, u32);
|
||||
extern void sub_0806FDA0(Entity*);
|
||||
extern bool32 LoadSwapGFX(Entity*, u16, u32);
|
||||
extern u32 sub_08016A30(Entity*);
|
||||
extern void sub_08077728();
|
||||
extern void sub_0807AEE4();
|
||||
extern u32 sub_08078EFC();
|
||||
extern void sub_0807921C();
|
||||
extern void UpdateFloorType();
|
||||
extern void sub_08079938();
|
||||
extern void sub_0807ACCC(Entity*);
|
||||
extern void sub_080A2BE4(Entity*, u32);
|
||||
extern u32 sub_08097ADC(Entity*);
|
||||
extern u32 sub_08079F8C(void);
|
||||
extern void sub_080787CC(Entity*);
|
||||
extern u32 sub_080044EC(Entity*, u32);
|
||||
extern u32 sub_080002B8(Entity*);
|
||||
extern u32 sub_08049F84(Entity*, u32);
|
||||
extern void sub_0802F45C(Entity*);
|
||||
extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
|
||||
extern void sub_08004542(Entity*);
|
||||
extern void sub_08077B20();
|
||||
extern bool32 sub_080040A8(Entity*);
|
||||
extern u32 sub_08017850(Entity*);
|
||||
extern void sub_080809D4(void);
|
||||
extern void sub_08080CB4(Entity*);
|
||||
extern u32 sub_0800442E(Entity*);
|
||||
extern void sub_08081404(Entity*, u32);
|
||||
extern void sub_0807B7D8(u32, u32, u32);
|
||||
extern void sub_0800451C(Entity*);
|
||||
extern u32 sub_080002F0(u32, u32, u32);
|
||||
extern u32 sub_080040D8(Entity*, u8*, s32, s32);
|
||||
extern void sub_08053320();
|
||||
extern void SetColor(u32, u32);
|
||||
extern u32 sub_0805F8F8(u32);
|
||||
extern void sub_08002724(void*, u8*);
|
||||
extern void sub_080026C4(u8*, u8*, u8*, u32);
|
||||
extern void sub_080026F2(u8*, void*, u8*, u32);
|
||||
extern u32 sub_0805F7A0(u32);
|
||||
extern u32* sub_0805F25C(u32);
|
||||
u32 sub_0806FCB8(Entity*, u32, u32, u32);
|
||||
extern void sub_0806F62C(Entity*, u32, u32);
|
||||
extern void sub_080A1ED0(u32, u32, u32);
|
||||
extern u32 sub_0806F5B0(u32);
|
||||
extern void sub_0801DFB4(Entity*, u32, u32, u32);
|
||||
extern void sub_0801E00C();
|
||||
extern void sub_08078790(Entity*, u32);
|
||||
extern void sub_080788E0(Entity*);
|
||||
extern void CreateEzloHint(u32, u32);
|
||||
extern void sub_08078B48(void);
|
||||
extern void sub_0807919C();
|
||||
extern void sub_0807CAA0(u32, u32);
|
||||
extern void sub_080085B0(Entity*);
|
||||
extern u32 sub_08079D48();
|
||||
extern u32 sub_08008B22();
|
||||
extern void sub_080791BC9();
|
||||
extern void sub_080791BC();
|
||||
extern void MessageClose();
|
||||
extern u32 sub_080542AC(u32);
|
||||
extern u32 sub_08079FC4(u32);
|
||||
extern void sub_0800455E(Entity*);
|
||||
extern u32* sub_08008790(Entity*, u32);
|
||||
extern void sub_0804ACF8();
|
||||
extern void sub_0805F8E4(u32 r0, WStruct* r1);
|
||||
|
||||
extern Entity* sub_08077C94(ItemBehavior*, u32);
|
||||
extern Entity* sub_08077C0C(ItemBehavior*, u32);
|
||||
extern void sub_08077D38(ItemBehavior*, u32);
|
||||
@@ -213,13 +118,9 @@ extern u32 sub_0806F948(Entity*);
|
||||
extern void sub_08077DF4(ItemBehavior*, u32);
|
||||
extern void sub_08077BB8(ItemBehavior*);
|
||||
extern bool32 sub_08077EFC(ItemBehavior*);
|
||||
|
||||
extern void sub_08078E84(Entity*, Entity*);
|
||||
extern void sub_080042D0(Entity*, u32, u16);
|
||||
|
||||
extern u32 sub_080002A8(u32, u32, u32);
|
||||
extern void sub_080806BC(u32, u32, u32, u32);
|
||||
|
||||
extern void LoadObjPalette(Entity*, u32);
|
||||
|
||||
#endif
|
||||
|
||||
+321
@@ -0,0 +1,321 @@
|
||||
#ifndef GAME_H
|
||||
#define GAME_H
|
||||
|
||||
#include "global.h"
|
||||
#include "area.h"
|
||||
|
||||
/**
|
||||
* Change the light level of the room.
|
||||
*
|
||||
* @param level The new light level.
|
||||
*/
|
||||
void ChangeLightLevel(s32 level);
|
||||
|
||||
/**
|
||||
* Set the dislayed popup state
|
||||
*
|
||||
* @param type The popup type.
|
||||
* @param choice_idx The choice index.
|
||||
*/
|
||||
void SetPopupState(u32 type, u32 choice_idx);
|
||||
|
||||
/**
|
||||
* Check if an area is overworld (not dungeon or inside).
|
||||
*
|
||||
* @param area The area to check.
|
||||
* @return True if the area is overworld.
|
||||
*/
|
||||
bool32 CheckAreaOverworld(u32 area);
|
||||
|
||||
/**
|
||||
* Check if the current area is overworld.
|
||||
*
|
||||
* @return True if the current area is overworld.
|
||||
*/
|
||||
bool32 AreaIsOverworld(void);
|
||||
|
||||
/**
|
||||
* Check if the current area is a dungeon.
|
||||
*
|
||||
* @return True if the current area is a dungeon.
|
||||
*/
|
||||
bool32 AreaIsDungeon(void);
|
||||
|
||||
/**
|
||||
* Check if the current area has enemies.
|
||||
*
|
||||
* @return True if the current area has enemies.
|
||||
*/
|
||||
bool32 AreaHasEnemies(void);
|
||||
|
||||
/**
|
||||
* Check if the current area has no enemies.
|
||||
*
|
||||
* @return True if the current area has no enemies.
|
||||
*/
|
||||
bool32 AreaHasNoEnemies(void);
|
||||
|
||||
/**
|
||||
* Check if the current area has a map
|
||||
*
|
||||
* @return True if the current area has a map.
|
||||
*/
|
||||
bool32 AreaHasMap(void);
|
||||
|
||||
/**
|
||||
* Check if current area has keys.
|
||||
*
|
||||
* @return True if the current area has keys.
|
||||
*/
|
||||
bool32 AreaHasKeys(void);
|
||||
|
||||
#ifndef EU
|
||||
/**
|
||||
* This function was introduced to allow warping from indoor areas (palace of winds).
|
||||
*
|
||||
* @return True if the current area allows warping.
|
||||
*/
|
||||
u32 AreaAllowsWarp(void);
|
||||
|
||||
/**
|
||||
* Related to a music bug?
|
||||
*/
|
||||
void sub_08052878(void);
|
||||
#endif
|
||||
|
||||
void sub_080526F8(s32 a1);
|
||||
|
||||
/**
|
||||
* Check if the current dungeon has a map item.
|
||||
*
|
||||
* @return True if the current dungeon has a map item.
|
||||
*/
|
||||
bool32 HasDungeonMap(void);
|
||||
|
||||
/**
|
||||
* Check if the current dungeon has a compass item.
|
||||
*
|
||||
* @return True if the current dungeon has a compass item.
|
||||
*/
|
||||
bool32 HasDungeonCompass(void);
|
||||
|
||||
/**
|
||||
* Check if the current dungeon has a big key item.
|
||||
*
|
||||
* @return True if the current dungeon has a big key item.
|
||||
*/
|
||||
bool32 HasDungeonBigKey(void);
|
||||
|
||||
/**
|
||||
* Check if the current dungeon has a small key item.
|
||||
*
|
||||
* @return True if the current dungeon has a small key item.
|
||||
*/
|
||||
bool32 HasDungeonSmallKey(void);
|
||||
|
||||
/**
|
||||
* @brief Check if item is a sword.
|
||||
*
|
||||
* @param item The item to check.
|
||||
* @return True if the item is a sword.
|
||||
*/
|
||||
bool32 ItemIsSword(u32 item);
|
||||
|
||||
/**
|
||||
* Check if item is a shield.
|
||||
*
|
||||
* @return True if the item is a shield.
|
||||
*/
|
||||
bool32 ItemIsShield(u32 item);
|
||||
|
||||
/**
|
||||
* @brief Get the index of the bottle containing the specified item.
|
||||
*
|
||||
* @param item The item to check.
|
||||
* @return Bottle index, or 0 if the item is not in a bottle.
|
||||
*/
|
||||
u32 GetBottleContaining(u32 item);
|
||||
|
||||
/**
|
||||
* Put an item in A or B slot.
|
||||
*
|
||||
* @param item The item to put.
|
||||
*/
|
||||
void PutItemOnSlot(u32 item);
|
||||
|
||||
/**
|
||||
* Force equip an item.
|
||||
*
|
||||
* @param item The item to equip.
|
||||
* @param slot The slot to equip the item in.
|
||||
*/
|
||||
void ForceEquipItem(u32 item, u32 slot);
|
||||
|
||||
/**
|
||||
* Get item price.
|
||||
*
|
||||
* @param item The item to get the price of.
|
||||
* @return The price of the item.
|
||||
*/
|
||||
s32 GetItemPrice(u32 item);
|
||||
|
||||
/**
|
||||
* Get the item purchase enquiry message.
|
||||
*
|
||||
* @param item The item to get the message for.
|
||||
* @return The message index.
|
||||
*/
|
||||
u32 GetSaleItemConfirmMessageID(u32 item);
|
||||
|
||||
/**
|
||||
* Automatically load overworld graphics groups.
|
||||
*/
|
||||
void LoadGfxGroups(void);
|
||||
/**
|
||||
* Load an auxiliary room (no player present).
|
||||
*
|
||||
* @param area Area index.
|
||||
* @param room Room index.
|
||||
*/
|
||||
void LoadAuxiliaryRoom(u32 area, u32 room);
|
||||
|
||||
/**
|
||||
* Initialize a loaded room.
|
||||
*/
|
||||
void InitRoom(void);
|
||||
|
||||
/**
|
||||
* Initialize a parachute room.
|
||||
*/
|
||||
void InitParachuteRoom(void);
|
||||
|
||||
/**
|
||||
* Register a manager for room changes.
|
||||
*
|
||||
* @param mgr Manager to register.
|
||||
* @param onEnter Room enter callback.
|
||||
* @param onExit Room exit callback.
|
||||
*/
|
||||
void RegisterTransitionManager(void* mgr, void (*onEnter)(void*), void (*onExit)(void*));
|
||||
|
||||
/**
|
||||
* Call the room exit callback.
|
||||
*/
|
||||
void RoomExitCallback(void);
|
||||
|
||||
/**
|
||||
* Restore the game task from a subtask.
|
||||
*
|
||||
* @param a1
|
||||
*/
|
||||
void RestoreGameTask(u32 a1);
|
||||
|
||||
/**
|
||||
* Check if an Ezlo message can be displayed.
|
||||
*
|
||||
* @return True if an Ezlo message can be displayed.
|
||||
*/
|
||||
bool32 CanDispEzloMessage(void);
|
||||
|
||||
/**
|
||||
* Display an Ezlo message.
|
||||
*/
|
||||
void DisplayEzloMessage(void);
|
||||
|
||||
/**
|
||||
* Set the player's world map position.
|
||||
*
|
||||
* @param area Area index.
|
||||
* @param room Room index.
|
||||
* @param x X position.
|
||||
* @param y Y position.
|
||||
*/
|
||||
void SetWorldMapPos(u32 area, u32 room, u32 x, u32 y);
|
||||
|
||||
/**
|
||||
* Set the player's dungeon map position.
|
||||
*
|
||||
* @param area Area index.
|
||||
* @param room Room index.
|
||||
* @param x X position.
|
||||
* @param y Y position.
|
||||
*/
|
||||
void SetDungeonMapPos(u32 area, u32 room, u32 x, u32 y);
|
||||
|
||||
/**
|
||||
* Get flag bank offset for area
|
||||
*
|
||||
* @param idx Area index.
|
||||
* @return Flag bank offset.
|
||||
*/
|
||||
u32 GetFlagBankOffset(u32 idx);
|
||||
|
||||
/**
|
||||
* Retrieve information about the current room.
|
||||
*
|
||||
* @return RoomResInfo object.
|
||||
*/
|
||||
RoomResInfo* GetCurrentRoomInfo(void);
|
||||
|
||||
void sub_08052EA0(void);
|
||||
void sub_08053250(void);
|
||||
void sub_080533CC(void);
|
||||
|
||||
void sub_08053494(void);
|
||||
void sub_080534AC(void);
|
||||
void InitBiggoronTimer(void);
|
||||
|
||||
/** Game tasks states */
|
||||
typedef enum {
|
||||
GAMETASK_TRANSITION, /* transition from fileselect task */
|
||||
GAMETASK_INIT,
|
||||
GAMETASK_MAIN,
|
||||
GAMETASK_EXIT, /* gameover task or reset */
|
||||
} EGameTaskState;
|
||||
|
||||
/** game task main substates */
|
||||
typedef enum {
|
||||
GAMEMAIN_INITROOM,
|
||||
GAMEMAIN_CHANGEROOM,
|
||||
GAMEMAIN_UPDATE,
|
||||
GAMEMAIN_CHANGEAREA,
|
||||
GAMEMAIN_MINISHPORTAL, /* moments after viewing portal cutscene */
|
||||
GAMEMAIN_BARRELUPDATE, /* barrel in deepwood shrine */
|
||||
GAMEMAIN_RESERVED,
|
||||
GAMEMAIN_SUBTASK,
|
||||
} EGameMainState;
|
||||
|
||||
/** Subtasks override the game task for short periods */
|
||||
typedef enum {
|
||||
SUBTASK_EXIT,
|
||||
SUBTASK_PAUSEMENU,
|
||||
SUBTASK_EXIT2,
|
||||
SUBTASK_MAPHINT,
|
||||
SUBTASK_KINSTONEMENU,
|
||||
SUBTASK_AUXCUTSCENE, /* cutscene without presence of player */
|
||||
SUBTASK_PORTALCUTSCENE, /* player "falling" down portal cutscene */
|
||||
SUBTASK_FIGURINEMENU,
|
||||
SUBTASK_WORLDEVENT,
|
||||
SUBTASK_FASTTRAVEL,
|
||||
SUBTASK_LOCALMAPHINT,
|
||||
} ESubtask;
|
||||
|
||||
typedef void(Subtask)(void);
|
||||
|
||||
/** @name Subtask entrypoints */
|
||||
///@{
|
||||
/** Subtask entrypoint. */
|
||||
Subtask Subtask_Exit;
|
||||
Subtask Subtask_PauseMenu;
|
||||
Subtask Subtask_Exit;
|
||||
Subtask Subtask_MapHint;
|
||||
Subtask Subtask_KinstoneMenu;
|
||||
Subtask Subtask_AuxCutscene;
|
||||
Subtask Subtask_PortalCutscene;
|
||||
Subtask Subtask_FigurineMenu;
|
||||
Subtask Subtask_WorldEvent;
|
||||
Subtask Subtask_FastTravel;
|
||||
Subtask Subtask_LocalMapHint;
|
||||
///@}
|
||||
|
||||
#endif // GAME_H
|
||||
@@ -1,6 +1,24 @@
|
||||
#ifndef GUARD_GLOBAL_H
|
||||
#define GUARD_GLOBAL_H
|
||||
|
||||
/**
|
||||
* @defgroup Tasks Tasks
|
||||
* @defgroup Subtasks Subtasks
|
||||
*/
|
||||
|
||||
/** @defgroup Entities Entities */
|
||||
///@{
|
||||
/**
|
||||
* @defgroup Player Player
|
||||
* @defgroup Enemies Enemies
|
||||
* @defgroup Projectiles Projectiles
|
||||
* @defgroup Objects Objects
|
||||
* @defgroup NPCs NPCs
|
||||
* @defgroup Items Items
|
||||
* @defgroup Managers Managers
|
||||
*/
|
||||
///@}
|
||||
|
||||
#include "gba/gba.h"
|
||||
#include <string.h>
|
||||
|
||||
@@ -101,4 +119,7 @@ union SplitHWord {
|
||||
|
||||
#define FORCE_WORD_ALIGNED __attribute__((packed, aligned(2)))
|
||||
|
||||
/* forward decls */
|
||||
struct Entity_;
|
||||
|
||||
#endif // GUARD_GLOBAL_H
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
|
||||
void CreateItemEntity(u32, u32, u32);
|
||||
void sub_08081404(Entity*, u32);
|
||||
|
||||
extern void ItemDebug(ItemBehavior*, u32);
|
||||
extern void ItemSword(ItemBehavior*, u32);
|
||||
extern void ItemBomb(ItemBehavior*, u32);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef KINSTONE_H
|
||||
#define KINSTONE_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
extern void sub_08018C58(u32);
|
||||
|
||||
typedef struct {
|
||||
u8 unk[4];
|
||||
u32 unk2;
|
||||
u32 unk4;
|
||||
} Unk_struct;
|
||||
extern Unk_struct gUnk_03003DF0[];
|
||||
|
||||
typedef struct {
|
||||
u8 _0;
|
||||
u8 action;
|
||||
u8 _2;
|
||||
u8 _3;
|
||||
u8 _4;
|
||||
u8 _5;
|
||||
u16 _6;
|
||||
u16 _8;
|
||||
u16 _a;
|
||||
Entity* ent;
|
||||
} FuseInfo;
|
||||
static_assert(sizeof(FuseInfo) == 0x10);
|
||||
extern FuseInfo gFuseInfo;
|
||||
|
||||
#endif // KINSTONE_H
|
||||
+78
-46
@@ -3,25 +3,16 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
/** File signature */
|
||||
#define SIGNATURE 'MCZ3'
|
||||
/** Maximum message speed. */
|
||||
#define MAX_MSG_SPEED 3
|
||||
/** Number of save slots */
|
||||
#define NUM_SAVE_SLOTS 3
|
||||
/** Maximum brightness. */
|
||||
#define MAX_BRIGHTNESS 3
|
||||
|
||||
typedef struct { // 0x03001000
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u8 field_0x4;
|
||||
u16 field_0x6;
|
||||
u8 field_0x8;
|
||||
u8 field_0x9;
|
||||
u8 field_0xa;
|
||||
u8 field_0xb;
|
||||
u32 spritePriority;
|
||||
} MainStruct;
|
||||
|
||||
/** Supported game languages. */
|
||||
typedef enum {
|
||||
LANGUAGE_JP,
|
||||
LANGUAGE_EN,
|
||||
@@ -38,37 +29,47 @@ typedef enum {
|
||||
#define GAME_LANGUAGE LANGUAGE_JP
|
||||
#endif
|
||||
|
||||
enum {
|
||||
SCREEN_INTRO,
|
||||
SCREEN_CHOOSE_FILE,
|
||||
SCREEN_GAMEPLAY,
|
||||
SCREEN_GAME_OVER,
|
||||
SCREEN_CREDITS,
|
||||
SCREEN_DEBUG_TEXT,
|
||||
};
|
||||
/** Program tasks. */
|
||||
typedef enum {
|
||||
TASK_TITLE, /**< Title task. This is the first task to be entered. */
|
||||
TASK_FILE_SELECT, /**< File selection task. */
|
||||
TASK_GAME, /**< Gameplay task. Overworld, menus, cutscenes are all contained here. */
|
||||
TASK_GAMEOVER, /**< Gameover task. */
|
||||
TASK_STAFFROLL, /**< Staffroll task. Only accessible through the script played during the game ending. */
|
||||
TASK_DEBUG, /**< Debug task. Inaccessible in normal gameplay. */
|
||||
} Task;
|
||||
|
||||
enum {
|
||||
/** System sleep status. */
|
||||
typedef enum {
|
||||
DEFAULT,
|
||||
SLEEP,
|
||||
};
|
||||
} SleepStatus;
|
||||
|
||||
/**
|
||||
* Main system structure.
|
||||
*/
|
||||
typedef struct {
|
||||
vu8 interruptFlag;
|
||||
u8 sleepStatus;
|
||||
u8 screen;
|
||||
u8 funcIndex;
|
||||
u8 transition;
|
||||
u8 task; /**< Current #Task. */
|
||||
u8 state; /**< State of the current #Task. */
|
||||
u8 substate; /**< Substate of the current #Task. */
|
||||
u8 field_0x5;
|
||||
u8 muteAudio;
|
||||
u8 muteAudio; /**< Mute audio. */
|
||||
u8 field_0x7;
|
||||
u8 pauseFrames;
|
||||
u8 pauseCount;
|
||||
u8 pauseInterval;
|
||||
u16 ticks;
|
||||
u8 pauseFrames; /**< Number of frames to pause. */
|
||||
u8 pauseCount; /**< Number of pauses to make. */
|
||||
u8 pauseInterval; /**< Number of frames to play between each pause. */
|
||||
u8 pad;
|
||||
union SplitHWord ticks; /**< Current time. */
|
||||
} Main;
|
||||
|
||||
/**
|
||||
* HUD structure.
|
||||
*/
|
||||
typedef struct {
|
||||
/*0x00*/ u16 nextToLoad;
|
||||
/*0x00*/ u8 nextToLoad;
|
||||
/*0x01*/ u8 _1;
|
||||
/*0x02*/ u8 lastState;
|
||||
/*0x03*/ u8 field_0x3;
|
||||
/*0x04*/ u8 state;
|
||||
@@ -81,31 +82,62 @@ typedef struct {
|
||||
} UI;
|
||||
static_assert(sizeof(UI) == 0x3b4);
|
||||
|
||||
extern Main gMain;
|
||||
extern UI gUnk_02032EC0;
|
||||
extern Main gMain; /**< Main instance. */
|
||||
extern UI gUnk_02032EC0; /**< UI instance. */
|
||||
|
||||
/**
|
||||
* @brief Begin a subroutine.
|
||||
* Program entry point.
|
||||
*/
|
||||
void InitScreen(u32 screen);
|
||||
void AgbMain(void);
|
||||
|
||||
/**
|
||||
* Begin a new task.
|
||||
*
|
||||
* @param task #Task to begin.
|
||||
*/
|
||||
void SetTask(u32 task);
|
||||
|
||||
/**
|
||||
* Initialize the DMA system.
|
||||
*/
|
||||
void InitDMA(void);
|
||||
|
||||
/**
|
||||
* Soft reset the system.
|
||||
*/
|
||||
void DoSoftReset(void);
|
||||
|
||||
/**
|
||||
* Put the system into sleep mode.
|
||||
*/
|
||||
void SetSleepMode(void);
|
||||
|
||||
extern void sub_0805622C(void* a1, u32 a2, u32 a3);
|
||||
extern void sub_08056208(void);
|
||||
extern void ResetPalettes(void);
|
||||
|
||||
extern void DoSoftReset(void);
|
||||
extern void SetSleepMode(void);
|
||||
extern void VBlankIntrWait();
|
||||
extern void FadeMain(void);
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
|
||||
extern void SetBrightness(u32);
|
||||
extern u16 gPaletteBuffer[];
|
||||
extern void VBlankInterruptWait(void);
|
||||
extern void DisableInterruptsAndDMA(void);
|
||||
extern void EnableVBlankIntr(void);
|
||||
extern void sub_08056250(void);
|
||||
extern void sub_08056208(void);
|
||||
|
||||
/** @name Task entrypoints */
|
||||
///@{
|
||||
/** Task entrypoint. */
|
||||
extern void TitleTask(void);
|
||||
extern void FileSelectTask(void);
|
||||
extern void GameTask(void);
|
||||
extern void GameOverTask(void);
|
||||
extern void StaffrollTask(void);
|
||||
extern void DebugTask(void);
|
||||
|
||||
#ifdef DEMO_USA
|
||||
extern void DemoTask(void);
|
||||
#endif
|
||||
/// @}
|
||||
|
||||
extern u8 gUnk_03003DE4;
|
||||
extern u16 gPaletteBuffer[];
|
||||
|
||||
#endif
|
||||
|
||||
+3
-3
@@ -130,10 +130,10 @@ typedef struct Manager11 {
|
||||
|
||||
typedef struct {
|
||||
u16 unk_00;
|
||||
u8 source_roomID;
|
||||
u8 source_room;
|
||||
u8 unk_03;
|
||||
u8 target_areaID;
|
||||
u8 target_roomID;
|
||||
u8 target_area;
|
||||
u8 target_room;
|
||||
u16 unk_06;
|
||||
} DiggingCaveEntrance;
|
||||
|
||||
|
||||
+24
-24
@@ -33,30 +33,30 @@ typedef struct {
|
||||
extern void sub_080A70AC(const KeyButtonLayout*);
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 column_idx;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u8 field_0x4;
|
||||
u8 menuType;
|
||||
u8 overlayType;
|
||||
u8 storyPanelIndex;
|
||||
u16 transitionTimer;
|
||||
u16 field_0xa;
|
||||
u8* field_0xc;
|
||||
u8 focusCoords[2];
|
||||
u8 field_0x12;
|
||||
u8 unk13;
|
||||
u8 unk14;
|
||||
u8 unk15;
|
||||
u8 unk16;
|
||||
// While struct offsets are usually loaded indirectly, this one is often loaded
|
||||
// directly in the code. This happens when you take the address off the field with '&`.
|
||||
// Perhaps they had a macro to cast this to different sized arrays.
|
||||
u8 selectMtx;
|
||||
u8 filler18[0x12];
|
||||
u8 unk2a;
|
||||
int field_0x2c;
|
||||
/*0x00*/ u8 field_0x0;
|
||||
/*0x01*/ u8 column_idx;
|
||||
/*0x02*/ u8 field_0x2;
|
||||
/*0x03*/ u8 field_0x3;
|
||||
/*0x04*/ u8 field_0x4;
|
||||
/*0x05*/ u8 menuType;
|
||||
/*0x06*/ u8 overlayType;
|
||||
/*0x07*/ u8 storyPanelIndex;
|
||||
/*0x08*/ u16 transitionTimer;
|
||||
/*0x0a*/ u16 field_0xa;
|
||||
/*0x0c*/ u8* field_0xc;
|
||||
/*0x10*/ u8 focusCoords[2];
|
||||
/*0x12*/ u8 field_0x12;
|
||||
/*0x13*/ u8 unk13;
|
||||
/*0x14*/ u8 unk14;
|
||||
/*0x15*/ u8 unk15;
|
||||
/*0x16*/ u8 unk16;
|
||||
/* */ // While struct offsets are usually loaded indirectly, this one is often loaded
|
||||
/* */ // directly in the code. This happens when you take the address off the field with '&`.
|
||||
/* */ // Perhaps they had a macro to cast this to different sized arrays.
|
||||
/*0x17*/ u8 selectMtx;
|
||||
/*0x18*/ u8 filler18[0x12];
|
||||
/*0x2a*/ u8 unk2a;
|
||||
/*0x2c*/ int field_0x2c;
|
||||
} Menu;
|
||||
static_assert(sizeof(Menu) == 0x30);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef TEXTBOX_H
|
||||
#define TEXTBOX_H
|
||||
#ifndef MESSAGE_H
|
||||
#define MESSAGE_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
@@ -39,7 +39,7 @@ typedef struct {
|
||||
Message message;
|
||||
Token curToken;
|
||||
WStruct _50;
|
||||
char playerName[10];
|
||||
char player_name[10];
|
||||
u8 _66[0x10];
|
||||
u8 _76;
|
||||
u8 _77[0x11];
|
||||
@@ -126,6 +126,11 @@ void MessageFromTarget(u32 index);
|
||||
*/
|
||||
void MessageAtHeight(u32 index, u32 y);
|
||||
|
||||
void DispMessageFrame(u16*, u32, u32, u32);
|
||||
/**
|
||||
* @brief Close message.
|
||||
*/
|
||||
void MessageClose(void);
|
||||
|
||||
#endif
|
||||
void DispMessageFrame(u16*, s32, s32, u32);
|
||||
|
||||
#endif // MESSAGE_H
|
||||
+163
-163
@@ -3,14 +3,14 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "asm.h"
|
||||
#include "utils.h"
|
||||
#include "common.h"
|
||||
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
#include "effects.h"
|
||||
#include "room.h"
|
||||
#include "flags.h"
|
||||
#include "coord.h"
|
||||
#include "textbox.h"
|
||||
#include "message.h"
|
||||
#include "script.h"
|
||||
#include "save.h"
|
||||
|
||||
@@ -177,166 +177,166 @@ enum NPC {
|
||||
/*0x7f*/ NPC_NONE_39,
|
||||
};
|
||||
|
||||
extern void Gentari(Entity*);
|
||||
extern void Gentari_Fusion(Entity*);
|
||||
extern void Festari(Entity*);
|
||||
extern void Festari_Fusion(Entity*);
|
||||
extern void ForestMinish(Entity*);
|
||||
extern void ForestMinish_Head(Entity*);
|
||||
extern void ForestMinish_Fusion(Entity*);
|
||||
extern void Postman(Entity*);
|
||||
extern void Postman_Fusion(Entity*);
|
||||
extern void NPC5(Entity*);
|
||||
extern void Townsperson(Entity*);
|
||||
extern void Townsperson_Head(Entity*);
|
||||
extern void Townsperson_Fusion(Entity*);
|
||||
extern void Kid(Entity*);
|
||||
extern void Kid_Head(Entity*);
|
||||
extern void Kid_Fusion(Entity*);
|
||||
extern void Guard(Entity*);
|
||||
extern void Guard_Head(Entity*);
|
||||
extern void NPC9(Entity*);
|
||||
extern void Stamp(Entity*);
|
||||
extern void Maid(Entity*);
|
||||
extern void Maid_Head(Entity*);
|
||||
extern void Marcy(Entity*);
|
||||
extern void Wheaton(Entity*);
|
||||
extern void Pita(Entity*);
|
||||
extern void MinishEzlo(Entity*);
|
||||
extern void MinishEzlo_Head(Entity*);
|
||||
extern void Mailbox(Entity*);
|
||||
extern void Beedle(Entity*);
|
||||
extern void Beedle_Head(Entity*);
|
||||
extern void Brocco(Entity*);
|
||||
extern void Brocco_Fusion(Entity*);
|
||||
extern void SittingPerson(Entity*);
|
||||
extern void SittingPerson_Head(Entity*);
|
||||
extern void SittingPerson_Fusion(Entity*);
|
||||
extern void Pina(Entity*);
|
||||
extern void Pina_Fusion(Entity*);
|
||||
extern void Din(Entity*);
|
||||
extern void Din_Fusion(Entity*);
|
||||
extern void Nayru(Entity*);
|
||||
extern void Nayru_Fusion(Entity*);
|
||||
extern void Farore(Entity*);
|
||||
extern void Farore_Fusion(Entity*);
|
||||
extern void Sturgeon(Entity*);
|
||||
extern void Sturgeon_Head(Entity*);
|
||||
extern void Sturgeon_Fusion(Entity*);
|
||||
extern void TingleSiblings(Entity*);
|
||||
extern void TingleSiblings_Fusion(Entity*);
|
||||
extern void Stockwell(Entity*);
|
||||
extern void Talon(Entity*);
|
||||
extern void Talon_Head(Entity*);
|
||||
extern void Talon_Fusion(Entity*);
|
||||
extern void Malon(Entity*);
|
||||
extern void Malon_Fusion(Entity*);
|
||||
extern void Epona(Entity*);
|
||||
extern void Epona_Fusion(Entity*);
|
||||
extern void MilkCart(Entity*);
|
||||
extern void GhostBrothers(Entity*);
|
||||
extern void GhostBrothers_Fusion(Entity*);
|
||||
extern void Smith(Entity*);
|
||||
extern void Smith_Head(Entity*);
|
||||
extern void Smith_Fusion(Entity*);
|
||||
extern void NPC23(Entity*);
|
||||
extern void KingDaltus(Entity*);
|
||||
extern void KingDaltus_Fusion(Entity*);
|
||||
extern void MinisterPotho(Entity*);
|
||||
extern void MinisterPotho_Fusion(Entity*);
|
||||
extern void NPC26(Entity*);
|
||||
extern void Vaati(Entity*);
|
||||
extern void Zelda(Entity*);
|
||||
extern void Mutoh(Entity*);
|
||||
extern void Mutoh_Head(Entity*);
|
||||
extern void Mutoh_Fusion(Entity*);
|
||||
extern void Carpenter(Entity*);
|
||||
extern void Carpenter_Head(Entity*);
|
||||
extern void Carpenter_Fusion(Entity*);
|
||||
extern void CastorWildsStatue(Entity*);
|
||||
extern void CastorWildsStatue_Fusion(Entity*);
|
||||
extern void Cat(Entity*);
|
||||
extern void Cat_Fusion(Entity*);
|
||||
extern void MountainMinish(Entity*);
|
||||
extern void MountainMinish_Head(Entity*);
|
||||
extern void MountainMinish_Fusion(Entity*);
|
||||
extern void ZeldaFollower(Entity*);
|
||||
extern void Melari(Entity*);
|
||||
extern void Melari_Head(Entity*);
|
||||
extern void Melari_Fusion(Entity*);
|
||||
extern void BladeBrothers(Entity*);
|
||||
extern void BladeBrothers_Fusion(Entity*);
|
||||
extern void Cow(Entity*);
|
||||
extern void Cow_Fusion(Entity*);
|
||||
extern void Goron(Entity*);
|
||||
extern void Goron_Fusion(Entity*);
|
||||
extern void GoronMerchant(Entity*);
|
||||
extern void Gorman(Entity*);
|
||||
extern void Gorman_Head(Entity*);
|
||||
extern void Dog(Entity*);
|
||||
extern void Dog_Head(Entity*);
|
||||
extern void Dog_Fusion(Entity*);
|
||||
extern void Syrup(Entity*);
|
||||
extern void Syrup_Head(Entity*);
|
||||
extern void Rem(Entity*);
|
||||
extern void TownMinish(Entity*);
|
||||
extern void TownMinish_Head(Entity*);
|
||||
extern void TownMinish_Fusion(Entity*);
|
||||
extern void Librari(Entity*);
|
||||
extern void Librari_Fusion(Entity*);
|
||||
extern void Percy(Entity*);
|
||||
extern void Percy_Head(Entity*);
|
||||
extern void Percy_Fusion(Entity*);
|
||||
extern void VaatiReborn(Entity*);
|
||||
extern void MoblinLady(Entity*);
|
||||
extern void Librarians(Entity*);
|
||||
extern void Farmers(Entity*);
|
||||
extern void Farmers_Head(Entity*);
|
||||
extern void Farmers_Fusion(Entity*);
|
||||
extern void Carlov(Entity*);
|
||||
extern void Dampe(Entity*);
|
||||
extern void Dampe_Fusion(Entity*);
|
||||
extern void DrLeft(Entity*);
|
||||
extern void KingGustaf(Entity*);
|
||||
extern void Gina(Entity*);
|
||||
extern void Gina_Fusion(Entity*);
|
||||
extern void Simon(Entity*);
|
||||
extern void Anju(Entity*);
|
||||
extern void Anju_Fusion(Entity*);
|
||||
extern void Mama(Entity*);
|
||||
extern void Mama_Head(Entity*);
|
||||
extern void Mama_Fusion(Entity*);
|
||||
extern void Emma(Entity*);
|
||||
extern void Teachers(Entity*);
|
||||
extern void Teachers_Head(Entity*);
|
||||
extern void Teachers_Fusion(Entity*);
|
||||
extern void WindTribespeople(Entity*);
|
||||
extern void WindTribespeople_Head(Entity*);
|
||||
extern void WindTribespeople_Fusion(Entity*);
|
||||
extern void Gregal(Entity*);
|
||||
extern void Gregal_Fusion(Entity*);
|
||||
extern void MayorHagen(Entity*);
|
||||
extern void MayorHagen_Fusion(Entity*);
|
||||
extern void BigGoron(Entity*);
|
||||
extern void Ezlo(Entity*);
|
||||
extern void NPC4E(Entity*);
|
||||
extern void NPC4E_Fusion(Entity*);
|
||||
extern void NPC4F(Entity*);
|
||||
extern void ClothesRack(Entity*);
|
||||
extern void PicolyteBottle(Entity*);
|
||||
extern void SmallTownMinish(Entity*);
|
||||
extern void HurdyGurdyMan(Entity*);
|
||||
extern void HurdyGurdyMan_Head(Entity*);
|
||||
extern void HurdyGurdyMan_Fusion(Entity*);
|
||||
extern void Cucco(Entity*);
|
||||
extern void Cucco_Fusion(Entity*);
|
||||
extern void CuccoChick(Entity*);
|
||||
extern void CuccoChick_Fusion(Entity*);
|
||||
extern void FusionMenuNPC(Entity*);
|
||||
extern void FusionMenuNPC_Head(Entity*);
|
||||
extern void Phonograph(Entity*);
|
||||
extern void NPC58(Entity*);
|
||||
extern void NPC58_Head(Entity*);
|
||||
void Gentari(Entity*);
|
||||
void Gentari_Fusion(Entity*);
|
||||
void Festari(Entity*);
|
||||
void Festari_Fusion(Entity*);
|
||||
void ForestMinish(Entity*);
|
||||
void ForestMinish_Head(Entity*);
|
||||
void ForestMinish_Fusion(Entity*);
|
||||
void Postman(Entity*);
|
||||
void Postman_Fusion(Entity*);
|
||||
void NPC5(Entity*);
|
||||
void Townsperson(Entity*);
|
||||
void Townsperson_Head(Entity*);
|
||||
void Townsperson_Fusion(Entity*);
|
||||
void Kid(Entity*);
|
||||
void Kid_Head(Entity*);
|
||||
void Kid_Fusion(Entity*);
|
||||
void Guard(Entity*);
|
||||
void Guard_Head(Entity*);
|
||||
void NPC9(Entity*);
|
||||
void Stamp(Entity*);
|
||||
void Maid(Entity*);
|
||||
void Maid_Head(Entity*);
|
||||
void Marcy(Entity*);
|
||||
void Wheaton(Entity*);
|
||||
void Pita(Entity*);
|
||||
void MinishEzlo(Entity*);
|
||||
void MinishEzlo_Head(Entity*);
|
||||
void Mailbox(Entity*);
|
||||
void Beedle(Entity*);
|
||||
void Beedle_Head(Entity*);
|
||||
void Brocco(Entity*);
|
||||
void Brocco_Fusion(Entity*);
|
||||
void SittingPerson(Entity*);
|
||||
void SittingPerson_Head(Entity*);
|
||||
void SittingPerson_Fusion(Entity*);
|
||||
void Pina(Entity*);
|
||||
void Pina_Fusion(Entity*);
|
||||
void Din(Entity*);
|
||||
void Din_Fusion(Entity*);
|
||||
void Nayru(Entity*);
|
||||
void Nayru_Fusion(Entity*);
|
||||
void Farore(Entity*);
|
||||
void Farore_Fusion(Entity*);
|
||||
void Sturgeon(Entity*);
|
||||
void Sturgeon_Head(Entity*);
|
||||
void Sturgeon_Fusion(Entity*);
|
||||
void TingleSiblings(Entity*);
|
||||
void TingleSiblings_Fusion(Entity*);
|
||||
void Stockwell(Entity*);
|
||||
void Talon(Entity*);
|
||||
void Talon_Head(Entity*);
|
||||
void Talon_Fusion(Entity*);
|
||||
void Malon(Entity*);
|
||||
void Malon_Fusion(Entity*);
|
||||
void Epona(Entity*);
|
||||
void Epona_Fusion(Entity*);
|
||||
void MilkCart(Entity*);
|
||||
void GhostBrothers(Entity*);
|
||||
void GhostBrothers_Fusion(Entity*);
|
||||
void Smith(Entity*);
|
||||
void Smith_Head(Entity*);
|
||||
void Smith_Fusion(Entity*);
|
||||
void NPC23(Entity*);
|
||||
void KingDaltus(Entity*);
|
||||
void KingDaltus_Fusion(Entity*);
|
||||
void MinisterPotho(Entity*);
|
||||
void MinisterPotho_Fusion(Entity*);
|
||||
void NPC26(Entity*);
|
||||
void Vaati(Entity*);
|
||||
void Zelda(Entity*);
|
||||
void Mutoh(Entity*);
|
||||
void Mutoh_Head(Entity*);
|
||||
void Mutoh_Fusion(Entity*);
|
||||
void Carpenter(Entity*);
|
||||
void Carpenter_Head(Entity*);
|
||||
void Carpenter_Fusion(Entity*);
|
||||
void CastorWildsStatue(Entity*);
|
||||
void CastorWildsStatue_Fusion(Entity*);
|
||||
void Cat(Entity*);
|
||||
void Cat_Fusion(Entity*);
|
||||
void MountainMinish(Entity*);
|
||||
void MountainMinish_Head(Entity*);
|
||||
void MountainMinish_Fusion(Entity*);
|
||||
void ZeldaFollower(Entity*);
|
||||
void Melari(Entity*);
|
||||
void Melari_Head(Entity*);
|
||||
void Melari_Fusion(Entity*);
|
||||
void BladeBrothers(Entity*);
|
||||
void BladeBrothers_Fusion(Entity*);
|
||||
void Cow(Entity*);
|
||||
void Cow_Fusion(Entity*);
|
||||
void Goron(Entity*);
|
||||
void Goron_Fusion(Entity*);
|
||||
void GoronMerchant(Entity*);
|
||||
void Gorman(Entity*);
|
||||
void Gorman_Head(Entity*);
|
||||
void Dog(Entity*);
|
||||
void Dog_Head(Entity*);
|
||||
void Dog_Fusion(Entity*);
|
||||
void Syrup(Entity*);
|
||||
void Syrup_Head(Entity*);
|
||||
void Rem(Entity*);
|
||||
void TownMinish(Entity*);
|
||||
void TownMinish_Head(Entity*);
|
||||
void TownMinish_Fusion(Entity*);
|
||||
void Librari(Entity*);
|
||||
void Librari_Fusion(Entity*);
|
||||
void Percy(Entity*);
|
||||
void Percy_Head(Entity*);
|
||||
void Percy_Fusion(Entity*);
|
||||
void VaatiReborn(Entity*);
|
||||
void MoblinLady(Entity*);
|
||||
void Librarians(Entity*);
|
||||
void Farmers(Entity*);
|
||||
void Farmers_Head(Entity*);
|
||||
void Farmers_Fusion(Entity*);
|
||||
void Carlov(Entity*);
|
||||
void Dampe(Entity*);
|
||||
void Dampe_Fusion(Entity*);
|
||||
void DrLeft(Entity*);
|
||||
void KingGustaf(Entity*);
|
||||
void Gina(Entity*);
|
||||
void Gina_Fusion(Entity*);
|
||||
void Simon(Entity*);
|
||||
void Anju(Entity*);
|
||||
void Anju_Fusion(Entity*);
|
||||
void Mama(Entity*);
|
||||
void Mama_Head(Entity*);
|
||||
void Mama_Fusion(Entity*);
|
||||
void Emma(Entity*);
|
||||
void Teachers(Entity*);
|
||||
void Teachers_Head(Entity*);
|
||||
void Teachers_Fusion(Entity*);
|
||||
void WindTribespeople(Entity*);
|
||||
void WindTribespeople_Head(Entity*);
|
||||
void WindTribespeople_Fusion(Entity*);
|
||||
void Gregal(Entity*);
|
||||
void Gregal_Fusion(Entity*);
|
||||
void MayorHagen(Entity*);
|
||||
void MayorHagen_Fusion(Entity*);
|
||||
void BigGoron(Entity*);
|
||||
void Ezlo(Entity*);
|
||||
void NPC4E(Entity*);
|
||||
void NPC4E_Fusion(Entity*);
|
||||
void NPC4F(Entity*);
|
||||
void ClothesRack(Entity*);
|
||||
void PicolyteBottle(Entity*);
|
||||
void SmallTownMinish(Entity*);
|
||||
void HurdyGurdyMan(Entity*);
|
||||
void HurdyGurdyMan_Head(Entity*);
|
||||
void HurdyGurdyMan_Fusion(Entity*);
|
||||
void Cucco(Entity*);
|
||||
void Cucco_Fusion(Entity*);
|
||||
void CuccoChick(Entity*);
|
||||
void CuccoChick_Fusion(Entity*);
|
||||
void FusionMenuNPC(Entity*);
|
||||
void FusionMenuNPC_Head(Entity*);
|
||||
void Phonograph(Entity*);
|
||||
void NPC58(Entity*);
|
||||
void NPC58_Head(Entity*);
|
||||
|
||||
extern void (*const gNPCFunctions[128][3])(Entity*);
|
||||
|
||||
|
||||
+201
-196
@@ -3,9 +3,9 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "asm.h"
|
||||
#include "utils.h"
|
||||
#include "common.h"
|
||||
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
#include "flags.h"
|
||||
#include "effects.h"
|
||||
#include "room.h"
|
||||
@@ -20,9 +20,14 @@ extern void sub_080787B4(Entity*);
|
||||
extern void sub_0808C650(Entity*, u32);
|
||||
extern u32 sub_0808C67C(void);
|
||||
extern void sub_0808C688(void);
|
||||
extern void sub_080A2BE4(Entity*, u32);
|
||||
|
||||
void CreateDust(Entity* parent);
|
||||
void CreateDustAt(s32, s32, u32);
|
||||
void CreateDustSmall(Entity* parent);
|
||||
Entity* CreateSpeechBubbleQuestionMark(Entity*, s32, s32);
|
||||
Entity* CreateSpeechBubbleExclamationMark(Entity*, s32, s32);
|
||||
Entity* CreateSpeechBubbleSleep(Entity*, s32, s32);
|
||||
|
||||
typedef enum {
|
||||
GROUND_ITEM,
|
||||
@@ -221,200 +226,200 @@ typedef enum {
|
||||
OBJECT_C1,
|
||||
} Object;
|
||||
|
||||
extern void ItemOnGround(Entity*);
|
||||
extern void DeathFx(Entity*);
|
||||
extern void ItemForSale(Entity*);
|
||||
extern void Button(Entity*);
|
||||
extern void MinishEmoticon(Entity*);
|
||||
extern void Pot(Entity*);
|
||||
extern void EzloCap(Entity*);
|
||||
extern void BlockPushed(Entity*);
|
||||
extern void LockedDoor(Entity*);
|
||||
extern void Object9(Entity*);
|
||||
extern void ObjectA(Entity*);
|
||||
extern void ObjectB(Entity*);
|
||||
extern void ChestSpawner(Entity*);
|
||||
extern void ObjectD(Entity*);
|
||||
extern void ObjectE(Entity*);
|
||||
extern void SpecialFx(Entity*);
|
||||
extern void Object10(Entity*);
|
||||
extern void Object11(Entity*);
|
||||
extern void Object12(Entity*);
|
||||
extern void Railtrack(Entity*);
|
||||
extern void LilypadLarge(Entity*);
|
||||
extern void Object15(Entity*);
|
||||
extern void FloatingPlatform(Entity*);
|
||||
extern void Object17(Entity*);
|
||||
extern void EvilSpirit(Entity*);
|
||||
extern void HouseDoorExterior(Entity*);
|
||||
extern void Object1A(Entity*);
|
||||
extern void GreatFairy(Entity*);
|
||||
extern void Object1C(Entity*);
|
||||
extern void Object1D(Entity*);
|
||||
extern void Object1E(Entity*);
|
||||
extern void Object1F(Entity*);
|
||||
extern void Object20(Entity*);
|
||||
extern void Object21(Entity*);
|
||||
extern void FigurineDevice(Entity*);
|
||||
extern void EyeSwitch(Entity*);
|
||||
extern void PressurePlate(Entity*);
|
||||
extern void BigBarrel(Entity*);
|
||||
extern void BarrelInside(Entity*);
|
||||
extern void PushableStatue(Entity*);
|
||||
extern void Object28(Entity*);
|
||||
extern void AmbientClouds(Entity*);
|
||||
extern void Object2A(Entity*);
|
||||
extern void Object2B(Entity*);
|
||||
extern void Beanstalk(Entity*);
|
||||
extern void Smoke(Entity*);
|
||||
extern void PushableRock(Entity*);
|
||||
extern void HittableLever(Entity*);
|
||||
extern void Object30(Entity*);
|
||||
extern void FrozenFlower(Entity*);
|
||||
extern void PullableMushroom(Entity*);
|
||||
extern void Bollard(Entity*);
|
||||
extern void WarpPoint(Entity*);
|
||||
extern void Object35(Entity*);
|
||||
extern void Object36(Entity*);
|
||||
extern void Object37(Entity*);
|
||||
extern void JarPortal(Entity*);
|
||||
extern void BossDoor(Entity*);
|
||||
extern void Object3A(Entity*);
|
||||
extern void MacroMushromStalks(Entity*);
|
||||
extern void MacroPlayer(Entity*);
|
||||
extern void Object3D(Entity*);
|
||||
extern void Object3E(Entity*);
|
||||
extern void GiantLeaf(Entity*);
|
||||
extern void Fairy(Entity*);
|
||||
extern void LadderUp(Entity*);
|
||||
extern void Object42(Entity*);
|
||||
extern void Object43(Entity*);
|
||||
extern void Object44(Entity*);
|
||||
extern void Object45(Entity*);
|
||||
extern void GiantBookLadder(Entity*);
|
||||
extern void HeartContainer(Entity*);
|
||||
extern void FileScreenObjects(Entity*);
|
||||
extern void Object49(Entity*);
|
||||
extern void BackgroundCloud(Entity*);
|
||||
extern void Object4B(Entity*);
|
||||
extern void PushableFurniture(Entity*);
|
||||
extern void Furniture(Entity*);
|
||||
extern void MinishSizedEntrance(Entity*);
|
||||
extern void Archway(Entity*);
|
||||
extern void GiantRock(Entity*);
|
||||
extern void GiantRock2(Entity*);
|
||||
extern void Object52(Entity*);
|
||||
extern void Object53(Entity*);
|
||||
extern void PullableLever(Entity*);
|
||||
extern void Minecart(Entity*);
|
||||
extern void ThoughtBubble(Entity*);
|
||||
extern void HiddenLadderDown(Entity*);
|
||||
extern void GentariCurtain(Entity*);
|
||||
extern void LavaPlatform(Entity*);
|
||||
extern void Paper(Entity*);
|
||||
extern void Object5B(Entity*);
|
||||
extern void Mask(Entity*);
|
||||
extern void HouseDoorInterior(Entity*);
|
||||
extern void Whirlwind(Entity*);
|
||||
extern void ObjectBlockingStairs(Entity*);
|
||||
extern void SwordsmanNewsletter(Entity*);
|
||||
extern void Object61(Entity*);
|
||||
extern void GiantTwig(Entity*);
|
||||
extern void Object63(Entity*);
|
||||
extern void Object64(Entity*);
|
||||
extern void LadderHoleInBookshelf(Entity*);
|
||||
extern void Object66(Entity*);
|
||||
extern void Object67(Entity*);
|
||||
extern void Object68(Entity*);
|
||||
extern void Object69(Entity*);
|
||||
extern void Object6A(Entity*);
|
||||
extern void CrenalBeanSprout(Entity*);
|
||||
extern void MinecartDoor(Entity*);
|
||||
extern void ObjectOnPillar(Entity*);
|
||||
extern void MineralWaterSource(Entity*);
|
||||
extern void MinishSizedArchway(Entity*);
|
||||
extern void Object70(Entity*);
|
||||
extern void PushableGrave(Entity*);
|
||||
extern void StoneTablet(Entity*);
|
||||
extern void LilypadSmall(Entity*);
|
||||
extern void Object74(Entity*);
|
||||
extern void Object75(Entity*);
|
||||
extern void Object76(Entity*);
|
||||
extern void Bell(Entity*);
|
||||
extern void MacroDecoration(Entity*);
|
||||
extern void Object79(Entity*);
|
||||
extern void Steam(Entity*);
|
||||
extern void PushableLever(Entity*);
|
||||
extern void MacroShoes(Entity*);
|
||||
extern void ObjectOnSpinyBeetle(Entity*);
|
||||
extern void Object7E(Entity*);
|
||||
extern void PicoBloom(Entity*);
|
||||
extern void Board(Entity*);
|
||||
extern void Object81(Entity*);
|
||||
extern void BigVortex(Entity*);
|
||||
extern void BigPushableLever(Entity*);
|
||||
extern void SmallIceBlock(Entity*);
|
||||
extern void BigIceBlock(Entity*);
|
||||
extern void Object86(Entity*);
|
||||
extern void OctorokBossObject(Entity*);
|
||||
extern void MacroBook(Entity*);
|
||||
extern void MazaalBossObject(Entity*);
|
||||
extern void CabinFurniture(Entity*);
|
||||
extern void DoubleBookshelf(Entity*);
|
||||
extern void Book(Entity*);
|
||||
extern void Fireplace(Entity*);
|
||||
extern void Object8E(Entity*);
|
||||
extern void FrozenWaterElement(Entity*);
|
||||
extern void Object90(Entity*);
|
||||
extern void Object91(Entity*);
|
||||
extern void BakerOven(Entity*);
|
||||
extern void Lamp(Entity*);
|
||||
extern void WindTribeFlag(Entity*);
|
||||
extern void Bird(Entity*);
|
||||
extern void Object96(Entity*);
|
||||
extern void Object97(Entity*);
|
||||
extern void Object98(Entity*);
|
||||
extern void Object99(Entity*);
|
||||
extern void MacroAcorn(Entity*);
|
||||
extern void Object9B(Entity*);
|
||||
extern void TreeHidingPortal(Entity*);
|
||||
extern void LightableSwitch(Entity*);
|
||||
extern void TreeThorns(Entity*);
|
||||
extern void Fan(Entity*);
|
||||
extern void AngryStatue(Entity*);
|
||||
extern void PalaceArchway(Entity*);
|
||||
extern void ObjectA2(Entity*);
|
||||
extern void Cloud(Entity*);
|
||||
extern void MinishLight(Entity*);
|
||||
extern void FireballChain(Entity*);
|
||||
extern void ObjectA6(Entity*);
|
||||
extern void ObjectA7(Entity*);
|
||||
extern void ObjectA8(Entity*);
|
||||
extern void ObjectA9(Entity*);
|
||||
extern void WaterfallOpening(Entity*);
|
||||
extern void ObjectAB(Entity*);
|
||||
extern void FourElements(Entity*);
|
||||
extern void ObjectAD(Entity*);
|
||||
extern void FloatingBlock(Entity*);
|
||||
extern void ObjectAF(Entity*);
|
||||
extern void MetalDoor(Entity*);
|
||||
extern void JailBars(Entity*);
|
||||
extern void ObjectB2(Entity*);
|
||||
extern void ObjectB3(Entity*);
|
||||
extern void ObjectB4(Entity*);
|
||||
extern void ObjectB5(Entity*);
|
||||
extern void ObjectB6(Entity*);
|
||||
extern void Well(Entity*);
|
||||
extern void WindTribeTeleporter(Entity*);
|
||||
extern void ObjectB9(Entity*);
|
||||
extern void GyorgBossObject(Entity*);
|
||||
extern void Windcrest(Entity*);
|
||||
extern void LitArea(Entity*);
|
||||
extern void ObjectBD(Entity*);
|
||||
extern void Pinwheel(Entity*);
|
||||
extern void ObjectBF(Entity*);
|
||||
extern void EnemyItem(Entity*);
|
||||
extern void ObjectC1(Entity*);
|
||||
void ItemOnGround(Entity*);
|
||||
void DeathFx(Entity*);
|
||||
void ItemForSale(Entity*);
|
||||
void Button(Entity*);
|
||||
void MinishEmoticon(Entity*);
|
||||
void Pot(Entity*);
|
||||
void EzloCap(Entity*);
|
||||
void BlockPushed(Entity*);
|
||||
void LockedDoor(Entity*);
|
||||
void Object9(Entity*);
|
||||
void ObjectA(Entity*);
|
||||
void ObjectB(Entity*);
|
||||
void ChestSpawner(Entity*);
|
||||
void ObjectD(Entity*);
|
||||
void ObjectE(Entity*);
|
||||
void SpecialFx(Entity*);
|
||||
void Object10(Entity*);
|
||||
void Object11(Entity*);
|
||||
void Object12(Entity*);
|
||||
void Railtrack(Entity*);
|
||||
void LilypadLarge(Entity*);
|
||||
void Object15(Entity*);
|
||||
void FloatingPlatform(Entity*);
|
||||
void Object17(Entity*);
|
||||
void EvilSpirit(Entity*);
|
||||
void HouseDoorExterior(Entity*);
|
||||
void Object1A(Entity*);
|
||||
void GreatFairy(Entity*);
|
||||
void Object1C(Entity*);
|
||||
void Object1D(Entity*);
|
||||
void Object1E(Entity*);
|
||||
void Object1F(Entity*);
|
||||
void Object20(Entity*);
|
||||
void Object21(Entity*);
|
||||
void FigurineDevice(Entity*);
|
||||
void EyeSwitch(Entity*);
|
||||
void PressurePlate(Entity*);
|
||||
void BigBarrel(Entity*);
|
||||
void BarrelInside(Entity*);
|
||||
void PushableStatue(Entity*);
|
||||
void Object28(Entity*);
|
||||
void AmbientClouds(Entity*);
|
||||
void Object2A(Entity*);
|
||||
void Object2B(Entity*);
|
||||
void Beanstalk(Entity*);
|
||||
void Smoke(Entity*);
|
||||
void PushableRock(Entity*);
|
||||
void HittableLever(Entity*);
|
||||
void Object30(Entity*);
|
||||
void FrozenFlower(Entity*);
|
||||
void PullableMushroom(Entity*);
|
||||
void Bollard(Entity*);
|
||||
void WarpPoint(Entity*);
|
||||
void Object35(Entity*);
|
||||
void Object36(Entity*);
|
||||
void Object37(Entity*);
|
||||
void JarPortal(Entity*);
|
||||
void BossDoor(Entity*);
|
||||
void Object3A(Entity*);
|
||||
void MacroMushromStalks(Entity*);
|
||||
void MacroPlayer(Entity*);
|
||||
void Object3D(Entity*);
|
||||
void Object3E(Entity*);
|
||||
void GiantLeaf(Entity*);
|
||||
void Fairy(Entity*);
|
||||
void LadderUp(Entity*);
|
||||
void Object42(Entity*);
|
||||
void Object43(Entity*);
|
||||
void Object44(Entity*);
|
||||
void Object45(Entity*);
|
||||
void GiantBookLadder(Entity*);
|
||||
void HeartContainer(Entity*);
|
||||
void FileScreenObjects(Entity*);
|
||||
void Object49(Entity*);
|
||||
void BackgroundCloud(Entity*);
|
||||
void Object4B(Entity*);
|
||||
void PushableFurniture(Entity*);
|
||||
void Furniture(Entity*);
|
||||
void MinishSizedEntrance(Entity*);
|
||||
void Archway(Entity*);
|
||||
void GiantRock(Entity*);
|
||||
void GiantRock2(Entity*);
|
||||
void Object52(Entity*);
|
||||
void Object53(Entity*);
|
||||
void PullableLever(Entity*);
|
||||
void Minecart(Entity*);
|
||||
void ThoughtBubble(Entity*);
|
||||
void HiddenLadderDown(Entity*);
|
||||
void GentariCurtain(Entity*);
|
||||
void LavaPlatform(Entity*);
|
||||
void Paper(Entity*);
|
||||
void Object5B(Entity*);
|
||||
void Mask(Entity*);
|
||||
void HouseDoorInterior(Entity*);
|
||||
void Whirlwind(Entity*);
|
||||
void ObjectBlockingStairs(Entity*);
|
||||
void SwordsmanNewsletter(Entity*);
|
||||
void Object61(Entity*);
|
||||
void GiantTwig(Entity*);
|
||||
void Object63(Entity*);
|
||||
void Object64(Entity*);
|
||||
void LadderHoleInBookshelf(Entity*);
|
||||
void Object66(Entity*);
|
||||
void Object67(Entity*);
|
||||
void Object68(Entity*);
|
||||
void Object69(Entity*);
|
||||
void Object6A(Entity*);
|
||||
void CrenalBeanSprout(Entity*);
|
||||
void MinecartDoor(Entity*);
|
||||
void ObjectOnPillar(Entity*);
|
||||
void MineralWaterSource(Entity*);
|
||||
void MinishSizedArchway(Entity*);
|
||||
void Object70(Entity*);
|
||||
void PushableGrave(Entity*);
|
||||
void StoneTablet(Entity*);
|
||||
void LilypadSmall(Entity*);
|
||||
void Object74(Entity*);
|
||||
void Object75(Entity*);
|
||||
void Object76(Entity*);
|
||||
void Bell(Entity*);
|
||||
void MacroDecoration(Entity*);
|
||||
void Object79(Entity*);
|
||||
void Steam(Entity*);
|
||||
void PushableLever(Entity*);
|
||||
void MacroShoes(Entity*);
|
||||
void ObjectOnSpinyBeetle(Entity*);
|
||||
void Object7E(Entity*);
|
||||
void PicoBloom(Entity*);
|
||||
void Board(Entity*);
|
||||
void Object81(Entity*);
|
||||
void BigVortex(Entity*);
|
||||
void BigPushableLever(Entity*);
|
||||
void SmallIceBlock(Entity*);
|
||||
void BigIceBlock(Entity*);
|
||||
void Object86(Entity*);
|
||||
void OctorokBossObject(Entity*);
|
||||
void MacroBook(Entity*);
|
||||
void MazaalBossObject(Entity*);
|
||||
void CabinFurniture(Entity*);
|
||||
void DoubleBookshelf(Entity*);
|
||||
void Book(Entity*);
|
||||
void Fireplace(Entity*);
|
||||
void Object8E(Entity*);
|
||||
void FrozenWaterElement(Entity*);
|
||||
void Object90(Entity*);
|
||||
void Object91(Entity*);
|
||||
void BakerOven(Entity*);
|
||||
void Lamp(Entity*);
|
||||
void WindTribeFlag(Entity*);
|
||||
void Bird(Entity*);
|
||||
void Object96(Entity*);
|
||||
void Object97(Entity*);
|
||||
void Object98(Entity*);
|
||||
void Object99(Entity*);
|
||||
void MacroAcorn(Entity*);
|
||||
void Object9B(Entity*);
|
||||
void TreeHidingPortal(Entity*);
|
||||
void LightableSwitch(Entity*);
|
||||
void TreeThorns(Entity*);
|
||||
void Fan(Entity*);
|
||||
void AngryStatue(Entity*);
|
||||
void PalaceArchway(Entity*);
|
||||
void ObjectA2(Entity*);
|
||||
void Cloud(Entity*);
|
||||
void MinishLight(Entity*);
|
||||
void FireballChain(Entity*);
|
||||
void ObjectA6(Entity*);
|
||||
void ObjectA7(Entity*);
|
||||
void ObjectA8(Entity*);
|
||||
void ObjectA9(Entity*);
|
||||
void WaterfallOpening(Entity*);
|
||||
void ObjectAB(Entity*);
|
||||
void FourElements(Entity*);
|
||||
void ObjectAD(Entity*);
|
||||
void FloatingBlock(Entity*);
|
||||
void ObjectAF(Entity*);
|
||||
void MetalDoor(Entity*);
|
||||
void JailBars(Entity*);
|
||||
void ObjectB2(Entity*);
|
||||
void ObjectB3(Entity*);
|
||||
void ObjectB4(Entity*);
|
||||
void ObjectB5(Entity*);
|
||||
void ObjectB6(Entity*);
|
||||
void Well(Entity*);
|
||||
void WindTribeTeleporter(Entity*);
|
||||
void ObjectB9(Entity*);
|
||||
void GyorgBossObject(Entity*);
|
||||
void Windcrest(Entity*);
|
||||
void LitArea(Entity*);
|
||||
void ObjectBD(Entity*);
|
||||
void Pinwheel(Entity*);
|
||||
void ObjectBF(Entity*);
|
||||
void EnemyItem(Entity*);
|
||||
void ObjectC1(Entity*);
|
||||
|
||||
extern void (*const gObjectFunctions[194])(Entity*);
|
||||
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
#ifndef OVERWORLD_H
|
||||
#define OVERWORLD_H
|
||||
|
||||
#include "global.h"
|
||||
#include "area.h"
|
||||
|
||||
void ChangeLightLevel(s32);
|
||||
void SetPopupState(u32 type, u32 choice_idx);
|
||||
|
||||
bool32 CheckIsOverworld(void);
|
||||
bool32 sub_08052638(u32 r0);
|
||||
#ifndef EU
|
||||
u32 sub_08052654(void);
|
||||
#endif
|
||||
u32 CheckIsDungeon(void);
|
||||
u32 CheckIsInteriorWithEnemies(void);
|
||||
u32 CheckIsInteriorNoEnemies(void);
|
||||
u32 CheckHasMap(void);
|
||||
|
||||
s32 ModHealth(s32 deltaHealth);
|
||||
void ModRupees(s32 rupeeDelta);
|
||||
|
||||
void sub_080526F8(s32 a1);
|
||||
u32 sub_08052724(void);
|
||||
u32 HasDungeonMap(void);
|
||||
u32 HasDungeonCompass(void);
|
||||
u32 HasDungeonBigKey(void);
|
||||
u32 HasDungeonSmallKey(void);
|
||||
|
||||
void sub_080527FC(u32 a1, u32 a2);
|
||||
#ifndef EU
|
||||
void sub_08052878(void);
|
||||
#endif
|
||||
|
||||
void RoomExitCallback(void);
|
||||
void InitParachuteRoom(void);
|
||||
u32 sub_08052B24(void);
|
||||
void DisplayEzloMessage(void);
|
||||
|
||||
void sub_08052CA4(u32 area, u32 room, u32 x, u32 y);
|
||||
void sub_08052CD0(u32 area, u32 room, u32 x, u32 y);
|
||||
|
||||
void sub_08052CFC(void);
|
||||
|
||||
/**
|
||||
* @brief Get bank offset for area
|
||||
*/
|
||||
u32 GetFlagBankOffset(u32 idx);
|
||||
|
||||
RoomResInfo* GetCurrentRoomInfo(void);
|
||||
void sub_08052EA0(void);
|
||||
void sub_08052FD8(u32 room, u32 area);
|
||||
void UpdateGlobalProgress(void);
|
||||
void sub_08053250(void);
|
||||
void sub_08053320(void);
|
||||
void sub_080533CC(void);
|
||||
void sub_08053494(void);
|
||||
void sub_080534AC(void);
|
||||
void sub_08053500(void);
|
||||
|
||||
u32 GetBottleContaining(u32);
|
||||
|
||||
#endif // OVERWORLD_H
|
||||
+63
-27
@@ -34,7 +34,7 @@ enum PlayerActions {
|
||||
PLAYER_INHOLE,
|
||||
PLAYER_08072C9C,
|
||||
PLAYER_08074C44,
|
||||
PLAYER_08072F34,
|
||||
PLAYER_CLIMB,
|
||||
PLAYER_USEENTRANCE,
|
||||
PLAYER_PARACHUTE,
|
||||
};
|
||||
@@ -95,16 +95,30 @@ typedef enum {
|
||||
} PlayerControlMode;
|
||||
|
||||
enum PlayerFlags {
|
||||
PL_BUSY = (1 << 0),
|
||||
PL_DROWNING = (1 << 2),
|
||||
PL_NO_CAP = (1 << 3),
|
||||
PL_USE_PORTAL = (1 << 5),
|
||||
PL_MINISH = (1 << 7),
|
||||
PL_BURNING = (1 << 10),
|
||||
PL_ROLLING = (1 << 18),
|
||||
PL_IN_HOLE = (1 << 20),
|
||||
PL_USE_LANTERN = (1 << 23),
|
||||
PL_USE_OCARINA = (1 << 28),
|
||||
PL_BUSY = 0x1,
|
||||
PL_DROWNING = 0x4,
|
||||
PL_NO_CAP = 0x8,
|
||||
PL_CAPTURED = 0x10,
|
||||
PL_USE_PORTAL = 0x20,
|
||||
PL_HIDDEN = 0x40,
|
||||
PL_MINISH = 0x80,
|
||||
PL_DISABLE_ITEMS = 0x100,
|
||||
PL_FALLING = 0x200,
|
||||
PL_BURNING = 0x400,
|
||||
PL_FROZEN = 0x800,
|
||||
PL_IN_MINECART = 0x1000,
|
||||
PL_DRUGGED = 0x4000,
|
||||
PL_ROLLING = 0x40000,
|
||||
PL_MOLDWORM_CAPTURED = 0x80000,
|
||||
PL_IN_HOLE = 0x100000,
|
||||
PL_MOLDWORM_RELEASED = 0x200000,
|
||||
PL_CLONING = 0x400000,
|
||||
PL_USE_LANTERN = 0x800000,
|
||||
PL_PARACHUTE = 0x1000000,
|
||||
PL_ENTER_MINECART = 0x4000000,
|
||||
PL_SWORD_THRUST = 0x8000000,
|
||||
PL_USE_OCARINA = 0x10000000,
|
||||
PL_CLIMBING = 0x20000000,
|
||||
};
|
||||
|
||||
enum SurfaceType {
|
||||
@@ -125,7 +139,7 @@ enum SurfaceType {
|
||||
SURFACE_E,
|
||||
SURFACE_F,
|
||||
SURFACE_10,
|
||||
SURFACE_11,
|
||||
SURFACE_SWAMP,
|
||||
SURFACE_DOOR,
|
||||
SURFACE_DOOR_13,
|
||||
SURFACE_14,
|
||||
@@ -137,9 +151,9 @@ enum SurfaceType {
|
||||
SURFACE_BUTTON,
|
||||
SURFACE_1B,
|
||||
SURFACE_1C,
|
||||
SURFACE_1D,
|
||||
SURFACE_1D, // nulled
|
||||
SURFACE_LADDER,
|
||||
SURFACE_1F,
|
||||
SURFACE_1F, // nulled
|
||||
SURFACE_20,
|
||||
SURFACE_21,
|
||||
SURFACE_22,
|
||||
@@ -157,7 +171,7 @@ enum SurfaceType {
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u8 field_0x0[2];
|
||||
/*0x02*/ u8 jumpStatus;
|
||||
/*0x02*/ u8 jump_status;
|
||||
/*0x03*/ u8 field_0x3[2];
|
||||
/*0x05*/ u8 heldObject;
|
||||
/*0x06*/ u8 pushedObject;
|
||||
@@ -165,7 +179,7 @@ typedef struct {
|
||||
/*0x08*/ u16 animation;
|
||||
/*0x0a*/ u8 field_0xa;
|
||||
/*0x0b*/ u8 keepFacing;
|
||||
/*0x0c*/ u8 playerAction;
|
||||
/*0x0c*/ u8 queued_action;
|
||||
/*0x0d*/ u8 field_0xd;
|
||||
/*0x0e*/ u8 field_0xe;
|
||||
/*0x0f*/ u8 hurtBlinkSpeed;
|
||||
@@ -177,18 +191,20 @@ typedef struct {
|
||||
/*0x15*/ u8 field_0x15;
|
||||
/*0x16*/ u16 startPosX;
|
||||
/*0x18*/ u16 startPosY;
|
||||
/*0x1a*/ u8 field_0x1a[2];
|
||||
/*0x1a*/ u8 mobility;
|
||||
/*0x1b*/ u8 sword_state;
|
||||
/*0x1c*/ u8 field_0x1c;
|
||||
/*0x1d*/ u8 field_0x1d;
|
||||
/*0x1e*/ u8 dash_state;
|
||||
/*0x1f*/ u8 field_0x1f[3];
|
||||
/*0x22*/ u16 field_0x22[2];
|
||||
/*0x26*/ u8 swimState;
|
||||
/*0x26*/ u8 swim_state;
|
||||
/*0x27*/ u8 field_0x27[5];
|
||||
/*0x2c*/ Entity* item;
|
||||
/*0x30*/ u32 flags;
|
||||
/*0x34*/ u8 field_0x34[2];
|
||||
/*0x36*/ s16 field_0x36;
|
||||
/*0x36*/ u8 field_0x36;
|
||||
/*0x37*/ u8 field_0x37;
|
||||
/*0x38*/ u8 field_0x38;
|
||||
/*0x39*/ u8 field_0x39;
|
||||
/*0x3a*/ u8 field_0x3a;
|
||||
@@ -198,13 +214,14 @@ typedef struct {
|
||||
/* */ u8 swordBlueParticle : 1;
|
||||
/* */ u8 filler14 : 6;
|
||||
/*0x3f*/ u8 field_0x3f;
|
||||
/*0x40*/ u8 hurtType[64];
|
||||
/*0x80*/ u16 field_0x80;
|
||||
/*0x40*/ u8 path_memory[64];
|
||||
/*0x80*/ u16 speed_modifier;
|
||||
/*0x82*/ u8 field_0x82[9];
|
||||
/*0x8b*/ u8 controlMode;
|
||||
/*0x8c*/ u16 vel_x;
|
||||
/*0x8e*/ u16 vel_y;
|
||||
/*0x90*/ union SplitWord field_0x90;
|
||||
/*0x90*/ u16 field_0x90;
|
||||
/*0x92*/ u16 field_0x92;
|
||||
/*0x94*/ u32 field_0x94;
|
||||
/*0x98*/ u16 field_0x98;
|
||||
/*0x9a*/ u16 field_0x9a;
|
||||
@@ -261,14 +278,33 @@ extern u8 gQuiverSizes[];
|
||||
extern u16 gWalletSizes[];
|
||||
|
||||
extern PlayerState gPlayerState;
|
||||
extern Stats gStats;
|
||||
extern Entity gPlayerEntity;
|
||||
|
||||
extern u32 GetInventoryValue(u32);
|
||||
extern s32 ModHealth(s32);
|
||||
extern void ModRupees(s32);
|
||||
u32 CheckPlayerInactive(void);
|
||||
void SetPlayerControl(PlayerControlMode mode);
|
||||
void ResetPlayer(void);
|
||||
void ResetPlayerVelocity(void);
|
||||
void ResetPlayerAnimationAndAction(void);
|
||||
void SetPlayerActionNormal(void);
|
||||
void RespawnAsMinish(void);
|
||||
|
||||
extern void SetPlayerControl(PlayerControlMode);
|
||||
Entity* CreatePlayerItem(u32, u32, u32, u32);
|
||||
|
||||
void ResolvePlayerAnimation(void);
|
||||
void RegisterPlayerHitbox(void);
|
||||
void UpdateFloorType(void);
|
||||
void CreateEzloHint(u32, u32);
|
||||
|
||||
u32 IsItemEquipped(u32);
|
||||
u32 GetInventoryValue(u32);
|
||||
s32 ModHealth(s32 delta);
|
||||
void ModRupees(s32 delta);
|
||||
void DeleteClones(void);
|
||||
|
||||
void sub_08077728();
|
||||
extern void sub_08077B20();
|
||||
extern u32 sub_08008B22();
|
||||
extern u32* sub_08008790(Entity*, u32);
|
||||
|
||||
#define COPY_FLAG_FROM_TO(base, src, dest) (base) = ((base) & ~(dest)) | (((dest) * ((base) & (src))) / src)
|
||||
|
||||
|
||||
@@ -1,6 +1,46 @@
|
||||
#ifndef PROJECTILE_H
|
||||
#define PROJECTILE_H
|
||||
|
||||
extern Entity* CreateProjectile(u32);
|
||||
|
||||
void DarkNutSwordSlash(Entity*);
|
||||
void RockProjectile(Entity*);
|
||||
void BoneProjectile(Entity*);
|
||||
void MoblinSpear(Entity*);
|
||||
void DekuSeedProjectile(Entity*);
|
||||
void Projectile5(Entity*);
|
||||
void DirtBallProjectile(Entity*);
|
||||
void WindProjectile(Entity*);
|
||||
void FireProjectile(Entity*);
|
||||
void IceProjectile(Entity*);
|
||||
void GleerokProjectile(Entity*);
|
||||
void KeatonDagger(Entity*);
|
||||
void GuardLineOfSight(Entity*);
|
||||
void ArrowProjectile(Entity*);
|
||||
void MazaalEnergyBeam(Entity*);
|
||||
void OctorokBossProjectile(Entity*);
|
||||
void StalfosProjectile(Entity*);
|
||||
void LakituCloudProjectile(Entity*);
|
||||
void LakituLightning(Entity*);
|
||||
void MandiblesProjectile(Entity*);
|
||||
void RemovableDust(Entity*);
|
||||
void SpiderWeb(Entity*);
|
||||
void TorchTrapProjectile(Entity*);
|
||||
void GuruguruBarProjectile(Entity*);
|
||||
void V1DarkMagicProjectile(Entity*);
|
||||
void BallAndChain(Entity*);
|
||||
void V1FireProjectile(Entity*);
|
||||
void CannonballProjectile(Entity*);
|
||||
void V1EyeLaser(Entity*);
|
||||
void Winder(Entity*);
|
||||
void SpikedRollers(Entity*);
|
||||
void V2Projectile(Entity*);
|
||||
void V3HandProjectile(Entity*);
|
||||
void V3ElectricProjectile(Entity*);
|
||||
void GyorgTail(Entity*);
|
||||
void GyorgMaleEnergyProjectile(Entity*);
|
||||
void V3TennisBallProjectile(Entity*);
|
||||
|
||||
typedef enum {
|
||||
/*00*/ DARK_NUT_SWORD_SLASH,
|
||||
/*01*/ ROCK_PROJECTILE,
|
||||
|
||||
+130
-93
@@ -4,13 +4,6 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
/*
|
||||
typedef struct {
|
||||
u8 areaID;
|
||||
u8 roomID;
|
||||
} RoomID;
|
||||
*/
|
||||
|
||||
enum RoomTransition {
|
||||
TRANSITION_DEFAULT,
|
||||
TRANSITION_CUT,
|
||||
@@ -24,58 +17,66 @@ enum RoomTransition {
|
||||
TRANSITION_CUT_FAST,
|
||||
};
|
||||
|
||||
enum RoomReloadType {
|
||||
RELOAD_ALL = 1,
|
||||
RELOAD_ENTITIES = 2,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u16 unk2;
|
||||
/*0x00*/ u16 reload_flags;
|
||||
/*0x02*/ u8 unk3;
|
||||
/*0x03*/ u8 unk4;
|
||||
/*0x04*/ u8 areaID;
|
||||
/*0x05*/ u8 roomID;
|
||||
/*0x06*/ u16 roomOriginX;
|
||||
/*0x08*/ u16 roomOriginY;
|
||||
/*0x0A*/ s16 roomScrollX;
|
||||
/*0x0C*/ s16 roomScrollY;
|
||||
/*0x04*/ u8 area;
|
||||
/*0x05*/ u8 room;
|
||||
/*0x06*/ u16 origin_x;
|
||||
/*0x08*/ u16 origin_y;
|
||||
/*0x0A*/ s16 scroll_x;
|
||||
/*0x0C*/ s16 scroll_y;
|
||||
/*0x0E*/ u8 unk5;
|
||||
/*0x0F*/ u8 unk6;
|
||||
/*0x10*/ u8 unk_10;
|
||||
/*0x0F*/ u8 scroll_flags; // 0x2 = ??, 0x4 = camera scrolling
|
||||
/*0x10*/ u8 scroll_direction;
|
||||
/*0x11*/ s8 oam_offset_x;
|
||||
/*0x12*/ s8 oam_offset_y;
|
||||
/*0x13*/ u8 unk13;
|
||||
/*0x14*/ u8 screenShakeMagnitude;
|
||||
/*0x14*/ u8 shake_magnitude;
|
||||
/*0x15*/ u8 unk7;
|
||||
/*0x16*/ u16 screenShakeTime;
|
||||
/*0x16*/ u16 shake_duration;
|
||||
/*0x18*/ u16 filler2[3];
|
||||
/*0x1E*/ u16 width;
|
||||
/*0x20*/ u16 height;
|
||||
/*0x22*/ u8 filler3[6];
|
||||
/*0x22*/ u8 filler3[2];
|
||||
/*0x24*/ s8 aff_x;
|
||||
/*0x25*/ s8 aff_y;
|
||||
/*0x26*/ u8 filler26[2];
|
||||
/*0x28*/ union SplitWord bg3OffsetX;
|
||||
/*0x2C*/ union SplitWord bg3OffsetY;
|
||||
/*0x30*/ Entity* cameraTarget;
|
||||
/*0x30*/ Entity* camera_target;
|
||||
} RoomControls;
|
||||
extern RoomControls gRoomControls;
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 filler_0x1;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u8 field_0x4;
|
||||
u8 filler1[1];
|
||||
u8 shopItemType;
|
||||
u8 shopItemType2;
|
||||
u8 field_0x8;
|
||||
u8 field_0x9;
|
||||
u8 unk2;
|
||||
u8 filler2;
|
||||
s16 lightLevel;
|
||||
u8 filler3[2];
|
||||
u8 unk_10[4];
|
||||
u32 roomFlags;
|
||||
u32 unk3;
|
||||
u8 filler4[48];
|
||||
u8 filler5[28];
|
||||
u32 animFlags;
|
||||
void* field_0x6c[8];
|
||||
void* field_0x8c[16];
|
||||
/* 0x00 */ u8 field_0x0;
|
||||
/* 0x01 */ u8 filler_0x1;
|
||||
/* 0x02 */ u8 field_0x2;
|
||||
/* 0x03 */ u8 field_0x3;
|
||||
/* 0x04 */ u8 field_0x4;
|
||||
/* 0x05 */ u8 filler1[1];
|
||||
/* 0x06 */ u8 shopItemType;
|
||||
/* 0x07 */ u8 shopItemType2;
|
||||
/* 0x08 */ u8 field_0x8;
|
||||
/* 0x09 */ u8 field_0x9;
|
||||
/* 0x0a */ u8 unk2;
|
||||
/* 0x0b */ u8 filler2;
|
||||
/* 0x0c */ s16 lightLevel;
|
||||
/* 0x0e */ u8 filler3[2];
|
||||
/* 0x10 */ u8 unk_10[4];
|
||||
/* 0x14 */ u32 flags;
|
||||
/* 0x18 */ u32 unk3;
|
||||
/* 0x1c */ u8 filler4[48];
|
||||
/* 0x4c */ u8 filler5[28];
|
||||
/* 0x68 */ u32 animFlags;
|
||||
/* 0x6c */ void* field_0x6c[8];
|
||||
/* 0x8c */ void* field_0x8c[16];
|
||||
} RoomVars;
|
||||
static_assert(sizeof(RoomVars) == 0xCC);
|
||||
extern RoomVars gRoomVars;
|
||||
@@ -92,57 +93,86 @@ typedef struct {
|
||||
u32 spritePtr;
|
||||
} EntityData;
|
||||
|
||||
// Status of the player's positioning within the scene.
|
||||
typedef struct {
|
||||
u8 area_next;
|
||||
u8 room_next;
|
||||
u8 start_anim;
|
||||
u8 spawn_type;
|
||||
Coords start_pos;
|
||||
u8 layer;
|
||||
u8 field_0x15;
|
||||
u8 field_0x16;
|
||||
u8 field_0x17;
|
||||
s16 field_0x18;
|
||||
s16 field_0x1a;
|
||||
s16 field_0x1c;
|
||||
s16 field_0x1e;
|
||||
s16 field_0x20;
|
||||
s16 field_0x22;
|
||||
u8 field_0x24[0x8];
|
||||
} PlayerWorldStatus;
|
||||
static_assert(sizeof(PlayerWorldStatus) == 0x20);
|
||||
u16 field_0x0;
|
||||
u16 field_0x2;
|
||||
u8 field_0x4;
|
||||
u8 field_0x5;
|
||||
u8 field_0x6;
|
||||
u8 field_0x7;
|
||||
} struct_030010EC;
|
||||
|
||||
typedef struct {
|
||||
s32 frameCount; // regular frame count? does anything reset it?
|
||||
u8 field_0x4[0x2];
|
||||
u16 field_0x6;
|
||||
bool8 transitioningOut;
|
||||
u8 transitionType; // transition when changing areas
|
||||
u16 stairs_idx; // seems to be a tile type
|
||||
PlayerWorldStatus player_status;
|
||||
u8 field_0x2c[0x9];
|
||||
u8 hint_height;
|
||||
u16 hint_idx;
|
||||
u8 field_0x38;
|
||||
u8 field_0x39;
|
||||
u8 field_0x3a;
|
||||
u8 field_0x3b;
|
||||
u8 field_0x3c;
|
||||
u8 field_0x3d;
|
||||
u16 field_0x3e;
|
||||
u16 hurtType;
|
||||
u16 field_0x42;
|
||||
u16 field_0x44;
|
||||
u16 field_0x46;
|
||||
u16 field_0x48;
|
||||
u16 field_0x4a;
|
||||
u8 minecart_data[0x20];
|
||||
u8 field_0x6c[0x40];
|
||||
u16 data[32];
|
||||
u16 field_0xac;
|
||||
u16 field_0xae;
|
||||
} ScreenTransition;
|
||||
extern ScreenTransition gScreenTransition;
|
||||
} struct_0300110C;
|
||||
|
||||
// Status of the player's positioning within the scene.
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 area_next;
|
||||
/* 0x01 */ u8 room_next;
|
||||
/* 0x02 */ u8 start_anim;
|
||||
/* 0x03 */ u8 spawn_type;
|
||||
/* 0x04 */ s16 start_pos_x;
|
||||
/* 0x06 */ s16 start_pos_y;
|
||||
/* 0x08 */ u8 layer;
|
||||
/* 0x09 */ u8 field_0x15;
|
||||
/* 0x0a */ u8 dungeon_area;
|
||||
/* 0x0b */ u8 dungeon_room;
|
||||
/* 0x0c */ s16 dungeon_x;
|
||||
/* 0x0e */ s16 dungeon_y;
|
||||
/* 0x10 */ u16 dungeon_map_x;
|
||||
/* 0x12 */ u16 dungeon_map_y;
|
||||
/* 0x14 */ s16 overworld_map_x;
|
||||
/* 0x16 */ s16 overworld_map_y;
|
||||
/* 0x18 */ u8 field_0x24[0x8];
|
||||
} PlayerRoomStatus;
|
||||
static_assert(sizeof(PlayerRoomStatus) == 0x20);
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 frameCount; // regular frame count? does anything reset it?
|
||||
/* 0x04 */ u8 field_0x4[0x2];
|
||||
/* 0x06 */ u16 field_0x6;
|
||||
/* 0x08 */ bool8 transitioningOut;
|
||||
/* 0x09 */ u8 type; // transition when changing areas
|
||||
/* 0x0a */ u16 stairs_idx; // seems to be a tile type
|
||||
/* 0x0c */ PlayerRoomStatus player_status;
|
||||
/* 0x2c */ u8 field_0x2c[0x9];
|
||||
/* 0x35 */ u8 hint_height;
|
||||
/* 0x36 */ u16 hint_idx;
|
||||
/* 0x38 */ u8 field_0x38;
|
||||
/* 0x39 */ u8 field_0x39;
|
||||
/* 0x3a */ u8 field_0x3a;
|
||||
/* 0x3b */ u8 field_0x3b;
|
||||
/* 0x3c */ u8 field_0x3c;
|
||||
/* 0x3d */ u8 field_0x3d;
|
||||
/* 0x3e */ u16 field_0x3e;
|
||||
/* 0x40 */ u16 hurtType;
|
||||
/* 0x42 */ u16 field_0x42;
|
||||
/* 0x44 */ u16 field_0x44;
|
||||
/* 0x46 */ u16 field_0x46;
|
||||
/* 0x48 */ u16 field_0x48;
|
||||
/* 0x4a */ u16 field_0x4a;
|
||||
/* 0x4c */ struct_030010EC minecart_data[4];
|
||||
/* 0x6c */ struct_0300110C armos_data;
|
||||
} RoomTransition;
|
||||
static_assert(sizeof(RoomTransition) == 0xB0);
|
||||
extern RoomTransition gRoomTransition;
|
||||
|
||||
typedef struct {
|
||||
u16 type;
|
||||
u8 field_0x2[4];
|
||||
s16 playerXPos;
|
||||
s16 playerYPos;
|
||||
u8 field_0xa;
|
||||
u8 area;
|
||||
u8 room;
|
||||
u8 playerLayer;
|
||||
u8 field_0xe;
|
||||
u8 playerState;
|
||||
u16 transitionSFX;
|
||||
} ScreenTransitionData;
|
||||
|
||||
typedef struct {
|
||||
u8 type;
|
||||
@@ -169,15 +199,22 @@ typedef enum {
|
||||
DESTRUCTIBLE_TILE,
|
||||
GRASS_DROP_CHANGER,
|
||||
LOCATION_CHANGER,
|
||||
TILE_ENTITY_D
|
||||
TILE_ENTITY_D,
|
||||
} TileEntityType;
|
||||
|
||||
extern void SetTileType(u32, u32, u32);
|
||||
extern void sub_08080964(u32 time, u32 magnitude); // shake screen
|
||||
void SetTileType(u32, u32, u32);
|
||||
void InitScreenShake(u32 time, u32 magnitude);
|
||||
|
||||
extern void* GetCurrentRoomProperty(u32);
|
||||
extern void LoadRoomTileEntities();
|
||||
void CallRoomProp5And7(void);
|
||||
void LoadRoom(void);
|
||||
void SetCurrentRoomPropertyList(u32 area, u32 room);
|
||||
void* GetCurrentRoomProperty(u32);
|
||||
void LoadRoomTileEntities();
|
||||
void LoadRoomEntityList(EntityData* listPtr);
|
||||
|
||||
void sub_0804B3C4(void*);
|
||||
void sub_0804B0B0(u32 arg0, u32 arg1);
|
||||
|
||||
void DoExitTransition(const ScreenTransitionData* data);
|
||||
|
||||
#endif
|
||||
|
||||
+79
-17
@@ -20,47 +20,109 @@ typedef enum {
|
||||
SAVE_DONE,
|
||||
} SaveState;
|
||||
|
||||
extern SaveResult HandleSave(u32 arg0);
|
||||
/**
|
||||
* Attempt to save the game.
|
||||
*
|
||||
* @param idx The save slot.
|
||||
* @return #SaveResult result.
|
||||
*/
|
||||
extern SaveResult HandleSave(u32 idx);
|
||||
|
||||
/**
|
||||
* Contains all information about a save file.
|
||||
* The contents of this structure are read from and written to EEPROM.
|
||||
*/
|
||||
typedef struct {
|
||||
/*0x000*/ u8 unk_00;
|
||||
/*0x000*/ u8 unk_01;
|
||||
/*0x002*/ u8 messageSpeed;
|
||||
/*0x003*/ u8 brightnessPref;
|
||||
/*0x000*/ u8 invalid; /**< File is invalid. */
|
||||
/*0x000*/ u8 initialized; /**< File is initialized. */
|
||||
/*0x002*/ u8 msg_speed; /**< Message speed. */
|
||||
/*0x003*/ u8 brightness; /**< Brightness. */
|
||||
/*0x004*/ u8 filler4[0x2];
|
||||
/*0x006*/ u8 unk6;
|
||||
/*0x007*/ u8 unk7;
|
||||
/*0x008*/ u8 global_progress;
|
||||
/*0x008*/ u8 global_progress; /**< @see UpdateGlobalProgress */
|
||||
/*0x009*/ u8 field_0x9[0x34];
|
||||
/*0x040*/ u32 windcrests;
|
||||
/*0x040*/ u32 windcrests; /**< Windcrest flags. */
|
||||
/*0x044*/ u8 filler44[0xC];
|
||||
/*0x050*/ u32 unk50;
|
||||
/*0x054*/ u8 filler54[0xC];
|
||||
/*0x060*/ u32 areaVisitFlags[8];
|
||||
/*0x080*/ u8 playerName[FILENAME_LENGTH];
|
||||
/*0x060*/ u32 areaVisitFlags[8]; /**< Area visit flags. */
|
||||
/*0x080*/ char name[FILENAME_LENGTH]; /**< Save file name. */
|
||||
/*0x086*/ u8 filler86[0x2];
|
||||
/*0x088*/ PlayerWorldStatus saved_status;
|
||||
/*0x0A8*/ Stats stats;
|
||||
/*0x0D0*/ u8 fillerD0[0x71];
|
||||
/*0x141*/ u8 unk141[0x1c1 - 0x141];
|
||||
/*0x1C1*/ u8 unk1C1[0x45c - 0x1c1];
|
||||
/*0x088*/ PlayerRoomStatus saved_status; /**< Player room status. */
|
||||
/*0x0A8*/ Stats stats; /**< Player stats. */
|
||||
/*0x0D0*/ u8 fillerD0[0x48];
|
||||
/*0x118*/ u8 unk118[0x13];
|
||||
/*0x12B*/ u8 unk12B[0x16];
|
||||
/*0x141*/ u8 unk141[128];
|
||||
/*0x1C1*/ u8 unk1C1[128];
|
||||
/*0x241*/ u8 unk241[13];
|
||||
/*0x24E*/ u8 unk24E[14];
|
||||
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
|
||||
/*0x45C*/ u8 unk45C[0x10];
|
||||
/*0x46C*/ u8 unk46C[0x20];
|
||||
/*0x48C*/ u32 unk48C[8];
|
||||
/*0x48C*/ u32 timers[7];
|
||||
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
|
||||
/*0x4AC*/ u8 filler4ac[0x8];
|
||||
} SaveFile;
|
||||
|
||||
/**
|
||||
* The current save file.
|
||||
*/
|
||||
extern SaveFile gSave;
|
||||
|
||||
/**
|
||||
* Initialize the save system.
|
||||
*
|
||||
* @return Success
|
||||
*/
|
||||
u32 InitSaveData(void);
|
||||
|
||||
u32 Write_02000000(struct_02000000*);
|
||||
/**
|
||||
* Read save header.
|
||||
*
|
||||
* @return Success.
|
||||
*/
|
||||
u32 Read_02000000(SaveHeader*);
|
||||
|
||||
/**
|
||||
* Write save header.
|
||||
*
|
||||
* @return Success.
|
||||
*/
|
||||
u32 Write_02000000(SaveHeader*);
|
||||
|
||||
/**
|
||||
* Read save file.
|
||||
*
|
||||
* @return Success.
|
||||
*/
|
||||
s32 ReadSaveFile(u32, SaveFile*);
|
||||
u32 Read_02000000(struct_02000000*);
|
||||
|
||||
/**
|
||||
* Mark a save file as deleted.
|
||||
*
|
||||
* @param index The save file index.
|
||||
*/
|
||||
void SetFileStatusDeleted(u32 index);
|
||||
|
||||
extern const char gUnk_0811E470[];
|
||||
|
||||
/**
|
||||
* Update the global progress (0 - 10).
|
||||
* There are 10 different indicators of game completion:
|
||||
9 : Flag SEIIKI_STAINED_GLASS
|
||||
8 : Flag LV5_CLEAR
|
||||
7 : Flag OUBO_KAKERA
|
||||
6 : Flag LV4_CLEAR
|
||||
5 : Flag LV3_CLEAR
|
||||
4 : Flag SOUGEN_08_TORITSUKI
|
||||
2 : Flag LV1_CLEAR
|
||||
1 : Default
|
||||
}
|
||||
*/
|
||||
void UpdateGlobalProgress(void);
|
||||
|
||||
#ifdef DEMO_USA
|
||||
extern const u8* const demoPointers[];
|
||||
extern const u8 demoUnknown1[];
|
||||
|
||||
+23
-24
@@ -5,10 +5,10 @@
|
||||
#include "fade.h"
|
||||
|
||||
typedef struct {
|
||||
u16 displayControl;
|
||||
u8 filler2[0x2];
|
||||
u16 unk4;
|
||||
u16 displayControlMask;
|
||||
/*0x00*/ u16 displayControl;
|
||||
/*0x02*/ u8 filler2[0x2];
|
||||
/*0x04*/ u16 unk4;
|
||||
/*0x06*/ u16 displayControlMask;
|
||||
} LcdControls;
|
||||
|
||||
typedef struct {
|
||||
@@ -28,22 +28,19 @@ typedef struct {
|
||||
} BgAffSettings;
|
||||
|
||||
typedef struct {
|
||||
u16 bg2dx;
|
||||
u16 bg2dmx;
|
||||
u16 bg2dy;
|
||||
u16 bg2dmy;
|
||||
u16 bg2xPointLeastSig;
|
||||
u16 bg2xPointMostSig;
|
||||
u16 bg2yPointLeastSig;
|
||||
u16 bg2yPointMostSig;
|
||||
u16 bg3dx;
|
||||
u16 bg3dmx;
|
||||
u16 bg3dy;
|
||||
u16 bg3dmy;
|
||||
u16 bg3xPointLeastSig;
|
||||
u16 bg3xPointMostSig;
|
||||
u16 bg3yPointLeastSig;
|
||||
u16 bg3yPointMostSig;
|
||||
u16 dx;
|
||||
u16 dmx;
|
||||
u16 dy;
|
||||
u16 dmy;
|
||||
u16 xPointLeastSig;
|
||||
u16 xPointMostSig;
|
||||
u16 yPointLeastSig;
|
||||
u16 yPointMostSig;
|
||||
} BgTransformationSettings;
|
||||
|
||||
typedef struct {
|
||||
BgTransformationSettings bg2;
|
||||
BgTransformationSettings bg3;
|
||||
u16 window0HorizontalDimensions;
|
||||
u16 window1HorizontalDimensions;
|
||||
u16 window0VerticalDimensions;
|
||||
@@ -65,20 +62,22 @@ typedef struct {
|
||||
/*0x38*/ BgControls controls;
|
||||
/*0x6c*/ u8 _6c;
|
||||
/*0x6d*/ u8 _6d;
|
||||
/*0x70*/ u32 _70;
|
||||
/*0x70*/ void* _70;
|
||||
/*0x74*/ u32 _74;
|
||||
/*0x78*/ u32 _78;
|
||||
} Screen;
|
||||
|
||||
struct OAMCommand {
|
||||
typedef struct {
|
||||
u16 x;
|
||||
u16 y;
|
||||
u16 _4;
|
||||
u16 _6;
|
||||
u16 _8;
|
||||
} extern gOamCmd;
|
||||
} OAMCommand;
|
||||
|
||||
extern BgControls gBgControls;
|
||||
extern Screen gScreen;
|
||||
extern OAMCommand gOamCmd;
|
||||
|
||||
extern void sub_080ADA04(OAMCommand*, void*);
|
||||
|
||||
#endif
|
||||
|
||||
+18
-18
@@ -4,28 +4,28 @@
|
||||
#include "entity.h"
|
||||
|
||||
typedef struct ScriptExecutionContext {
|
||||
u16* scriptInstructionPointer;
|
||||
u32 intVariable;
|
||||
u32 postScriptActions;
|
||||
u8 unk_0C[0x4]; // unused
|
||||
u16 wait;
|
||||
u16 unk_12;
|
||||
u32 condition;
|
||||
u8 unk_18;
|
||||
u8 unk_19;
|
||||
u8 unk_1A;
|
||||
u8 unk_1B; // unused
|
||||
union SplitWord x;
|
||||
union SplitWord y;
|
||||
/*0x00*/ u16* scriptInstructionPointer;
|
||||
/*0x03*/ u32 intVariable;
|
||||
/*0x08*/ u32 postScriptActions;
|
||||
/*0x0C*/ u8 unk_0C[0x4]; // unused
|
||||
/*0x10*/ u16 wait;
|
||||
/*0x12*/ u16 unk_12;
|
||||
/*0x14*/ u32 condition;
|
||||
/*0x18*/ u8 unk_18;
|
||||
/*0x19*/ u8 unk_19;
|
||||
/*0x1A*/ u8 unk_1A;
|
||||
/*0x1B*/ u8 unk_1B; // unused
|
||||
/*0x1C*/ union SplitWord x;
|
||||
/*0x20*/ union SplitWord y;
|
||||
} ScriptExecutionContext;
|
||||
|
||||
typedef struct {
|
||||
// Sync flags are used to synchronize scripts running on different entities
|
||||
u32 syncFlags;
|
||||
u16 commandIndex;
|
||||
u8 commandSize;
|
||||
u8 flags;
|
||||
u8 unk_08;
|
||||
/*0x0*/ u32 syncFlags;
|
||||
/*0x4*/ u16 commandIndex;
|
||||
/*0x6*/ u8 commandSize;
|
||||
/*0x7*/ u8 flags;
|
||||
/*0x8*/ u8 unk_08;
|
||||
} ActiveScriptInfo;
|
||||
extern ActiveScriptInfo gActiveScriptInfo;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef AUDIO_H
|
||||
#define AUDIO_H
|
||||
#ifndef SOUND_H
|
||||
#define SOUND_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
@@ -597,4 +597,4 @@ typedef enum {
|
||||
SONG_BGM_0 = 0x80110000,
|
||||
} Sound;
|
||||
|
||||
#endif // AUDIO_H
|
||||
#endif // SOUND_H
|
||||
+30
-46
@@ -8,15 +8,15 @@
|
||||
typedef struct {
|
||||
int signature;
|
||||
u8 saveFileId;
|
||||
u8 messageSpeed;
|
||||
u8 brightnessPref;
|
||||
u8 gameLanguage;
|
||||
u8 msg_speed;
|
||||
u8 brightness;
|
||||
u8 language;
|
||||
u8 name[6];
|
||||
u8 _e;
|
||||
u8 invalid;
|
||||
u8 _f;
|
||||
} struct_02000000;
|
||||
#define gSaveHeader ((struct_02000000*)(0x2000000))
|
||||
// extern struct_02000000 gSaveHeader;
|
||||
} SaveHeader;
|
||||
#define gSaveHeader ((SaveHeader*)(0x2000000))
|
||||
// extern SaveHeader gSaveHeader;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_00;
|
||||
@@ -38,39 +38,6 @@ static_assert(sizeof(struct_02000010) == 0x20);
|
||||
|
||||
extern struct_02000010 gUnk_02000010;
|
||||
|
||||
typedef struct {
|
||||
u16 transitionType;
|
||||
u8 field_0x2[4];
|
||||
s16 playerXPos;
|
||||
s16 playerYPos;
|
||||
u8 field_0xa;
|
||||
u8 areaID;
|
||||
u8 roomID;
|
||||
u8 playerLayer;
|
||||
u8 field_0xe;
|
||||
u8 playerState;
|
||||
u16 transitionSFX;
|
||||
} ScreenTransitionData;
|
||||
|
||||
typedef struct {
|
||||
u8 active;
|
||||
u8 field_0x1;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u32 mask;
|
||||
u16 fadeType; // fade in or out, are there others?
|
||||
u16 fadeSpeed; // subtracted from duration
|
||||
u16 fadeDuration;
|
||||
u16 field_0xe;
|
||||
s16 field_0x10;
|
||||
s16 field_0x12;
|
||||
s16 field_0x14;
|
||||
u16 field_0x16;
|
||||
u16 field_0x18;
|
||||
} FadeControl;
|
||||
|
||||
extern FadeControl gFadeControl;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
@@ -110,7 +77,7 @@ typedef struct {
|
||||
u16 a;
|
||||
u16 b;
|
||||
} indices;
|
||||
void (*func)(Entity*);
|
||||
void (*func)(Entity* e);
|
||||
} data;
|
||||
} Dialog;
|
||||
|
||||
@@ -119,10 +86,7 @@ extern u16 gBG1Buffer[0x400];
|
||||
extern u16 gBG2Buffer[0x400];
|
||||
extern u16 gBG3Buffer[0x800];
|
||||
|
||||
struct {
|
||||
u8 filler[0x70];
|
||||
} extern gUnk_03000B80;
|
||||
// TODO extern ItemBehavior gUnk_03000B80[4];
|
||||
extern ItemBehavior gUnk_03000B80[4];
|
||||
static_assert(sizeof(gUnk_03000B80) == 0x70);
|
||||
|
||||
typedef struct {
|
||||
@@ -135,7 +99,6 @@ typedef struct {
|
||||
} PriorityHandler;
|
||||
extern PriorityHandler gPriorityHandler;
|
||||
|
||||
extern u8 gUnk_02022740[];
|
||||
extern u8 gUnk_02034490[];
|
||||
|
||||
typedef struct {
|
||||
@@ -148,4 +111,25 @@ typedef struct {
|
||||
void* unk8;
|
||||
} WStruct;
|
||||
|
||||
typedef struct {
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} OAMObj;
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
u8 spritesOffset;
|
||||
u8 updated;
|
||||
u16 _4;
|
||||
u16 _6;
|
||||
u8 _0[0x18];
|
||||
struct OamData oam[0x80];
|
||||
OAMObj unk[0xA0]; /* todo: affine */
|
||||
} OAMControls;
|
||||
extern OAMControls gOAMControls;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef SUBTASK_H
|
||||
#define SUBTASK_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
// todo: separate headers for each subtask?
|
||||
|
||||
extern void sub_080A4528(void);
|
||||
extern void sub_080A4398(void);
|
||||
extern void sub_080A7114(u32);
|
||||
extern void sub_080A3B74(void);
|
||||
extern void sub_080A4054(void);
|
||||
extern void sub_080A4D34(void);
|
||||
extern u32 sub_080A4494(void);
|
||||
|
||||
#endif // SUBTASK_H
|
||||
@@ -1,75 +0,0 @@
|
||||
#ifndef UTILS_H
|
||||
#define UTILS_H
|
||||
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u16 heldKeys;
|
||||
u16 newKeys;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} Input;
|
||||
|
||||
extern Input gInput;
|
||||
|
||||
/**
|
||||
* Fill memory with 16 bit value.
|
||||
*/
|
||||
void MemFill16(u32 value, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Fill memory with 32 bit value.
|
||||
*/
|
||||
void MemFill32(u32 value, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Clear memory.
|
||||
*/
|
||||
void MemClear(void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Copy memory.
|
||||
*/
|
||||
void MemCopy(const void* src, void* dest, u32 size);
|
||||
|
||||
/**
|
||||
* Refresh gInput from hardware registers.
|
||||
*/
|
||||
void ReadKeyInput(void);
|
||||
|
||||
void LoadPalettes(const u8*, s32, s32);
|
||||
void LoadPaletteGroup(u32 group);
|
||||
void SetColor(u32 colorIndex, u32 color);
|
||||
void SetFillColor(u32 color, u32 arg1);
|
||||
|
||||
/**
|
||||
* Allocate memory on heap.
|
||||
*
|
||||
* The heap size is 0x1000 bytes and should be used sparingly.
|
||||
* It is customary for entities store the returned handle in their 'myHeap' field.
|
||||
*
|
||||
* @param size u32 Size to be allocated
|
||||
* @return void* Pointer to allocated memory
|
||||
*/
|
||||
void* zMalloc(u32 size);
|
||||
|
||||
/**
|
||||
* Free memory from heap.
|
||||
*
|
||||
* The entity system will automatically free the address stored in the 'myHeap' field.
|
||||
*
|
||||
* @param ptr void* Handle to be freed
|
||||
*/
|
||||
void zFree(void* ptr);
|
||||
|
||||
/**
|
||||
* Reset All display hardware registers.
|
||||
*
|
||||
* @param updateHUD bool32 Request refresh of HUD layer (bg 0)
|
||||
*/
|
||||
void DispReset(bool32 updateHUD);
|
||||
|
||||
u32 CheckPlayerProximity(u32, u32, u32, u32);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user